Bug 1506225 - Support blocking by campaign id in ASR r=r1cky a=jcristau
authork88hudson <k88hudson@gmail.com>
Thu, 22 Nov 2018 18:37:34 +0200
changeset 501331 77ebe1a00a465761edd0eb995807785caa987227
parent 501330 fe71d237ab9576996b1216f8525c7399c145bf17
child 501332 b642717e8c98058193b330cde71e2d05cdc36950
push id1864
push userffxbld-merge
push dateMon, 03 Dec 2018 15:51:40 +0000
treeherdermozilla-release@f040763d99ad [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersr1cky, jcristau
bugs1506225
milestone64.0
Bug 1506225 - Support blocking by campaign id in ASR r=r1cky a=jcristau Reviewers: r1cky Reviewed By: r1cky Bug #: 1506225 Differential Revision: https://phabricator.services.mozilla.com/D12582
browser/components/newtab/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
browser/components/newtab/data/content/activity-stream.bundle.js
browser/components/newtab/data/content/activity-stream.bundle.js.map
browser/components/newtab/lib/ASRouter.jsm
browser/components/newtab/lib/SnippetsTestMessageProvider.jsm
browser/components/newtab/test/unit/asrouter/ASRouter.test.js
--- a/browser/components/newtab/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
+++ b/browser/components/newtab/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
@@ -58,17 +58,17 @@ export class ASRouterAdmin extends React
   }
 
   resetPref() {
     ASRouterUtils.sendMessage({type: "RESET_PROVIDER_PREF"});
   }
 
   renderMessageItem(msg) {
     const isCurrent = msg.id === this.state.lastMessageId;
-    const isBlocked = this.state.messageBlockList.includes(msg.id);
+    const isBlocked = this.state.messageBlockList.includes(msg.id) || this.state.messageBlockList.includes(msg.campaign);
     const impressions = this.state.messageImpressions[msg.id] ? this.state.messageImpressions[msg.id].length : 0;
 
     let itemClassName = "message-item";
     if (isCurrent) { itemClassName += " current"; }
     if (isBlocked) { itemClassName += " blocked"; }
 
     return (<tr className={itemClassName} key={msg.id}>
       <td className="message-id"><span>{msg.id} <br /></span></td>
--- a/browser/components/newtab/data/content/activity-stream.bundle.js
+++ b/browser/components/newtab/data/content/activity-stream.bundle.js
@@ -1812,17 +1812,17 @@ class ASRouterAdmin extends react__WEBPA
   }
 
   resetPref() {
     _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__["ASRouterUtils"].sendMessage({ type: "RESET_PROVIDER_PREF" });
   }
 
   renderMessageItem(msg) {
     const isCurrent = msg.id === this.state.lastMessageId;
-    const isBlocked = this.state.messageBlockList.includes(msg.id);
+    const isBlocked = this.state.messageBlockList.includes(msg.id) || this.state.messageBlockList.includes(msg.campaign);
     const impressions = this.state.messageImpressions[msg.id] ? this.state.messageImpressions[msg.id].length : 0;
 
     let itemClassName = "message-item";
     if (isCurrent) {
       itemClassName += " current";
     }
     if (isBlocked) {
       itemClassName += " blocked";
--- a/browser/components/newtab/data/content/activity-stream.bundle.js.map
+++ b/browser/components/newtab/data/content/activity-stream.bundle.js.map
@@ -1,1 +1,1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./content-src/activity-stream.jsx","webpack:///(webpack)/buildin/global.js","webpack:///./common/Actions.jsm","webpack:///./content-src/lib/snippets.js","webpack:///./content-src/asrouter/asrouter-content.jsx","webpack:///./content-src/lib/init-store.js","webpack:///external \"Redux\"","webpack:///./content-src/asrouter/rich-text-strings.js","webpack:///./content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","webpack:///external \"React\"","webpack:///external \"PropTypes\"","webpack:///external \"ReactDOM\"","webpack:///./content-src/components/Base/Base.jsx","webpack:///external \"ReactIntl\"","webpack:///./content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","webpack:///./content-src/components/ConfirmDialog/ConfirmDialog.jsx","webpack:///external \"ReactRedux\"","webpack:///./content-src/components/ErrorBoundary/ErrorBoundary.jsx","webpack:///./content-src/components/ManualMigration/ManualMigration.jsx","webpack:///./common/PrerenderData.jsm","webpack:///./content-src/components/Search/Search.jsx","webpack:///./content-src/lib/constants.js","webpack:///./content-src/components/Sections/Sections.jsx","webpack:///./content-src/lib/link-menu-options.js","webpack:///./content-src/components/LinkMenu/LinkMenu.jsx","webpack:///./content-src/components/ContextMenu/ContextMenu.jsx","webpack:///./content-src/lib/screenshot-utils.js","webpack:///./content-src/components/CollapsibleSection/CollapsibleSection.jsx","webpack:///./content-src/components/SectionMenu/SectionMenu.jsx","webpack:///./content-src/lib/section-menu-options.js","webpack:///./content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","webpack:///./common/PerfService.jsm","webpack:///./content-src/components/MoreRecommendations/MoreRecommendations.jsx","webpack:///./content-src/components/PocketLoggedInCta/PocketLoggedInCta.jsx","webpack:///./content-src/components/Topics/Topics.jsx","webpack:///./content-src/components/TopSites/TopSites.jsx","webpack:///./content-src/components/TopSites/TopSitesConstants.js","webpack:///./content-src/components/TopSites/SearchShortcutsForm.jsx","webpack:///./content-src/components/TopSites/TopSite.jsx","webpack:///./content-src/components/StartupOverlay/StartupOverlay.jsx","webpack:///./content-src/lib/detect-user-session-start.js","webpack:///./content-src/lib/asroutercontent.js","webpack:///./content-src/asrouter/components/Button/Button.jsx","webpack:///./content-src/asrouter/template-utils.js","webpack:///./content-src/asrouter/components/RichText/RichText.jsx","webpack:///./content-src/asrouter/components/SnippetBase/SnippetBase.jsx","webpack:///./content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","webpack:///./content-src/asrouter/templates/EOYSnippet/EOYSnippet.jsx","webpack:///./content-src/asrouter/templates/SubmitFormSnippet/SubmitFormSnippet.jsx","webpack:///./content-src/asrouter/templates/FXASignupSnippet/FXASignupSnippet.jsx","webpack:///./content-src/asrouter/templates/NewsletterSnippet/NewsletterSnippet.jsx","webpack:///./content-src/asrouter/templates/SendToDeviceSnippet/isEmailOrPhoneNumber.js","webpack:///./content-src/asrouter/templates/SendToDeviceSnippet/SendToDeviceSnippet.jsx","webpack:///./content-src/asrouter/templates/template-manifest.jsx","webpack:///./node_modules/fluent/src/parser.js","webpack:///./node_modules/fluent/src/types.js","webpack:///./node_modules/fluent/src/builtins.js","webpack:///./node_modules/fluent/src/resolver.js","webpack:///./node_modules/fluent/src/context.js","webpack:///./node_modules/fluent/src/cached_iterable.js","webpack:///./node_modules/fluent/src/fallback.js","webpack:///./node_modules/fluent/src/util.js","webpack:///./node_modules/fluent/src/index.js","webpack:///./node_modules/fluent-react/src/localization.js","webpack:///./node_modules/fluent-react/src/provider.js","webpack:///./node_modules/fluent-react/src/with_localization.js","webpack:///./node_modules/fluent-react/src/markup.js","webpack:///./node_modules/fluent-react/vendor/omittedCloseTags.js","webpack:///./node_modules/fluent-react/vendor/voidElementTags.js","webpack:///./node_modules/fluent-react/src/localized.js","webpack:///./node_modules/fluent-react/src/index.js","webpack:///./common/Dedupe.jsm","webpack:///./common/Reducers.jsm","webpack:///./content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx","webpack:///./content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx","webpack:///./content-src/components/Card/types.js","webpack:///./content-src/components/Card/Card.jsx","webpack:///./content-src/components/TopSites/TopSiteFormInput.jsx","webpack:///./content-src/components/TopSites/TopSiteForm.jsx"],"names":["store","initStore","global","gActivityStreamPrerenderedState","asrouterContent","sendEventOrAddListener","dispatch","ac","AlsoToMain","type","at","NEW_TAB_STATE_REQUEST","ReactDOM","hydrate","document","location","href","documentElement","lang","gActivityStreamStrings","getElementById","enableASRouterContent","addSnippetsSubscriber","globalImportContext","Window","BACKGROUND_PROCESS","UI_CODE","actionTypes","ASRouterActions","_RouteMessage","action","options","meta","from","to","Error","forEach","o","fromTarget","skipLocal","CONTENT_MESSAGE_TYPE","MAIN_MESSAGE_TYPE","OnlyToMain","BroadcastToContent","AlsoToOneContent","target","skipMain","toTarget","OnlyToOneContent","AlsoToPreloaded","PRELOAD_MESSAGE_TYPE","UserEvent","data","TELEMETRY_USER_EVENT","ASRouterUserEvent","AS_ROUTER_TELEMETRY_USER_EVENT","UndesiredEvent","importContext","TELEMETRY_UNDESIRED_EVENT","PerfEvent","TELEMETRY_PERFORMANCE_EVENT","ImpressionStats","TELEMETRY_IMPRESSION_STATS","SetPref","name","value","SET_PREF","WebExtEvent","source","isSendToMain","isBroadcastToContent","isSendToOneContent","isSendToPreloaded","isFromMain","getPortIdOfSender","DATABASE_NAME","DATABASE_VERSION","SNIPPETS_OBJECTSTORE_NAME","SNIPPETS_UPDATE_INTERVAL_MS","SNIPPETS_ENABLED_EVENT","SNIPPETS_DISABLED_EVENT","SnippetsMap","Map","constructor","_db","_dispatch","set","key","_dbTransaction","db","put","delete","clear","SNIPPETS_BLOCKLIST_CLEARED","blockList","get","blockSnippetById","id","includes","push","SNIPPETS_BLOCKLIST_UPDATED","disableOnboarding","showFirefoxAccounts","SHOW_FIREFOX_ACCOUNTS","getTotalBookmarksCount","Promise","resolve","TOTAL_BOOKMARKS_REQUEST","RPMAddMessageListener","onMessage","TOTAL_BOOKMARKS_RESPONSE","RPMRemoveMessageListener","getAddonsInfo","ADDONS_INFO_REQUEST","ADDONS_INFO_RESPONSE","connect","_openDB","_restoreFromDb","modifier","reject","transaction","objectStore","onsuccess","event","onerror","error","openRequest","indexedDB","open","deleteDatabase","onupgradeneeded","result","objectStoreNames","contains","createObjectStore","err","console","onversionchange","versionChangeEvent","close","cursorRequest","openCursor","cursor","continue","SnippetsProvider","gSnippetsMap","_onAction","bind","snippetsMap","_refreshSnippets","cachedVersion","appData","version","lastUpdate","needsUpdate","Date","now","snippetsURL","response","fetch","status","payload","text","e","_noSnippetFallback","_showRemoteSnippets","snippetsEl","elementId","innerHTML","scriptEl","getElementsByTagName","relocatedScript","createElement","parentNode","replaceChild","msg","SNIPPET_BLOCKED","concat","style","display","init","Object","assign","keys","window","dispatchEvent","Event","initialized","uninit","snippets","initializing","subscribe","state","getState","Prefs","values","ASRouter","allowLegacySnippets","disableSnippets","Snippets","hash","log","INCOMING_MESSAGE_NAME","OUTGOING_MESSAGE_NAME","ASR_CONTAINER_ID","ASRouterUtils","addListener","listener","removeListener","sendMessage","RPMSendAsyncMessage","blockById","dismissById","blockBundle","bundle","executeAction","button_action","unblockById","unblockBundle","overrideMessage","sendTelemetry","ping","getPreviewEndpoint","params","URLSearchParams","slice","indexOf","endpoint","URL","url","snippetId","shouldSendImpressionOnUpdate","nextProps","prevProps","message","ASRouterUISurface","React","PureComponent","props","onMessageFromParent","sendClick","sendImpression","sendUserActionTelemetry","extraProps","message_id","eventType","provider","metric","dataset","args","content","do_not_autoblock","onBlockById","onDismissById","clearBundle","setState","componentWillMount","trigger","componentWillUnmount","renderSnippets","SnippetComponent","SnippetsTemplates","template","generateMessages","renderOnboarding","renderPreviewBanner","render","defaultProps","ASRouterContent","containerElement","_mount","zIndex","body","appendChild","_unmount","unmountComponentAtNode","MERGE_STORE_ACTION","EARLY_QUEUED_ACTIONS","SAVE_SESSION_PERF_DATA","PAGE_PRERENDERED","mergeStateReducer","mainReducer","prevState","messageMiddleware","next","au","rehydrationMiddleware","_didRehydrate","isMergeStoreAction","isRehydrationRequest","_didRequestInitialState","INIT","queueEarlyMessageMiddleware","_receivedFromMain","_earlyActionQueue","reducers","initialState","createStore","combineReducers","applyMiddleware","ex","dump","JSON","stringify","stack","RICH_TEXT_CONFIG","RICH_TEXT_KEYS","cx","attrs","attrsToTry","Array","isArray","string","length","attr","pop","addMessages","VISIBLE","VISIBILITY_CHANGE_EVENT","ImpressionsWrapper","sendImpressionOrAddListener","visibilityState","_onVisibilityChange","removeEventListener","addEventListener","componentDidMount","sendOnMount","componentDidUpdate","children","PrefsButton","injectIntl","onClick","intl","formatMessage","addLocaleDataForReactIntl","locale","addLocaleData","parentLocale","debounce","func","wait","timer","wakeUp","setTimeout","apply","_Base","isFirstrun","classList","add","isPrerendered","updateTheme","componentWillUpdate","bodyClassName","filter","v","join","className","App","strings","prefs","BaseContent","openPreferences","onWindowScroll","fixedSearch","SCROLL_THRESHOLD","scrollY","SETTINGS_OPEN","shouldBeFixedToTop","PrerenderData","arePrefsValid","noSectionsEnabled","Sections","section","enabled","outerClassName","showSearch","migrationExpired","Base","ASRouterAdmin","handleEnabledToggle","onChangeMessageFilter","findOtherBundledMessagesOfSameTemplate","messageFilter","messages","bundled","handleBlock","handleUnblock","handleOverride","expireCache","resetPref","renderMessageItem","isCurrent","lastMessageId","isBlocked","messageBlockList","impressions","messageImpressions","itemClassName","renderMessages","messagesToShow","map","renderMessageFilter","providers","renderTableHead","checked","renderProviders","providersConfig","providerPrefs","providerInfo","i","isTestProvider","info","find","p","label","bucket","whiteSpace","lastUpdated","toLocaleString","_ConfirmDialog","_handleCancelBtn","_handleConfirmBtn","DIALOG_CANCEL","eventSource","onConfirm","_renderModalMessage","message_body","body_string_id","visible","icon","cancel_button_string_id","confirm_button_string_id","ConfirmDialog","Dialog","ErrorBoundaryFallback","windowObj","reload","defaultClass","ErrorBoundary","hasError","componentDidCatch","FallbackComponent","_ManualMigration","onLaunchTour","onCancelTour","MIGRATION_START","MIGRATION_CANCEL","ManualMigration","_PrerenderData","initialPrefs","initialSections","_setValidation","validation","_validation","invalidatingPrefs","_invalidatingPrefs","reduce","oneOf","getPref","indexedDBPrefs","some","anyModifiedPrefs","prefName","pref","order","title","_Search","onInputMount","handleEvent","detail","gContentSearchController","search","input","healthReportKey","IS_NEWTAB","searchSource","ContentSearchUIController","showLogo","Search","documentURI","CARDS_PER_ROW_DEFAULT","CARDS_PER_ROW_COMPACT_WIDE","getFormattedMessage","Section","numRows","rowsPref","maxRows","_dispatchImpressionStats","cardsPerRow","compactCards","matchMedia","matches","maxCards","cards","rows","needsImpressionStats","tiles","link","guid","impressionCardGuids","sendImpressionStatsOrAddListener","shouldSendImpressionStats","collapsed","sendNewTabRehydrated","isCollapsed","wasCollapsed","renderNotified","NEW_TAB_REHYDRATED","Pocket","topics","emptyState","read_more_endpoint","contextMenuOptions","learnMore","privacyNoticeURL","isFirst","isLast","waitingForSpoc","maxCardsPerRow","maxCardsOnNarrow","pocketCta","isUserLoggedIn","useCta","isPocketLoggedInDefined","shouldShowPocketCta","shouldShowTopics","realRows","shouldShowEmptyState","usePlaceholder","isWebExtension","sectionClassName","feed","padding","startsWith","SectionIntl","_Sections","renderSections","sections","enabledSections","sectionOrder","showTopSites","expectedCount","sectionId","split","commonProps","s","_OpenInPrivateWindow","site","OPEN_PRIVATE_WINDOW","referrer","userEvent","GetPlatformString","platform","LinkMenuOptions","Separator","EmptyItem","RemoveBookmark","DELETE_BOOKMARK_BY_ID","bookmarkGuid","AddBookmark","BOOKMARK_URL","OpenInNewWindow","OPEN_NEW_WINDOW","typedBonus","BlockUrl","index","BLOCK_URL","open_url","pocket_id","impression","block","pos","WebExtDismiss","string_id","WEBEXT_DISMISS","action_position","DeleteUrl","isEnabled","siteInfo","DIALOG_OPEN","DELETE_HISTORY_URL","forceBlock","ShowFile","SHOW_DOWNLOAD_FILE","OpenFile","OPEN_DOWNLOAD_FILE","CopyDownloadLink","COPY_DOWNLOAD_LINK","GoToDownloadPage","OPEN_LINK","disabled","RemoveDownload","REMOVE_DOWNLOAD_FILE","PinTopSite","searchTopSite","TOP_SITES_PIN","UnpinTopSite","TOP_SITES_UNPIN","SaveToPocket","SAVE_TO_POCKET","pocket","DeleteFromPocket","DELETE_FROM_POCKET","ArchiveFromPocket","ARCHIVE_FROM_POCKET","EditTopSite","TOP_SITES_EDIT","CheckBookmark","CheckPinTopSite","isPinned","CheckSavedToPocket","CheckBookmarkOrArchive","OpenInPrivateWindow","DEFAULT_SITE_MENU_OPTIONS","_LinkMenu","getOptions","isPrivateBrowsingEnabled","propOptions","isDefault","option","userEventData","first","last","onUpdate","LinkMenu","ContextMenu","hideContext","stopPropagation","ContextMenuItem","onKeyDown","shiftKey","ScreenshotUtils","isBlob","isLocal","image","path","createLocalImageObject","remoteImage","createObjectURL","maybeRevokeBlobObjectURL","localImage","revokeObjectURL","isRemoteImageLocal","_CollapsibleSection","onBodyMount","onHeaderClick","onTransitionEnd","enableOrDisableAnimation","onMenuButtonClick","onMenuButtonMouseEnter","onMenuButtonMouseLeave","onMenuUpdate","enableAnimation","isAnimating","menuButtonHover","showContextMenu","sectionBody","scrollHeight","node","undefined","maxHeight","_getSectionBodyHeight","SectionMenuOptions","CheckCollapsed","div","currentTarget","renderIcon","backgroundImage","preventDefault","isCollapsible","extraMenuOptions","showPrefName","active","bodyStyle","CollapsibleSection","DEFAULT_SECTION_MENU_OPTIONS","WEBEXT_SECTION_MENU_OPTIONS","_SectionMenu","extraOptions","splice","SectionMenu","MoveUp","SECTION_MOVE","direction","MoveDown","RemoveSection","CollapseSection","UPDATE_SECTION_PREFS","ExpandSection","ManageSection","ManageWebExtension","OPEN_WEBEXT_SETTINGS","AddTopSite","AddSearchShortcut","TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL","PrivacyNotice","RECORDED_SECTIONS","ComponentPerfTimer","Component","perfSvc","_sendBadStateEvent","_sendPaintedEvent","_reportMissingData","_timestampHandled","_recordedFirstRender","_maybeSendPaintedEvent","_afterFramePaint","callback","requestAnimationFrame","_maybeSendBadStateEvent","_ensureFirstRenderTsRecorded","mark","dataReadyKey","firstRenderKey","parseInt","getMostRecentAbsMarkStartByName","ChromeUtils","import","usablePerfObj","Services","appShell","hiddenDOMWindow","performance","_PerfService","performanceObj","_perf","prototype","str","getEntriesByName","timeOrigin","absNow","entries","mostRecentEntry","startTime","MoreRecommendations","_PocketLoggedInCta","ctaUrl","ctaButton","ctaText","PocketLoggedInCta","Topic","Topics","t","topSiteIconType","customScreenshotURL","tippyTopIcon","faviconRef","faviconSize","screenshot","countTopSitesIconsTypes","topSites","countTopSitesTypes","acc","_TopSites","onEditFormClose","onSearchShortcutsFormClose","_dispatchTopSitesStats","_getVisibleTopSites","topSitesIconsStats","topSitesPinned","searchShortcuts","topsites_icon_stats","topsites_pinned","topsites_search_shortcuts","sitesPerRow","TopSites","TopSitesRows","TOP_SITES_CANCEL_EDIT","TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL","editForm","showSearchShortcutsForm","topSitesRows","TOP_SITES_SOURCE","TOP_SITES_CONTEXT_MENU_OPTIONS","TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS","MIN_RICH_FAVICON_SIZE","MIN_CORNER_FAVICON_SIZE","SelectableSearchShortcut","shortcut","selected","imageStyle","keyword","onChange","SearchShortcutsForm","handleChange","onCancelButtonClick","onSaveButtonClick","shortcuts","isSelected","row","ev","onClose","pinQueue","unpinQueue","alreadyPinned","_searchTopSite","searchVendor","shortURL","UPDATE_PINNED_SEARCH_SHORTCUTS","addedShortcuts","deletedShortcuts","search_vendor","TopSiteLink","screenshotImage","onDragEvent","onKeyPress","_allowDrop","dataTransfer","types","dragged","effectAllowed","setData","blur","button","getNextStateFromProps","imageInState","nextState","componentWillReceiveProps","defaultStyle","isDraggable","topSiteOuterClassName","isDragged","letterFallback","imageClassName","showSmallFavicon","smallFaviconStyle","smallFaviconFallback","hasScreenshotImage","backgroundColor","favicon","draggableProps","onDragEnd","onDragStart","onMouseDown","TopSite","onLinkClick","_getTelemetryInfo","icon_type","iconType","card_type","hostname","altKey","ctrlKey","metaKey","FILL_SEARCH_TERM","onActivate","isContextMenuOpen","activeIndex","TopSitePlaceholder","onEditButtonClick","_TopSiteList","DEFAULT_STATE","draggedIndex","draggedSite","draggedTitle","topSitesPreview","prevTopSites","newTopSites","dropped","_makeTopSitesPreview","TOP_SITES_INSERT","draggedFromIndex","_getTopSites","pinnedOnly","unpinned","siteToInsert","holeIndex","indexStep","shiftingStep","nextIndex","preview","shift","topSitesUI","maxNarrowVisibleIndex","l","slotProps","TopSiteList","_StartupOverlay","onInputChange","onSubmit","clickSkip","initScene","removeOverlay","onInputInvalid","emailInput","overlayRemoved","flowId","flowBeginTime","didFetch","fxa_endpoint","fxaParams","json","show","remove","previousSibling","_getFormInfo","has_flow_params","focus","termsLink","privacyLink","terms","privacy","StartupOverlay","DetectUserSessionStart","_store","_perfService","perfService","_sendEvent","visibility_event_rcvd_ts","ALLOWED_STYLE_TAGS","Button","tag","border","safeURI","protocol","isAllowed","warn","ALLOWED_TAGS","b","u","strong","em","br","convertLinks","links","doNotAutoBlock","linkTag","RichText","localization_id","customElements","onBlockClicked","UISurface","onBlock","renderDismissButton","footerDismiss","onDismiss","scene2_dismiss_button_text","block_button_text","containerClassName","textStyle","DEFAULT_ICON_PATH","onButtonClick","button_url","onAction","button_action_args","renderTitle","renderTitleIcon","titleIcon","title_icon","renderButton","button_color","button_background_color","button_label","renderText","tall","extraContent","handleSubmit","setFrequencyValue","frequencyCheckbox","refs","form","querySelector","submit","renderDonations","fieldNames","numberFormat","Intl","NumberFormat","navigator","language","currency","currency_code","minimumFractionDigits","selected_button","btnStyle","color","donation_form_url","form_method","field","idx","button_name","amount","format","monthly_checkbox_label_text","text_color","background_color","customElement","highlight_color","test","EOYSnippet","extendedContent","expandSnippet","expanded","signupSubmitted","signupSuccess","disableForm","toUpperCase","formData","processFormData","mainInput","FormData","fetchRequest","Request","method","preventDismiss","renderHiddenFormInputs","hidden_inputs","renderDisclaimer","scene2_disclaimer_html","renderFormPrivacyNotice","scene2_privacy_html","renderSignupSubmitted","isSuccess","successTitle","success_title","bodyText","success_text","error_text","retryButtonText","scene1_button_label","validateInput","setCustomValidity","renderInput","placholder","scene2_email_placeholder_text","scene2_input_placeholder","inputType","renderSignupView","containerClass","scene2_icon","scene2_text","form_action","scene2_button_label","getFirstSceneContent","substr","FXASignupSnippet","userAgent","match","firefox_version","context","entrypoint","service","utm_source","utm_content","utm_campaign","utm_term","NewsletterSnippet","newsletters","scene2_newsletter","fmt","source_url","isEmailOrPhoneNumber","val","email_re","check_email","check_phone","isNaN","include_sms","append","message_id_sms","country","message_id_email","encodeURIComponent","SendToDeviceSnippet","simple_snippet","newsletter_snippet","fxa_signup_snippet","send_to_device_snippet","eoy_snippet","MAX_PLACEABLES","entryIdentifierRe","identifierRe","functionIdentifierRe","RuntimeParser","getResource","_source","_index","_length","errors","skipWS","getEntry","SyntaxError","skipToNextEntryStart","ch","skipComment","skipSection","getMessage","skipInlineWS","getVariantName","getEntryIdentifier","getPattern","lineStart","getAttributes","skipBlankLines","ptr","getIdentifier","re","lastIndex","exec","toString","start","cc","charCodeAt","getString","substring","eol","firstLineContent","getComplexPattern","buffer","placeables","blankLinesStart","blankLinesEnd","ch2","getPlaceable","variants","getVariants","exp","vars","def","selector","getSelectorExpression","literal","getLiteral","getVariantKey","getCallArgs","fun","lastIndexOf","getNumber","num","defaultIndex","cc0","cc1","parse","parser","FluentType","opts","valueOf","FluentNone","FluentNumber","parseFloat","ctx","nf","_memoizeIntlObject","other","FluentDateTime","dtf","DateTimeFormat","FluentSymbol","pr","PluralRules","select","arg","merge","argopts","unwrapped","opt","MAX_PLACEABLE_LENGTH","FSI","PDI","DefaultMember","env","members","RangeError","MessageReference","_terms","_messages","ReferenceError","VariantExpression","Type","isVariantList","variant","variantKey","AttributeExpression","attrName","SelectExpression","keyCanMatch","expr","Pattern","ExternalArgument","FunctionReference","CallExpression","member","hasOwnProperty","TypeError","_functions","builtins","callee","posargs","keyargs","ptn","dirty","has","useIsolating","_useIsolating","elem","part","WeakSet","locales","functions","_intls","WeakMap","Symbol","iterator","hasMessage","ctor","cache","CachedIterable","iterable","asyncIterator","seen","cur","touchNext","done","mapContextSync","ids","getContextForId","remainingCount","foundContexts","fill","mapContextAsync","nonBlank","line","countIndent","indent","ftl","code","lines","indents","common","Math","min","RegExp","replace","contexts","subs","Set","comp","unsubscribe","setMessages","relocalize","getMessageContext","formatCompound","mcx","fallback","isReactLocalization","propName","prop","l10n","getChildContext","Children","only","LocalizationProvider","childContextTypes","propTypes","PropTypes","element","isRequired","isIterable","componentName","withLocalization","Inner","WithLocalization","forceUpdate","displayName","contextTypes","component","TEMPLATE","parseMarkup","omittedCloseTags","area","base","col","embed","hr","img","keygen","param","track","wbr","voidElementTags","menuitem","reMarkup","toArguments","elems","propname","propval","isValidElement","toLowerCase","messageValue","messageAttrs","localizedProps","cloneElement","translationNodes","childNodes","translatedChildren","childNode","nodeType","TEXT_NODE","textContent","localName","sourceChild","Localized","Dedupe","createKey","defaultCreateKey","item","group","groups","globalKeys","valueMap","m","TOP_SITES_DEFAULT_ROWS","TOP_SITES_MAX_SITES_PER_ROW","dedupe","INITIAL_STATE","AS_ROUTER_INITIALIZED","AS_ROUTER_PREF_CHANGED","insertPinned","pinned","pinnedUrls","newLinks","pinIndex","hasMatch","newRows","TOP_SITES_UPDATED","TOP_SITES_PREFS_UPDATED","previewResponse","PREVIEW_RESPONSE","previewUrl","PREVIEW_REQUEST","PREVIEW_REQUEST_CANCEL","SCREENSHOT_UPDATED","PLACES_BOOKMARK_ADDED","bookmarkTitle","dateAdded","bookmarkDateCreated","PLACES_BOOKMARK_REMOVED","newSite","PLACES_LINK_DELETED","UPDATE_SEARCH_SHORTCUTS","SNIPPETS_PREVIEW_MODE","newValues","PREFS_INITIAL_VALUES","PREF_CHANGED","newState","SECTION_DEREGISTER","SECTION_REGISTER","SECTION_UPDATE","card","dedupeConfigurations","dedupeConf","dedupedRows","dedupeFrom","dedupeSectionId","dedupeSection","SECTION_UPDATE_CARD","PLACES_SAVED_TO_POCKET","PLACES_LINK_BLOCKED","SNIPPETS_DATA","SNIPPETS_RESET","POCKET_WAITING_FOR_SPOC","POCKET_LOGGED_IN","POCKET_CTA","cta_button","cta_text","cta_url","use_cta","onDoneButton","header","extraTemplateStrings","cardContextTypes","history","intlID","bookmark","trending","download","gImageLoading","activeCard","imageLoaded","cardImage","maybeLoadImage","imageUrl","loaderPromise","loader","Image","src","catch","then","WEBEXT_CLICK","click","_Card","hasImage","placeholder","description","Card","PlaceholderCard","validationError","onMount","shouldFocus","showClearButton","onClear","typeUrl","titleId","loading","placeholderId","errorMessageId","TopSiteFormInput","customScreenshotUrl","showCustomScreenshotForm","onClearScreenshotInput","onLabelChange","onUrlChange","onClearUrlClick","onDoneButtonClick","onCustomScreenshotUrlChange","onPreviewButtonClick","onEnableScreenshotUrlForm","validateUrl","_updateCustomScreenshotInput","validateForm","cleanUrl","_tryParseUrl","validProtocols","urlObj","validateCustomScreenshotUrl","validate","_renderCustomScreenshotInput","requestFailed","isLoading","showAsAdd","previous","changed","previewMode","previewLink","TopSiteForm"],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,QAAQ,4EAAAC,CAAU,6DAAV,EAAoBC,OAAOC,+BAA3B,CAAd;AACA,MAAMC,kBAAkB,IAAI,qFAAJ,EAAxB;;AAEA,IAAI,gGAAJ,CAA2BJ,KAA3B,EAAkCK,sBAAlC;;AAEA;AACA;AACA;AACA,IAAI,CAACH,OAAOC,+BAAZ,EAA6C;AAC3CH,QAAMM,QAAN,CAAe,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGC,qBAAV,EAAd,CAAf;AACD;;AAED,gDAAAC,CAASC,OAAT,CAAiB;AAAC,sDAAD;AAAA,IAAU,OAAOb,KAAjB;AACf,6DAAC,qEAAD;AACE,gBAAYE,OAAOY,QAAP,CAAgBC,QAAhB,CAAyBC,IAAzB,KAAkC,eADhD;AAEE,mBAAe,CAAC,CAACd,OAAOC,+BAF1B;AAGE,YAAQD,OAAOY,QAAP,CAAgBG,eAAhB,CAAgCC,IAH1C;AAIE,aAAShB,OAAOiB,sBAJlB;AADe,CAAjB,EAMaL,SAASM,cAAT,CAAwB,MAAxB,CANb;;AAQA,6FAAAC,CAAsBrB,KAAtB,EAA6BI,eAA7B;AACA,sFAAAkB,CAAsBtB,KAAtB,E;;;;;;;ACjCA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;;;;;;;ACnBA;AAAA;;;AAGA;;wBAEyB,qB;2BACG,wB;2BACA,iC;cACb,C;yBACW,C;;AAE1B;;;;;;AAKA,MAAMuB,sBAAsB,OAAOC,MAAP,KAAkB,WAAlB,GAAgCC,kBAAhC,GAAqDC,OAAjF;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA,MAAMC,cAAc,EAApB;;AACA,KAAK,MAAMlB,IAAX,IAAmB,CACjB,qBADiB,EAEjB,sBAFiB,EAGjB,qBAHiB,EAIjB,uBAJiB,EAKjB,wBALiB,EAMjB,gCANiB,EAOjB,WAPiB,EAQjB,cARiB,EASjB,oBATiB,EAUjB,uBAViB,EAWjB,oBAXiB,EAYjB,oBAZiB,EAajB,eAbiB,EAcjB,aAdiB,EAejB,kBAfiB,EAgBjB,kBAhBiB,EAiBjB,MAjBiB,EAkBjB,kBAlBiB,EAmBjB,qBAnBiB,EAoBjB,iBApBiB,EAqBjB,cArBiB,EAsBjB,uBAtBiB,EAuBjB,cAvBiB,EAwBjB,oBAxBiB,EAyBjB,uBAzBiB,EA0BjB,gBA1BiB,EA2BjB,oBA3BiB,EA4BjB,WA5BiB,EA6BjB,iBA7BiB,EA8BjB,qBA9BiB,EA+BjB,sBA/BiB,EAgCjB,kBAhCiB,EAiCjB,uBAjCiB,EAkCjB,yBAlCiB,EAmCjB,wBAnCiB,EAoCjB,sBApCiB,EAqCjB,qBArCiB,EAsCjB,qBAtCiB,EAuCjB,wBAvCiB,EAwCjB,YAxCiB,EAyCjB,kBAzCiB,EA0CjB,yBA1CiB,EA2CjB,sBA3CiB,EA4CjB,cA5CiB,EA6CjB,iBA7CiB,EA8CjB,wBA9CiB,EA+CjB,kBA/CiB,EAgDjB,sBAhDiB,EAiDjB,mBAjDiB,EAkDjB,wBAlDiB,EAmDjB,gBAnDiB,EAoDjB,oBApDiB,EAqDjB,oBArDiB,EAsDjB,iBAtDiB,EAuDjB,gBAvDiB,EAwDjB,cAxDiB,EAyDjB,yBAzDiB,EA0DjB,kBA1DiB,EA2DjB,gBA3DiB,EA4DjB,qBA5DiB,EA6DjB,gBA7DiB,EA8DjB,eA9DiB,EA+DjB,UA/DiB,EAgEjB,oBAhEiB,EAiEjB,uBAjEiB,EAkEjB,gBAlEiB,EAmEjB,4BAnEiB,EAoEjB,4BApEiB,EAqEjB,eArEiB,EAsEjB,uBAtEiB,EAuEjB,gBAvEiB,EAwEjB,iBAxEiB,EAyEjB,cAzEiB,EA0EjB,aA1EiB,EA2EjB,4BA3EiB,EA4EjB,6BA5EiB,EA6EjB,2BA7EiB,EA8EjB,sBA9EiB,EA+EjB,uBA/EiB,EAgFjB,wCAhFiB,EAiFjB,gBAjFiB,EAkFjB,kBAlFiB,EAmFjB,uCAnFiB,EAoFjB,eApFiB,EAqFjB,yBArFiB,EAsFjB,iBAtFiB,EAuFjB,mBAvFiB,EAwFjB,yBAxFiB,EAyFjB,0BAzFiB,EA0FjB,QA1FiB,EA2FjB,gCA3FiB,EA4FjB,yBA5FiB,EA6FjB,sBA7FiB,EA8FjB,cA9FiB,EA+FjB,gBA/FiB,CAAnB,EAgGG;AACDkB,cAAYlB,IAAZ,IAAoBA,IAApB;AACD;;AAED;AACA;AACA,MAAMmB,kBAAkB,EAAxB;;AACA,KAAK,MAAMnB,IAAX,IAAmB,CACjB,wBADiB,EAEjB,wBAFiB,EAGjB,6BAHiB,EAIjB,UAJiB,EAKjB,iBALiB,EAMjB,uBANiB,EAOjB,uBAPiB,CAAnB,EAQG;AACDmB,kBAAgBnB,IAAhB,IAAwBA,IAAxB;AACD;;AAED;AACA;AACA,SAASoB,aAAT,CAAuBC,MAAvB,EAA+BC,OAA/B,EAAwC;AACtC,QAAMC,OAAOF,OAAOE,IAAP,qBAAkBF,OAAOE,IAAzB,IAAiC,EAA9C;AACA,MAAI,CAACD,OAAD,IAAY,CAACA,QAAQE,IAArB,IAA6B,CAACF,QAAQG,EAA1C,EAA8C;AAC5C,UAAM,IAAIC,KAAJ,CAAU,gHAAV,CAAN;AACD;AACD;AACA;AACA,GAAC,MAAD,EAAS,IAAT,EAAe,UAAf,EAA2B,YAA3B,EAAyC,UAAzC,EAAqD,WAArD,EAAkEC,OAAlE,CAA0EC,KAAK;AAC7E,QAAI,OAAON,QAAQM,CAAR,CAAP,KAAsB,WAA1B,EAAuC;AACrCL,WAAKK,CAAL,IAAUN,QAAQM,CAAR,CAAV;AACD,KAFD,MAEO,IAAIL,KAAKK,CAAL,CAAJ,EAAa;AAClB,aAAOL,KAAKK,CAAL,CAAP;AACD;AACF,GAND;AAOA,2BAAWP,MAAX,IAAmBE,IAAnB;AACD;;AAED;;;;;;;;;AASA,SAASxB,UAAT,CAAoBsB,MAApB,EAA4BQ,UAA5B,EAAwCC,SAAxC,EAAmD;AACjD,SAAOV,cAAcC,MAAd,EAAsB;AAC3BG,UAAMO,oBADqB;AAE3BN,QAAIO,iBAFuB;AAG3BH,cAH2B;AAI3BC;AAJ2B,GAAtB,CAAP;AAMD;;AAED;;;;;;;;AAQA,SAASG,UAAT,CAAoBZ,MAApB,EAA4BQ,UAA5B,EAAwC;AACtC,SAAO9B,WAAWsB,MAAX,EAAmBQ,UAAnB,EAA+B,IAA/B,CAAP;AACD;;AAED;;;;;;AAMA,SAASK,kBAAT,CAA4Bb,MAA5B,EAAoC;AAClC,SAAOD,cAAcC,MAAd,EAAsB;AAC3BG,UAAMQ,iBADqB;AAE3BP,QAAIM;AAFuB,GAAtB,CAAP;AAID;;AAED;;;;;;;;;AASA,SAASI,gBAAT,CAA0Bd,MAA1B,EAAkCe,MAAlC,EAA0CC,QAA1C,EAAoD;AAClD,MAAI,CAACD,MAAL,EAAa;AACX,UAAM,IAAIV,KAAJ,CAAU,gJAAV,CAAN;AACD;AACD,SAAON,cAAcC,MAAd,EAAsB;AAC3BG,UAAMQ,iBADqB;AAE3BP,QAAIM,oBAFuB;AAG3BO,cAAUF,MAHiB;AAI3BC;AAJ2B,GAAtB,CAAP;AAMD;;AAED;;;;;;;;AAQA,SAASE,gBAAT,CAA0BlB,MAA1B,EAAkCe,MAAlC,EAA0C;AACxC,SAAOD,iBAAiBd,MAAjB,EAAyBe,MAAzB,EAAiC,IAAjC,CAAP;AACD;;AAED;;;;;;AAMA,SAASI,eAAT,CAAyBnB,MAAzB,EAAiC;AAC/B,SAAOD,cAAcC,MAAd,EAAsB;AAC3BG,UAAMQ,iBADqB;AAE3BP,QAAIgB;AAFuB,GAAtB,CAAP;AAID;;AAED;;;;;;;AAOA,SAASC,SAAT,CAAmBC,IAAnB,EAAyB;AACvB,SAAO5C,WAAW;AAChBC,UAAMkB,YAAY0B,oBADF;AAEhBD;AAFgB,GAAX,CAAP;AAID;;AAED;;;;;;;AAOA,SAASE,iBAAT,CAA2BF,IAA3B,EAAiC;AAC/B,SAAO5C,WAAW;AAChBC,UAAMkB,YAAY4B,8BADF;AAEhBH;AAFgB,GAAX,CAAP;AAID;;AAED;;;;;;;AAOA,SAASI,cAAT,CAAwBJ,IAAxB,EAA8BK,gBAAgBlC,mBAA9C,EAAmE;AACjE,QAAMO,SAAS;AACbrB,UAAMkB,YAAY+B,yBADL;AAEbN;AAFa,GAAf;AAIA,SAAOK,kBAAkB/B,OAAlB,GAA4BlB,WAAWsB,MAAX,CAA5B,GAAiDA,MAAxD;AACD;;AAED;;;;;;;AAOA,SAAS6B,SAAT,CAAmBP,IAAnB,EAAyBK,gBAAgBlC,mBAAzC,EAA8D;AAC5D,QAAMO,SAAS;AACbrB,UAAMkB,YAAYiC,2BADL;AAEbR;AAFa,GAAf;AAIA,SAAOK,kBAAkB/B,OAAlB,GAA4BlB,WAAWsB,MAAX,CAA5B,GAAiDA,MAAxD;AACD;;AAED;;;;;;;AAOA,SAAS+B,eAAT,CAAyBT,IAAzB,EAA+BK,gBAAgBlC,mBAA/C,EAAoE;AAClE,QAAMO,SAAS;AACbrB,UAAMkB,YAAYmC,0BADL;AAEbV;AAFa,GAAf;AAIA,SAAOK,kBAAkB/B,OAAlB,GAA4BlB,WAAWsB,MAAX,CAA5B,GAAiDA,MAAxD;AACD;;AAED,SAASiC,OAAT,CAAiBC,IAAjB,EAAuBC,KAAvB,EAA8BR,gBAAgBlC,mBAA9C,EAAmE;AACjE,QAAMO,SAAS,EAACrB,MAAMkB,YAAYuC,QAAnB,EAA6Bd,MAAM,EAACY,IAAD,EAAOC,KAAP,EAAnC,EAAf;AACA,SAAOR,kBAAkB/B,OAAlB,GAA4BlB,WAAWsB,MAAX,CAA5B,GAAiDA,MAAxD;AACD;;AAED,SAASqC,WAAT,CAAqB1D,IAArB,EAA2B2C,IAA3B,EAAiCK,gBAAgBlC,mBAAjD,EAAsE;AACpE,MAAI,CAAC6B,IAAD,IAAS,CAACA,KAAKgB,MAAnB,EAA2B;AACzB,UAAM,IAAIjC,KAAJ,CAAU,qHAAV,CAAN;AACD;AACD,QAAML,SAAS,EAACrB,IAAD,EAAO2C,IAAP,EAAf;AACA,SAAOK,kBAAkB/B,OAAlB,GAA4BlB,WAAWsB,MAAX,CAA5B,GAAiDA,MAAxD;AACD;;qBAKqB;AACpBa,oBADoB;AAEpBQ,WAFoB;AAGpBG,mBAHoB;AAIpBE,gBAJoB;AAKpBG,WALoB;AAMpBE,iBANoB;AAOpBjB,kBAPoB;AAQpBI,kBARoB;AASpBxC,YAToB;AAUpBkC,YAVoB;AAWpBO,iBAXoB;AAYpBc,SAZoB;AAapBI;AAboB,C;;AAgBtB;;kBACmB;AACjBE,eAAavC,MAAb,EAAqB;AACnB,QAAI,CAACA,OAAOE,IAAZ,EAAkB;AAChB,aAAO,KAAP;AACD;AACD,WAAOF,OAAOE,IAAP,CAAYE,EAAZ,KAAmBO,iBAAnB,IAAwCX,OAAOE,IAAP,CAAYC,IAAZ,KAAqBO,oBAApE;AACD,GANgB;AAOjB8B,uBAAqBxC,MAArB,EAA6B;AAC3B,QAAI,CAACA,OAAOE,IAAZ,EAAkB;AAChB,aAAO,KAAP;AACD;AACD,QAAIF,OAAOE,IAAP,CAAYE,EAAZ,KAAmBM,oBAAnB,IAA2C,CAACV,OAAOE,IAAP,CAAYe,QAA5D,EAAsE;AACpE,aAAO,IAAP;AACD;AACD,WAAO,KAAP;AACD,GAfgB;AAgBjBwB,qBAAmBzC,MAAnB,EAA2B;AACzB,QAAI,CAACA,OAAOE,IAAZ,EAAkB;AAChB,aAAO,KAAP;AACD;AACD,QAAIF,OAAOE,IAAP,CAAYE,EAAZ,KAAmBM,oBAAnB,IAA2CV,OAAOE,IAAP,CAAYe,QAA3D,EAAqE;AACnE,aAAO,IAAP;AACD;AACD,WAAO,KAAP;AACD,GAxBgB;AAyBjByB,oBAAkB1C,MAAlB,EAA0B;AACxB,QAAI,CAACA,OAAOE,IAAZ,EAAkB;AAChB,aAAO,KAAP;AACD;AACD,WAAOF,OAAOE,IAAP,CAAYE,EAAZ,KAAmBgB,oBAAnB,IACLpB,OAAOE,IAAP,CAAYC,IAAZ,KAAqBQ,iBADvB;AAED,GA/BgB;AAgCjBgC,aAAW3C,MAAX,EAAmB;AACjB,QAAI,CAACA,OAAOE,IAAZ,EAAkB;AAChB,aAAO,KAAP;AACD;AACD,WAAOF,OAAOE,IAAP,CAAYC,IAAZ,KAAqBQ,iBAArB,IACLX,OAAOE,IAAP,CAAYE,EAAZ,KAAmBM,oBADrB;AAED,GAtCgB;AAuCjBkC,oBAAkB5C,MAAlB,EAA0B;AACxB,WAAQA,OAAOE,IAAP,IAAeF,OAAOE,IAAP,CAAYM,UAA5B,IAA2C,IAAlD;AACD,GAzCgB;AA0CjBT;AA1CiB,C;;;;;;;;;;;;;;;ACnWnB,MAAM8C,gBAAgB,aAAtB;AACA,MAAMC,mBAAmB,CAAzB;AACA,MAAMC,4BAA4B,UAAlC;AACO,MAAMC,8BAA8B,QAApC,C,CAA8C;;AAErD,MAAMC,yBAAyB,kBAA/B;AACA,MAAMC,0BAA0B,mBAAhC;;AAEA;;AAEA;;;;;;;;AAQO,MAAMC,WAAN,SAA0BC,GAA1B,CAA8B;AACnCC,cAAY7E,QAAZ,EAAsB;AACpB;AACA,SAAK8E,GAAL,GAAW,IAAX;AACA,SAAKC,SAAL,GAAiB/E,QAAjB;AACD;;AAEDgF,MAAIC,GAAJ,EAAStB,KAAT,EAAgB;AACd,UAAMqB,GAAN,CAAUC,GAAV,EAAetB,KAAf;AACA,WAAO,KAAKuB,cAAL,CAAoBC,MAAMA,GAAGC,GAAH,CAAOzB,KAAP,EAAcsB,GAAd,CAA1B,CAAP;AACD;;AAEDI,SAAOJ,GAAP,EAAY;AACV,UAAMI,MAAN,CAAaJ,GAAb;AACA,WAAO,KAAKC,cAAL,CAAoBC,MAAMA,GAAGE,MAAH,CAAUJ,GAAV,CAA1B,CAAP;AACD;;AAEDK,UAAQ;AACN,UAAMA,KAAN;AACA,SAAKP,SAAL,CAAe,iEAAA9E,CAAGmC,UAAH,CAAc,EAACjC,MAAM,8DAAAC,CAAGmF,0BAAV,EAAd,CAAf;AACA,WAAO,KAAKL,cAAL,CAAoBC,MAAMA,GAAGG,KAAH,EAA1B,CAAP;AACD;;AAED,MAAIE,SAAJ,GAAgB;AACd,WAAO,KAAKC,GAAL,CAAS,WAAT,KAAyB,EAAhC;AACD;;AAED;;;;;;;AAOMC,kBAAN,CAAuBC,EAAvB,EAA2B;AAAA;;AAAA;AACzB,UAAI,CAACA,EAAL,EAAS;AACP;AACD;AACD,YAAM,EAACH,SAAD,KAAc,KAApB;AACA,UAAI,CAACA,UAAUI,QAAV,CAAmBD,EAAnB,CAAL,EAA6B;AAC3BH,kBAAUK,IAAV,CAAeF,EAAf;AACA,cAAKZ,SAAL,CAAe,iEAAA9E,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAG0F,0BAAV,EAAsChD,MAAM6C,EAA5C,EAAd,CAAf;AACA,cAAM,MAAKX,GAAL,CAAS,WAAT,EAAsBQ,SAAtB,CAAN;AACD;AATwB;AAU1B;;AAEDO,sBAAoB,CAAE;;AAEtBC,wBAAsB;AACpB,SAAKjB,SAAL,CAAe,iEAAA9E,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAG6F,qBAAV,EAAd,CAAf;AACD;;AAEDC,2BAAyB;AACvB,WAAO,IAAIC,OAAJ,CAAYC,WAAW;AAC5B,WAAKrB,SAAL,CAAe,iEAAA9E,CAAGmC,UAAH,CAAc,EAACjC,MAAM,8DAAAC,CAAGiG,uBAAV,EAAd,CAAf;AACAzG,aAAO0G,qBAAP,CAA6B,8BAA7B,EAA6D,SAASC,SAAT,CAAmB,EAACzD,MAAMtB,MAAP,EAAnB,EAAmC;AAC9F,YAAIA,OAAOrB,IAAP,KAAgB,8DAAAC,CAAGoG,wBAAvB,EAAiD;AAC/CJ,kBAAQ5E,OAAOsB,IAAf;AACAlD,iBAAO6G,wBAAP,CAAgC,8BAAhC,EAAgEF,SAAhE;AACD;AACF,OALD;AAMD,KARM,CAAP;AASD;;AAEDG,kBAAgB;AACd,WAAO,IAAIP,OAAJ,CAAYC,WAAW;AAC5B,WAAKrB,SAAL,CAAe,iEAAA9E,CAAGmC,UAAH,CAAc,EAACjC,MAAM,8DAAAC,CAAGuG,mBAAV,EAAd,CAAf;AACA/G,aAAO0G,qBAAP,CAA6B,8BAA7B,EAA6D,SAASC,SAAT,CAAmB,EAACzD,MAAMtB,MAAP,EAAnB,EAAmC;AAC9F,YAAIA,OAAOrB,IAAP,KAAgB,8DAAAC,CAAGwG,oBAAvB,EAA6C;AAC3CR,kBAAQ5E,OAAOsB,IAAf;AACAlD,iBAAO6G,wBAAP,CAAgC,8BAAhC,EAAgEF,SAAhE;AACD;AACF,OALD;AAMD,KARM,CAAP;AASD;;AAED;;;;;;;AAOMM,SAAN,GAAgB;AAAA;;AAAA;AACd;AACA,YAAM1B,KAAK,MAAM,OAAK2B,OAAL,EAAjB;;AAEA;AACA,YAAM,OAAKC,cAAL,CAAoB5B,EAApB,CAAN;;AAEA;AACA,aAAKL,GAAL,GAAWK,EAAX;AARc;AASf;;AAED;;;;;;;;;AASAD,iBAAe8B,QAAf,EAAyB;AACvB,QAAI,CAAC,KAAKlC,GAAV,EAAe;AACb,aAAOqB,QAAQC,OAAR,EAAP;AACD;AACD,WAAO,IAAID,OAAJ,CAAY,CAACC,OAAD,EAAUa,MAAV,KAAqB;AACtC,YAAMC,cAAcF,SAClB,KAAKlC,GAAL,CACGoC,WADH,CACe3C,yBADf,EAC0C,WAD1C,EAEG4C,WAFH,CAEe5C,yBAFf,CADkB,CAApB;AAKA2C,kBAAYE,SAAZ,GAAwBC,SAASjB,SAAjC;;AAEA;AACAc,kBAAYI,OAAZ,GAAsBD,SAASJ,OAAOC,YAAYK,KAAnB,CAA/B;AACD,KAVM,CAAP;AAWD;;AAEDT,YAAU;AACR,WAAO,IAAIX,OAAJ,CAAY,CAACC,OAAD,EAAUa,MAAV,KAAqB;AACtC,YAAMO,cAAcC,UAAUC,IAAV,CAAerD,aAAf,EAA8BC,gBAA9B,CAApB;;AAEA;AACAkD,kBAAYF,OAAZ,GAAsBD,SAAS;AAC7B;AACA;AACAI,kBAAUE,cAAV,CAAyBtD,aAAzB;AACA4C,eAAOI,KAAP;AACD,OALD;;AAOAG,kBAAYI,eAAZ,GAA8BP,SAAS;AACrC,cAAMlC,KAAKkC,MAAM9E,MAAN,CAAasF,MAAxB;AACA,YAAI,CAAC1C,GAAG2C,gBAAH,CAAoBC,QAApB,CAA6BxD,yBAA7B,CAAL,EAA8D;AAC5DY,aAAG6C,iBAAH,CAAqBzD,yBAArB;AACD;AACF,OALD;;AAOAiD,kBAAYJ,SAAZ,GAAwBC,SAAS;AAC/B,YAAIlC,KAAKkC,MAAM9E,MAAN,CAAasF,MAAtB;;AAEA;AACA1C,WAAGmC,OAAH,GAAaW,OAAOC,QAAQX,KAAR,CAAcU,GAAd,CAApB,CAJ+B,CAIS;AACxC;AACA9C,WAAGgD,eAAH,GAAqBC,sBAAsBA,mBAAmB7F,MAAnB,CAA0B8F,KAA1B,EAA3C;;AAEAjC,gBAAQjB,EAAR;AACD,OATD;AAUD,KA5BM,CAAP;AA6BD;;AAED4B,iBAAe5B,EAAf,EAAmB;AACjB,WAAO,IAAIgB,OAAJ,CAAY,CAACC,OAAD,EAAUa,MAAV,KAAqB;AACtC,UAAIqB,aAAJ;AACA,UAAI;AACFA,wBAAgBnD,GAAG+B,WAAH,CAAe3C,yBAAf,EACb4C,WADa,CACD5C,yBADC,EAC0BgE,UAD1B,EAAhB;AAED,OAHD,CAGE,OAAON,GAAP,EAAY;AACZ;AACAhB,eAAOgB,GAAP;AACA;AACA;AACD;;AAED;AACAK,oBAAchB,OAAd,GAAwBD,SAASJ,OAAOI,KAAP,CAAjC;;AAEAiB,oBAAclB,SAAd,GAA0BC,SAAS;AACjC,YAAImB,SAASnB,MAAM9E,MAAN,CAAasF,MAA1B;AACA;AACA,YAAIW,MAAJ,EAAY;AACV,cAAIA,OAAO7E,KAAP,KAAiB,WAArB,EAAkC;AAChC,iBAAKqB,GAAL,CAASwD,OAAOvD,GAAhB,EAAqBuD,OAAO7E,KAA5B;AACD;AACD6E,iBAAOC,QAAP;AACD,SALD,MAKO;AACL;AACArC;AACD;AACF,OAZD;AAaD,KA5BM,CAAP;AA6BD;AAtLkC;;AAyLrC;;;;;AAKO,MAAMsC,gBAAN,CAAuB;AAC5B7D,cAAY7E,QAAZ,EAAsB;AACpB;AACA;AACAJ,WAAO+I,YAAP,GAAsB,IAAIhE,WAAJ,CAAgB3E,QAAhB,CAAtB;AACA,SAAK4I,SAAL,GAAiB,KAAKA,SAAL,CAAeC,IAAf,CAAoB,IAApB,CAAjB;AACD;;AAED,MAAIC,WAAJ,GAAkB;AAChB,WAAOlJ,OAAO+I,YAAd;AACD;;AAEKI,kBAAN,GAAyB;AAAA;;AAAA;AACvB;AACA;AACA,YAAMC,gBAAgB,OAAKF,WAAL,CAAiBrD,GAAjB,CAAqB,yBAArB,CAAtB;;AAEA,UAAIuD,kBAAkB,OAAKC,OAAL,CAAaC,OAAnC,EAA4C;AAC1C,eAAKJ,WAAL,CAAiBxD,KAAjB;AACD;;AAED;AACA,YAAM6D,aAAa,OAAKL,WAAL,CAAiBrD,GAAjB,CAAqB,sBAArB,CAAnB;AACA,YAAM2D,cAAc,EAAED,cAAc,CAAhB,KAAsBE,KAAKC,GAAL,KAAaH,UAAb,GAA0B3E,2BAApE;;AAEA,UAAI4E,eAAe,OAAKH,OAAL,CAAaM,WAAhC,EAA6C;AAC3C,eAAKT,WAAL,CAAiB9D,GAAjB,CAAqB,sBAArB,EAA6CqE,KAAKC,GAAL,EAA7C;AACA,YAAI;AACF,gBAAME,WAAW,MAAMC,MAAM,OAAKR,OAAL,CAAaM,WAAnB,CAAvB;AACA,cAAIC,SAASE,MAAT,KAAoB,GAAxB,EAA6B;AAC3B,kBAAMC,UAAU,MAAMH,SAASI,IAAT,EAAtB;;AAEA,mBAAKd,WAAL,CAAiB9D,GAAjB,CAAqB,UAArB,EAAiC2E,OAAjC;AACA,mBAAKb,WAAL,CAAiB9D,GAAjB,CAAqB,yBAArB,EAAgD,OAAKiE,OAAL,CAAaC,OAA7D;AACD;AACF,SARD,CAQE,OAAOW,CAAP,EAAU;AACV3B,kBAAQX,KAAR,CAAcsC,CAAd,EADU,CACQ;AACnB;AACF;AA1BsB;AA2BxB;;AAEDC,uBAAqB;AACnB;AACD;;AAEDC,wBAAsB;AACpB,UAAMC,aAAaxJ,SAASM,cAAT,CAAwB,KAAKmJ,SAA7B,CAAnB;AACA,UAAMN,UAAU,KAAKb,WAAL,CAAiBrD,GAAjB,CAAqB,UAArB,CAAhB;;AAEA,QAAI,CAACuE,UAAL,EAAiB;AACf,YAAM,IAAInI,KAAJ,CAAW,iCAAgC,KAAKoI,SAAU,IAA1D,CAAN;AACD;;AAED;AACA,QAAI,CAACN,OAAL,EAAc;AACZ,YAAM,IAAI9H,KAAJ,CAAU,gDAAV,CAAN;AACD;;AAED,QAAI,OAAO8H,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,YAAM,IAAI9H,KAAJ,CAAU,2CAAV,CAAN;AACD;;AAED;AACA;AACAmI,eAAWE,SAAX,GAAuBP,OAAvB;;AAEA;AACA;AACA,SAAK,MAAMQ,QAAX,IAAuBH,WAAWI,oBAAX,CAAgC,QAAhC,CAAvB,EAAkE;AAChE,YAAMC,kBAAkB7J,SAAS8J,aAAT,CAAuB,QAAvB,CAAxB;AACAD,sBAAgBT,IAAhB,GAAuBO,SAASP,IAAhC;AACAO,eAASI,UAAT,CAAoBC,YAApB,CAAiCH,eAAjC,EAAkDF,QAAlD;AACD;AACF;;AAEDvB,YAAU6B,GAAV,EAAe;AACb,QAAIA,IAAI3H,IAAJ,CAAS3C,IAAT,KAAkB,8DAAAC,CAAGsK,eAAzB,EAA0C;AACxC,UAAI,CAAC,KAAK5B,WAAL,CAAiBtD,SAAjB,CAA2BI,QAA3B,CAAoC6E,IAAI3H,IAAJ,CAASA,IAA7C,CAAL,EAAyD;AACvD,aAAKgG,WAAL,CAAiB9D,GAAjB,CAAqB,WAArB,EAAkC,KAAK8D,WAAL,CAAiBtD,SAAjB,CAA2BmF,MAA3B,CAAkCF,IAAI3H,IAAJ,CAASA,IAA3C,CAAlC;AACAtC,iBAASM,cAAT,CAAwB,oBAAxB,EAA8C8J,KAA9C,CAAoDC,OAApD,GAA8D,MAA9D;AACD;AACF;AACF;;AAED;;;;;;;;;AASMC,MAAN,CAAWrJ,OAAX,EAAoB;AAAA;;AAAA;AAClBsJ,aAAOC,MAAP,CAAc,MAAd,EAAoB;AAClB/B,iBAAS,EADS;AAElBgB,mBAAW,UAFO;AAGlBpD,iBAAS;AAHS,OAApB,EAIGpF,OAJH;;AAMA;AACA,UAAI7B,OAAO0G,qBAAX,EAAkC;AAChC1G,eAAO0G,qBAAP,CAA6B,8BAA7B,EAA6D,OAAKsC,SAAlE;AACD;;AAED;AACA;AACA,UAAI,OAAK/B,OAAT,EAAkB;AAChB,YAAI;AACF,gBAAM,OAAKiC,WAAL,CAAiBjC,OAAjB,EAAN;AACD,SAFD,CAEE,OAAOgD,CAAP,EAAU;AACV3B,kBAAQX,KAAR,CAAcsC,CAAd,EADU,CACQ;AACnB;AACF;;AAED;AACA,WAAK,MAAM5E,GAAX,IAAkB8F,OAAOE,IAAP,CAAY,OAAKhC,OAAjB,CAAlB,EAA6C;AAC3C,YAAIhE,QAAQ,WAAZ,EAAyB;AACvB,iBAAK6D,WAAL,CAAiB9D,GAAjB,CAAqB,WAArB,EAAkC,OAAKiE,OAAL,CAAahE,GAAb,CAAlC;AACD,SAFD,MAEO;AACL,iBAAK6D,WAAL,CAAiB9D,GAAjB,CAAsB,WAAUC,GAAI,EAApC,EAAuC,OAAKgE,OAAL,CAAahE,GAAb,CAAvC;AACD;AACF;;AAED;AACA,YAAM,OAAK8D,gBAAL,EAAN;;AAEA;AACA,UAAI;AACF,eAAKgB,mBAAL;AACD,OAFD,CAEE,OAAOF,CAAP,EAAU;AACV,eAAKC,kBAAL,CAAwBD,CAAxB;AACD;;AAEDqB,aAAOC,aAAP,CAAqB,IAAIC,KAAJ,CAAU3G,sBAAV,CAArB;;AAEA,aAAK4G,WAAL,GAAmB,IAAnB;AA3CkB;AA4CnB;;AAEDC,WAAS;AACPJ,WAAOC,aAAP,CAAqB,IAAIC,KAAJ,CAAU1G,uBAAV,CAArB;AACA,QAAI9E,OAAO6G,wBAAX,EAAqC;AACnC7G,aAAO6G,wBAAP,CAAgC,8BAAhC,EAAgE,KAAKmC,SAArE;AACD;AACD,SAAKyC,WAAL,GAAmB,KAAnB;AACD;AAjJ2B;;AAoJ9B;;;;;;;;AAQO,SAASrK,qBAAT,CAA+BtB,KAA/B,EAAsC;AAC3C,QAAM6L,WAAW,IAAI7C,gBAAJ,CAAqBhJ,MAAMM,QAA3B,CAAjB;;AAEA,MAAIwL,eAAe,KAAnB;;AAEA9L,QAAM+L,SAAN,mBAAgB,aAAY;AAC1B,UAAMC,QAAQhM,MAAMiM,QAAN,EAAd;;AAEA;;;;;;;;;;;;;AAaA;AACA,QACED,MAAME,KAAN,CAAYC,MAAZ,CAAmB,gBAAnB,KACAH,MAAMI,QAAN,CAAeT,WADf,IAEAK,MAAMI,QAAN,CAAeC,mBAFf,IAGA,CAACL,MAAME,KAAN,CAAYC,MAAZ,CAAmBG,eAHpB,IAIAN,MAAMO,QAAN,CAAeZ,WAJf,IAKA,CAACE,SAASF,WALV;AAMA;AACA,KAACG,YAPD,IAQA/K,SAASC,IAAT,KAAkB,eARlB,IASAD,SAASyL,IAAT,KAAkB,WAVpB,EAWE;AACAV,qBAAe,IAAf;AACA,YAAMD,SAAST,IAAT,CAAc,EAAC7B,SAASyC,MAAMO,QAAhB,EAAd,CAAN;AACA;AACA,UAAIP,MAAME,KAAN,CAAYC,MAAZ,CAAmB,0BAAnB,CAAJ,EAAoD;AAClD3D,gBAAQiE,GAAR,CAAY,6BAAZ,EADkD,CACN;AAC7C;AACDX,qBAAe,KAAf;;AAEF;AACC,KArBD,MAqBO,IACL,CACEE,MAAME,KAAN,CAAYC,MAAZ,CAAmB,gBAAnB,MAAyC,KAAzC,IACAH,MAAME,KAAN,CAAYC,MAAZ,CAAmBG,eAAnB,KAAuC,IADvC,IAECN,MAAMI,QAAN,CAAeT,WAAf,IAA8B,CAACK,MAAMI,QAAN,CAAeC,mBAHjD,KAKAR,SAASF,WANJ,EAOL;AACA;AACAE,eAASD,MAAT;AACA;AACA,UAAII,MAAME,KAAN,CAAYC,MAAZ,CAAmB,0BAAnB,CAAJ,EAAoD;AAClD3D,gBAAQiE,GAAR,CAAY,yBAAZ,EADkD,CACV;AACzC;AACF;AACF,GArDD;;AAuDA;AACA,SAAO,EAACZ,QAAD,EAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;AC1aD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMa,wBAAwB,0BAA9B;AACA,MAAMC,wBAAwB,0BAA9B;AACA,MAAMC,mBAAmB,sBAAzB;;AAEO,MAAMC,gBAAgB;AAC3BC,cAAYC,QAAZ,EAAsB;AACpB7M,WAAO0G,qBAAP,CAA6B8F,qBAA7B,EAAoDK,QAApD;AACD,GAH0B;AAI3BC,iBAAeD,QAAf,EAAyB;AACvB7M,WAAO6G,wBAAP,CAAgC2F,qBAAhC,EAAuDK,QAAvD;AACD,GAN0B;AAO3BE,cAAYnL,MAAZ,EAAoB;AAClB5B,WAAOgN,mBAAP,CAA2BP,qBAA3B,EAAkD7K,MAAlD;AACD,GAT0B;AAU3BqL,YAAUlH,EAAV,EAAclE,OAAd,EAAuB;AACrB8K,kBAAcI,WAAd,CAA0B,EAACxM,MAAM,qBAAP,EAA8B2C,sBAAO6C,EAAP,IAAclE,OAAd,CAA9B,EAA1B;AACD,GAZ0B;AAa3BqL,cAAYnH,EAAZ,EAAgB;AACd4G,kBAAcI,WAAd,CAA0B,EAACxM,MAAM,uBAAP,EAAgC2C,MAAM,EAAC6C,EAAD,EAAtC,EAA1B;AACD,GAf0B;AAgB3BoH,cAAYC,MAAZ,EAAoB;AAClBT,kBAAcI,WAAd,CAA0B,EAACxM,MAAM,cAAP,EAAuB2C,MAAM,EAACkK,MAAD,EAA7B,EAA1B;AACD,GAlB0B;AAmB3BC,gBAAcC,aAAd,EAA6B;AAC3BX,kBAAcI,WAAd,CAA0B;AACxBxM,YAAM,aADkB;AAExB2C,YAAMoK;AAFkB,KAA1B;AAID,GAxB0B;AAyB3BC,cAAYxH,EAAZ,EAAgB;AACd4G,kBAAcI,WAAd,CAA0B,EAACxM,MAAM,uBAAP,EAAgC2C,MAAM,EAAC6C,EAAD,EAAtC,EAA1B;AACD,GA3B0B;AA4B3ByH,gBAAcJ,MAAd,EAAsB;AACpBT,kBAAcI,WAAd,CAA0B,EAACxM,MAAM,gBAAP,EAAyB2C,MAAM,EAACkK,MAAD,EAA/B,EAA1B;AACD,GA9B0B;AA+B3BK,kBAAgB1H,EAAhB,EAAoB;AAClB4G,kBAAcI,WAAd,CAA0B,EAACxM,MAAM,kBAAP,EAA2B2C,MAAM,EAAC6C,EAAD,EAAjC,EAA1B;AACD,GAjC0B;AAkC3B2H,gBAAcC,IAAd,EAAoB;AAClB,UAAM5D,UAAU,iEAAA1J,CAAG+C,iBAAH,CAAqBuK,IAArB,CAAhB;AACA3N,WAAOgN,mBAAP,CAA2B,gFAA3B,EAA6DjD,OAA7D;AACD,GArC0B;AAsC3B6D,uBAAqB;AACnB,QAAItC,OAAOzK,QAAP,CAAgBC,IAAhB,CAAqBkF,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;AAC7C,YAAM6H,SAAS,IAAIC,eAAJ,CAAoBxC,OAAOzK,QAAP,CAAgBC,IAAhB,CAAqBiN,KAArB,CAA2BzC,OAAOzK,QAAP,CAAgBC,IAAhB,CAAqBkN,OAArB,CAA6B,UAA7B,CAA3B,CAApB,CAAf;AACA,UAAI;AACF,cAAMC,WAAW,IAAIC,GAAJ,CAAQL,OAAOhI,GAAP,CAAW,UAAX,CAAR,CAAjB;AACA,eAAO;AACLsI,eAAKF,SAASnN,IADT;AAELsN,qBAAWP,OAAOhI,GAAP,CAAW,WAAX;AAFN,SAAP;AAID,OAND,CAME,OAAOoE,CAAP,EAAU,CAAE;AACf;;AAED,WAAO,IAAP;AACD;AAnD0B,CAAtB;;AAsDP;AACA,SAASoE,4BAAT,CAAsCC,SAAtC,EAAiDC,SAAjD,EAA4D;AAC1D,SAAQD,UAAUE,OAAV,CAAkBzI,EAAlB,KAAyB,CAACwI,UAAUC,OAAX,IAAsBD,UAAUC,OAAV,CAAkBzI,EAAlB,KAAyBuI,UAAUE,OAAV,CAAkBzI,EAA1F,CAAR;AACD;;AAEM,MAAM0I,iBAAN,SAAgC,4CAAAC,CAAMC,aAAtC,CAAoD;AACzD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKC,mBAAL,GAA2B,KAAKA,mBAAL,CAAyB5F,IAAzB,CAA8B,IAA9B,CAA3B;AACA,SAAK6F,SAAL,GAAiB,KAAKA,SAAL,CAAe7F,IAAf,CAAoB,IAApB,CAAjB;AACA,SAAK8F,cAAL,GAAsB,KAAKA,cAAL,CAAoB9F,IAApB,CAAyB,IAAzB,CAAtB;AACA,SAAK+F,uBAAL,GAA+B,KAAKA,uBAAL,CAA6B/F,IAA7B,CAAkC,IAAlC,CAA/B;AACA,SAAK6C,KAAL,GAAa,EAAC0C,SAAS,EAAV,EAAcpB,QAAQ,EAAtB,EAAb;AACD;;AAED4B,0BAAwBC,aAAa,EAArC,EAAyC;AACvC,UAAM,EAACT,OAAD,EAAUpB,MAAV,KAAoB,KAAKtB,KAA/B;AACA,QAAI,CAAC0C,OAAD,IAAY,CAACS,WAAWC,UAA5B,EAAwC;AACtC,YAAM,IAAIjN,KAAJ,CAAW,oDAAX,CAAN;AACD;AACD,UAAMkN,YAAa,GAAEX,QAAQY,QAAR,IAAoBhC,OAAOgC,QAAS,aAAzD;AACAzC,kBAAce,aAAd;AACEwB,kBAAYV,QAAQzI,EAAR,IAAckJ,WAAWC,UADvC;AAEEhL,cAAQ+K,WAAWlJ,EAFrB;AAGEnE,cAAQuN;AAHV,OAIKF,UAJL;AAMD;;AAEDF,iBAAeE,UAAf,EAA2B;AACzB,QAAI,KAAKnD,KAAL,CAAW0C,OAAX,CAAmBY,QAAnB,KAAgC,SAApC,EAA+C;AAC7C;AACD;;AAEDzC,kBAAcI,WAAd,CAA0B,EAACxM,MAAM,YAAP,EAAqB2C,MAAM,KAAK4I,KAAL,CAAW0C,OAAtC,EAA1B;AACA,SAAKQ,uBAAL,iBAA8BvH,OAAO,YAArC,IAAsDwH,UAAtD;AACD;;AAED;AACA;AACA;AACAH,YAAUrH,KAAV,EAAiB;AACf,UAAM4H,SAAS;AACbtL,aAAO0D,MAAM9E,MAAN,CAAa2M,OAAb,CAAqBD,MADf;AAEb;AACA;AACAtJ,UAAI;AAJS,KAAf;AAMA,UAAMnE,SAAS;AACbrB,YAAMkH,MAAM9E,MAAN,CAAa2M,OAAb,CAAqB1N,MADd;AAEbsB,YAAM,EAACqM,MAAM9H,MAAM9E,MAAN,CAAa2M,OAAb,CAAqBC,IAA5B;AAFO,KAAf;AAIA,QAAI3N,OAAOrB,IAAX,EAAiB;AACfoM,oBAAcU,aAAd,CAA4BzL,MAA5B;AACD;AACD,QAAI,CAAC,KAAKkK,KAAL,CAAW0C,OAAX,CAAmBgB,OAAnB,CAA2BC,gBAA5B,IAAgD,CAAChI,MAAM9E,MAAN,CAAa2M,OAAb,CAAqBG,gBAA1E,EAA4F;AAC1F9C,oBAAcM,SAAd,CAAwB,KAAKnB,KAAL,CAAW0C,OAAX,CAAmBzI,EAA3C;AACD;AACD,QAAI,KAAK+F,KAAL,CAAW0C,OAAX,CAAmBY,QAAnB,KAAgC,SAApC,EAA+C;AAC7C,WAAKJ,uBAAL,iBAA8BvH,OAAO,cAArC,IAAwD4H,MAAxD;AACD;AACF;;AAEDK,cAAY3J,EAAZ,EAAgB;AACd,WAAOlE,WAAW8K,cAAcM,SAAd,CAAwBlH,EAAxB,EAA4BlE,OAA5B,CAAlB;AACD;;AAED8N,gBAAc5J,EAAd,EAAkB;AAChB,WAAO,MAAM4G,cAAcO,WAAd,CAA0BnH,EAA1B,CAAb;AACD;;AAED6J,cAAYxC,MAAZ,EAAoB;AAClB,WAAO,MAAMT,cAAcQ,WAAd,CAA0BC,MAA1B,CAAb;AACD;;AAEDyB,sBAAoB,EAAC3L,MAAMtB,MAAP,EAApB,EAAoC;AAClC,YAAQA,OAAOrB,IAAf;AACE,WAAK,aAAL;AACE,aAAKsP,QAAL,CAAc,EAACrB,SAAS5M,OAAOsB,IAAjB,EAAd;AACA;AACF,WAAK,sBAAL;AACE,aAAK2M,QAAL,CAAc,EAACzC,QAAQxL,OAAOsB,IAAhB,EAAd;AACA;AACF,WAAK,eAAL;AACE,YAAItB,OAAOsB,IAAP,CAAY6C,EAAZ,KAAmB,KAAK+F,KAAL,CAAW0C,OAAX,CAAmBzI,EAA1C,EAA8C;AAC5C,eAAK8J,QAAL,CAAc,EAACrB,SAAS,EAAV,EAAd;AACD;AACD;AACF,WAAK,gBAAL;AACE,YAAI5M,OAAOsB,IAAP,CAAY6C,EAAZ,KAAmB,KAAK+F,KAAL,CAAW0C,OAAX,CAAmBY,QAA1C,EAAoD;AAClD,eAAKS,QAAL,CAAc,EAACrB,SAAS,EAAV,EAAd;AACD;AACD;AACF,WAAK,cAAL;AACE,YAAI,KAAK1C,KAAL,CAAWsB,MAAX,CAAkBA,MAAtB,EAA8B;AAC5B,eAAKyC,QAAL,CAAc,EAACzC,QAAQ,EAAT,EAAd;AACD;AACD;AACF,WAAK,WAAL;AACE,aAAKyC,QAAL,CAAc,EAACrB,SAAS,EAAV,EAAcpB,QAAQ,EAAtB,EAAd;AAvBJ;AAyBD;;AAED0C,uBAAqB;AACnB,UAAM7B,WAAWtB,cAAciB,kBAAd,EAAjB;AACAjB,kBAAcC,WAAd,CAA0B,KAAKiC,mBAA/B;;AAEA;AACA,QAAI,KAAKD,KAAL,CAAWhO,QAAX,CAAoBC,QAApB,CAA6BC,IAA7B,KAAsC,eAA1C,EAA2D;AACzD6L,oBAAcI,WAAd,CAA0B,EAACxM,MAAM,SAAP,EAAkB2C,MAAM,EAAC6M,SAAS,EAAChK,IAAI,UAAL,EAAV,EAAxB,EAA1B;AACD,KAFD,MAEO;AACL4G,oBAAcI,WAAd,CAA0B,EAACxM,MAAM,kBAAP,EAA2B2C,MAAM,EAAC+K,QAAD,EAAjC,EAA1B;AACD;AACF;;AAED+B,yBAAuB;AACrBrD,kBAAcG,cAAd,CAA6B,KAAK+B,mBAAlC;AACD;;AAEDoB,mBAAiB;AACf,UAAMC,mBAAmB,8EAAAC,CAAkB,KAAKrE,KAAL,CAAW0C,OAAX,CAAmB4B,QAArC,CAAzB;AACA,UAAM,EAACZ,OAAD,KAAY,KAAK1D,KAAL,CAAW0C,OAA7B;;AAEA,WACE;AAAC,0GAAD;AAAA;AACE,YAAG,mBADL;AAEE,iBAAS,KAAK1C,KAAL,CAAW0C,OAFtB;AAGE,wBAAgB,KAAKO,cAHvB;AAIE,sCAA8BV;AAC9B;AALF,UAME,UAAU,KAAKO,KAAL,CAAWhO,QANvB;AAOI;AAAC,yEAAD;AAAA,UAAsB,UAAU,2EAAAyP,CAAiBb,OAAjB,CAAhC;AACE,mEAAC,gBAAD,eACM,KAAK1D,KAAL,CAAW0C,OADjB;AAEE,qBAAU,mBAFZ;AAGE,mBAAS,KAAKkB,WAAL,CAAiB,KAAK5D,KAAL,CAAW0C,OAAX,CAAmBzI,EAApC,CAHX;AAIE,qBAAW,KAAK4J,aAAL,CAAmB,KAAK7D,KAAL,CAAW0C,OAAX,CAAmBzI,EAAtC,CAJb;AAKE,oBAAU4G,cAAcU,aAL1B;AAME,qBAAW,KAAKyB,SANlB;AAOE,mCAAyB,KAAKE,uBAPhC;AADF;AAPJ,KADF;AAmBD;;AAEDsB,qBAAmB;AACjB,WACE,2DAAC,gGAAD,eACM,KAAKxE,KAAL,CAAWsB,MADjB;AAEE,iBAAU,gBAFZ;AAGE,gBAAUT,cAAcU,aAH1B;AAIE,oBAAc,KAAKuC,WAAL,CAAiB,KAAK9D,KAAL,CAAWsB,MAAX,CAAkBA,MAAnC,CAJhB;AAKE,+BAAyB,KAAK4B,uBALhC,IADF;AAOD;;AAEDuB,wBAAsB;AACpB,QAAI,KAAKzE,KAAL,CAAW0C,OAAX,CAAmBY,QAAnB,KAAgC,SAApC,EAA+C;AAC7C,aAAO,IAAP;AACD;;AAED,WACE;AAAA;AAAA,QAAK,WAAU,yBAAf;AACE,2EAAM,WAAU,kCAAhB,GADF;AAEE;AAAA;AAAA;AAAA;AAAA;AAFF,KADF;AAMD;;AAEDoB,WAAS;AACP,UAAM,EAAChC,OAAD,EAAUpB,MAAV,KAAoB,KAAKtB,KAA/B;AACA,QAAI,CAAC0C,QAAQzI,EAAT,IAAe,CAACqH,OAAOgD,QAA3B,EAAqC;AAAE,aAAO,IAAP;AAAc;AACrD,WACE;AAAC,kDAAD,CAAO,QAAP;AAAA;AACG,WAAKG,mBAAL,EADH;AAEGnD,aAAOgD,QAAP,KAAoB,YAApB,GAAmC,KAAKE,gBAAL,EAAnC,GAA6D,KAAKL,cAAL;AAFhE,KADF;AAMD;AA3KwD;;AA8K3DxB,kBAAkBgC,YAAlB,GAAiC,EAAC7P,UAAUZ,OAAOY,QAAlB,EAAjC;;AAEO,MAAM8P,eAAN,CAAsB;AAC3BzL,gBAAc;AACZ,SAAKwG,WAAL,GAAmB,KAAnB;AACA,SAAKkF,gBAAL,GAAwB,IAAxB;AACD;;AAEDC,WAAS;AACP,SAAKD,gBAAL,GAAwB3Q,OAAOY,QAAP,CAAgBM,cAAhB,CAA+BwL,gBAA/B,CAAxB;AACA,QAAI,CAAC,KAAKiE,gBAAV,EAA4B;AAC1B,WAAKA,gBAAL,GAAwB3Q,OAAOY,QAAP,CAAgB8J,aAAhB,CAA8B,KAA9B,CAAxB;AACA,WAAKiG,gBAAL,CAAsB5K,EAAtB,GAA2B2G,gBAA3B;AACA,WAAKiE,gBAAL,CAAsB3F,KAAtB,CAA4B6F,MAA5B,GAAqC,CAArC;AACA7Q,aAAOY,QAAP,CAAgBkQ,IAAhB,CAAqBC,WAArB,CAAiC,KAAKJ,gBAAtC;AACD;;AAEDjQ,IAAA,gDAAAA,CAAS8P,MAAT,CAAgB,2DAAC,iBAAD,OAAhB,EAAuC,KAAKG,gBAA5C;AACD;;AAEDK,aAAW;AACTtQ,IAAA,gDAAAA,CAASuQ,sBAAT,CAAgC,KAAKN,gBAArC;AACD;;AAEDzF,SAAO;AACL,SAAK0F,MAAL;AACA,SAAKnF,WAAL,GAAmB,IAAnB;AACD;;AAEDC,WAAS;AACP,QAAI,KAAKD,WAAT,EAAsB;AACpB,WAAKuF,QAAL;AACA,WAAKvF,WAAL,GAAmB,KAAnB;AACD;AACF;AAhC0B,C;;;;;;;;;;;;;;;;;ACzP7B;AAAA;AAAA;;AAEA;AACA;;AAEO,MAAMyF,qBAAqB,uBAA3B;AACA,MAAMzE,wBAAwB,8BAA9B;AACA,MAAMD,wBAAwB,8BAA9B;AACA,MAAM2E,uBAAuB,CAAC,8DAAA3Q,CAAG4Q,sBAAJ,EAA4B,8DAAA5Q,CAAG6Q,gBAA/B,CAA7B;;AAEP;;;;;;;;;;;;;;;;AAgBA,SAASC,iBAAT,CAA2BC,WAA3B,EAAwC;AACtC,SAAO,CAACC,SAAD,EAAY5P,MAAZ,KAAuB;AAC5B,QAAIA,OAAOrB,IAAP,KAAgB2Q,kBAApB,EAAwC;AACtC,+BAAWM,SAAX,EAAyB5P,OAAOsB,IAAhC;AACD;;AAED,WAAOqO,YAAYC,SAAZ,EAAuB5P,MAAvB,CAAP;AACD,GAND;AAOD;;AAED;;;AAGA,MAAM6P,oBAAoB3R,SAAS4R,QAAQ9P,UAAU;AACnD,QAAMS,YAAYT,OAAOE,IAAP,IAAeF,OAAOE,IAAP,CAAYO,SAA7C;AACA,MAAI,8DAAAsP,CAAGxN,YAAH,CAAgBvC,MAAhB,CAAJ,EAA6B;AAC3BoL,wBAAoBP,qBAApB,EAA2C7K,MAA3C;AACD;AACD,MAAI,CAACS,SAAL,EAAgB;AACdqP,SAAK9P,MAAL;AACD;AACF,CARD;;AAUO,MAAMgQ,wBAAwB9R,SAAS4R,QAAQ9P,UAAU;AAC9D,MAAI9B,MAAM+R,aAAV,EAAyB;AACvB,WAAOH,KAAK9P,MAAL,CAAP;AACD;;AAED,QAAMkQ,qBAAqBlQ,OAAOrB,IAAP,KAAgB2Q,kBAA3C;AACA,QAAMa,uBAAuBnQ,OAAOrB,IAAP,KAAgB,8DAAAC,CAAGC,qBAAhD;;AAEA,MAAIsR,oBAAJ,EAA0B;AACxBjS,UAAMkS,uBAAN,GAAgC,IAAhC;AACA,WAAON,KAAK9P,MAAL,CAAP;AACD;;AAED,MAAIkQ,kBAAJ,EAAwB;AACtBhS,UAAM+R,aAAN,GAAsB,IAAtB;AACA,WAAOH,KAAK9P,MAAL,CAAP;AACD;;AAED;AACA,MAAI9B,MAAMkS,uBAAN,IAAiCpQ,OAAOrB,IAAP,KAAgB,8DAAAC,CAAGyR,IAAxD,EAA8D;AAC5D,WAAOP,KAAK,iEAAArR,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGC,qBAAV,EAAd,CAAL,CAAP;AACD;;AAED,MAAI,8DAAAkR,CAAGvN,oBAAH,CAAwBxC,MAAxB,KAAmC,8DAAA+P,CAAGtN,kBAAH,CAAsBzC,MAAtB,CAAnC,IAAoE,8DAAA+P,CAAGrN,iBAAH,CAAqB1C,MAArB,CAAxE,EAAsG;AACpG;AACA;AACA;AACA,WAAO,IAAP;AACD;;AAED,SAAO8P,KAAK9P,MAAL,CAAP;AACD,CA/BM;;AAiCP;;;;;;;AAOO,MAAMsQ,8BAA8BpS,SAAS4R,QAAQ9P,UAAU;AACpE,MAAI9B,MAAMqS,iBAAV,EAA6B;AAC3BT,SAAK9P,MAAL;AACD,GAFD,MAEO,IAAI,8DAAA+P,CAAGpN,UAAH,CAAc3C,MAAd,CAAJ,EAA2B;AAChC8P,SAAK9P,MAAL;AACA9B,UAAMqS,iBAAN,GAA0B,IAA1B;AACA;AACA,QAAIrS,MAAMsS,iBAAV,EAA6B;AAC3BtS,YAAMsS,iBAAN,CAAwBlQ,OAAxB,CAAgCwP,IAAhC;AACA5R,YAAMsS,iBAAN,GAA0B,EAA1B;AACD;AACF,GARM,MAQA,IAAIjB,qBAAqBnL,QAArB,CAA8BpE,OAAOrB,IAArC,CAAJ,EAAgD;AACrDT,UAAMsS,iBAAN,GAA0BtS,MAAMsS,iBAAN,IAA2B,EAArD;AACAtS,UAAMsS,iBAAN,CAAwBnM,IAAxB,CAA6BrE,MAA7B;AACD,GAHM,MAGA;AACL;AACA8P,SAAK9P,MAAL;AACD;AACF,CAlBM;;AAoBP;;;;;;;AAOO,SAAS7B,SAAT,CAAmBsS,QAAnB,EAA6BC,YAA7B,EAA2C;AAChD,QAAMxS,QAAQ,yDAAAyS,CACZjB,kBAAkB,6DAAAkB,CAAgBH,QAAhB,CAAlB,CADY,EAEZC,YAFY,EAGZtS,OAAO0G,qBAAP,IAAgC,6DAAA+L,CAAgBb,qBAAhB,EAAuCM,2BAAvC,EAAoET,iBAApE,CAHpB,CAAd;;AAMA3R,QAAM+R,aAAN,GAAsB,KAAtB;AACA/R,QAAMkS,uBAAN,GAAgC,KAAhC;;AAEA,MAAIhS,OAAO0G,qBAAX,EAAkC;AAChC1G,WAAO0G,qBAAP,CAA6B8F,qBAA7B,EAAoD3B,OAAO;AACzD,UAAI;AACF/K,cAAMM,QAAN,CAAeyK,IAAI3H,IAAnB;AACD,OAFD,CAEE,OAAOwP,EAAP,EAAW;AACXpK,gBAAQX,KAAR,CAAc,cAAd,EAA8BkD,GAA9B,EAAmC,kBAAnC,EAAuD6H,EAAvD,EADW,CACiD;AAC5DC,aAAM,gBAAeC,KAAKC,SAAL,CAAehI,GAAf,CAAoB,qBAAoB6H,EAAG,KAAIA,GAAGI,KAAM,EAA7E;AACD;AACF,KAPD;AAQD;;AAED,SAAOhT,KAAP;AACD,C;;;;;;;AC1ID,uB;;;;;;;;;;;ACAA;;AAEA;;;;;AAKA,MAAMiT,mBAAmB;AACvB,UAAQ,CAAC,MAAD,EAAS,aAAT,CADe;AAEvB,kBAAgB,qBAFO;AAGvB,qBAAmB;AAHI,CAAzB;;AAMO,MAAMC,iBAAiB7H,OAAOE,IAAP,CAAY0H,gBAAZ,CAAvB;;AAEP;;;;;;AAMO,SAAS1C,gBAAT,CAA0Bb,OAA1B,EAAmC;AACxC,QAAMyD,KAAK,IAAI,qDAAJ,CAAmB,OAAnB,CAAX;;AAEAD,iBAAe9Q,OAAf,CAAuBmD,OAAO;AAC5B,UAAM6N,QAAQH,iBAAiB1N,GAAjB,CAAd;AACA,UAAM8N,aAAaC,MAAMC,OAAN,CAAcH,KAAd,IAAuB,CAAC,GAAGA,KAAJ,CAAvB,GAAoC,CAACA,KAAD,CAAvD;AACA,QAAII,SAAS,EAAb;AACA,WAAO,CAACA,MAAD,IAAWH,WAAWI,MAA7B,EAAqC;AACnC,YAAMC,OAAOL,WAAWM,GAAX,EAAb;AACAH,eAAS9D,QAAQgE,IAAR,CAAT;AACD;AACDP,OAAGS,WAAH,CAAgB,GAAErO,GAAI,MAAKiO,MAAO,EAAlC;AACD,GATD;AAUA,SAAO,CAACL,EAAD,CAAP;AACD,C;;;;;;;;;;;;;ACnCD;;AAEO,MAAMU,UAAU,SAAhB;AACA,MAAMC,0BAA0B,kBAAhC;;AAEP;;;AAGO,MAAMC,kBAAN,SAAiC,4CAAAnF,CAAMC,aAAvC,CAAqD;AAC1D;AACA;AACA;AACAmF,gCAA8B;AAC5B,QAAI,KAAKlF,KAAL,CAAWhO,QAAX,CAAoBmT,eAApB,KAAwCJ,OAA5C,EAAqD;AACnD,WAAK/E,KAAL,CAAWG,cAAX,CAA0B,EAAChJ,IAAI,KAAK6I,KAAL,CAAW7I,EAAhB,EAA1B;AACD,KAFD,MAEO;AACL;AACA;AACA,UAAI,KAAKiO,mBAAT,EAA8B;AAC5B,aAAKpF,KAAL,CAAWhO,QAAX,CAAoBqT,mBAApB,CAAwCL,uBAAxC,EAAiE,KAAKI,mBAAtE;AACD;;AAED;AACA,WAAKA,mBAAL,GAA2B,MAAM;AAC/B,YAAI,KAAKpF,KAAL,CAAWhO,QAAX,CAAoBmT,eAApB,KAAwCJ,OAA5C,EAAqD;AACnD,eAAK/E,KAAL,CAAWG,cAAX,CAA0B,EAAChJ,IAAI,KAAK6I,KAAL,CAAW7I,EAAhB,EAA1B;AACA,eAAK6I,KAAL,CAAWhO,QAAX,CAAoBqT,mBAApB,CAAwCL,uBAAxC,EAAiE,KAAKI,mBAAtE;AACD;AACF,OALD;AAMA,WAAKpF,KAAL,CAAWhO,QAAX,CAAoBsT,gBAApB,CAAqCN,uBAArC,EAA8D,KAAKI,mBAAnE;AACD;AACF;;AAEDhE,yBAAuB;AACrB,QAAI,KAAKgE,mBAAT,EAA8B;AAC5B,WAAKpF,KAAL,CAAWhO,QAAX,CAAoBqT,mBAApB,CAAwCL,uBAAxC,EAAiE,KAAKI,mBAAtE;AACD;AACF;;AAEDG,sBAAoB;AAClB,QAAI,KAAKvF,KAAL,CAAWwF,WAAf,EAA4B;AAC1B,WAAKN,2BAAL;AACD;AACF;;AAEDO,qBAAmB9F,SAAnB,EAA8B;AAC5B,QAAI,KAAKK,KAAL,CAAWP,4BAAX,CAAwC,KAAKO,KAA7C,EAAoDL,SAApD,CAAJ,EAAoE;AAClE,WAAKuF,2BAAL;AACD;AACF;;AAEDtD,WAAS;AACP,WAAO,KAAK5B,KAAL,CAAW0F,QAAlB;AACD;AA7CyD;;AAgD5DT,mBAAmBpD,YAAnB,GAAkC;AAChC7P,YAAUZ,OAAOY,QADe;AAEhCwT,eAAa;AAFmB,CAAlC,C;;;;;;;ACxDA,uB;;;;;;ACAA,2B;;;;;;ACAA,0B;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMG,cAAc,6DAAAC,CAAW5F,SAC7B;AAAA;AAAA,IAAK,WAAU,cAAf;AACE,yEAAQ,WAAU,oBAAlB,EAAuC,SAASA,MAAM6F,OAAtD,EAA+D,OAAO7F,MAAM8F,IAAN,CAAWC,aAAX,CAAyB,EAAC5O,IAAI,4BAAL,EAAzB,CAAtE;AADF,CADkB,CAApB;;AAMA;AACA;AACA;AACA,SAAS6O,yBAAT,CAAmCC,MAAnC,EAA2C;AACzCC,EAAA,gEAAAA,CAAc,CAAC,EAACD,MAAD,EAASE,cAAc,IAAvB,EAAD,CAAd;AACD;;AAED;AACA;AACA,SAASC,QAAT,CAAkBC,IAAlB,EAAwBC,IAAxB,EAA8B;AAC5B,MAAIC,KAAJ;AACA,SAAO,CAAC,GAAG5F,IAAJ,KAAa;AAClB,QAAI4F,KAAJ,EAAW;AAAE;AAAS;;AAEtB,QAAIC,SAAS,MAAM;AAAED,cAAQ,IAAR;AAAe,KAApC;;AAEAA,YAAQE,WAAWD,MAAX,EAAmBF,IAAnB,CAAR;AACAD,SAAKK,KAAL,CAAW,IAAX,EAAiB/F,IAAjB;AACD,GAPD;AAQD;;AAEM,MAAMgG,KAAN,SAAoB,4CAAA7G,CAAMC,aAA1B,CAAwC;AAC7CmB,uBAAqB;AACnB,UAAM,EAAC+E,MAAD,KAAW,KAAKjG,KAAtB;AACAgG,8BAA0BC,MAA1B;AACA,QAAI,KAAKjG,KAAL,CAAW4G,UAAf,EAA2B;AACzBxV,aAAOY,QAAP,CAAgBkQ,IAAhB,CAAqB2E,SAArB,CAA+BC,GAA/B,CAAmC,SAAnC,EAA8C,WAA9C;AACD;AACF;;AAEDvB,sBAAoB;AAClB;AACA;AACA;AACA,QAAI,KAAKvF,KAAL,CAAW+G,aAAf,EAA8B;AAC5B,WAAK/G,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGC,qBAAV,EAAd,CAApB;AACA,WAAKmO,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAG6Q,gBAAV,EAAd,CAApB;AACD;AACF;;AAEDrB,yBAAuB;AACrB,SAAK4F,WAAL;AACD;;AAEDC,wBAAsB;AACpB,SAAKD,WAAL;AACD;;AAEDA,gBAAc;AACZ,UAAME,gBAAgB,CACpB,iBADoB;AAEpB;AACA;AACAlV,aAASkQ,IAAT,CAAc2E,SAAd,CAAwBtN,QAAxB,CAAiC,SAAjC,IAA8C,SAA9C,GAA0D,EAJtC,EAKpBvH,SAASkQ,IAAT,CAAc2E,SAAd,CAAwBtN,QAAxB,CAAiC,WAAjC,IAAgD,WAAhD,GAA8D,EAL1C,EAMpB4N,MANoB,CAMbC,KAAKA,CANQ,EAMLC,IANK,CAMA,GANA,CAAtB;AAOAjW,WAAOY,QAAP,CAAgBkQ,IAAhB,CAAqBoF,SAArB,GAAiCJ,aAAjC;AACD;;AAEDtF,WAAS;AACP,UAAM,EAAC5B,KAAD,KAAU,IAAhB;AACA,UAAM,EAACuH,GAAD,EAAMtB,MAAN,EAAcuB,OAAd,KAAyBxH,KAA/B;AACA,UAAM,EAACnD,WAAD,KAAgB0K,GAAtB;;AAEA,UAAME,QAAQzH,MAAM5C,KAAN,CAAYC,MAA1B;AACA,QAAIoK,MAAM,0BAAN,CAAJ,EAAuC;AACrC,UAAI/K,OAAOzK,QAAP,CAAgByL,IAAhB,KAAyB,WAA7B,EAA0C;AACxC,eAAQ,2DAAC,gGAAD,OAAR;AACD;AACDhE,cAAQiE,GAAR,CAAY,oEAAZ,EAAkF,mBAAlF,EAJqC,CAImE;AACzG;;AAED,QAAI,CAACqC,MAAM+G,aAAP,IAAwB,CAAClK,WAA7B,EAA0C;AACxC,aAAO,IAAP;AACD;;AAED,WAAQ;AAAC,6DAAD;AAAA,QAAc,QAAQoJ,MAAtB,EAA8B,UAAUuB,OAAxC;AACJ;AAAC,wGAAD;AAAA,UAAe,WAAU,uBAAzB;AACE,mEAAC,WAAD,EAAiB,KAAKxH,KAAtB;AADF;AADI,KAAR;AAKD;AA5D4C;;AA+DxC,MAAM0H,WAAN,SAA0B,4CAAA5H,CAAMC,aAAhC,CAA8C;AACnD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK2H,eAAL,GAAuB,KAAKA,eAAL,CAAqBtN,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKuN,cAAL,GAAsBxB,SAAS,KAAKwB,cAAL,CAAoBvN,IAApB,CAAyB,IAAzB,CAAT,EAAyC,CAAzC,CAAtB;AACA,SAAK6C,KAAL,GAAa,EAAC2K,aAAa,KAAd,EAAb;AACD;;AAEDtC,sBAAoB;AAClBnU,WAAOkU,gBAAP,CAAwB,QAAxB,EAAkC,KAAKsC,cAAvC;AACD;;AAEDxG,yBAAuB;AACrBhQ,WAAOiU,mBAAP,CAA2B,QAA3B,EAAqC,KAAKuC,cAA1C;AACD;;AAEDA,mBAAiB;AACf,UAAME,mBAAmB,EAAzB;AACA,QAAI1W,OAAO2W,OAAP,GAAiBD,gBAAjB,IAAqC,CAAC,KAAK5K,KAAL,CAAW2K,WAArD,EAAkE;AAChE,WAAK5G,QAAL,CAAc,EAAC4G,aAAa,IAAd,EAAd;AACD,KAFD,MAEO,IAAIzW,OAAO2W,OAAP,IAAkBD,gBAAlB,IAAsC,KAAK5K,KAAL,CAAW2K,WAArD,EAAkE;AACvE,WAAK5G,QAAL,CAAc,EAAC4G,aAAa,KAAd,EAAd;AACD;AACF;;AAEDF,oBAAkB;AAChB,SAAK3H,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGmC,UAAH,CAAc,EAACjC,MAAM,8DAAAC,CAAGoW,aAAV,EAAd,CAApB;AACA,SAAKhI,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAa,EAACwE,OAAO,mBAAR,EAAb,CAApB;AACD;;AAED+I,WAAS;AACP,UAAM,EAAC5B,KAAD,KAAU,IAAhB;AACA,UAAM,EAACuH,GAAD,KAAQvH,KAAd;AACA,UAAM,EAACnD,WAAD,KAAgB0K,GAAtB;AACA,UAAME,QAAQzH,MAAM5C,KAAN,CAAYC,MAA1B;;AAEA,UAAM4K,qBAAqB,sEAAAC,CAAcC,aAAd,CAA4BjT,QAAQuS,MAAMvS,IAAN,CAApC,CAA3B;AACA,UAAMkT,oBAAoB,CAACX,MAAM,gBAAN,CAAD,IAA4BzH,MAAMqI,QAAN,CAAelB,MAAf,CAAsBmB,WAAWA,QAAQC,OAAzC,EAAkD5D,MAAlD,KAA6D,CAAnH;;AAEA,UAAM6D,iBAAiB,CACrB,eADqB,EAErBP,sBAAsB,cAFD,EAGrBR,MAAMgB,UAAN,IAAoB,KAAKvL,KAAL,CAAW2K,WAA/B,IAA8C,CAACO,iBAA/C,IAAoE,cAH/C,EAIrBX,MAAMgB,UAAN,IAAoBL,iBAApB,IAAyC,aAJpB,EAKrBjB,MALqB,CAKdC,KAAKA,CALS,EAKNC,IALM,CAKD,GALC,CAAvB;;AAOA,WACE;AAAA;AAAA;AACE;AAAA;AAAA,UAAK,WAAWmB,cAAhB;AACE;AAAA;AAAA;AACGf,gBAAMgB,UAAN,IACC;AAAA;AAAA,cAAK,WAAU,yBAAf;AACE;AAAC,8GAAD;AAAA;AACE,yEAAC,2EAAD,IAAQ,UAAUL,iBAAlB;AADF;AADF,WAFJ;AAQE;AAAA;AAAA,cAAK,WAAY,eAAevL,cAAc,KAAd,GAAsB,EAAI,EAA1D;AACG,aAAC4K,MAAMiB,gBAAP,IACC;AAAA;AAAA,gBAAK,WAAU,yBAAf;AACE,yEAAC,sGAAD;AADF,aAFJ;AAME,uEAAC,kFAAD,OANF;AAOE,uEAAC,WAAD,IAAa,SAAS,KAAKf,eAA3B;AAPF,WARF;AAiBE,qEAAC,gGAAD;AAjBF;AADF,OADF;AAsBG,WAAK3H,KAAL,CAAW4G,UAAX,IAAyB,2DAAC,oGAAD;AAtB5B,KADF;AAyBD;AAvEkD;;AA0E9C,MAAM+B,OAAO,2DAAAtQ,CAAQ6E,UAAU,EAACqK,KAAKrK,MAAMqK,GAAZ,EAAiBnK,OAAOF,MAAME,KAA9B,EAAqCiL,UAAUnL,MAAMmL,QAArD,EAAV,CAAR,EAAmF1B,KAAnF,CAAb,C;;;;;;;ACjLP,2B;;;;;;;;;;;;ACAA;AACA;;AAEO,MAAMiC,aAAN,SAA4B,4CAAA9I,CAAMC,aAAlC,CAAgD;AACrD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKjI,SAAL,GAAiB,KAAKA,SAAL,CAAesC,IAAf,CAAoB,IAApB,CAAjB;AACA,SAAKwO,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBxO,IAAzB,CAA8B,IAA9B,CAA3B;AACA,SAAKyO,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BzO,IAA3B,CAAgC,IAAhC,CAA7B;AACA,SAAK0O,sCAAL,GAA8C,KAAKA,sCAAL,CAA4C1O,IAA5C,CAAiD,IAAjD,CAA9C;AACA,SAAK6C,KAAL,GAAa,EAAC8L,eAAe,KAAhB,EAAb;AACD;;AAEDjR,YAAU,EAACzD,MAAMtB,MAAP,EAAV,EAA0B;AACxB,QAAIA,OAAOrB,IAAP,KAAgB,iBAApB,EAAuC;AACrC,WAAKsP,QAAL,CAAcjO,OAAOsB,IAArB;AACD;AACF;;AAED4M,uBAAqB;AACnB,UAAM7B,WAAW,wEAAAtB,CAAciB,kBAAd,EAAjB;AACAjB,IAAA,wEAAAA,CAAcI,WAAd,CAA0B,EAACxM,MAAM,qBAAP,EAA8B2C,MAAM,EAAC+K,QAAD,EAApC,EAA1B;AACAtB,IAAA,wEAAAA,CAAcC,WAAd,CAA0B,KAAKjG,SAA/B;AACD;;AAEDqJ,yBAAuB;AACrBrD,IAAA,wEAAAA,CAAcG,cAAd,CAA6B,KAAKnG,SAAlC;AACD;;AAEDgR,yCAAuCvH,QAAvC,EAAiD;AAC/C,WAAO,KAAKtE,KAAL,CAAW+L,QAAX,CAAoB9B,MAApB,CAA2BlL,OAAOA,IAAIuF,QAAJ,KAAiBA,QAAjB,IAA6BvF,IAAIiN,OAAnE,CAAP;AACD;;AAEDC,cAAYlN,GAAZ,EAAiB;AACf,QAAIA,IAAIiN,OAAR,EAAiB;AACf;AACA,UAAI1K,SAAS,KAAKuK,sCAAL,CAA4C9M,IAAIuF,QAAhD,CAAb;AACA,aAAO,MAAM,wEAAAzD,CAAcQ,WAAd,CAA0BC,MAA1B,CAAb;AACD;AACD,WAAO,MAAM,wEAAAT,CAAcM,SAAd,CAAwBpC,IAAI9E,EAA5B,CAAb;AACD;;AAEDiS,gBAAcnN,GAAd,EAAmB;AACjB,QAAIA,IAAIiN,OAAR,EAAiB;AACf;AACA,UAAI1K,SAAS,KAAKuK,sCAAL,CAA4C9M,IAAIuF,QAAhD,CAAb;AACA,aAAO,MAAM,wEAAAzD,CAAca,aAAd,CAA4BJ,MAA5B,CAAb;AACD;AACD,WAAO,MAAM,wEAAAT,CAAcY,WAAd,CAA0B1C,IAAI9E,EAA9B,CAAb;AACD;;AAEDkS,iBAAelS,EAAf,EAAmB;AACjB,WAAO,MAAM,wEAAA4G,CAAcc,eAAd,CAA8B1H,EAA9B,CAAb;AACD;;AAEDmS,gBAAc;AACZvL,IAAA,wEAAAA,CAAcI,WAAd,CAA0B,EAACxM,MAAM,oBAAP,EAA1B;AACD;;AAED4X,cAAY;AACVxL,IAAA,wEAAAA,CAAcI,WAAd,CAA0B,EAACxM,MAAM,qBAAP,EAA1B;AACD;;AAED6X,oBAAkBvN,GAAlB,EAAuB;AACrB,UAAMwN,YAAYxN,IAAI9E,EAAJ,KAAW,KAAK+F,KAAL,CAAWwM,aAAxC;AACA,UAAMC,YAAY,KAAKzM,KAAL,CAAW0M,gBAAX,CAA4BxS,QAA5B,CAAqC6E,IAAI9E,EAAzC,CAAlB;AACA,UAAM0S,cAAc,KAAK3M,KAAL,CAAW4M,kBAAX,CAA8B7N,IAAI9E,EAAlC,IAAwC,KAAK+F,KAAL,CAAW4M,kBAAX,CAA8B7N,IAAI9E,EAAlC,EAAsCwN,MAA9E,GAAuF,CAA3G;;AAEA,QAAIoF,gBAAgB,cAApB;AACA,QAAIN,SAAJ,EAAe;AAAEM,uBAAiB,UAAjB;AAA8B;AAC/C,QAAIJ,SAAJ,EAAe;AAAEI,uBAAiB,UAAjB;AAA8B;;AAE/C,WAAQ;AAAA;AAAA,QAAI,WAAWA,aAAf,EAA8B,KAAK9N,IAAI9E,EAAvC;AACN;AAAA;AAAA,UAAI,WAAU,YAAd;AAA2B;AAAA;AAAA;AAAO8E,cAAI9E,EAAX;AAAA;AAAe;AAAf;AAA3B,OADM;AAEN;AAAA;AAAA;AACE;AAAA;AAAA,YAAQ,WAAY,UAAUwS,YAAY,EAAZ,GAAiB,UAAY,EAA3D,EAA8D,SAASA,YAAY,KAAKP,aAAL,CAAmBnN,GAAnB,CAAZ,GAAsC,KAAKkN,WAAL,CAAiBlN,GAAjB,CAA7G;AAAqI0N,sBAAY,SAAZ,GAAwB;AAA7J,SADF;AAEEA,oBAAY,IAAZ,GAAmB;AAAA;AAAA,YAAQ,WAAU,QAAlB,EAA2B,SAAS,KAAKN,cAAL,CAAoBpN,IAAI9E,EAAxB,CAApC;AAAA;AAAA,SAFrB;AAGC,8EAHD;AAAA;AAGS0S,mBAHT;AAAA;AAAA,OAFM;AAON;AAAA;AAAA,UAAI,WAAU,iBAAd;AACE;AAAA;AAAA;AAAM7F,eAAKC,SAAL,CAAehI,GAAf,EAAoB,IAApB,EAA0B,CAA1B;AAAN;AADF;AAPM,KAAR;AAWD;;AAED+N,mBAAiB;AACf,QAAI,CAAC,KAAK9M,KAAL,CAAW+L,QAAhB,EAA0B;AACxB,aAAO,IAAP;AACD;AACD,UAAMgB,iBAAiB,KAAK/M,KAAL,CAAW8L,aAAX,KAA6B,KAA7B,GAAqC,KAAK9L,KAAL,CAAW+L,QAAhD,GAA2D,KAAK/L,KAAL,CAAW+L,QAAX,CAAoB9B,MAApB,CAA2BvH,WAAWA,QAAQY,QAAR,KAAqB,KAAKtD,KAAL,CAAW8L,aAAtE,CAAlF;AACA,WAAQ;AAAA;AAAA;AAAO;AAAA;AAAA;AACZiB,uBAAeC,GAAf,CAAmBjO,OAAO,KAAKuN,iBAAL,CAAuBvN,GAAvB,CAA1B;AADY;AAAP,KAAR;AAGD;;AAED6M,wBAAsBjQ,KAAtB,EAA6B;AAC3B,SAAKoI,QAAL,CAAc,EAAC+H,eAAenQ,MAAM9E,MAAN,CAAaoB,KAA7B,EAAd;AACD;;AAEDgV,wBAAsB;AACpB,QAAI,CAAC,KAAKjN,KAAL,CAAWkN,SAAhB,EAA2B;AACzB,aAAO,IAAP;AACD;AACD,WAAQ;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA,UAAQ,OAAO,KAAKlN,KAAL,CAAW8L,aAA1B,EAAyC,UAAU,KAAKF,qBAAxD;AAC5B;AAAA;AAAA,YAAQ,OAAM,KAAd;AAAA;AAAA,SAD4B;AAE3B,aAAK5L,KAAL,CAAWkN,SAAX,CAAqBF,GAArB,CAAyB1J,YAAa;AAAA;AAAA,YAAQ,KAAKA,SAASrJ,EAAtB,EAA0B,OAAOqJ,SAASrJ,EAA1C;AAA+CqJ,mBAASrJ;AAAxD,SAAtC;AAF2B;AAAtB,KAAR;AAID;;AAEDkT,oBAAkB;AAChB,WAAQ;AAAA;AAAA;AACN;AAAA;AAAA,UAAI,WAAU,cAAd;AACE;AAAA;AAAA;AAAA;AAAA,SADF;AAEE;AAAA;AAAA;AAAA;AAAA,SAFF;AAGE;AAAA;AAAA;AAAA;AAAA,SAHF;AAIE;AAAA;AAAA;AAAA;AAAA;AAJF;AADM,KAAR;AAQD;;AAEDxB,sBAAoBhQ,KAApB,EAA2B;AACzB,UAAM7F,SAAS,EAACrB,MAAMkH,MAAM9E,MAAN,CAAauW,OAAb,GAAuB,iBAAvB,GAA2C,kBAAlD,EAAsEhW,MAAMuE,MAAM9E,MAAN,CAAamB,IAAzF,EAAf;AACA6I,IAAA,wEAAAA,CAAcI,WAAd,CAA0BnL,MAA1B;AACA,SAAKiO,QAAL,CAAc,EAAC+H,eAAe,KAAhB,EAAd;AACD;;AAEDuB,oBAAkB;AAChB,UAAMC,kBAAkB,KAAKtN,KAAL,CAAWuN,aAAnC;AACA,UAAMC,eAAe,KAAKxN,KAAL,CAAWkN,SAAhC;AACA,WAAQ;AAAA;AAAA;AAAQ,WAAKC,eAAL,EAAR;AAA+B;AAAA;AAAA;AACpCG,wBAAgBN,GAAhB,CAAoB,CAAC1J,QAAD,EAAWmK,CAAX,KAAiB;AACpC,gBAAMC,iBAAiBpK,SAASrJ,EAAT,KAAgB,wBAAvC;AACA,gBAAM0T,OAAOH,aAAaI,IAAb,CAAkBC,KAAKA,EAAE5T,EAAF,KAASqJ,SAASrJ,EAAzC,KAAgD,EAA7D;AACA,cAAI6T,QAAQ,SAAZ;AACA,cAAIxK,SAAS7O,IAAT,KAAkB,QAAtB,EAAgC;AAC9BqZ,oBAAQ;AAAA;AAAA,gBAAG,QAAO,QAAV,EAAmB,MAAMH,KAAKtL,GAA9B;AAAoCsL,mBAAKtL;AAAzC,aAAR;AACD,WAFD,MAEO,IAAIiB,SAAS7O,IAAT,KAAkB,iBAAtB,EAAyC;AAC9CqZ,oBAAS,GAAExK,SAASyK,MAAO,oBAA3B;AACD;AACD,iBAAQ;AAAA;AAAA,cAAI,WAAU,cAAd,EAA6B,KAAKN,CAAlC;AACN;AAAA;AAAA;AAAKnK,uBAASrJ;AAAd,aADM;AAEN;AAAA;AAAA;AAAKyT,+BAAiB,IAAjB,GAAwB,sEAAO,MAAK,UAAZ,EAAuB,MAAMpK,SAASrJ,EAAtC,EAA0C,SAASqJ,SAAS+H,OAA5D,EAAqE,UAAU,KAAKM,mBAApF;AAA7B,aAFM;AAGN;AAAA;AAAA;AAAKmC;AAAL,aAHM;AAIN;AAAA;AAAA,gBAAI,OAAO,EAACE,YAAY,QAAb,EAAX;AAAoCL,mBAAKM,WAAL,GAAmB,IAAItQ,IAAJ,CAASgQ,KAAKM,WAAd,EAA2BC,cAA3B,EAAnB,GAAiE;AAArG;AAJM,WAAR;AAMD,SAfA;AADoC;AAA/B,KAAR;AAkBD;;AAEDxJ,WAAS;AACP,WAAQ;AAAA;AAAA,QAAK,WAAU,8BAAf;AACN;AAAA;AAAA;AAAA;AAAA,OADM;AAEN;AAAA;AAAA;AAAA;AAAA,OAFM;AAGN;AAAA;AAAA,UAAQ,WAAU,QAAlB,EAA2B,SAAS,KAAK0H,WAAzC;AAAA;AAAA,OAHM;AAAA;AAIN;AAAA;AAAA;AAAA;AAAA,OAJM;AAKN;AAAA;AAAA,UAAQ,WAAU,QAAlB,EAA2B,SAAS,KAAKC,SAAzC;AAAA;AAAA,OALM;AAML,WAAKrM,KAAL,CAAWkN,SAAX,GAAuB,KAAKG,eAAL,EAAvB,GAAgD,IAN3C;AAON;AAAA;AAAA;AAAA;AAAA,OAPM;AAQL,WAAKJ,mBAAL,EARK;AASL,WAAKH,cAAL;AATK,KAAR;AAWD;AA9JoD,C;;;;;;;;;;;;;;;;;ACHvD;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;AAmBO,MAAMqB,cAAN,SAA6B,4CAAAvL,CAAMC,aAAnC,CAAiD;AACtD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKsL,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBjR,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKkR,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBlR,IAAvB,CAA4B,IAA5B,CAAzB;AACD;;AAEDiR,qBAAmB;AACjB,SAAKtL,KAAL,CAAWxO,QAAX,CAAoB,EAACG,MAAM,8DAAAkB,CAAY2Y,aAAnB,EAApB;AACA,SAAKxL,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAa,EAACwE,OAAO,8DAAAhG,CAAY2Y,aAApB,EAAmClW,QAAQ,KAAK0K,KAAL,CAAW1L,IAAX,CAAgBmX,WAA3D,EAAb,CAApB;AACD;;AAEDF,sBAAoB;AAClB,SAAKvL,KAAL,CAAW1L,IAAX,CAAgBoX,SAAhB,CAA0BpY,OAA1B,CAAkC,KAAK0M,KAAL,CAAWxO,QAA7C;AACD;;AAEDma,wBAAsB;AACpB,UAAMC,eAAe,KAAK5L,KAAL,CAAW1L,IAAX,CAAgBuX,cAArC;;AAEA,QAAI,CAACD,YAAL,EAAmB;AACjB,aAAO,IAAP;AACD;;AAED,WAAQ;AAAA;AAAA;AACLA,mBAAa1B,GAAb,CAAiBjO,OAAO;AAAA;AAAA,UAAG,KAAKA,GAAR;AAAa,mEAAC,2DAAD,IAAkB,IAAIA,GAAtB;AAAb,OAAxB;AADK,KAAR;AAGD;;AAED2F,WAAS;AACP,QAAI,CAAC,KAAK5B,KAAL,CAAW8L,OAAhB,EAAyB;AACvB,aAAO,IAAP;AACD;;AAED,WAAQ;AAAA;AAAA,QAAK,WAAU,qBAAf;AACN,0EAAK,WAAU,eAAf,EAA+B,SAAS,KAAKR,gBAA7C,GADM;AAEN;AAAA;AAAA,UAAK,WAAU,OAAf;AACE;AAAA;AAAA,YAAS,WAAU,eAAnB;AACG,eAAKtL,KAAL,CAAW1L,IAAX,CAAgByX,IAAhB,IAAwB,qEAAM,WAAY,yBAAwB,KAAK/L,KAAL,CAAW1L,IAAX,CAAgByX,IAAK,EAA/D,GAD3B;AAEG,eAAKJ,mBAAL;AAFH,SADF;AAKE;AAAA;AAAA,YAAS,WAAU,SAAnB;AACE;AAAA;AAAA,cAAQ,SAAS,KAAKL,gBAAtB;AACE,uEAAC,2DAAD,IAAkB,IAAI,KAAKtL,KAAL,CAAW1L,IAAX,CAAgB0X,uBAAtC;AADF,WADF;AAIE;AAAA;AAAA,cAAQ,WAAU,MAAlB,EAAyB,SAAS,KAAKT,iBAAvC;AACE,uEAAC,2DAAD,IAAkB,IAAI,KAAKvL,KAAL,CAAW1L,IAAX,CAAgB2X,wBAAtC;AADF;AAJF;AALF;AAFM,KAAR;AAiBD;AAlDqD;;AAqDjD,MAAMC,gBAAgB,2DAAA7T,CAAQ6E,SAASA,MAAMiP,MAAvB,EAA+Bd,cAA/B,CAAtB,C;;;;;;AC7EP,4B;;;;;;;;;;;;;;ACAA;AACA;;AAEO,MAAMe,qBAAN,SAAoC,4CAAAtM,CAAMC,aAA1C,CAAwD;AAC7D1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKqM,SAAL,GAAiB,KAAKrM,KAAL,CAAWqM,SAAX,IAAwB3P,MAAzC;AACA,SAAKmJ,OAAL,GAAe,KAAKA,OAAL,CAAaxL,IAAb,CAAkB,IAAlB,CAAf;AACD;;AAED;;;;AAIAwL,YAAU;AACR,SAAKwG,SAAL,CAAepa,QAAf,CAAwBqa,MAAxB,CAA+B,IAA/B;AACD;;AAED1K,WAAS;AACP,UAAM2K,eAAe,mBAArB;AACA,QAAIjF,SAAJ;AACA,QAAI,eAAe,KAAKtH,KAAxB,EAA+B;AAC7BsH,kBAAa,GAAE,KAAKtH,KAAL,CAAWsH,SAAU,IAAGiF,YAAa,EAApD;AACD,KAFD,MAEO;AACLjF,kBAAYiF,YAAZ;AACD;;AAED;AACA,WACE;AAAA;AAAA,QAAK,WAAWjF,SAAhB;AACE;AAAA;AAAA;AACE,mEAAC,2DAAD;AACE,0BAAe,kDADjB;AAEE,cAAG,6BAFL;AADF,OADF;AAME;AAAA;AAAA;AACE;AAAA;AAAA,YAAG,MAAK,GAAR,EAAY,WAAU,eAAtB,EAAsC,SAAS,KAAKzB,OAApD;AACE,qEAAC,2DAAD;AACE,4BAAe,4BADjB;AAEE,gBAAG,2CAFL;AADF;AADF;AANF,KADF;AAgBD;AAzC4D;AA2C/DuG,sBAAsBvK,YAAtB,GAAqC,EAACyF,WAAW,mBAAZ,EAArC;;AAEO,MAAMkF,aAAN,SAA4B,4CAAA1M,CAAMC,aAAlC,CAAgD;AACrD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9C,KAAL,GAAa,EAACuP,UAAU,KAAX,EAAb;AACD;;AAEDC,oBAAkB3T,KAAlB,EAAyB8R,IAAzB,EAA+B;AAC7B,SAAK5J,QAAL,CAAc,EAACwL,UAAU,IAAX,EAAd;AACD;;AAED7K,WAAS;AACP,QAAI,CAAC,KAAK1E,KAAL,CAAWuP,QAAhB,EAA0B;AACxB,aAAQ,KAAKzM,KAAL,CAAW0F,QAAnB;AACD;;AAED,WAAO,gEAAM,KAAN,CAAY,iBAAZ,IAA8B,WAAW,KAAK1F,KAAL,CAAWsH,SAApD,GAAP;AACD;AAhBoD;;AAmBvDkF,cAAc3K,YAAd,GAA6B,EAAC8K,mBAAmBP,qBAApB,EAA7B,C;;;;;;;;;;;;;;;;;ACnEA;AACA;AACA;AACA;;AAEA;;;;;;;;AAQO,MAAMQ,gBAAN,SAA+B,4CAAA9M,CAAMC,aAArC,CAAmD;AACxD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK6M,YAAL,GAAoB,KAAKA,YAAL,CAAkBxS,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKyS,YAAL,GAAoB,KAAKA,YAAL,CAAkBzS,IAAlB,CAAuB,IAAvB,CAApB;AACD;;AAEDwS,iBAAe;AACb,SAAK7M,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGmb,eAAV,EAAd,CAApB;AACA,SAAK/M,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAa,EAACwE,OAAO,8DAAAjH,CAAGmb,eAAX,EAAb,CAApB;AACD;;AAEDD,iBAAe;AACb,SAAK9M,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGob,gBAAV,EAAd,CAApB;AACA,SAAKhN,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAa,EAACwE,OAAO,8DAAAjH,CAAGob,gBAAX,EAAb,CAApB;AACD;;AAEDpL,WAAS;AACP,WAAQ;AAAA;AAAA,QAAK,WAAU,4BAAf;AACJ;AAAA;AAAA;AACE,6EAAM,WAAU,kBAAhB,GADF;AAEE,mEAAC,2DAAD,IAAkB,IAAG,+BAArB;AAFF,OADI;AAKJ;AAAA;AAAA,UAAK,WAAU,kCAAf;AACE;AAAA;AAAA,YAAQ,WAAU,SAAlB,EAA4B,SAAS,KAAKkL,YAA1C;AACE,qEAAC,2DAAD,IAAkB,IAAG,gCAArB;AADF,SADF;AAIE;AAAA;AAAA,YAAQ,SAAS,KAAKD,YAAtB;AACE,qEAAC,2DAAD,IAAkB,IAAG,gCAArB;AADF;AAJF;AALI,KAAR;AAcD;AAhCuD;;AAmCnD,MAAMI,kBAAkB,2DAAA5U,GAAUuU,gBAAV,CAAxB,C;;;;;;;;;;AChDP,MAAMM,cAAN,CAAqB;AACnB7W,cAAYpD,OAAZ,EAAqB;AACnB,SAAKka,YAAL,GAAoBla,QAAQka,YAA5B;AACA,SAAKC,eAAL,GAAuBna,QAAQma,eAA/B;AACA,SAAKC,cAAL,CAAoBpa,QAAQqa,UAA5B;AACD;;AAED,MAAIA,UAAJ,GAAiB;AACf,WAAO,KAAKC,WAAZ;AACD;;AAED,MAAID,UAAJ,CAAenY,KAAf,EAAsB;AACpB,SAAKkY,cAAL,CAAoBlY,KAApB;AACD;;AAED,MAAIqY,iBAAJ,GAAwB;AACtB,WAAO,KAAKC,kBAAZ;AACD;;AAEC;AACFJ,iBAAelY,QAAQ,EAAvB,EAA2B;AACzB,SAAKoY,WAAL,GAAmBpY,KAAnB;AACA,SAAKsY,kBAAL,GAA0BtY,MAAMuY,MAAN,CAAa,CAACrU,MAAD,EAASyJ,IAAT,KAAkB;AACvD,UAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5BzJ,eAAOhC,IAAP,CAAYyL,IAAZ;AACA,eAAOzJ,MAAP;AACD,OAHD,MAGO,IAAIyJ,QAAQA,KAAK6K,KAAjB,EAAwB;AAC7B,eAAOtU,OAAO8C,MAAP,CAAc2G,KAAK6K,KAAnB,CAAP;AACD,OAFM,MAEA,IAAI7K,QAAQA,KAAK7J,SAAjB,EAA4B;AACjC,eAAOI,OAAO8C,MAAP,CAAc2G,KAAK7J,SAAnB,CAAP;AACD;AACD,YAAM,IAAI5F,KAAJ,CAAU,0DAAV,CAAN;AACD,KAVyB,EAUvB,EAVuB,CAA1B;AAWD;;AAED8U,gBAAcyF,OAAd,EAAuBC,cAAvB,EAAuC;AACrC,SAAK,MAAMpG,KAAX,IAAoB,KAAK6F,UAAzB,EAAqC;AACnC;AACA,UAAI7F,SAASA,MAAMkG,KAAf,IAAwB,CAAClG,MAAMkG,KAAN,CAAYG,IAAZ,CAAiB5Y,QAAQ0Y,QAAQ1Y,IAAR,MAAkB,KAAKiY,YAAL,CAAkBjY,IAAlB,CAA3C,CAA7B,EAAkG;AAChG,eAAO,KAAP;;AAEA;AACD,OAJD,MAIO,IAAI2Y,kBAAkBpG,KAAlB,IAA2BA,MAAMxO,SAArC,EAAgD;AACrD,cAAM8U,mBAAmBtG,MAAMxO,SAAN,CAAgB6U,IAAhB,CAAqBE,YAAYH,eAAeC,IAAf,CAAoBG,QAAQA,QAAQA,KAAKD,QAAL,CAApC,CAAjC,CAAzB;AACA,YAAID,gBAAJ,EAAsB;AACpB,iBAAO,KAAP;AACD;AACD;AACD,OANM,MAMA,IAAIH,QAAQnG,KAAR,MAAmB,KAAK0F,YAAL,CAAkB1F,KAAlB,CAAvB,EAAiD;AACtD,eAAO,KAAP;AACD;AACF;AACD,WAAO,IAAP;AACD;AArDkB;oBAwDA,IAAIyF,cAAJ,CAAmB;AACtCC,gBAAc;AACZ,wBAAoB,IADR;AAEZ,sBAAkB,IAFN;AAGZ,kBAAc,IAHF;AAIZ,oBAAgB,CAJJ;AAKZ,gCAA4B,IALhB;AAMZ,gCAA4B,IANhB;AAOZ,oBAAgB,gCAPJ;AAQZ,iBAAa;AARD,GADwB;AAWtC;AACA;AACA;AACA;AACA;AACA;AACAG,cAAY,CACV,gBADU,EAEV,YAFU,EAGV,cAHU,EAIV,cAJU;AAKV;AACA;AACA,IAACK,OAAO,CAAC,0BAAD,EAA6B,0BAA7B,CAAR,EAPU;AAQV;AACA;AACA,IAAC1U,WAAW,CAAC,WAAD,CAAZ,EAVU,CAjB0B;AA6BtCmU,mBAAiB,CACf;AACE7E,aAAS,IADX;AAEEwD,UAAM,QAFR;AAGE5U,QAAI,YAHN;AAIE+W,WAAO,CAJT;AAKEC,WAAO,EAAChX,IAAI,uBAAL,EAA8BkG,QAAQ,EAACmD,UAAU,QAAX,EAAtC;AALT,GADe,EAQf;AACE+H,aAAS,IADX;AAEEpR,QAAI,YAFN;AAGE4U,UAAM,YAHR;AAIEmC,WAAO,CAJT;AAKEC,WAAO,EAAChX,IAAI,mBAAL;AALT,GARe;AA7BqB,CAAnB,C;;;;;;;;;;;;;;;;ACxDrB;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO,MAAMiX,OAAN,SAAsB,4CAAAtO,CAAMC,aAA5B,CAA0C;AAC/C1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK6F,OAAL,GAAe,KAAKA,OAAL,CAAaxL,IAAb,CAAkB,IAAlB,CAAf;AACA,SAAKgU,YAAL,GAAoB,KAAKA,YAAL,CAAkBhU,IAAlB,CAAuB,IAAvB,CAApB;AACD;;AAEDiU,cAAYzV,KAAZ,EAAmB;AACjB;AACA,QAAIA,MAAM0V,MAAN,CAAa5c,IAAb,KAAsB,QAA1B,EAAoC;AAClC,WAAKqO,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAa,EAACwE,OAAO,QAAR,EAAb,CAApB;AACD;AACF;;AAEDgN,UAAQhN,KAAR,EAAe;AACb6D,WAAO8R,wBAAP,CAAgCC,MAAhC,CAAuC5V,KAAvC;AACD;;AAEDuI,yBAAuB;AACrB,WAAO1E,OAAO8R,wBAAd;AACD;;AAEDH,eAAaK,KAAb,EAAoB;AAClB,QAAIA,KAAJ,EAAW;AACT;AACA;AACA;AACA;AACA;AACA,YAAMC,kBAAkB,mEAAAC,GAAY,QAAZ,GAAuB,WAA/C;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAMC,eAAe,mEAAAD,GAAY,QAAZ,GAAuB,UAA5C;;AAEA;AACA;AACA;AACAlS,aAAO8R,wBAAP,GAAkC,IAAIM,yBAAJ,CAA8BJ,KAA9B,EAAqCA,MAAM3S,UAA3C,EAChC4S,eADgC,EACfE,YADe,CAAlC;AAEAvJ,uBAAiB,qBAAjB,EAAwC,IAAxC;AACD,KArBD,MAqBO;AACL5I,aAAO8R,wBAAP,GAAkC,IAAlC;AACAnJ,0BAAoB,qBAApB,EAA2C,IAA3C;AACD;AACF;;AAED;;;;;AAKAzD,WAAS;AACP,WAAQ;AAAA;AAAA,QAAK,WAAU,gBAAf;AACL,WAAK5B,KAAL,CAAW+O,QAAX,IACC;AAAA;AAAA,UAAK,WAAU,mBAAf;AACE,4EAAK,WAAU,MAAf,GADF;AAEE,4EAAK,WAAU,UAAf;AAFF,OAFI;AAON;AAAA;AAAA,UAAK,WAAU,sBAAf;AACE;AAAA;AAAA,YAAO,SAAQ,oBAAf,EAAoC,WAAU,cAA9C;AACE;AAAA;AAAA,cAAM,WAAU,SAAhB;AAA0B,uEAAC,2DAAD,IAAkB,IAAG,wBAArB;AAA1B;AADF,SADF;AAIE;AACE,cAAG,oBADL;AAEE,qBAAU,KAFZ;AAGE,uBAAa,KAAK/O,KAAL,CAAW8F,IAAX,CAAgBC,aAAhB,CAA8B,EAAC5O,IAAI,wBAAL,EAA9B,CAHf;AAIE,eAAK,KAAKkX,YAJZ;AAKE,iBAAO,KAAKrO,KAAL,CAAW8F,IAAX,CAAgBC,aAAhB,CAA8B,EAAC5O,IAAI,wBAAL,EAA9B,CALT;AAME,gBAAK,QANP,GAJF;AAWE;AAAA;AAAA;AACE,gBAAG,cADL;AAEE,uBAAU,eAFZ;AAGE,qBAAS,KAAK0O,OAHhB;AAIE,mBAAO,KAAK7F,KAAL,CAAW8F,IAAX,CAAgBC,aAAhB,CAA8B,EAAC5O,IAAI,eAAL,EAA9B,CAJT;AAKE;AAAA;AAAA,cAAM,WAAU,SAAhB;AAA0B,uEAAC,2DAAD,IAAkB,IAAG,eAArB;AAA1B;AALF;AAXF;AAPM,KAAR;AA2BD;AAnF8C;;AAsF1C,MAAM6X,SAAS,2DAAA3W,GAAU,6DAAAuN,CAAWwI,OAAX,CAAV,CAAf,C;;;;;;;;;AC/FA,MAAMQ,YAAYxd,OAAOY,QAAP,IAAmBZ,OAAOY,QAAP,CAAgBid,WAAhB,KAAgC,cAArE,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMlK,UAAU,SAAhB;AACA,MAAMC,0BAA0B,kBAAhC;AACA,MAAMkK,wBAAwB,CAA9B;AACA,MAAMC,6BAA6B,CAAnC;;AAEA,SAASC,mBAAT,CAA6BxP,OAA7B,EAAsC;AACpC,SAAO,OAAOA,OAAP,KAAmB,QAAnB,GAA8B;AAAA;AAAA;AAAOA;AAAP,GAA9B,GAAuD,2DAAC,2DAAD,EAAsBA,OAAtB,CAA9D;AACD;;AAEM,MAAMyP,OAAN,SAAsB,4CAAAvP,CAAMC,aAA5B,CAA0C;AAC/C,MAAIuP,OAAJ,GAAc;AACZ,UAAM,EAACC,QAAD,EAAWC,OAAX,EAAoBpS,KAApB,KAA6B,KAAK4C,KAAxC;AACA,WAAOuP,WAAWnS,MAAMC,MAAN,CAAakS,QAAb,CAAX,GAAoCC,OAA3C;AACD;;AAEDC,6BAA2B;AACzB,UAAM,EAACzP,KAAD,KAAU,IAAhB;AACA,QAAI0P,cAAcR,qBAAlB;AACA,QAAIlP,MAAM2P,YAAN,IAAsBve,OAAOwe,UAAP,CAAmB,qBAAnB,EAAyCC,OAAnE,EAA4E;AAC1E;AACA;AACA;AACAH,oBAAcP,0BAAd;AACD;AACD,UAAMW,WAAWJ,cAAc,KAAKJ,OAApC;AACA,UAAMS,QAAQ/P,MAAMgQ,IAAN,CAAW7Q,KAAX,CAAiB,CAAjB,EAAoB2Q,QAApB,CAAd;;AAEA,QAAI,KAAKG,oBAAL,CAA0BF,KAA1B,CAAJ,EAAsC;AACpC/P,YAAMxO,QAAN,CAAe,iEAAAC,CAAGsD,eAAH,CAAmB;AAChCO,gBAAQ0K,MAAMyL,WADkB;AAEhCyE,eAAOH,MAAM7F,GAAN,CAAUiG,SAAS,EAAChZ,IAAIgZ,KAAKC,IAAV,EAAT,CAAV;AAFyB,OAAnB,CAAf;AAIA,WAAKC,mBAAL,GAA2BN,MAAM7F,GAAN,CAAUiG,QAAQA,KAAKC,IAAvB,CAA3B;AACD;AACF;;AAED;AACA;AACA;AACAE,qCAAmC;AACjC,UAAM,EAACtQ,KAAD,KAAU,IAAhB;;AAEA,QAAI,CAACA,MAAMuQ,yBAAP,IAAoC,CAACvQ,MAAMxO,QAA/C,EAAyD;AACvD;AACD;;AAED,QAAIwO,MAAMhO,QAAN,CAAemT,eAAf,KAAmCJ,OAAvC,EAAgD;AAC9C,WAAK0K,wBAAL;AACD,KAFD,MAEO;AACL;AACA;AACA,UAAI,KAAKrK,mBAAT,EAA8B;AAC5BpF,cAAMhO,QAAN,CAAeqT,mBAAf,CAAmCL,uBAAnC,EAA4D,KAAKI,mBAAjE;AACD;;AAED;AACA,WAAKA,mBAAL,GAA2B,MAAM;AAC/B,YAAIpF,MAAMhO,QAAN,CAAemT,eAAf,KAAmCJ,OAAvC,EAAgD;AAC9C,cAAI,CAAC,KAAK/E,KAAL,CAAWiO,IAAX,CAAgBuC,SAArB,EAAgC;AAC9B,iBAAKf,wBAAL;AACD;AACDzP,gBAAMhO,QAAN,CAAeqT,mBAAf,CAAmCL,uBAAnC,EAA4D,KAAKI,mBAAjE;AACD;AACF,OAPD;AAQApF,YAAMhO,QAAN,CAAesT,gBAAf,CAAgCN,uBAAhC,EAAyD,KAAKI,mBAA9D;AACD;AACF;;AAEDlE,uBAAqB;AACnB,SAAKuP,oBAAL,CAA0B,KAAKzQ,KAAL,CAAWnD,WAArC;AACD;;AAED0I,sBAAoB;AAClB,QAAI,KAAKvF,KAAL,CAAWgQ,IAAX,CAAgBrL,MAAhB,IAA0B,CAAC,KAAK3E,KAAL,CAAWiO,IAAX,CAAgBuC,SAA/C,EAA0D;AACxD,WAAKF,gCAAL;AACD;AACF;;AAED7K,qBAAmB9F,SAAnB,EAA8B;AAC5B,UAAM,EAACK,KAAD,KAAU,IAAhB;AACA,UAAM0Q,cAAc1Q,MAAMiO,IAAN,CAAWuC,SAA/B;AACA,UAAMG,eAAehR,UAAUsO,IAAV,CAAeuC,SAApC;AACA;AACE;AACAxQ,UAAMgQ,IAAN,CAAWrL,MAAX;AAEE;AACA;AACC3E,UAAMgQ,IAAN,KAAerQ,UAAUqQ,IAAzB,IAAiC,CAACU,WAAnC;AACA;AACCC,oBAAgB,CAACD,WANpB,CAFF,EAUE;AACA,WAAKJ,gCAAL;AACD;AACF;;AAEDrJ,sBAAoBvH,SAApB,EAA+B;AAC7B,SAAK+Q,oBAAL,CAA0B/Q,UAAU7C,WAApC;AACD;;AAEDuE,yBAAuB;AACrB,QAAI,KAAKgE,mBAAT,EAA8B;AAC5B,WAAKpF,KAAL,CAAWhO,QAAX,CAAoBqT,mBAApB,CAAwCL,uBAAxC,EAAiE,KAAKI,mBAAtE;AACD;AACF;;AAED6K,uBAAqBF,KAArB,EAA4B;AAC1B,QAAI,CAAC,KAAKM,mBAAN,IAA8B,KAAKA,mBAAL,CAAyB1L,MAAzB,KAAoCoL,MAAMpL,MAA5E,EAAqF;AACnF,aAAO,IAAP;AACD;;AAED,SAAK,IAAIgG,IAAI,CAAb,EAAgBA,IAAIoF,MAAMpL,MAA1B,EAAkCgG,GAAlC,EAAuC;AACrC,UAAIoF,MAAMpF,CAAN,EAASyF,IAAT,KAAkB,KAAKC,mBAAL,CAAyB1F,CAAzB,CAAtB,EAAmD;AACjD,eAAO,IAAP;AACD;AACF;;AAED,WAAO,KAAP;AACD;;AAED;AACA;AACA;AACA8F,uBAAqB5T,WAArB,EAAkC;AAChC,QAAIA,eAAe,CAAC,KAAK+T,cAAzB,EAAyC;AACvC,WAAK5Q,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGif,kBAAV,EAA8Bvc,MAAM,EAApC,EAAd,CAApB;AACA,WAAKsc,cAAL,GAAsB,IAAtB;AACD;AACF;;AAEDhP,WAAS;AACP,UAAM;AACJzK,QADI,EACAsU,WADA,EACa0C,KADb,EACoBpC,IADpB,EAC0BiE,IAD1B,EACgCc,MADhC,EACwCC,MADxC;AAEJC,gBAFI,EAEQxf,QAFR,EAEkBme,YAFlB,EAEgCsB,kBAFhC;AAGJC,wBAHI,EAGgBrU,WAHhB,EAG6BsU,SAH7B;AAIJlD,UAJI,EAIEmD,gBAJF,EAIoBC,OAJpB,EAI6BC;AAJ7B,QAKF,KAAKtR,KALT;;AAOA,UAAMuR,iBAAiBpa,OAAO,YAAP,IAAuB,KAAK6I,KAAL,CAAW8Q,MAAX,CAAkBS,cAAhE;AACA,UAAMC,iBAAiB7B,eAAeR,0BAAf,GAA4CD,qBAAnE;AACA,UAAM,EAACI,OAAD,KAAY,IAAlB;AACA,UAAMQ,WAAW0B,iBAAiBlC,OAAlC;AACA,UAAMmC,mBAAmBvC,wBAAwBI,OAAjD;;AAEA,UAAM,EAACoC,SAAD,EAAYC,cAAZ,KAA8Bb,UAAU,EAA9C;AACA,UAAM,EAACc,MAAD,KAAWF,aAAa,EAA9B;;AAEA;AACA;AACA,UAAMG,0BAA2BF,mBAAmB,IAAnB,IAA2BA,mBAAmB,KAA/E;;AAEA,UAAMG,sBAAuB3a,OAAO,YAAP,IAC3Bya,MAD2B,IACjBD,mBAAmB,KAD/B;;AAGA;AACA;AACA,UAAMI,mBAAoB5a,OAAO,YAAP,IACvB4Z,UAAUA,OAAOpM,MAAP,GAAgB,CADH,KAEtBiN,UAAUD,mBAAmB,IAA9B,IAAwC,CAACC,MAAD,IAAWC,uBAF5B,CAA1B;;AAIA,UAAMG,WAAWhC,KAAK7Q,KAAL,CAAW,CAAX,EAAc2Q,QAAd,CAAjB;;AAEA;AACA;AACA,UAAMmC,uBAAuBpV,eAAe,CAACmT,KAAKrL,MAAlD;;AAEA,UAAMoL,QAAQ,EAAd;AACA,QAAI,CAACkC,oBAAL,EAA2B;AACzB,WAAK,IAAItH,IAAI,CAAb,EAAgBA,IAAImF,QAApB,EAA8BnF,GAA9B,EAAmC;AACjC,cAAMwF,OAAO6B,SAASrH,CAAT,CAAb;AACA;AACA;AACA,cAAMrD,YAAaqD,KAAK8G,gBAAN,GAA0B,iBAA1B,GAA8C,EAAhE;AACA,YAAIS,iBAAiB,CAAC/B,IAAtB;AACA;AACA;AACA,YAAI,CAAC+B,cAAD,IAAmBvH,MAAM,CAAzB,IAA8B4G,cAAlC,EAAkD;AAChDW,2BAAiB,IAAjB;AACD;AACDnC,cAAM1Y,IAAN,CAAW,CAAC6a,cAAD,GACT,2DAAC,qEAAD,IAAM,KAAKvH,CAAX;AACE,iBAAOA,CADT;AAEE,qBAAWrD,SAFb;AAGE,oBAAU9V,QAHZ;AAIE,gBAAM2e,IAJR;AAKE,8BAAoBe,kBALtB;AAME,uBAAazF,WANf;AAOE,qCAA2B,KAAKzL,KAAL,CAAWuQ,yBAPxC;AAQE,0BAAgB,KAAKvQ,KAAL,CAAWmS,cAR7B,GADS,GAWT,2DAAC,gFAAD,IAAiB,KAAKxH,CAAtB,EAAyB,WAAWrD,SAApC,GAXF;AAaD;AACF;;AAED,UAAM8K,mBAAmB,CACvB,SADuB,EAEvBzC,eAAe,eAAf,GAAiC,cAFV,EAGvBtI,IAHuB,CAGlB,GAHkB,CAAzB;;AAKA;AACA;AACA,WAAQ;AAAC,qHAAD;AAAwB,WAAKrH,KAA7B;AACN;AAAC,uHAAD;AAAA,UAAoB,WAAWoS,gBAA/B,EAAiD,MAAMrG,IAAvD;AACE,iBAAOoC,KADT;AAEE,cAAIhX,EAFN;AAGE,uBAAasU,WAHf;AAIE,qBAAW,KAAKzL,KAAL,CAAWiO,IAAX,CAAgBuC,SAJ7B;AAKE,wBAAevC,QAAQA,KAAKoE,IAAd,IAAuBlb,EALvC;AAME,4BAAkBia,gBANpB;AAOE,iBAAO,KAAKpR,KAAL,CAAW5C,KAPpB;AAQE,mBAASiU,OARX;AASE,kBAAQC,MATV;AAUE,qBAAWH,SAVb;AAWE,oBAAU,KAAKnR,KAAL,CAAWxO,QAXvB;AAYE,0BAAgB,KAAKwO,KAAL,CAAWmS,cAZ7B;AAcG,SAACF,oBAAD,IAA0B;AAAA;AAAA,YAAI,WAAU,cAAd,EAA6B,OAAO,EAACK,SAAS,CAAV,EAApC;AACxBvC;AADwB,SAd7B;AAiBGkC,gCACC;AAAA;AAAA,YAAK,WAAU,qBAAf;AACE;AAAA;AAAA,cAAK,WAAU,aAAf;AACGjB,uBAAWjF,IAAX,IAAmBiF,WAAWjF,IAAX,CAAgBwG,UAAhB,CAA2B,kBAA3B,CAAnB,GACC,oEAAK,WAAU,uBAAf,EAAuC,OAAO,EAAC,oBAAqB,QAAOvB,WAAWjF,IAAK,IAA7C,EAA9C,GADD,GAEC,oEAAK,WAAY,8BAA6BiF,WAAWjF,IAAK,EAA9D,GAHJ;AAIE;AAAA;AAAA,gBAAG,WAAU,qBAAb;AACGqD,kCAAoB4B,WAAWpR,OAA/B;AADH;AAJF;AADF,SAlBJ;AA4BGzI,eAAO,YAAP,IACC;AAAA;AAAA,YAAK,WAAU,8BAAf;AACG4a,8BAAoB,2DAAC,2EAAD,IAAQ,QAAQ,KAAK/R,KAAL,CAAW+Q,MAA3B,GADvB;AAEGe,iCAAuB,2DAAC,4GAAD,OAF1B;AAGGb,gCACC,2DAAC,kHAAD,IAAqB,oBAAoBA,kBAAzC;AAJJ;AA7BJ;AADM,KAAR;AAsCD;AAxO8C;;AA2OjD5B,QAAQxN,YAAR,GAAuB;AACrB7P,YAAUZ,OAAOY,QADI;AAErBge,QAAM,EAFe;AAGrBgB,cAAY,EAHS;AAIrB/C,QAAM,EAJe;AAKrBE,SAAO;AALc,CAAvB;;AAQO,MAAMqE,cAAc,2DAAAna,CAAQ6E,UAAU,EAACE,OAAOF,MAAME,KAAd,EAAqB0T,QAAQ5T,MAAM4T,MAAnC,EAAV,CAAR,EAA+D,6DAAAlL,CAAWyJ,OAAX,CAA/D,CAApB;;AAEA,MAAMoD,SAAN,SAAwB,4CAAA3S,CAAMC,aAA9B,CAA4C;AACjD2S,mBAAiB;AACf,UAAMC,WAAW,EAAjB;AACA,UAAMC,kBAAkB,KAAK5S,KAAL,CAAWqI,QAAX,CAAoBlB,MAApB,CAA2BmB,WAAWA,QAAQC,OAA9C,CAAxB;AACA,UAAM,EAACsK,YAAD,EAAe,kBAAkBC,YAAjC,KAAiD,KAAK9S,KAAL,CAAW5C,KAAX,CAAiBC,MAAxE;AACA;AACA,UAAM0V,gBAAgBH,gBAAgBjO,MAAhB,GAAyB,CAAC,CAACmO,YAAjD;;AAEA,SAAK,MAAME,SAAX,IAAwBH,aAAaI,KAAb,CAAmB,GAAnB,CAAxB,EAAiD;AAC/C,YAAMC,cAAc;AAClBzc,aAAKuc,SADa;AAElB3B,iBAASsB,SAAShO,MAAT,KAAoB,CAFX;AAGlB2M,gBAAQqB,SAAShO,MAAT,KAAoBoO,gBAAgB;AAH1B,OAApB;AAKA,UAAIC,cAAc,UAAd,IAA4BF,YAAhC,EAA8C;AAC5CH,iBAAStb,IAAT,CAAc,2DAAC,kFAAD,EAAc6b,WAAd,CAAd;AACD,OAFD,MAEO;AACL,cAAM5K,UAAUsK,gBAAgB9H,IAAhB,CAAqBqI,KAAKA,EAAEhc,EAAF,KAAS6b,SAAnC,CAAhB;AACA,YAAI1K,OAAJ,EAAa;AACXqK,mBAAStb,IAAT,CAAc,2DAAC,WAAD,eAAiBiR,OAAjB,EAA8B4K,WAA9B,EAAd;AACD;AACF;AACF;AACD,WAAOP,QAAP;AACD;;AAED/Q,WAAS;AACP,WACE;AAAA;AAAA,QAAK,WAAU,eAAf;AACG,WAAK8Q,cAAL;AADH,KADF;AAKD;AAhCgD;;AAmC5C,MAAMrK,WAAW,2DAAAhQ,CAAQ6E,UAAU,EAACmL,UAAUnL,MAAMmL,QAAjB,EAA2BjL,OAAOF,MAAME,KAAxC,EAAV,CAAR,EAAmEqV,SAAnE,CAAjB,C;;;;;;;;;;;;AC7SP;;AAEA,MAAMW,uBAAuBC,SAAS;AACpClc,MAAI,iCADgC;AAEpC4U,QAAM,oBAF8B;AAGpC/Y,UAAQ,iEAAAvB,CAAGmC,UAAH,CAAc;AACpBjC,UAAM,8DAAAC,CAAG0hB,mBADW;AAEpBhf,UAAM,EAACiL,KAAK8T,KAAK9T,GAAX,EAAgBgU,UAAUF,KAAKE,QAA/B;AAFc,GAAd,CAH4B;AAOpCC,aAAW;AAPyB,CAAT,CAA7B;;AAUO,MAAMC,oBAAoBC,YAAY;AAC3C,UAAQA,QAAR;AACE,SAAK,KAAL;AACE,aAAO,+BAAP;AACF,SAAK,QAAL;AACE,aAAO,8BAAP;AACF,SAAK,OAAL;AACE,aAAO,6BAAP;AACF;AACE,aAAO,+BAAP;AARJ;AAUD,CAXM;;AAaP;;;;;AAKO,MAAMC,kBAAkB;AAC7BC,aAAW,OAAO,EAACjiB,MAAM,WAAP,EAAP,CADkB;AAE7BkiB,aAAW,OAAO,EAACliB,MAAM,OAAP,EAAP,CAFkB;AAG7BmiB,kBAAgBT,SAAS;AACvBlc,QAAI,6BADmB;AAEvB4U,UAAM,gBAFiB;AAGvB/Y,YAAQ,iEAAAvB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAGmiB,qBADW;AAEpBzf,YAAM+e,KAAKW;AAFS,KAAd,CAHe;AAOvBR,eAAW;AAPY,GAAT,CAHa;AAY7BS,eAAaZ,SAAS;AACpBlc,QAAI,sBADgB;AAEpB4U,UAAM,iBAFc;AAGpB/Y,YAAQ,iEAAAvB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAGsiB,YADW;AAEpB5f,YAAM,EAACiL,KAAK8T,KAAK9T,GAAX,EAAgB4O,OAAOkF,KAAKlF,KAA5B,EAAmCxc,MAAM0hB,KAAK1hB,IAA9C;AAFc,KAAd,CAHY;AAOpB6hB,eAAW;AAPS,GAAT,CAZgB;AAqB7BW,mBAAiBd,SAAS;AACxBlc,QAAI,6BADoB;AAExB4U,UAAM,YAFkB;AAGxB/Y,YAAQ,iEAAAvB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAGwiB,eADW;AAEpB9f,YAAM;AACJif,kBAAUF,KAAKE,QADX;AAEJc,oBAAYhB,KAAKgB,UAFb;AAGJ9U,aAAK8T,KAAK9T;AAHN;AAFc,KAAd,CAHgB;AAWxBiU,eAAW;AAXa,GAAT,CArBY;AAkC7Bc,YAAU,CAACjB,IAAD,EAAOkB,KAAP,EAAc9I,WAAd,MAA+B;AACvCtU,QAAI,qBADmC;AAEvC4U,UAAM,SAFiC;AAGvC/Y,YAAQ,iEAAAvB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAG4iB,SADW;AAEpBlgB,YAAM,EAACiL,KAAK8T,KAAKoB,QAAL,IAAiBpB,KAAK9T,GAA5B,EAAiCmV,WAAWrB,KAAKqB,SAAjD;AAFc,KAAd,CAH+B;AAOvCC,gBAAY,iEAAAljB,CAAGsD,eAAH,CAAmB;AAC7BO,cAAQmW,WADqB;AAE7BmJ,aAAO,CAFsB;AAG7B1E,aAAO,CAAC,EAAC/Y,IAAIkc,KAAKjD,IAAV,EAAgByE,KAAKN,KAArB,EAAD;AAHsB,KAAnB,CAP2B;AAYvCf,eAAW;AAZ4B,GAA/B,CAlCmB;;AAiD7B;AACA;AACAsB,iBAAe,CAACzB,IAAD,EAAOkB,KAAP,EAAc9I,WAAd,MAA+B;AAC5CtU,QAAI,4BADwC;AAE5C4d,eAAW,qBAFiC;AAG5ChJ,UAAM,SAHsC;AAI5C/Y,YAAQ,iEAAAvB,CAAG4D,WAAH,CAAe,8DAAAzD,CAAGojB,cAAlB,EAAkC;AACxC1f,cAAQmW,WADgC;AAExClM,WAAK8T,KAAK9T,GAF8B;AAGxC0V,uBAAiBV;AAHuB,KAAlC;AAJoC,GAA/B,CAnDc;AA6D7BW,aAAW,CAAC7B,IAAD,EAAOkB,KAAP,EAAc9I,WAAd,EAA2B0J,SAA3B,EAAsCC,QAAtC,MAAoD;AAC7Dje,QAAI,oBADyD;AAE7D4U,UAAM,QAFuD;AAG7D/Y,YAAQ;AACNrB,YAAM,8DAAAC,CAAGyjB,WADH;AAEN/gB,YAAM;AACJoX,mBAAW,CACT,iEAAAja,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAG0jB,kBAAV,EAA8BhhB,MAAM,EAACiL,KAAK8T,KAAK9T,GAAX,EAAgBmV,WAAWrB,KAAKqB,SAAhC,EAA2Ca,YAAYlC,KAAKW,YAA5D,EAApC,EAAd,CADS,EAET,iEAAAviB,CAAG4C,SAAH,CAAakI,OAAOC,MAAP,CAAc,EAAC3D,OAAO,QAAR,EAAkBvD,QAAQmW,WAA1B,EAAuCwJ,iBAAiBV,KAAxD,EAAd,EAA8Ea,QAA9E,CAAb,CAFS,CADP;AAKJ3J,mBALI;AAMJI,wBAAgB,CAAC,2BAAD,EAA8B,kCAA9B,CANZ;AAOJI,kCAA0B,oBAPtB;AAQJD,iCAAyB,6BARrB;AASJD,cAAM;AATF;AAFA,KAHqD;AAiB7DyH,eAAW;AAjBkD,GAApD,CA7DkB;AAgF7BgC,YAAU,CAACnC,IAAD,EAAOkB,KAAP,EAAc9I,WAAd,EAA2B0J,SAA3B,EAAsCC,QAAtC,EAAgD1B,QAAhD,MAA8D;AACtEvc,QAAIsc,kBAAkBC,QAAlB,CADkE;AAEtE3H,UAAM,QAFgE;AAGtE/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc;AACpBjC,YAAM,8DAAAC,CAAG6jB,kBADW;AAEpBnhB,YAAM,EAACiL,KAAK8T,KAAK9T,GAAX;AAFc,KAAd;AAH8D,GAA9D,CAhFmB;AAwF7BmW,YAAUrC,SAAS;AACjBlc,QAAI,uBADa;AAEjB4U,UAAM,WAFW;AAGjB/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc;AACpBjC,YAAM,8DAAAC,CAAG+jB,kBADW;AAEpBrhB,YAAM,EAACiL,KAAK8T,KAAK9T,GAAX;AAFc,KAAd;AAHS,GAAT,CAxFmB;AAgG7BqW,oBAAkBvC,SAAS;AACzBlc,QAAI,gCADqB;AAEzB4U,UAAM,MAFmB;AAGzB/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc;AACpBjC,YAAM,8DAAAC,CAAGikB,kBADW;AAEpBvhB,YAAM,EAACiL,KAAK8T,KAAK9T,GAAX;AAFc,KAAd;AAHiB,GAAT,CAhGW;AAwG7BuW,oBAAkBzC,SAAS;AACzBlc,QAAI,iCADqB;AAEzB4U,UAAM,UAFmB;AAGzB/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc;AACpBjC,YAAM,8DAAAC,CAAGmkB,SADW;AAEpBzhB,YAAM,EAACiL,KAAK8T,KAAKE,QAAX;AAFc,KAAd,CAHiB;AAOzByC,cAAU,CAAC3C,KAAKE;AAPS,GAAT,CAxGW;AAiH7B0C,kBAAgB5C,SAAS;AACvBlc,QAAI,6BADmB;AAEvB4U,UAAM,QAFiB;AAGvB/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc;AACpBjC,YAAM,8DAAAC,CAAGskB,oBADW;AAEpB5hB,YAAM,EAACiL,KAAK8T,KAAK9T,GAAX;AAFc,KAAd;AAHe,GAAT,CAjHa;AAyH7B4W,cAAY,CAAC,EAAC5W,GAAD,EAAM6W,aAAN,EAAqBpL,KAArB,EAAD,EAA8BuJ,KAA9B,MAAyC;AACnDpd,QAAI,iBAD+C;AAEnD4U,UAAM,KAF6C;AAGnD/Y,YAAQ,iEAAAvB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAGykB,aADW;AAEpB/hB,YAAM;AACJ+e;AACE9T;AADF,WAEM6W,iBAAiB,EAACA,aAAD,EAAgBpL,KAAhB,EAFvB,CADI;AAKJuJ;AALI;AAFc,KAAd,CAH2C;AAanDf,eAAW;AAbwC,GAAzC,CAzHiB;AAwI7B8C,gBAAcjD,SAAS;AACrBlc,QAAI,mBADiB;AAErB4U,UAAM,OAFe;AAGrB/Y,YAAQ,iEAAAvB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAG2kB,eADW;AAEpBjiB,YAAM,EAAC+e,MAAM,EAAC9T,KAAK8T,KAAK9T,GAAX,EAAP;AAFc,KAAd,CAHa;AAOrBiU,eAAW;AAPU,GAAT,CAxIe;AAiJ7BgD,gBAAc,CAACnD,IAAD,EAAOkB,KAAP,EAAc9I,WAAd,MAA+B;AAC3CtU,QAAI,4BADuC;AAE3C4U,UAAM,aAFqC;AAG3C/Y,YAAQ,iEAAAvB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAG6kB,cADW;AAEpBniB,YAAM,EAAC+e,MAAM,EAAC9T,KAAK8T,KAAK9T,GAAX,EAAgB4O,OAAOkF,KAAKlF,KAA5B,EAAP;AAFc,KAAd,CAHmC;AAO3CwG,gBAAY,iEAAAljB,CAAGsD,eAAH,CAAmB;AAC7BO,cAAQmW,WADqB;AAE7BiL,cAAQ,CAFqB;AAG7BxG,aAAO,CAAC,EAAC/Y,IAAIkc,KAAKjD,IAAV,EAAgByE,KAAKN,KAArB,EAAD;AAHsB,KAAnB,CAP+B;AAY3Cf,eAAW;AAZgC,GAA/B,CAjJe;AA+J7BmD,oBAAkBtD,SAAS;AACzBlc,QAAI,2BADqB;AAEzB4U,UAAM,QAFmB;AAGzB/Y,YAAQ,iEAAAvB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAGglB,kBADW;AAEpBtiB,YAAM,EAACogB,WAAWrB,KAAKqB,SAAjB;AAFc,KAAd,CAHiB;AAOzBlB,eAAW;AAPc,GAAT,CA/JW;AAwK7BqD,qBAAmBxD,SAAS;AAC1Blc,QAAI,4BADsB;AAE1B4U,UAAM,OAFoB;AAG1B/Y,YAAQ,iEAAAvB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAGklB,mBADW;AAEpBxiB,YAAM,EAACogB,WAAWrB,KAAKqB,SAAjB;AAFc,KAAd,CAHkB;AAO1BlB,eAAW;AAPe,GAAT,CAxKU;AAiL7BuD,eAAa,CAAC1D,IAAD,EAAOkB,KAAP,MAAkB;AAC7Bpd,QAAI,2BADyB;AAE7B4U,UAAM,MAFuB;AAG7B/Y,YAAQ;AACNrB,YAAM,8DAAAC,CAAGolB,cADH;AAEN1iB,YAAM,EAACigB,KAAD;AAFA;AAHqB,GAAlB,CAjLgB;AAyL7B0C,iBAAe5D,QAASA,KAAKW,YAAL,GAAoBL,gBAAgBG,cAAhB,CAA+BT,IAA/B,CAApB,GAA2DM,gBAAgBM,WAAhB,CAA4BZ,IAA5B,CAzLtD;AA0L7B6D,mBAAiB,CAAC7D,IAAD,EAAOkB,KAAP,KAAkBlB,KAAK8D,QAAL,GAAgBxD,gBAAgB2C,YAAhB,CAA6BjD,IAA7B,CAAhB,GAAqDM,gBAAgBwC,UAAhB,CAA2B9C,IAA3B,EAAiCkB,KAAjC,CA1L3D;AA2L7B6C,sBAAoB,CAAC/D,IAAD,EAAOkB,KAAP,KAAkBlB,KAAKqB,SAAL,GAAiBf,gBAAgBgD,gBAAhB,CAAiCtD,IAAjC,CAAjB,GAA0DM,gBAAgB6C,YAAhB,CAA6BnD,IAA7B,EAAmCkB,KAAnC,CA3LnE;AA4L7B8C,0BAAwBhE,QAASA,KAAKqB,SAAL,GAAiBf,gBAAgBkD,iBAAhB,CAAkCxD,IAAlC,CAAjB,GAA2DM,gBAAgBsD,aAAhB,CAA8B5D,IAA9B,CA5L/D;AA6L7BiE,uBAAqB,CAACjE,IAAD,EAAOkB,KAAP,EAAc9I,WAAd,EAA2B0J,SAA3B,KAA0CA,YAAY/B,qBAAqBC,IAArB,CAAZ,GAAyCM,gBAAgBE,SAAhB;AA7L3E,CAAxB,C;;;;;;;;;;;;;;;;;;;AC9BP;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM0D,4BAA4B,CAAC,iBAAD,EAAoB,aAApB,EAAmC,WAAnC,EAAgD,iBAAhD,EAAmE,qBAAnE,EAA0F,WAA1F,EAAuG,UAAvG,CAAlC;;AAEO,MAAMC,SAAN,SAAwB,4CAAA1X,CAAMC,aAA9B,CAA4C;AACjD0X,eAAa;AACX,UAAM,EAACzX,KAAD,KAAU,IAAhB;AACA,UAAM,EAACqT,IAAD,EAAOkB,KAAP,EAAcjf,MAAd,EAAsBoiB,wBAAtB,EAAgDtC,QAAhD,EAA0D1B,QAA1D,KAAsE1T,KAA5E;;AAEA;AACA,UAAM2X,cAAe,CAACtE,KAAKuE,SAAN,IAAmBvE,KAAK+C,aAAzB,GAA0CpW,MAAM/M,OAAhD,GAA0DskB,yBAA9E;;AAEA,UAAMtkB,UAAU0kB,YAAYzN,GAAZ,CAAgB3W,KAAK,iFAAAogB,CAAgBpgB,CAAhB,EAAmB8f,IAAnB,EAAyBkB,KAAzB,EAAgCjf,MAAhC,EAAwCoiB,wBAAxC,EAAkEtC,QAAlE,EAA4E1B,QAA5E,CAArB,EAA4GxJ,GAA5G,CAAgH2N,UAAU;AACxI,YAAM,EAAC7kB,MAAD,EAAS2hB,UAAT,EAAqBxd,EAArB,EAAyB4d,SAAzB,EAAoCpjB,IAApC,EAA0C6hB,SAA1C,KAAuDqE,MAA7D;AACA,UAAI,CAAClmB,IAAD,IAASwF,EAAb,EAAiB;AACf0gB,eAAO7M,KAAP,GAAehL,MAAM8F,IAAN,CAAWC,aAAX,CAAyB,EAAC5O,IAAI4d,aAAa5d,EAAlB,EAAzB,CAAf;AACA0gB,eAAOhS,OAAP,GAAiB,MAAM;AACrB7F,gBAAMxO,QAAN,CAAewB,MAAf;AACA,cAAIwgB,SAAJ,EAAe;AACb,kBAAMsE,gBAAgBvb,OAAOC,MAAP,CAAc;AAClC3D,qBAAO2a,SAD2B;AAElCle,oBAFkC;AAGlC2f,+BAAiBV;AAHiB,aAAd,EAInBa,QAJmB,CAAtB;AAKApV,kBAAMxO,QAAN,CAAe,iEAAAC,CAAG4C,SAAH,CAAayjB,aAAb,CAAf;AACD;AACD,cAAInD,cAAc3U,MAAMuQ,yBAAxB,EAAmD;AACjDvQ,kBAAMxO,QAAN,CAAemjB,UAAf;AACD;AACF,SAbD;AAcD;AACD,aAAOkD,MAAP;AACD,KApBe,CAAhB;;AAsBA;AACA;AACA;AACA5kB,YAAQ,CAAR,EAAW8kB,KAAX,GAAmB,IAAnB;AACA9kB,YAAQA,QAAQ0R,MAAR,GAAiB,CAAzB,EAA4BqT,IAA5B,GAAmC,IAAnC;AACA,WAAO/kB,OAAP;AACD;;AAED2O,WAAS;AACP,WAAQ,2DAAC,0FAAD;AACN,gBAAU,KAAK5B,KAAL,CAAWiY,QADf;AAEN,eAAS,KAAKR,UAAL,EAFH,GAAR;AAGD;AA1CgD;;AA6CnD,MAAMta,WAAWD,UAAU,EAACwa,0BAA0Bxa,MAAME,KAAN,CAAYC,MAAZ,CAAmBqa,wBAA9C,EAAwEhE,UAAUxW,MAAME,KAAN,CAAYC,MAAZ,CAAmBqW,QAArG,EAAV,CAAjB;AACO,MAAMwE,WAAW,2DAAA7f,CAAQ8E,QAAR,EAAkB,6DAAAyI,CAAW4R,SAAX,CAAlB,CAAjB,C;;;;;;;;;;;;ACvDP;;AAEO,MAAMW,WAAN,SAA0B,4CAAArY,CAAMC,aAAhC,CAA8C;AACnD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKoY,WAAL,GAAmB,KAAKA,WAAL,CAAiB/d,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKwL,OAAL,GAAe,KAAKA,OAAL,CAAaxL,IAAb,CAAkB,IAAlB,CAAf;AACD;;AAED+d,gBAAc;AACZ,SAAKpY,KAAL,CAAWiY,QAAX,CAAoB,KAApB;AACD;;AAED1S,sBAAoB;AAClBkB,eAAW,MAAM;AACfrV,aAAOkU,gBAAP,CAAwB,OAAxB,EAAiC,KAAK8S,WAAtC;AACD,KAFD,EAEG,CAFH;AAGD;;AAEDhX,yBAAuB;AACrBhQ,WAAOiU,mBAAP,CAA2B,OAA3B,EAAoC,KAAK+S,WAAzC;AACD;;AAEDvS,UAAQhN,KAAR,EAAe;AACb;AACA;AACA;AACAA,UAAMwf,eAAN;AACD;;AAEDzW,WAAS;AACP,WAAQ;AAAA;AAAA,QAAM,WAAU,cAAhB,EAA+B,SAAS,KAAKiE,OAA7C;AACN;AAAA;AAAA,UAAI,MAAK,MAAT,EAAgB,WAAU,mBAA1B;AACG,aAAK7F,KAAL,CAAW/M,OAAX,CAAmBiX,GAAnB,CAAuB,CAAC2N,MAAD,EAASlN,CAAT,KAAgBkN,OAAOlmB,IAAP,KAAgB,WAAhB,GACrC,mEAAI,KAAKgZ,CAAT,EAAY,WAAU,WAAtB,GADqC,GAErCkN,OAAOlmB,IAAP,KAAgB,OAAhB,IAA2B,2DAAC,eAAD,IAAiB,KAAKgZ,CAAtB,EAAyB,QAAQkN,MAAjC,EAAyC,aAAa,KAAKO,WAA3D,GAF7B;AADH;AADM,KAAR;AAQD;AArCkD;;AAwC9C,MAAME,eAAN,SAA8B,4CAAAxY,CAAMC,aAApC,CAAkD;AACvD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK6F,OAAL,GAAe,KAAKA,OAAL,CAAaxL,IAAb,CAAkB,IAAlB,CAAf;AACA,SAAKke,SAAL,GAAiB,KAAKA,SAAL,CAAele,IAAf,CAAoB,IAApB,CAAjB;AACD;;AAEDwL,YAAU;AACR,SAAK7F,KAAL,CAAWoY,WAAX;AACA,SAAKpY,KAAL,CAAW6X,MAAX,CAAkBhS,OAAlB;AACD;;AAED0S,YAAU1f,KAAV,EAAiB;AACf,UAAM,EAACgf,MAAD,KAAW,KAAK7X,KAAtB;AACA,YAAQnH,MAAMpC,GAAd;AACE,WAAK,KAAL;AACE;AACA;AACA;AACA,YAAKoC,MAAM2f,QAAN,IAAkBX,OAAOE,KAA1B,IAAqC,CAAClf,MAAM2f,QAAP,IAAmBX,OAAOG,IAAnE,EAA0E;AACxE,eAAKhY,KAAL,CAAWoY,WAAX;AACD;AACD;AACF,WAAK,OAAL;AACE,aAAKpY,KAAL,CAAWoY,WAAX;AACAP,eAAOhS,OAAP;AACA;AAZJ;AAcD;;AAEDjE,WAAS;AACP,UAAM,EAACiW,MAAD,KAAW,KAAK7X,KAAtB;AACA,WACE;AAAA;AAAA,QAAI,MAAK,UAAT,EAAoB,WAAU,mBAA9B;AACE;AAAA;AAAA,UAAG,SAAS,KAAK6F,OAAjB,EAA0B,WAAW,KAAK0S,SAA1C,EAAqD,UAAS,GAA9D,EAAkE,WAAWV,OAAO7B,QAAP,GAAkB,UAAlB,GAA+B,EAA5G;AACG6B,eAAO9L,IAAP,IAAe,qEAAM,WAAY,yBAAwB8L,OAAO9L,IAAK,EAAtD,GADlB;AAEG8L,eAAO7M;AAFV;AADF,KADF;AAOD;AAvCsD,C;;;;;;;;;8CC1CzD;AAAA;;;;;;;;;;;;AAYO,MAAMyN,kBAAkB;AAC7BC,SAAOC,OAAP,EAAgBC,KAAhB,EAAuB;AACrB,WAAO,CAAC,EAAEA,SAASA,MAAMC,IAAf,KAAyB,CAACF,OAAD,IAAYC,MAAMtkB,IAAnB,IAA6BqkB,WAAWC,MAAMrZ,GAAtE,CAAF,CAAR;AACD,GAH4B;;AAK7B;AACAuZ,yBAAuBC,WAAvB,EAAoC;AAClC,QAAI,CAACA,WAAL,EAAkB;AAChB,aAAO,IAAP;AACD;AACD,QAAI,KAAKL,MAAL,CAAY,KAAZ,EAAmBK,WAAnB,CAAJ,EAAqC;AACnC,aAAO,EAACxZ,KAAKnO,OAAOkO,GAAP,CAAW0Z,eAAX,CAA2BD,YAAYzkB,IAAvC,CAAN,EAAoDukB,MAAME,YAAYF,IAAtE,EAAP;AACD;AACD,WAAO,EAACtZ,KAAKwZ,WAAN,EAAP;AACD,GAd4B;;AAgB7B;AACA;AACAE,2BAAyBC,UAAzB,EAAqC;AACnC,QAAI,KAAKR,MAAL,CAAY,IAAZ,EAAkBQ,UAAlB,CAAJ,EAAmC;AACjC9nB,aAAOkO,GAAP,CAAW6Z,eAAX,CAA2BD,WAAW3Z,GAAtC;AACD;AACF,GAtB4B;;AAwB7B;AACA6Z,qBAAmBF,UAAnB,EAA+BH,WAA/B,EAA4C;AAC1C;AACA,QAAIA,eAAeG,UAAnB,EAA+B;AAC7B,aAAO,KAAKR,MAAL,CAAY,KAAZ,EAAmBK,WAAnB,IACAG,WAAWL,IAAX,KAAoBE,YAAYF,IADhC,GAEAK,WAAW3Z,GAAX,KAAmBwZ,WAF1B;AAGD;;AAED;AACA;AACA,WAAO,CAACA,WAAD,IAAgB,CAACG,UAAxB;AACD;AApC4B,CAAxB,C;;;;;;;;;;;;;;;;;;;ACZP;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMnU,UAAU,SAAhB;AACA,MAAMC,0BAA0B,kBAAhC;;AAEA,SAASoK,mBAAT,CAA6BxP,OAA7B,EAAsC;AACpC,SAAO,OAAOA,OAAP,KAAmB,QAAnB,GAA8B;AAAA;AAAA;AAAOA;AAAP,GAA9B,GAAuD,2DAAC,2DAAD,EAAsBA,OAAtB,CAA9D;AACD;;AAEM,MAAMyZ,mBAAN,SAAkC,4CAAAvZ,CAAMC,aAAxC,CAAsD;AAC3D1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKsZ,WAAL,GAAmB,KAAKA,WAAL,CAAiBjf,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKkf,aAAL,GAAqB,KAAKA,aAAL,CAAmBlf,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAKmf,eAAL,GAAuB,KAAKA,eAAL,CAAqBnf,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKof,wBAAL,GAAgC,KAAKA,wBAAL,CAA8Bpf,IAA9B,CAAmC,IAAnC,CAAhC;AACA,SAAKqf,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBrf,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKsf,sBAAL,GAA8B,KAAKA,sBAAL,CAA4Btf,IAA5B,CAAiC,IAAjC,CAA9B;AACA,SAAKuf,sBAAL,GAA8B,KAAKA,sBAAL,CAA4Bvf,IAA5B,CAAiC,IAAjC,CAA9B;AACA,SAAKwf,YAAL,GAAoB,KAAKA,YAAL,CAAkBxf,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAK6C,KAAL,GAAa,EAAC4c,iBAAiB,IAAlB,EAAwBC,aAAa,KAArC,EAA4CC,iBAAiB,KAA7D,EAAoEC,iBAAiB,KAArF,EAAb;AACD;;AAED/Y,uBAAqB;AACnB,SAAKlB,KAAL,CAAWhO,QAAX,CAAoBsT,gBAApB,CAAqCN,uBAArC,EAA8D,KAAKyU,wBAAnE;AACD;;AAEDxS,sBAAoBvH,SAApB,EAA+B;AAC7B;AACA,QAAI,CAAC,KAAKM,KAAL,CAAWwQ,SAAZ,IAAyB9Q,UAAU8Q,SAAvC,EAAkD;AAChD;AACA;AACA;AACA;AACA,WAAK0J,WAAL,CAAiBC,YAAjB,CALgD,CAKjB;AAChC;AACF;;AAED/Y,yBAAuB;AACrB,SAAKpB,KAAL,CAAWhO,QAAX,CAAoBqT,mBAApB,CAAwCL,uBAAxC,EAAiE,KAAKyU,wBAAtE;AACD;;AAEDA,6BAA2B;AACzB;AACA,UAAM3N,UAAU,KAAK9L,KAAL,CAAWhO,QAAX,CAAoBmT,eAApB,KAAwCJ,OAAxD;AACA,QAAI,KAAK7H,KAAL,CAAW4c,eAAX,KAA+BhO,OAAnC,EAA4C;AAC1C,WAAK7K,QAAL,CAAc,EAAC6Y,iBAAiBhO,OAAlB,EAAd;AACD;AACF;;AAEDwN,cAAYc,IAAZ,EAAkB;AAChB,SAAKF,WAAL,GAAmBE,IAAnB;AACD;;AAEDb,kBAAgB;AACd;AACA;AACA;AACA;AACA,QAAI,CAAC,KAAKW,WAAN,IAAqB,KAAKla,KAAL,CAAWwQ,SAAX,KAAyB6J,SAAlD,EAA6D;AAC3D;AACD;;AAED;AACA,SAAKpZ,QAAL,CAAc;AACZ8Y,mBAAa,IADD;AAEZO,iBAAY,GAAE,KAAKC,qBAAL,EAA6B;AAF/B,KAAd;AAIA,UAAM,EAACvnB,MAAD,EAASwgB,SAAT,KAAsB,uFAAAgH,CAAmBC,cAAnB,CAAkC,KAAKza,KAAvC,CAA5B;AACA,SAAKA,KAAL,CAAWxO,QAAX,CAAoBwB,MAApB;AACA,SAAKgN,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAa;AAC/BwE,aAAO2a,SADwB;AAE/Ble,cAAQ,KAAK0K,KAAL,CAAW1K;AAFY,KAAb,CAApB;AAID;;AAEDilB,0BAAwB;AACtB,UAAMG,MAAM,KAAKR,WAAjB;AACA,QAAIQ,IAAIte,KAAJ,CAAUC,OAAV,KAAsB,MAA1B,EAAkC;AAChC;AACA;AACA;AACAqe,UAAIte,KAAJ,CAAUC,OAAV,GAAoB,OAApB;AACD;AACD,WAAOqe,IAAIP,YAAX;AACD;;AAEDX,kBAAgB3gB,KAAhB,EAAuB;AACrB;AACA,QAAIA,MAAM9E,MAAN,KAAiB8E,MAAM8hB,aAA3B,EAA0C;AACxC,WAAK1Z,QAAL,CAAc,EAAC8Y,aAAa,KAAd,EAAd;AACD;AACF;;AAEDa,eAAa;AACX,UAAM,EAAC7O,IAAD,KAAS,KAAK/L,KAApB;AACA,QAAI+L,QAAQA,KAAKwG,UAAL,CAAgB,kBAAhB,CAAZ,EAAiD;AAC/C,aAAO,qEAAM,WAAU,wBAAhB,EAAyC,OAAO,EAACsI,iBAAkB,QAAO9O,IAAK,IAA/B,EAAhD,GAAP;AACD;AACD,WAAO,qEAAM,WAAY,+BAA8BA,QAAQ,cAAe,EAAvE,GAAP;AACD;;AAED2N,oBAAkB7gB,KAAlB,EAAyB;AACvBA,UAAMiiB,cAAN;AACA,SAAK7Z,QAAL,CAAc,EAACgZ,iBAAiB,IAAlB,EAAd;AACD;;AAEDN,2BAAyB;AACvB,SAAK1Y,QAAL,CAAc,EAAC+Y,iBAAiB,IAAlB,EAAd;AACD;;AAEDJ,2BAAyB;AACvB,SAAK3Y,QAAL,CAAc,EAAC+Y,iBAAiB,KAAlB,EAAd;AACD;;AAEDH,eAAaI,eAAb,EAA8B;AAC5B,SAAKhZ,QAAL,CAAc,EAACgZ,eAAD,EAAd;AACD;;AAEDrY,WAAS;AACP,UAAMmZ,gBAAgB,KAAK/a,KAAL,CAAWwQ,SAAX,KAAyB6J,SAA/C;AACA,UAAM,EAACP,eAAD,EAAkBC,WAAlB,EAA+BO,SAA/B,EAA0CN,eAA1C,EAA2DC,eAA3D,KAA8E,KAAK/c,KAAzF;AACA,UAAM,EAAC/F,EAAD,EAAKsU,WAAL,EAAkB+E,SAAlB,EAA6BW,SAA7B,EAAwChD,KAAxC,EAA+C6M,gBAA/C,EAAiEC,YAAjE,EAA+E7J,gBAA/E,EAAiG5f,QAAjG,EAA2G6f,OAA3G,EAAoHC,MAApH,EAA4Ha,cAA5H,KAA8I,KAAKnS,KAAzJ;AACA,UAAMkb,SAASlB,mBAAmBC,eAAlC;AACA,QAAIkB,SAAJ;AACA,QAAIpB,eAAe,CAACvJ,SAApB,EAA+B;AAC7B2K,kBAAY,EAACb,SAAD,EAAZ;AACD,KAFD,MAEO,IAAI,CAACP,WAAD,IAAgBvJ,SAApB,EAA+B;AACpC2K,kBAAY,EAAC9e,SAAS,MAAV,EAAZ;AACD;AACD,WACE;AAAA;AAAA;AACE,mBAAY,uBAAsB,KAAK2D,KAAL,CAAWsH,SAAU,GAAEwS,kBAAkB,oBAAlB,GAAyC,EAAG,GAAEtJ,YAAY,YAAZ,GAA2B,EAAG,GAAE0K,SAAS,SAAT,GAAqB,EAAG;AAC/J;AAFF,UAGE,mBAAiB/jB,EAHnB;AAIE;AAAA;AAAA,UAAK,WAAU,iBAAf;AACE;AAAA;AAAA,YAAI,WAAU,eAAd;AACE;AAAA;AAAA,cAAM,WAAU,wBAAhB;AACE;AAAA;AAAA,gBAAM,WAAU,cAAhB,EAA+B,SAAS,KAAKoiB,aAA7C;AACG,mBAAKqB,UAAL,EADH;AAEGxL,kCAAoBjB,KAApB;AAFH,aADF;AAKE;AAAA;AAAA,gBAAM,WAAU,cAAhB,EAA+B,SAAS,KAAKoL,aAA7C;AACGwB,+BAAiB,qEAAM,WAAY,0BAAyBvK,YAAY,8BAAZ,GAA6C,2BAA4B,EAApH;AADpB,aALF;AAQE;AAAA;AAAA;AACGW,2BACC;AAAA;AAAA,kBAAM,WAAU,iBAAhB;AACE;AAAA;AAAA,oBAAG,MAAMA,UAAUhB,IAAV,CAAeje,IAAxB;AACE,6EAAC,2DAAD,IAAkB,IAAIif,UAAUhB,IAAV,CAAehZ,EAArC;AADF;AADF;AAFJ;AARF;AADF,SADF;AAqBE;AAAA;AAAA;AACE;AAAA;AAAA;AACE,yBAAU,0BADZ;AAEE,qBAAO,KAAK6I,KAAL,CAAW8F,IAAX,CAAgBC,aAAhB,CAA8B,EAAC5O,IAAI,oBAAL,EAA9B,CAFT;AAGE,uBAAS,KAAKuiB,iBAHhB;AAIE,4BAAc,KAAKC,sBAJrB;AAKE,4BAAc,KAAKC,sBALrB;AAME;AAAA;AAAA,gBAAM,WAAU,SAAhB;AACE,yEAAC,2DAAD,IAAkB,IAAG,gCAArB;AADF;AANF,WADF;AAWGK,6BACC,2DAAC,0FAAD;AACE,gBAAI9iB,EADN;AAEE,0BAAc6jB,gBAFhB;AAGE,yBAAavP,WAHf;AAIE,0BAAcwP,YAJhB;AAKE,8BAAkB7J,gBALpB;AAME,uBAAWZ,SANb;AAOE,sBAAU,KAAKqJ,YAPjB;AAQE,qBAASxI,OARX;AASE,oBAAQC,MATV;AAUE,sBAAU9f,QAVZ;AAWE,4BAAgB2gB,cAXlB;AAZJ;AArBF,OAJF;AAoDE;AAAC,wGAAD;AAAA,UAAe,WAAU,uBAAzB;AACE;AAAA;AAAA;AACE,uBAAY,eAAc4H,cAAc,YAAd,GAA6B,EAAG,EAD5D;AAEE,6BAAiB,KAAKP,eAFxB;AAGE,iBAAK,KAAKF,WAHZ;AAIE,mBAAO6B,SAJT;AAKG,eAAKnb,KAAL,CAAW0F;AALd;AADF;AApDF,KADF;AAgED;AAzL0D;;AA4L7D2T,oBAAoBxX,YAApB,GAAmC;AACjC7P,YAAUZ,OAAOY,QAAP,IAAmB;AAC3BsT,sBAAkB,MAAM,CAAE,CADC;AAE3BD,yBAAqB,MAAM,CAAE,CAFF;AAG3BF,qBAAiB;AAHU,GADI;AAMjC/H,SAAO,EAACC,QAAQ,EAAT;AAN0B,CAAnC;;AASO,MAAM+d,qBAAqB,6DAAAxV,CAAWyT,mBAAX,CAA3B,C;;;;;;;;;;;;;;;;;;ACnNP;AACA;AACA;AACA;AACA;;AAEA,MAAMgC,+BAA+B,CAAC,QAAD,EAAW,UAAX,EAAuB,WAAvB,EAAoC,eAApC,EAAqD,gBAArD,EAAuE,WAAvE,EAAoF,eAApF,CAArC;AACA,MAAMC,8BAA8B,CAAC,QAAD,EAAW,UAAX,EAAuB,WAAvB,EAAoC,gBAApC,EAAsD,WAAtD,EAAmE,oBAAnE,CAApC;;AAEO,MAAMC,YAAN,SAA2B,4CAAAzb,CAAMC,aAAjC,CAA+C;AACpD0X,eAAa;AACX,UAAM,EAACzX,KAAD,KAAU,IAAhB;;AAEA,UAAM2X,cAAc3X,MAAMmS,cAAN,GAAuB,CAAC,GAAGmJ,2BAAJ,CAAvB,GAA0D,CAAC,GAAGD,4BAAJ,CAA9E;AACA;AACA,QAAIrb,MAAMwb,YAAV,EAAwB;AACtB7D,kBAAY8D,MAAZ,CAAmB,CAAnB,EAAsB,CAAtB,EAAyB,GAAGzb,MAAMwb,YAAlC,EAAgD,WAAhD;AACD;AACD;AACA,QAAIxb,MAAMoR,gBAAV,EAA4B;AAC1BuG,kBAAY8D,MAAZ,CAAmB,CAAC,CAApB,EAAuB,CAAvB,EAA0B,eAA1B;AACD;;AAED,UAAMxoB,UAAU0kB,YAAYzN,GAAZ,CAAgB3W,KAAK,uFAAAinB,CAAmBjnB,CAAnB,EAAsByM,KAAtB,CAArB,EAAmDkK,GAAnD,CAAuD2N,UAAU;AAC/E,YAAM,EAAC7kB,MAAD,EAASmE,EAAT,EAAaxF,IAAb,EAAmB6hB,SAAnB,KAAgCqE,MAAtC;AACA,UAAI,CAAClmB,IAAD,IAASwF,EAAb,EAAiB;AACf0gB,eAAO7M,KAAP,GAAehL,MAAM8F,IAAN,CAAWC,aAAX,CAAyB,EAAC5O,EAAD,EAAzB,CAAf;AACA0gB,eAAOhS,OAAP,GAAiB,MAAM;AACrB7F,gBAAMxO,QAAN,CAAewB,MAAf;AACA,cAAIwgB,SAAJ,EAAe;AACbxT,kBAAMxO,QAAN,CAAe,iEAAAC,CAAG4C,SAAH,CAAa;AAC1BwE,qBAAO2a,SADmB;AAE1Ble,sBAAQ0K,MAAM1K;AAFY,aAAb,CAAf;AAID;AACF,SARD;AASD;AACD,aAAOuiB,MAAP;AACD,KAfe,CAAhB;;AAiBA;AACA;AACA;AACA5kB,YAAQ,CAAR,EAAW8kB,KAAX,GAAmB,IAAnB;AACA9kB,YAAQA,QAAQ0R,MAAR,GAAiB,CAAzB,EAA4BqT,IAA5B,GAAmC,IAAnC;AACA,WAAO/kB,OAAP;AACD;;AAED2O,WAAS;AACP,WAAQ,2DAAC,0FAAD;AACN,gBAAU,KAAK5B,KAAL,CAAWiY,QADf;AAEN,eAAS,KAAKR,UAAL,EAFH,GAAR;AAGD;AA3CmD;;AA8C/C,MAAMiE,cAAc,6DAAA9V,CAAW2V,YAAX,CAApB,C;;;;;;;;;;ACvDP;;AAEA;;;;AAIO,MAAMf,qBAAqB;AAChC5G,aAAW,OAAO,EAACjiB,MAAM,WAAP,EAAP,CADqB;AAEhCgqB,UAAQrT,YAAY;AAClBnR,QAAI,6BADc;AAElB4U,UAAM,cAFY;AAGlB/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc;AACpBjC,YAAM,8DAAAC,CAAGgqB,YADW;AAEpBtnB,YAAM,EAAC6C,IAAImR,QAAQnR,EAAb,EAAiB0kB,WAAW,CAAC,CAA7B;AAFc,KAAd,CAHU;AAOlBrI,eAAW,cAPO;AAQlBwC,cAAU,CAAC,CAAC1N,QAAQ+I;AARF,GAAZ,CAFwB;AAYhCyK,YAAUxT,YAAY;AACpBnR,QAAI,+BADgB;AAEpB4U,UAAM,gBAFc;AAGpB/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc;AACpBjC,YAAM,8DAAAC,CAAGgqB,YADW;AAEpBtnB,YAAM,EAAC6C,IAAImR,QAAQnR,EAAb,EAAiB0kB,WAAW,CAAC,CAA7B;AAFc,KAAd,CAHY;AAOpBrI,eAAW,gBAPS;AAQpBwC,cAAU,CAAC,CAAC1N,QAAQgJ;AARA,GAAZ,CAZsB;AAsBhCyK,iBAAezT,YAAY;AACzBnR,QAAI,oCADqB;AAEzB4U,UAAM,SAFmB;AAGzB/Y,YAAQ,iEAAAvB,CAAGwD,OAAH,CAAWqT,QAAQ2S,YAAnB,EAAiC,KAAjC,CAHiB;AAIzBzH,eAAW;AAJc,GAAZ,CAtBiB;AA4BhCwI,mBAAiB1T,YAAY;AAC3BnR,QAAI,sCADuB;AAE3B4U,UAAM,UAFqB;AAG3B/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc,EAACjC,MAAM,8DAAAC,CAAGqqB,oBAAV,EAAgC3nB,MAAM,EAAC6C,IAAImR,QAAQnR,EAAb,EAAiBhC,OAAO,EAACqb,WAAW,IAAZ,EAAxB,EAAtC,EAAd,CAHmB;AAI3BgD,eAAW;AAJgB,GAAZ,CA5Be;AAkChC0I,iBAAe5T,YAAY;AACzBnR,QAAI,oCADqB;AAEzB4U,UAAM,UAFmB;AAGzB/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc,EAACjC,MAAM,8DAAAC,CAAGqqB,oBAAV,EAAgC3nB,MAAM,EAAC6C,IAAImR,QAAQnR,EAAb,EAAiBhC,OAAO,EAACqb,WAAW,KAAZ,EAAxB,EAAtC,EAAd,CAHiB;AAIzBgD,eAAW;AAJc,GAAZ,CAlCiB;AAwChC2I,iBAAe7T,YAAY;AACzBnR,QAAI,oCADqB;AAEzB4U,UAAM,UAFmB;AAGzB/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc,EAACjC,MAAM,8DAAAC,CAAGoW,aAAV,EAAd,CAHiB;AAIzBwL,eAAW;AAJc,GAAZ,CAxCiB;AA8ChC4I,sBAAoB9T,YAAY;AAC9BnR,QAAI,mCAD0B;AAE9B4U,UAAM,UAFwB;AAG9B/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc,EAACjC,MAAM,8DAAAC,CAAGyqB,oBAAV,EAAgC/nB,MAAMgU,QAAQnR,EAA9C,EAAd;AAHsB,GAAZ,CA9CY;AAmDhCmlB,cAAYhU,YAAY;AACtBnR,QAAI,iCADkB;AAEtB4U,UAAM,KAFgB;AAGtB/Y,YAAQ,EAACrB,MAAM,8DAAAC,CAAGolB,cAAV,EAA0B1iB,MAAM,EAACigB,OAAO,CAAC,CAAT,EAAhC,EAHc;AAItBf,eAAW;AAJW,GAAZ,CAnDoB;AAyDhC+I,qBAAmBjU,YAAY;AAC7BnR,QAAI,uCADyB;AAE7B4U,UAAM,QAFuB;AAG7B/Y,YAAQ,EAACrB,MAAM,8DAAAC,CAAG4qB,qCAAV,EAHqB;AAI7BhJ,eAAW;AAJkB,GAAZ,CAzDa;AA+DhCiJ,iBAAenU,YAAY;AACzBnR,QAAI,oCADqB;AAEzB4U,UAAM,MAFmB;AAGzB/Y,YAAQ,iEAAAvB,CAAGmC,UAAH,CAAc;AACpBjC,YAAM,8DAAAC,CAAGmkB,SADW;AAEpBzhB,YAAM,EAACiL,KAAK+I,QAAQ8I,gBAAd;AAFc,KAAd,CAHiB;AAOzBoC,eAAW;AAPc,GAAZ,CA/DiB;AAwEhCiH,kBAAgBnS,WAAYA,QAAQkI,SAAR,GAAoBgK,mBAAmB0B,aAAnB,CAAiC5T,OAAjC,CAApB,GAAgEkS,mBAAmBwB,eAAnB,CAAmC1T,OAAnC;AAxE5D,CAA3B,C;;;;;;;;;;;;;ACNP;AACA;AACA;;AAEA;AACA;AACA,MAAMoU,oBAAoB,CAAC,YAAD,EAAe,UAAf,CAA1B;;AAEO,MAAMC,kBAAN,SAAiC,4CAAA7c,CAAM8c,SAAvC,CAAiD;AACtDvmB,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA;AACA,SAAK6c,OAAL,GAAe,KAAK7c,KAAL,CAAW6c,OAAX,IAAsB,kEAArC;;AAEA,SAAKC,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBziB,IAAxB,CAA6B,IAA7B,CAA1B;AACA,SAAK0iB,iBAAL,GAAyB,KAAKA,iBAAL,CAAuB1iB,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAK2iB,kBAAL,GAA0B,KAA1B;AACA,SAAKC,iBAAL,GAAyB,KAAzB;AACA,SAAKC,oBAAL,GAA4B,KAA5B;AACD;;AAED3X,sBAAoB;AAClB,QAAI,CAACmX,kBAAkBtlB,QAAlB,CAA2B,KAAK4I,KAAL,CAAW7I,EAAtC,CAAL,EAAgD;AAC9C;AACD;;AAED,SAAKgmB,sBAAL;AACD;;AAED1X,uBAAqB;AACnB,QAAI,CAACiX,kBAAkBtlB,QAAlB,CAA2B,KAAK4I,KAAL,CAAW7I,EAAtC,CAAL,EAAgD;AAC9C;AACD;;AAED,SAAKgmB,sBAAL;AACD;;AAED;;;;;;;;;;;;;;;;;;;;AAoBAC,mBAAiBC,QAAjB,EAA2B;AACzBC,0BAAsB,MAAM7W,WAAW4W,QAAX,EAAqB,CAArB,CAA5B;AACD;;AAEDE,4BAA0B;AACxB;AACA;AACA,QAAI,CAAC,KAAKvd,KAAL,CAAWnD,WAAhB,EAA6B;AAC3B;AACA,WAAKmgB,kBAAL,GAA0B,IAA1B;AACD,KAHD,MAGO,IAAI,KAAKA,kBAAT,EAA6B;AAClC,WAAKA,kBAAL,GAA0B,KAA1B;AACA;AACA,WAAKF,kBAAL;AACD;AACF;;AAEDK,2BAAyB;AACvB;AACA,QAAI,KAAKF,iBAAL,IAA0B,CAAC,KAAKjd,KAAL,CAAWnD,WAA1C,EAAuD;AACrD;AACD;;AAED;AACA;AACA;AACA;AACA;AACA,SAAKogB,iBAAL,GAAyB,IAAzB;AACA,SAAKG,gBAAL,CAAsB,KAAKL,iBAA3B;AACD;;AAED;;;;AAIAS,iCAA+B;AAC7B;AACA,QAAI,CAAC,KAAKN,oBAAV,EAAgC;AAC9B,WAAKA,oBAAL,GAA4B,IAA5B;AACA;AACA,YAAMzmB,MAAO,GAAE,KAAKuJ,KAAL,CAAW7I,EAAG,kBAA7B;AACA,WAAK0lB,OAAL,CAAaY,IAAb,CAAkBhnB,GAAlB;AACD;AACF;;AAED;;;;;;AAMAqmB,uBAAqB;AACnB;AACA,UAAMY,eAAgB,GAAE,KAAK1d,KAAL,CAAW7I,EAAG,gBAAtC;AACA,SAAK0lB,OAAL,CAAaY,IAAb,CAAkBC,YAAlB;;AAEA,QAAI;AACF,YAAMC,iBAAkB,GAAE,KAAK3d,KAAL,CAAW7I,EAAG,kBAAxC;AACA;AACA,YAAMhC,QAAQyoB,SAAS,KAAKf,OAAL,CAAagB,+BAAb,CAA6CH,YAA7C,IACA,KAAKb,OAAL,CAAagB,+BAAb,CAA6CF,cAA7C,CADT,EACuE,EADvE,CAAd;AAEA,WAAK3d,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGmC,UAAH,CAAc;AAChCjC,cAAM,8DAAAC,CAAG4Q,sBADuB;AAEhC;AACAlO,cAAM,EAAC,CAAE,GAAE,KAAK0L,KAAL,CAAW7I,EAAG,kBAAlB,GAAsChC,KAAvC;AAH0B,OAAd,CAApB;AAKD,KAVD,CAUE,OAAO2O,EAAP,EAAW;AACX;AACA;AACD;AACF;;AAEDiZ,sBAAoB;AAClB;AACA,QAAI,KAAK/c,KAAL,CAAW7I,EAAX,KAAkB,UAAtB,EAAkC;AAChC;AACD;;AAED;AACA,UAAMV,MAAO,GAAE,KAAKuJ,KAAL,CAAW7I,EAAG,mBAA7B;AACA,SAAK0lB,OAAL,CAAaY,IAAb,CAAkBhnB,GAAlB;;AAEA,QAAI;AACF,YAAMnC,OAAO,EAAb;AACAA,WAAKmC,GAAL,IAAY,KAAKomB,OAAL,CAAagB,+BAAb,CAA6CpnB,GAA7C,CAAZ;;AAEA,WAAKuJ,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGmC,UAAH,CAAc;AAChCjC,cAAM,8DAAAC,CAAG4Q,sBADuB;AAEhClO;AAFgC,OAAd,CAApB;AAID,KARD,CAQE,OAAOwP,EAAP,EAAW;AACX;AACA;AACA;AACD;AACF;;AAEDlC,WAAS;AACP,QAAI8a,kBAAkBtlB,QAAlB,CAA2B,KAAK4I,KAAL,CAAW7I,EAAtC,CAAJ,EAA+C;AAC7C,WAAKqmB,4BAAL;AACA,WAAKD,uBAAL;AACD;AACD,WAAO,KAAKvd,KAAL,CAAW0F,QAAlB;AACD;AAzJqD,C;;;;;;;;;ACRxD;AAAA;AACA;;AAEA;;AACA,IAAI,OAAOoY,WAAP,KAAuB,WAA3B,EAAwC;AACtCA,cAAYC,MAAZ,CAAmB,qCAAnB;AACD;;AAED,IAAIC,aAAJ;;AAEA;AACA;AACA,IAAI,OAAOC,QAAP,KAAoB,WAAxB,EAAqC;AACnC;AACAD,kBAAgBC,SAASC,QAAT,CAAkBC,eAAlB,CAAkCC,WAAlD;AACD,CAHD,MAGO,IAAI,OAAOA,WAAP,KAAuB,WAA3B,EAAwC;AAC7C;AACA;AACAJ,kBAAgBI,WAAhB;AACD,CAJM,MAIA;AACL;AACA;AACAJ,kBAAgB;AACdljB,UAAM,CAAE,CADM;AAEd2iB,WAAO,CAAE;AAFK,GAAhB;AAID;;AAED,SAASY,YAAT,CAAsBprB,OAAtB,EAA+B;AAC7B;AACA;AACA,MAAIA,WAAWA,QAAQqrB,cAAvB,EAAuC;AACrC,SAAKC,KAAL,GAAatrB,QAAQqrB,cAArB;AACD,GAFD,MAEO;AACL,SAAKC,KAAL,GAAaP,aAAb;AACD;AACF;;;AAEDK,aAAaG,SAAb,GAAyB;AACvB;;;;;;;;AAQAf,QAAM,SAASA,IAAT,CAAcgB,GAAd,EAAmB;AACvB,SAAKF,KAAL,CAAWd,IAAX,CAAgBgB,GAAhB;AACD,GAXsB;;AAavB;;;;;;;;AAQAC,oBAAkB,SAASA,gBAAT,CAA0BxpB,IAA1B,EAAgCvD,IAAhC,EAAsC;AACtD,WAAO,KAAK4sB,KAAL,CAAWG,gBAAX,CAA4BxpB,IAA5B,EAAkCvD,IAAlC,CAAP;AACD,GAvBsB;;AAyBvB;;;;;;;;;;;;;;;AAeA,MAAIgtB,UAAJ,GAAiB;AACf,WAAO,KAAKJ,KAAL,CAAWI,UAAlB;AACD,GA1CsB;;AA4CvB;;;;;;;AAOAC,UAAQ,SAASA,MAAT,GAAkB;AACxB,WAAO,KAAKD,UAAL,GAAkB,KAAKJ,KAAL,CAAWzjB,GAAX,EAAzB;AACD,GArDsB;;AAuDvB;;;;;;;;;;;;;;;;;;AAkBA+iB,kCAAgC3oB,IAAhC,EAAsC;AACpC,QAAI2pB,UAAU,KAAKH,gBAAL,CAAsBxpB,IAAtB,EAA4B,MAA5B,CAAd;;AAEA,QAAI,CAAC2pB,QAAQla,MAAb,EAAqB;AACnB,YAAM,IAAItR,KAAJ,CAAW,0BAAyB6B,IAAK,EAAzC,CAAN;AACD;;AAED,QAAI4pB,kBAAkBD,QAAQA,QAAQla,MAAR,GAAiB,CAAzB,CAAtB;AACA,WAAO,KAAK4Z,KAAL,CAAWI,UAAX,GAAwBG,gBAAgBC,SAA/C;AACD;AAlFsB,CAAzB;;kBAqFmB,IAAIV,YAAJ,E;;;;;;;;;;;;;AC3HnB;AACA;;AAEO,MAAMW,mBAAN,SAAkC,4CAAAlf,CAAMC,aAAxC,CAAsD;AAC3D6B,WAAS;AACP,UAAM,EAACqP,kBAAD,KAAuB,KAAKjR,KAAlC;AACA,QAAIiR,kBAAJ,EAAwB;AACtB,aACE;AAAA;AAAA,UAAG,WAAU,sBAAb,EAAoC,MAAMA,kBAA1C;AACE,mEAAC,2DAAD,IAAkB,IAAG,8BAArB;AADF,OADF;AAKD;AACD,WAAO,IAAP;AACD;AAX0D,C;;;;;;;;;;;;;;;;ACH7D;AACA;AACA;;AAEO,MAAMgO,kBAAN,SAAiC,4CAAAnf,CAAMC,aAAvC,CAAqD;AAC1D6B,WAAS;AACP,UAAM,EAAC8P,SAAD,KAAc,KAAK1R,KAAL,CAAW8Q,MAA/B;AACA,WACE;AAAA;AAAA,QAAM,WAAU,sBAAhB;AACE;AAAA;AAAA,UAAG,WAAU,mBAAb,EAAiC,MAAMY,UAAUwN,MAAV,GAAmBxN,UAAUwN,MAA7B,GAAsC,wBAA7E;AACExN,kBAAUyN,SAAV,GAAsBzN,UAAUyN,SAAhC,GAA4C,2DAAC,2DAAD,IAAkB,IAAG,mBAArB;AAD9C,OADF;AAKE;AAAA;AAAA,UAAG,MAAMzN,UAAUwN,MAAV,GAAmBxN,UAAUwN,MAA7B,GAAsC,wBAA/C;AACE;AAAA;AAAA,YAAM,WAAU,UAAhB;AACExN,oBAAU0N,OAAV,GAAoB1N,UAAU0N,OAA9B,GAAwC,2DAAC,2DAAD,IAAkB,IAAG,iBAArB;AAD1C;AADF;AALF,KADF;AAaD;AAhByD;;AAmBrD,MAAMC,oBAAoB,2DAAAhnB,CAAQ6E,UAAU,EAAC4T,QAAQ5T,MAAM4T,MAAf,EAAV,CAAR,EAA2CmO,kBAA3C,CAA1B,C;;;;;;;;;;;;;;ACvBP;AACA;;AAEO,MAAMK,KAAN,SAAoB,4CAAAxf,CAAMC,aAA1B,CAAwC;AAC7C6B,WAAS;AACP,UAAM,EAACrC,GAAD,EAAMrK,IAAN,KAAc,KAAK8K,KAAzB;AACA,WAAQ;AAAA;AAAA;AAAI;AAAA;AAAA,UAAG,KAAK9K,IAAR,EAAc,MAAMqK,GAApB;AAA0BrK;AAA1B;AAAJ,KAAR;AACD;AAJ4C;;AAOxC,MAAMqqB,MAAN,SAAqB,4CAAAzf,CAAMC,aAA3B,CAAyC;AAC9C6B,WAAS;AACP,UAAM,EAACmP,MAAD,KAAW,KAAK/Q,KAAtB;AACA,WACE;AAAA;AAAA,QAAM,WAAU,QAAhB;AACE;AAAA;AAAA;AAAM,mEAAC,2DAAD,IAAkB,IAAG,kBAArB;AAAN,OADF;AAEE;AAAA;AAAA;AAAK+Q,kBAAUA,OAAO7G,GAAP,CAAWsV,KAAK,2DAAC,KAAD,IAAO,KAAKA,EAAEtqB,IAAd,EAAoB,KAAKsqB,EAAEjgB,GAA3B,EAAgC,MAAMigB,EAAEtqB,IAAxC,GAAhB;AAAf;AAFF,KADF;AAMD;AAT6C,C;;;;;;;;;;;;;;;;;;;;;;;;;;ACVhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASuqB,eAAT,CAAyBtP,IAAzB,EAA+B;AAC7B,MAAIA,KAAKuP,mBAAT,EAA8B;AAC5B,WAAO,mBAAP;AACD;AACD,MAAIvP,KAAKwP,YAAL,IAAqBxP,KAAKyP,UAAL,KAAoB,UAA7C,EAAyD;AACvD,WAAO,UAAP;AACD;AACD,MAAIzP,KAAK0P,WAAL,IAAoB,wEAAxB,EAA+C;AAC7C,WAAO,WAAP;AACD;AACD,MAAI1P,KAAK2P,UAAL,IAAmB3P,KAAK0P,WAAL,IAAoB,0EAA3C,EAAoE;AAClE,WAAO,sBAAP;AACD;AACD,MAAI1P,KAAK2P,UAAT,EAAqB;AACnB,WAAO,YAAP;AACD;AACD,SAAO,UAAP;AACD;;AAED;;;;;AAKA,SAASC,uBAAT,CAAiCC,QAAjC,EAA2C;AACzC,QAAMC,qBAAqB,CAACC,GAAD,EAAM/P,IAAN,KAAe;AACxC+P,QAAIT,gBAAgBtP,IAAhB,CAAJ;AACA,WAAO+P,GAAP;AACD,GAHD;;AAKA,SAAOF,SAAStS,MAAT,CAAgBuS,kBAAhB,EAAoC;AACzC,yBAAqB,CADoB;AAEzC,4BAAwB,CAFiB;AAGzC,kBAAc,CAH2B;AAIzC,gBAAY,CAJ6B;AAKzC,iBAAa,CAL4B;AAMzC,gBAAY;AAN6B,GAApC,CAAP;AAQD;;AAEM,MAAME,SAAN,SAAwB,4CAAArgB,CAAMC,aAA9B,CAA4C;AACjD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKogB,eAAL,GAAuB,KAAKA,eAAL,CAAqB/lB,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKgmB,0BAAL,GAAkC,KAAKA,0BAAL,CAAgChmB,IAAhC,CAAqC,IAArC,CAAlC;AACD;;AAED;;;AAGAimB,2BAAyB;AACvB,UAAMN,WAAW,KAAKO,mBAAL,EAAjB;AACA,UAAMC,qBAAqBT,wBAAwBC,QAAxB,CAA3B;AACA,UAAMS,iBAAiBT,SAAS7Y,MAAT,CAAgBkM,QAAQ,CAAC,CAACA,KAAK8D,QAA/B,EAAyCxS,MAAhE;AACA,UAAM+b,kBAAkBV,SAAS7Y,MAAT,CAAgBkM,QAAQ,CAAC,CAACA,KAAK+C,aAA/B,EAA8CzR,MAAtE;AACA;AACA,SAAK3E,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc;AAChCC,YAAM,8DAAAC,CAAG4Q,sBADuB;AAEhClO,YAAM;AACJqsB,6BAAqBH,kBADjB;AAEJI,yBAAiBH,cAFb;AAGJI,mCAA2BH;AAHvB;AAF0B,KAAd,CAApB;AAQD;;AAED;;;AAGAH,wBAAsB;AACpB;AACA,QAAIO,cAAc,+EAAlB;AACA;AACA,QAAI,CAAC1vB,OAAOwe,UAAP,CAAmB,qBAAnB,EAAyCC,OAA9C,EAAuD;AACrDiR,qBAAe,CAAf;AACD;AACD,WAAO,KAAK9gB,KAAL,CAAW+gB,QAAX,CAAoB/Q,IAApB,CAAyB7Q,KAAzB,CAA+B,CAA/B,EAAkC,KAAKa,KAAL,CAAWghB,YAAX,GAA0BF,WAA5D,CAAP;AACD;;AAEDrb,uBAAqB;AACnB,SAAK6a,sBAAL;AACD;;AAED/a,sBAAoB;AAClB,SAAK+a,sBAAL;AACD;;AAEDF,oBAAkB;AAChB,SAAKpgB,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAa;AAC/BiB,cAAQ,mEADuB;AAE/BuD,aAAO;AAFwB,KAAb,CAApB;AAIA,SAAKmH,KAAL,CAAWxO,QAAX,CAAoB,EAACG,MAAM,8DAAAC,CAAGqvB,qBAAV,EAApB;AACD;;AAEDZ,+BAA6B;AAC3B,SAAKrgB,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAa;AAC/BiB,cAAQ,mEADuB;AAE/BuD,aAAO;AAFwB,KAAb,CAApB;AAIA,SAAKmH,KAAL,CAAWxO,QAAX,CAAoB,EAACG,MAAM,8DAAAC,CAAGsvB,sCAAV,EAApB;AACD;;AAEDtf,WAAS;AACP,UAAM,EAAC5B,KAAD,KAAU,IAAhB;AACA,UAAM,EAACmhB,QAAD,EAAWC,uBAAX,KAAsCphB,MAAM+gB,QAAlD;AACA,UAAM/F,mBAAmB,CAAC,YAAD,CAAzB;AACA,QAAIhb,MAAM5C,KAAN,CAAYC,MAAZ,CAAmB,sCAAnB,CAAJ,EAAgE;AAC9D2d,uBAAiB3jB,IAAjB,CAAsB,mBAAtB;AACD;;AAED,WAAQ;AAAC,qHAAD;AAAA,QAAoB,IAAG,UAAvB,EAAkC,aAAa2I,MAAM+gB,QAAN,CAAelkB,WAA9D,EAA2E,UAAUmD,MAAMxO,QAA3F;AACN;AAAC,uHAAD;AAAA;AACE,qBAAU,WADZ;AAEE,gBAAK,UAFP;AAGE,cAAG,UAHL;AAIE,iBAAO,EAAC2F,IAAI,kBAAL,EAJT;AAKE,4BAAkB6jB,gBALpB;AAME,wBAAa,gBANf;AAOE,uBAAa,mEAPf;AAQE,qBAAWhb,MAAM+gB,QAAN,CAAe9S,IAAf,GAAsBjO,MAAM+gB,QAAN,CAAe9S,IAAf,CAAoBuC,SAA1C,GAAsD6J,SARnE;AASE,mBAASra,MAAMqR,OATjB;AAUE,kBAAQrR,MAAMsR,MAVhB;AAWE,oBAAUtR,MAAMxO,QAXlB;AAYE,mEAAC,qDAAD,IAAa,UAAUwO,MAAM+gB,QAA7B,EAAuC,cAAc/gB,MAAMghB,YAA3D,EAAyE,UAAUhhB,MAAMxO,QAAzF,EAAmG,MAAMwO,MAAM8F,IAA/G,EAAqH,iBAAiB2Z,eAAtI,GAZF;AAaE;AAAA;AAAA,YAAK,WAAU,uBAAf;AACG0B,sBACC;AAAA;AAAA,cAAK,WAAU,eAAf;AACE,gFAAK,WAAU,eAAf,EAA+B,SAAS,KAAKf,eAA7C,GADF;AAEE;AAAA;AAAA,gBAAK,WAAU,OAAf;AACE,yEAAC,wDAAD;AACE,sBAAMpgB,MAAM+gB,QAAN,CAAe/Q,IAAf,CAAoBmR,SAAS5M,KAA7B,CADR;AAEE,yBAAS,KAAK6L,eAFhB;AAGE,0BAAU,KAAKpgB,KAAL,CAAWxO,QAHvB;AAIE,sBAAM,KAAKwO,KAAL,CAAW8F;AAJnB,iBAKMqb,QALN;AADF;AAFF,WAFJ;AAcGC,qCACC;AAAA;AAAA,cAAK,WAAU,uBAAf;AACE,gFAAK,WAAU,eAAf,EAA+B,SAAS,KAAKf,0BAA7C,GADF;AAEE;AAAA;AAAA,gBAAK,WAAU,OAAf;AACE,yEAAC,wEAAD;AACE,0BAAUrgB,MAAM+gB,QADlB;AAEE,yBAAS,KAAKV,0BAFhB;AAGE,0BAAU,KAAKrgB,KAAL,CAAWxO,QAHvB;AADF;AAFF;AAfJ;AAbF;AADM,KAAR;AA0CD;AAjHgD;;AAoH5C,MAAMuvB,WAAW,2DAAA1oB,CAAQ6E,UAAU;AACxC6jB,YAAU7jB,MAAM6jB,QADwB;AAExC3jB,SAAOF,MAAME,KAF2B;AAGxC4jB,gBAAc9jB,MAAME,KAAN,CAAYC,MAAZ,CAAmBgkB;AAHO,CAAV,CAAR,EAIpB,6DAAAzb,CAAWua,SAAX,CAJoB,CAAjB,C;;;;;;;;;;;;;;ACxKA,MAAMmB,mBAAmB,WAAzB;AACA,MAAMC,iCAAiC,CAAC,iBAAD,EAAoB,aAApB,EAAmC,WAAnC,EAC5C,iBAD4C,EACzB,qBADyB,EACF,WADE,EACW,UADX,EACuB,WADvB,CAAvC;AAEP;AACO,MAAMC,kDAAkD,CAAC,iBAAD,EAAoB,WAApB,EAAiC,UAAjC,CAAxD;AACP;AACO,MAAMC,wBAAwB,EAA9B;AACP;AACO,MAAMC,0BAA0B,EAAhC,C;;;;;;;;;;;;;;;ACRP;AACA;AACA;AACA;;AAEA,MAAMC,wBAAN,SAAuC,4CAAA7hB,CAAMC,aAA7C,CAA2D;AACzD6B,WAAS;AACP,UAAM,EAACggB,QAAD,EAAWC,QAAX,KAAuB,KAAK7hB,KAAlC;AACA,UAAM8hB,aAAa,EAACjH,iBAAkB,QAAO+G,SAASjC,YAAa,IAAhD,EAAnB;AACA,WACE;AAAA;AAAA,QAAK,WAAU,gCAAf;AACE,4EAAO,MAAK,UAAZ,EAAuB,IAAIiC,SAASG,OAApC,EAA6C,MAAMH,SAASG,OAA5D,EAAqE,SAASF,QAA9E,EAAwF,UAAU,KAAK7hB,KAAL,CAAWgiB,QAA7G,GADF;AAEE;AAAA;AAAA,UAAO,SAASJ,SAASG,OAAzB;AACE;AAAA;AAAA,YAAK,WAAU,gBAAf;AACE;AAAA;AAAA;AACE;AAAA;AAAA,gBAAK,WAAU,MAAf;AACE,kFAAK,WAAU,yBAAf,EAAyC,OAAOD,UAAhD,EAA4D,iBAAc,GAA1E,GADF;AAEE,kFAAK,WAAU,8BAAf;AAFF,aADF;AAKE;AAAA;AAAA,gBAAK,WAAU,OAAf;AACE;AAAA;AAAA,kBAAM,KAAI,MAAV;AAAkBF,yBAASG;AAA3B;AADF;AALF;AADF;AADF;AAFF,KADF;AAkBD;AAtBwD;;AAyBpD,MAAME,mBAAN,SAAkC,4CAAAniB,CAAMC,aAAxC,CAAsD;AAC3D1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKkiB,YAAL,GAAoB,KAAKA,YAAL,CAAkB7nB,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAK8nB,mBAAL,GAA2B,KAAKA,mBAAL,CAAyB9nB,IAAzB,CAA8B,IAA9B,CAA3B;AACA,SAAK+nB,iBAAL,GAAyB,KAAKA,iBAAL,CAAuB/nB,IAAvB,CAA4B,IAA5B,CAAzB;;AAEA;AACA,UAAMgoB,YAAY,EAAlB;AACA,UAAM,EAACrS,IAAD,EAAO0Q,eAAP,KAA0B1gB,MAAM+gB,QAAtC;AACAL,oBAAgBptB,OAAhB,CAAwBsuB,YAAY;AAClCS,gBAAUhrB,IAAV,mBACKuqB,QADL;AAEEU,oBAAY,CAAC,CAACtS,KAAKlF,IAAL,CAAUyX,OAAOA,OAAOA,IAAIpL,QAAX,IAAuBoL,IAAInM,aAA3B,IAA4CmM,IAAIvX,KAAJ,KAAc4W,SAASG,OAApF;AAFhB;AAID,KALD;AAMA,SAAK7kB,KAAL,GAAa,EAACmlB,SAAD,EAAb;AACD;;AAEDH,eAAarpB,KAAb,EAAoB;AAClB,UAAM,EAAC9E,MAAD,KAAW8E,KAAjB;AACA,UAAM,EAAC3D,IAAD,EAAOoV,OAAP,KAAkBvW,MAAxB;AACA,SAAKkN,QAAL,CAAc2B,aAAa;AACzB,YAAMyf,YAAYzf,UAAUyf,SAAV,CAAoBljB,KAApB,EAAlB;AACA,UAAIyiB,WAAWS,UAAUvX,IAAV,CAAe,CAAC,EAACiX,OAAD,EAAD,KAAeA,YAAY7sB,IAA1C,CAAf;AACA0sB,eAASU,UAAT,GAAsBhY,OAAtB;AACA,aAAO,EAAC+X,SAAD,EAAP;AACD,KALD;AAMD;;AAEDF,sBAAoBK,EAApB,EAAwB;AACtBA,OAAG1H,cAAH;AACA,SAAK9a,KAAL,CAAWyiB,OAAX;AACD;;AAEDL,oBAAkBI,EAAlB,EAAsB;AACpBA,OAAG1H,cAAH;;AAEA;AACA,UAAM,EAAC9K,IAAD,KAAS,KAAKhQ,KAAL,CAAW+gB,QAA1B;AACA,UAAM2B,WAAW,EAAjB;AACA,UAAMC,aAAa,EAAnB;AACA,SAAKzlB,KAAL,CAAWmlB,SAAX,CAAqB/uB,OAArB,CAA6BsuB,YAAY;AACvC,YAAMgB,gBAAgB5S,KAAKlF,IAAL,CAAUyX,OAAOA,OAAOA,IAAIpL,QAAX,IAAuBoL,IAAInM,aAA3B,IAA4CmM,IAAIvX,KAAJ,KAAc4W,SAASG,OAApF,CAAtB;AACA,UAAIH,SAASU,UAAT,IAAuB,CAACM,aAA5B,EAA2C;AACzCF,iBAASrrB,IAAT,CAAc,KAAKwrB,cAAL,CAAoBjB,QAApB,CAAd;AACD,OAFD,MAEO,IAAI,CAACA,SAASU,UAAV,IAAwBM,aAA5B,EAA2C;AAChDD,mBAAWtrB,IAAX,CAAgB,EAACkI,KAAKqjB,cAAcrjB,GAApB,EAAyBujB,cAAclB,SAASmB,QAAhD,EAAhB;AACD;AACF,KAPD;;AASA;AACA,SAAK/iB,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGmC,UAAH,CAAc;AAChCjC,YAAM,8DAAAC,CAAGoxB,8BADuB;AAEhC1uB,YAAM;AACJ2uB,wBAAgBP,QADZ;AAEJQ,0BAAkBP;AAFd;AAF0B,KAAd,CAApB;;AAQA;AACAD,aAASpvB,OAAT,CAAiBsuB,YAAY;AAC3B,WAAK5hB,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAa;AAC/BiB,gBAAQ,mEADuB;AAE/BuD,eAAO,iBAFwB;AAG/B1D,eAAO,EAACguB,eAAevB,SAASkB,YAAzB;AAHwB,OAAb,CAApB;AAKD,KAND;AAOAH,eAAWrvB,OAAX,CAAmBsuB,YAAY;AAC7B,WAAK5hB,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAa;AAC/BiB,gBAAQ,mEADuB;AAE/BuD,eAAO,oBAFwB;AAG/B1D,eAAO,EAACguB,eAAevB,SAASkB,YAAzB;AAHwB,OAAb,CAApB;AAKD,KAND;;AAQA,SAAK9iB,KAAL,CAAWyiB,OAAX;AACD;;AAEDI,iBAAejB,QAAf,EAAyB;AACvB,WAAO;AACLriB,WAAKqiB,SAASriB,GADT;AAEL6W,qBAAe,IAFV;AAGLpL,aAAO4W,SAASG,OAHX;AAILe,oBAAclB,SAASmB;AAJlB,KAAP;AAMD;;AAEDnhB,WAAS;AACP,WACE;AAAA;AAAA,QAAM,WAAU,cAAhB;AACE;AAAA;AAAA,UAAK,WAAU,4BAAf;AACE;AAAA;AAAA,YAAI,WAAU,eAAd;AACE,qEAAC,2DAAD,IAAkB,IAAG,uCAArB;AADF,SADF;AAIE;AAAA;AAAA;AACG,eAAK1E,KAAL,CAAWmlB,SAAX,CAAqBnY,GAArB,CAAyB0X,YAAY,2DAAC,wBAAD,IAA0B,KAAKA,SAASG,OAAxC,EAAiD,UAAUH,QAA3D,EAAqE,UAAUA,SAASU,UAAxF,EAAoG,UAAU,KAAKJ,YAAnH,GAArC;AADH;AAJF,OADF;AASE;AAAA;AAAA,UAAS,WAAU,SAAnB;AACE;AAAA;AAAA,YAAQ,WAAU,QAAlB,EAA2B,MAAK,QAAhC,EAAyC,SAAS,KAAKC,mBAAvD;AACE,qEAAC,2DAAD,IAAkB,IAAG,6BAArB;AADF,SADF;AAIE;AAAA;AAAA,YAAQ,WAAU,MAAlB,EAAyB,MAAK,QAA9B,EAAuC,SAAS,KAAKC,iBAArD;AACE,qEAAC,2DAAD,IAAkB,IAAG,2BAArB;AADF;AAJF;AATF,KADF;AAoBD;AA7G0D,C;;;;;;;;;;;;;;;;;;;;;;;;AC9B7D;AACA;AACA;AAOA;AACA;AACA;AACA;;AAEO,MAAMgB,WAAN,SAA0B,4CAAAtjB,CAAMC,aAAhC,CAA8C;AACnD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9C,KAAL,GAAa,EAACmmB,iBAAiB,IAAlB,EAAb;AACA,SAAKC,WAAL,GAAmB,KAAKA,WAAL,CAAiBjpB,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKkpB,UAAL,GAAkB,KAAKA,UAAL,CAAgBlpB,IAAhB,CAAqB,IAArB,CAAlB;AACD;;AAED;;;;AAIAmpB,aAAWnoB,CAAX,EAAc;AACZ,WAAOA,EAAEooB,YAAF,CAAeC,KAAf,CAAqBtsB,QAArB,CAA8B,oBAA9B,CAAP;AACD;;AAEDksB,cAAYzqB,KAAZ,EAAmB;AACjB,YAAQA,MAAMlH,IAAd;AACE,WAAK,OAAL;AACE;AACA,YAAI,KAAKgyB,OAAT,EAAkB;AAChB9qB,gBAAMiiB,cAAN;AACD;AACD;AACF,WAAK,WAAL;AACE,aAAK6I,OAAL,GAAe,IAAf;AACA9qB,cAAM4qB,YAAN,CAAmBG,aAAnB,GAAmC,MAAnC;AACA/qB,cAAM4qB,YAAN,CAAmBI,OAAnB,CAA2B,oBAA3B,EAAiD,KAAK7jB,KAAL,CAAWuU,KAA5D;AACA1b,cAAM9E,MAAN,CAAa+vB,IAAb;AACA,aAAK9jB,KAAL,CAAWsjB,WAAX,CAAuBzqB,KAAvB,EAA8B,KAAKmH,KAAL,CAAWuU,KAAzC,EAAgD,KAAKvU,KAAL,CAAWmQ,IAA3D,EAAiE,KAAKnQ,KAAL,CAAWmO,KAA5E;AACA;AACF,WAAK,SAAL;AACE,aAAKnO,KAAL,CAAWsjB,WAAX,CAAuBzqB,KAAvB;AACA;AACF,WAAK,WAAL;AACA,WAAK,UAAL;AACA,WAAK,MAAL;AACE,YAAI,KAAK2qB,UAAL,CAAgB3qB,KAAhB,CAAJ,EAA4B;AAC1BA,gBAAMiiB,cAAN;AACA,eAAK9a,KAAL,CAAWsjB,WAAX,CAAuBzqB,KAAvB,EAA8B,KAAKmH,KAAL,CAAWuU,KAAzC;AACD;AACD;AACF,WAAK,WAAL;AACE;AACA,YAAI1b,MAAMkrB,MAAN,KAAiB,CAAjB,IAAsB,KAAK/jB,KAAL,CAAWmQ,IAAX,CAAgBiG,aAA1C,EAAyD;AACvDvd,gBAAMiiB,cAAN;AACD;AACD;AACA,aAAK6I,OAAL,GAAe,KAAf;AACA;AAhCJ;AAkCD;;AAED;;;;;;;;;;;AAWA,SAAOK,qBAAP,CAA6BtkB,SAA7B,EAAwCkD,SAAxC,EAAmD;AACjD,UAAM,EAACkd,UAAD,KAAepgB,UAAUyQ,IAA/B;AACA,UAAM8T,eAAe,gFAAAxL,CAAgBW,kBAAhB,CAAmCxW,UAAUygB,eAA7C,EAA8DvD,UAA9D,CAArB;AACA,QAAImE,YAAJ,EAAkB;AAChB,aAAO,IAAP;AACD;;AAED;AACAxL,IAAA,gFAAAA,CAAgBQ,wBAAhB,CAAyCrW,UAAUygB,eAAnD;;AAEA,WAAO,EAACA,iBAAiB,gFAAA5K,CAAgBK,sBAAhB,CAAuCgH,UAAvC,CAAlB,EAAP;AACD;;AAED;AACA;AACA;AACA5e,uBAAqB;AACnB,UAAMgjB,YAAYd,YAAYY,qBAAZ,CAAkC,KAAKhkB,KAAvC,EAA8C,KAAK9C,KAAnD,CAAlB;AACA,QAAIgnB,SAAJ,EAAe;AACb,WAAKjjB,QAAL,CAAcijB,SAAd;AACD;AACF;;AAED;AACA;AACA;AACAC,4BAA0BzkB,SAA1B,EAAqC;AACnC,UAAMwkB,YAAYd,YAAYY,qBAAZ,CAAkCtkB,SAAlC,EAA6C,KAAKxC,KAAlD,CAAlB;AACA,QAAIgnB,SAAJ,EAAe;AACb,WAAKjjB,QAAL,CAAcijB,SAAd;AACD;AACF;;AAED9iB,yBAAuB;AACrBqX,IAAA,gFAAAA,CAAgBQ,wBAAhB,CAAyC,KAAK/b,KAAL,CAAWmmB,eAApD;AACD;;AAEDE,aAAW1qB,KAAX,EAAkB;AAChB;AACA;AACA;AACA,QAAI,KAAKmH,KAAL,CAAWmQ,IAAX,CAAgBiG,aAAhB,IAAiCvd,MAAMpC,GAAN,KAAc,OAAnD,EAA4D;AAC1D,WAAKuJ,KAAL,CAAW6F,OAAX,CAAmBhN,KAAnB;AACD;AACF;;AAED+I,WAAS;AACP,UAAM,EAAC8D,QAAD,EAAW4B,SAAX,EAAsB8c,YAAtB,EAAoCC,WAApC,EAAiDlU,IAAjD,EAAuDtK,OAAvD,EAAgEsI,KAAhE,KAAyE,KAAKnO,KAApF;AACA,UAAMskB,wBAAyB,iBAAgBhd,YAAa,IAAGA,SAAU,EAA1B,GAA8B,EAAG,GAAE6I,KAAKoU,SAAL,GAAiB,UAAjB,GAA8B,EAAG,GAAEpU,KAAKiG,aAAL,GAAqB,kBAArB,GAA0C,EAAG,EAAlK;AACA,UAAM,EAACuJ,YAAD,EAAeE,WAAf,KAA8B1P,IAApC;AACA,UAAM,CAACqU,cAAD,IAAmBrW,KAAzB;AACA,QAAIsW,cAAJ;AACA,QAAI3C,UAAJ;AACA,QAAI4C,mBAAmB,KAAvB;AACA,QAAIC,iBAAJ;AACA,QAAIC,oBAAJ;AACA,QAAIC,qBAAqB,KAAK3nB,KAAL,CAAWmmB,eAAX,IAA8B,KAAKnmB,KAAL,CAAWmmB,eAAX,CAA2B9jB,GAAlF;AACA,QAAI6kB,YAAJ,EAAkB;AAAE;AAClBQ,6BAAuB,KAAvB;AACD,KAFD,MAEO,IAAIzU,KAAKiG,aAAT,EAAwB;AAC7BqO,uBAAiB,yBAAjB;AACA3C,mBAAa;AACXgD,yBAAiB3U,KAAK2U,eADX;AAEXjK,yBAAkB,OAAM8E,YAAa;AAF1B,OAAb;AAIAgF,0BAAoB,EAAC9J,iBAAmB,OAAM8E,YAAa,GAAvC,EAApB;AACD,KAPM,MAOA,IAAIxP,KAAKuP,mBAAT,EAA8B;AACnC;AACA+E,uBAAiB,yBAAjB;AACA3C,mBAAa;AACXgD,yBAAiB3U,KAAK2U,eADX;AAEXjK,yBAAiBgK,qBAAsB,OAAM,KAAK3nB,KAAL,CAAWmmB,eAAX,CAA2B9jB,GAAI,GAA3D,GAAgE;AAFtE,OAAb;AAID,KAPM,MAOA,IAAIogB,gBAAgBE,eAAe,wEAAnC,EAA0D;AAC/D;AACA4E,uBAAiB,yBAAjB;AACA3C,mBAAa;AACXgD,yBAAiB3U,KAAK2U,eADX;AAEXjK,yBAAkB,OAAM8E,gBAAgBxP,KAAK4U,OAAQ;AAF1C,OAAb;AAID,KAPM,MAOA;AACL;AACAN,uBAAkB,aAAYI,qBAAqB,SAArB,GAAiC,EAAG,EAAlE;AACA/C,mBAAa,EAACjH,iBAAiBgK,qBAAsB,OAAM,KAAK3nB,KAAL,CAAWmmB,eAAX,CAA2B9jB,GAAI,GAA3D,GAAgE,MAAlF,EAAb;;AAEA;AACA,UAAIsgB,eAAe,0EAAnB,EAA4C;AAC1C6E,2BAAmB,IAAnB;AACAC,4BAAoB,EAAC9J,iBAAmB,OAAM1K,KAAK4U,OAAQ,GAAvC,EAApB;AACD,OAHD,MAGO,IAAIF,kBAAJ,EAAwB;AAC7B;AACA;AACAH,2BAAmB,IAAnB;AACAE,+BAAuB,IAAvB;AACD;AACF;AACD,QAAII,iBAAiB,EAArB;AACA,QAAIX,WAAJ,EAAiB;AACfW,uBAAiB;AACfnf,iBAAS,KAAKyd,WADC;AAEf2B,mBAAW,KAAK3B,WAFD;AAGf4B,qBAAa,KAAK5B,WAHH;AAIf6B,qBAAa,KAAK7B;AAJH,OAAjB;AAMD;AACD,WAAQ;AAAA;AAAA,iBAAI,WAAWgB,qBAAf,EAAsC,QAAQ,KAAKhB,WAAnD,EAAgE,YAAY,KAAKA,WAAjF,EAA8F,aAAa,KAAKA,WAAhH,EAA6H,aAAa,KAAKA,WAA/I,IAAgK0B,cAAhK;AACN;AAAA;AAAA,UAAK,WAAU,gBAAf;AACG;AAAA;AAAA,YAAG,MAAM,CAAC7U,KAAKiG,aAAN,IAAuBjG,KAAK5Q,GAArC,EAA0C,UAAS,GAAnD,EAAuD,YAAY,KAAKgkB,UAAxE,EAAoF,SAAS1d,OAA7F,EAAsG,WAAW,IAAjH;AACG;AAAA;AAAA,cAAK,WAAU,MAAf,EAAsB,eAAa,IAAnC,EAAyC,iBAAe2e,cAAxD;AACE,gFAAK,WAAWC,cAAhB,EAAgC,OAAO3C,UAAvC,GADF;AAEG3R,iBAAKiG,aAAL,IAAsB,oEAAK,WAAU,8BAAf,GAFzB;AAGGsO,gCAAoB;AACnB,yBAAU,4BADS;AAEnB,+BAAeE,wBAAwBJ,cAFpB;AAGnB,qBAAOG,iBAHY;AAHvB,WADH;AASE;AAAA;AAAA,cAAK,WAAY,SAAQxU,KAAKgH,QAAL,GAAgB,QAAhB,GAA2B,EAAG,EAAvD;AACGhH,iBAAKgH,QAAL,IAAiB,oEAAK,WAAU,qBAAf,GADpB;AAEG;AAAA;AAAA,gBAAM,KAAI,MAAV;AAAkBhJ;AAAlB;AAFH;AATF,SADH;AAeIzI;AAfJ;AADM,KAAR;AAmBD;AA5LkD;AA8LrD0d,YAAYvhB,YAAZ,GAA2B;AACzBsM,SAAO,EADkB;AAEzBgC,QAAM,EAFmB;AAGzBkU,eAAa;AAHY,CAA3B;;AAMO,MAAMe,OAAN,SAAsB,4CAAAtlB,CAAMC,aAA5B,CAA0C;AAC/C1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9C,KAAL,GAAa,EAAC+c,iBAAiB,KAAlB,EAAb;AACA,SAAKoL,WAAL,GAAmB,KAAKA,WAAL,CAAiBhrB,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKqf,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBrf,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKwf,YAAL,GAAoB,KAAKA,YAAL,CAAkBxf,IAAlB,CAAuB,IAAvB,CAApB;AACD;;AAED;;;AAGAirB,sBAAoB;AAClB,UAAMnwB,QAAQ,EAACowB,WAAW,KAAKvlB,KAAL,CAAWmQ,IAAX,CAAgBqV,QAA5B,EAAd;AACA;AACA,QAAI,KAAKxlB,KAAL,CAAWmQ,IAAX,CAAgBgH,QAApB,EAA8B;AAC5BhiB,YAAMswB,SAAN,GAAkB,QAAlB;AACD;AACD,QAAI,KAAKzlB,KAAL,CAAWmQ,IAAX,CAAgBiG,aAApB,EAAmC;AACjC;AACAjhB,YAAMswB,SAAN,GAAkB,QAAlB;AACAtwB,YAAMguB,aAAN,GAAsB,KAAKnjB,KAAL,CAAWmQ,IAAX,CAAgBuV,QAAtC;AACD;AACD,WAAO,EAACvwB,KAAD,EAAP;AACD;;AAEDqe,YAAU3a,KAAV,EAAiB;AACf,SAAKmH,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAakI,OAAOC,MAAP,CAAc;AAC7C3D,WAD6C;AAE7CvD,cAAQ,mEAFqC;AAG7C2f,uBAAiB,KAAKjV,KAAL,CAAWuU;AAHiB,KAAd,EAI9B,KAAK+Q,iBAAL,EAJ8B,CAAb,CAApB;AAKD;;AAEDD,cAAYxsB,KAAZ,EAAmB;AACjB,SAAK2a,SAAL,CAAe,OAAf;;AAEA;AACA;AACA3a,UAAMiiB,cAAN;AACA,UAAM,EAAC6K,MAAD,EAAS5B,MAAT,EAAiB6B,OAAjB,EAA0BC,OAA1B,EAAmCrN,QAAnC,KAA+C3f,KAArD;AACA,QAAI,CAAC,KAAKmH,KAAL,CAAWmQ,IAAX,CAAgBiG,aAArB,EAAoC;AAClC,WAAKpW,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGmC,UAAH,CAAc;AAChCjC,cAAM,8DAAAC,CAAGmkB,SADuB;AAEhCzhB,cAAMiI,OAAOC,MAAP,CAAc,KAAKwD,KAAL,CAAWmQ,IAAzB,EAA+B,EAACtX,OAAO,EAAC8sB,MAAD,EAAS5B,MAAT,EAAiB6B,OAAjB,EAA0BC,OAA1B,EAAmCrN,QAAnC,EAAR,EAA/B;AAF0B,OAAd,CAApB;AAID,KALD,MAKO;AACL,WAAKxY,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGmC,UAAH,CAAc;AAChCjC,cAAM,8DAAAC,CAAGk0B,gBADuB;AAEhCxxB,cAAM,EAAC0W,OAAO,KAAKhL,KAAL,CAAWmQ,IAAX,CAAgBnF,KAAxB;AAF0B,OAAd,CAApB;AAID;AACF;;AAED0O,oBAAkB7gB,KAAlB,EAAyB;AACvBA,UAAMiiB,cAAN;AACA,SAAK9a,KAAL,CAAW+lB,UAAX,CAAsB,KAAK/lB,KAAL,CAAWuU,KAAjC;AACA,SAAKtT,QAAL,CAAc,EAACgZ,iBAAiB,IAAlB,EAAd;AACD;;AAEDJ,eAAaI,eAAb,EAA8B;AAC5B,SAAKhZ,QAAL,CAAc,EAACgZ,eAAD,EAAd;AACD;;AAEDrY,WAAS;AACP,UAAM,EAAC5B,KAAD,KAAU,IAAhB;AACA,UAAM,EAACmQ,IAAD,KAASnQ,KAAf;AACA,UAAMgmB,oBAAoB,KAAK9oB,KAAL,CAAW+c,eAAX,IAA8Bja,MAAMimB,WAAN,KAAsBjmB,MAAMuU,KAApF;AACA,UAAMpG,QAAQgC,KAAKnF,KAAL,IAAcmF,KAAKuV,QAAjC;AACA,WAAQ;AAAC,iBAAD;AAAA,mBAAiB1lB,KAAjB,IAAwB,SAAS,KAAKqlB,WAAtC,EAAmD,aAAa,KAAKrlB,KAAL,CAAWsjB,WAA3E,EAAwF,WAAY,GAAEtjB,MAAMsH,SAAN,IAAmB,EAAG,GAAE0e,oBAAoB,SAApB,GAAgC,EAAG,EAAjK,EAAoK,OAAO7X,KAA3K;AACJ;AAAA;AAAA;AACE;AAAA;AAAA,YAAQ,WAAU,0BAAlB,EAA6C,OAAO,KAAKnO,KAAL,CAAW8F,IAAX,CAAgBC,aAAhB,CAA8B,EAAC5O,IAAI,oBAAL,EAA9B,CAApD,EAA+G,SAAS,KAAKuiB,iBAA7H;AACE;AAAA;AAAA,cAAM,WAAU,SAAhB;AACE,uEAAC,2DAAD,IAAkB,IAAG,wBAArB,EAA8C,QAAQ,EAACvL,KAAD,EAAtD;AADF;AADF,SADF;AAMG6X,6BACC,2DAAC,iFAAD;AACE,oBAAUhmB,MAAMxO,QADlB;AAEE,iBAAOwO,MAAMuU,KAFf;AAGE,oBAAU,KAAKsF,YAHjB;AAIE,mBAAS1J,KAAKiG,aAAL,GAAqB,kGAArB,GAAuE,iFAJlF;AAKE,gBAAMjG,IALR;AAME,oBAAU,KAAKmV,iBAAL,EANZ;AAOE,kBAAQ,mEAPV;AAPJ;AADI,KAAR;AAmBD;AAxF8C;AA0FjDF,QAAQvjB,YAAR,GAAuB;AACrBsO,QAAM,EADe;AAErB4V,eAAa,CAAE;AAFM,CAAvB;;AAKO,MAAMG,kBAAN,SAAiC,4CAAApmB,CAAMC,aAAvC,CAAqD;AAC1D1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKmmB,iBAAL,GAAyB,KAAKA,iBAAL,CAAuB9rB,IAAvB,CAA4B,IAA5B,CAAzB;AACD;;AAED8rB,sBAAoB;AAClB,SAAKnmB,KAAL,CAAWxO,QAAX,CACE,EAACG,MAAM,8DAAAC,CAAGolB,cAAV,EAA0B1iB,MAAM,EAACigB,OAAO,KAAKvU,KAAL,CAAWuU,KAAnB,EAAhC,EADF;AAED;;AAED3S,WAAS;AACP,WAAQ;AAAC,iBAAD;AAAA,mBAAiB,KAAK5B,KAAtB,IAA6B,WAAY,eAAc,KAAKA,KAAL,CAAWsH,SAAX,IAAwB,EAAG,EAAlF,EAAqF,aAAa,KAAlG;AACN,6EAAQ,WAAU,sCAAlB;AACC,eAAO,KAAKtH,KAAL,CAAW8F,IAAX,CAAgBC,aAAhB,CAA8B,EAAC5O,IAAI,2BAAL,EAA9B,CADR;AAEC,iBAAS,KAAKgvB,iBAFf;AADM,KAAR;AAKD;AAjByD;;AAoBrD,MAAMC,YAAN,SAA2B,4CAAAtmB,CAAMC,aAAjC,CAA+C;AACpD,aAAWsmB,aAAX,GAA2B;AACzB,WAAO;AACLJ,mBAAa,IADR;AAELK,oBAAc,IAFT;AAGLC,mBAAa,IAHR;AAILC,oBAAc,IAJT;AAKLC,uBAAiB;AALZ,KAAP;AAOD;;AAEDpwB,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9C,KAAL,GAAakpB,aAAaC,aAA1B;AACA,SAAK/C,WAAL,GAAmB,KAAKA,WAAL,CAAiBjpB,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAK0rB,UAAL,GAAkB,KAAKA,UAAL,CAAgB1rB,IAAhB,CAAqB,IAArB,CAAlB;AACD;;AAED8pB,4BAA0BzkB,SAA1B,EAAqC;AACnC,QAAI,KAAKxC,KAAL,CAAWqpB,WAAf,EAA4B;AAC1B,YAAMG,eAAe,KAAK1mB,KAAL,CAAW+gB,QAAX,IAAuB,KAAK/gB,KAAL,CAAW+gB,QAAX,CAAoB/Q,IAAhE;AACA,YAAM2W,cAAcjnB,UAAUqhB,QAAV,IAAsBrhB,UAAUqhB,QAAV,CAAmB/Q,IAA7D;AACA,UAAI0W,gBAAgBA,aAAa,KAAKxpB,KAAL,CAAWopB,YAAxB,CAAhB,IACFI,aAAa,KAAKxpB,KAAL,CAAWopB,YAAxB,EAAsC/mB,GAAtC,KAA8C,KAAKrC,KAAL,CAAWqpB,WAAX,CAAuBhnB,GADnE,KAED,CAAConB,YAAY,KAAKzpB,KAAL,CAAWopB,YAAvB,CAAD,IAAyCK,YAAY,KAAKzpB,KAAL,CAAWopB,YAAvB,EAAqC/mB,GAArC,KAA6C,KAAKrC,KAAL,CAAWqpB,WAAX,CAAuBhnB,GAF5G,CAAJ,EAEsH;AACpH;AACA,aAAK0B,QAAL,CAAcmlB,aAAaC,aAA3B;AACD;AACF;AACF;;AAED7S,YAAU3a,KAAV,EAAiB0b,KAAjB,EAAwB;AACtB,SAAKvU,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,CAAa;AAC/BwE,WAD+B;AAE/BvD,cAAQ,mEAFuB;AAG/B2f,uBAAiBV;AAHc,KAAb,CAApB;AAKD;;AAED+O,cAAYzqB,KAAZ,EAAmB0b,KAAnB,EAA0BpE,IAA1B,EAAgChC,KAAhC,EAAuC;AACrC,YAAQtV,MAAMlH,IAAd;AACE,WAAK,WAAL;AACE,aAAKi1B,OAAL,GAAe,KAAf;AACA,aAAK3lB,QAAL,CAAc;AACZqlB,wBAAc/R,KADF;AAEZgS,uBAAapW,IAFD;AAGZqW,wBAAcrY,KAHF;AAIZ8X,uBAAa;AAJD,SAAd;AAMA,aAAKzS,SAAL,CAAe,MAAf,EAAuBe,KAAvB;AACA;AACF,WAAK,SAAL;AACE,YAAI,CAAC,KAAKqS,OAAV,EAAmB;AACjB;AACA,eAAK3lB,QAAL,CAAcmlB,aAAaC,aAA3B;AACD;AACD;AACF,WAAK,WAAL;AACE,YAAI9R,UAAU,KAAKrX,KAAL,CAAWopB,YAAzB,EAAuC;AACrC,eAAKrlB,QAAL,CAAc,EAACwlB,iBAAiB,IAAlB,EAAd;AACD,SAFD,MAEO;AACL,eAAKxlB,QAAL,CAAc,EAACwlB,iBAAiB,KAAKI,oBAAL,CAA0BtS,KAA1B,CAAlB,EAAd;AACD;AACD;AACF,WAAK,MAAL;AACE,YAAIA,UAAU,KAAKrX,KAAL,CAAWopB,YAAzB,EAAuC;AACrC,eAAKM,OAAL,GAAe,IAAf;AACA,eAAK5mB,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc;AAChCC,kBAAM,8DAAAC,CAAGk1B,gBADuB;AAEhCxyB,kBAAM;AACJ+e;AACE9T,qBAAK,KAAKrC,KAAL,CAAWqpB,WAAX,CAAuBhnB,GAD9B;AAEEyL,uBAAO,KAAK9N,KAAL,CAAWspB,YAFpB;AAGE9G,qCAAqB,KAAKxiB,KAAL,CAAWqpB,WAAX,CAAuB7G;AAH9C,iBAKM,KAAKxiB,KAAL,CAAWqpB,WAAX,CAAuBnQ,aAAvB,IAAwC,EAACA,eAAe,IAAhB,EAL9C,CADI;AAQJ7B,mBARI;AASJwS,gCAAkB,KAAK7pB,KAAL,CAAWopB;AATzB;AAF0B,WAAd,CAApB;AAcA,eAAK9S,SAAL,CAAe,MAAf,EAAuBe,KAAvB;AACD;AACD;AA3CJ;AA6CD;;AAEDyS,iBAAe;AACb;AACA,QAAIhH,WAAW,KAAKhgB,KAAL,CAAW+gB,QAAX,CAAoB/Q,IAApB,CAAyB7Q,KAAzB,EAAf;AACA6gB,aAASrb,MAAT,GAAkB,KAAK3E,KAAL,CAAWghB,YAAX,GAA0B,+EAA5C;AACA,WAAOhB,QAAP;AACD;;AAED;;;;AAIA6G,uBAAqBtS,KAArB,EAA4B;AAC1B,UAAMyL,WAAW,KAAKgH,YAAL,EAAjB;AACAhH,aAAS,KAAK9iB,KAAL,CAAWopB,YAApB,IAAoC,IAApC;AACA,UAAMW,aAAajH,SAAS9V,GAAT,CAAamJ,QAAUA,QAAQA,KAAK8D,QAAd,GAA0B9D,IAA1B,GAAiC,IAAvD,CAAnB;AACA,UAAM6T,WAAWlH,SAAS7Y,MAAT,CAAgBkM,QAAQA,QAAQ,CAACA,KAAK8D,QAAtC,CAAjB;AACA,UAAMgQ,eAAe5qB,OAAOC,MAAP,CAAc,EAAd,EAAkB,KAAKU,KAAL,CAAWqpB,WAA7B,EAA0C,EAACpP,UAAU,IAAX,EAAiBoN,WAAW,IAA5B,EAA1C,CAArB;AACA,QAAI,CAAC0C,WAAW1S,KAAX,CAAL,EAAwB;AACtB0S,iBAAW1S,KAAX,IAAoB4S,YAApB;AACD,KAFD,MAEO;AACL;AACA;AACA,UAAIC,YAAY7S,KAAhB;AACA,YAAM8S,YAAY9S,QAAQ,KAAKrX,KAAL,CAAWopB,YAAnB,GAAkC,CAAC,CAAnC,GAAuC,CAAzD;AACA,aAAOW,WAAWG,SAAX,CAAP,EAA8B;AAC5BA,qBAAaC,SAAb;AACD;;AAED;AACA,YAAMC,eAAe/S,QAAQ,KAAKrX,KAAL,CAAWopB,YAAnB,GAAkC,CAAlC,GAAsC,CAAC,CAA5D;AACA,aAAOc,cAAc7S,KAArB,EAA4B;AAC1B,cAAMgT,YAAYH,YAAYE,YAA9B;AACAL,mBAAWG,SAAX,IAAwBH,WAAWM,SAAX,CAAxB;AACAH,oBAAYG,SAAZ;AACD;AACDN,iBAAW1S,KAAX,IAAoB4S,YAApB;AACD;;AAED;AACA,UAAMK,UAAUP,UAAhB;AACA,SAAK,IAAItc,IAAI,CAAb,EAAgBA,IAAI6c,QAAQ7iB,MAA5B,EAAoCgG,GAApC,EAAyC;AACvC,UAAI,CAAC6c,QAAQ7c,CAAR,CAAL,EAAiB;AACf6c,gBAAQ7c,CAAR,IAAauc,SAASO,KAAT,MAAoB,IAAjC;AACD;AACF;;AAED,WAAOD,OAAP;AACD;;AAEDzB,aAAWxR,KAAX,EAAkB;AAChB,SAAKtT,QAAL,CAAc,EAACglB,aAAa1R,KAAd,EAAd;AACD;;AAED3S,WAAS;AACP,UAAM,EAAC5B,KAAD,KAAU,IAAhB;AACA,UAAMggB,WAAW,KAAK9iB,KAAL,CAAWupB,eAAX,IAA8B,KAAKO,YAAL,EAA/C;AACA,UAAMU,aAAa,EAAnB;AACA,UAAMxU,cAAc;AAClBoQ,mBAAa,KAAKA,WADA;AAElB9xB,gBAAUwO,MAAMxO,QAFE;AAGlBsU,YAAM9F,MAAM8F;AAHM,KAApB;AAKA;AACA;AACA;AACA;AACA,QAAIshB,YAAY,CAAhB;;AAEA;AACA;AACA,UAAMO,wBAAwB3nB,MAAMghB,YAAN,GAAqB,CAAnD;;AAEA,SAAK,IAAIrW,IAAI,CAAR,EAAWid,IAAI5H,SAASrb,MAA7B,EAAqCgG,IAAIid,CAAzC,EAA4Cjd,GAA5C,EAAiD;AAC/C,YAAMwF,OAAO6P,SAASrV,CAAT,KAAepO,OAAOC,MAAP,CAAc,EAAd,EAAkBwjB,SAASrV,CAAT,CAAlB,EAA+B,EAAC6a,UAAU,KAAKxlB,KAAL,CAAWyf,eAAX,CAA2BO,SAASrV,CAAT,CAA3B,CAAX,EAA/B,CAA5B;AACA,YAAMkd,YAAY;AAChBpxB,aAAK0Z,OAAOA,KAAK5Q,GAAZ,GAAkB6nB,WADP;AAEhB7S,eAAO5J;AAFS,OAAlB;AAIA,UAAIA,KAAKgd,qBAAT,EAAgC;AAC9BE,kBAAUvgB,SAAV,GAAsB,iBAAtB;AACD;AACDogB,iBAAWrwB,IAAX,CAAgB,CAAC8Y,IAAD,GACd,2DAAC,kBAAD,eACM0X,SADN,EAEM3U,WAFN,EADc,GAKd,2DAAC,OAAD;AACE,cAAM/C,IADR;AAEE,qBAAa,KAAKjT,KAAL,CAAW+oB,WAF1B;AAGE,oBAAY,KAAKF;AAHnB,SAIM8B,SAJN,EAKM3U,WALN,EALF;AAYD;AACD,WAAQ;AAAA;AAAA,QAAI,WAAY,iBAAgB,KAAKhW,KAAL,CAAWqpB,WAAX,GAAyB,aAAzB,GAAyC,EAAG,EAA5E;AACLmB;AADK,KAAR;AAGD;AAxLmD;;AA2L/C,MAAMI,cAAc,6DAAAliB,CAAWwgB,YAAX,CAApB,C;;;;;;;;;;;;;;;;;;;AChgBP;AACA;AACA;AACA;;AAEO,MAAM2B,eAAN,SAA8B,4CAAAjoB,CAAMC,aAApC,CAAkD;AACvD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKgoB,aAAL,GAAqB,KAAKA,aAAL,CAAmB3tB,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAK4tB,QAAL,GAAgB,KAAKA,QAAL,CAAc5tB,IAAd,CAAmB,IAAnB,CAAhB;AACA,SAAK6tB,SAAL,GAAiB,KAAKA,SAAL,CAAe7tB,IAAf,CAAoB,IAApB,CAAjB;AACA,SAAK8tB,SAAL,GAAiB,KAAKA,SAAL,CAAe9tB,IAAf,CAAoB,IAApB,CAAjB;AACA,SAAK+tB,aAAL,GAAqB,KAAKA,aAAL,CAAmB/tB,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAKguB,cAAL,GAAsB,KAAKA,cAAL,CAAoBhuB,IAApB,CAAyB,IAAzB,CAAtB;;AAEA,SAAK6C,KAAL,GAAa;AACXorB,kBAAY,EADD;AAEXC,sBAAgB,KAFL;AAGXC,cAAQ,EAHG;AAIXC,qBAAe;AAJJ,KAAb;AAMA,SAAKC,QAAL,GAAgB,KAAhB;AACD;;AAEKzhB,qBAAN,GAA4B;AAAA;;AAAA;AAC1B,UAAI,MAAKjH,KAAL,CAAW2oB,YAAX,IAA2B,CAAC,MAAKD,QAArC,EAA+C;AAC7C,YAAI;AACF,gBAAKA,QAAL,GAAgB,IAAhB;AACA,gBAAME,YAAY,sGAAlB;AACA,gBAAM5tB,WAAW,MAAMC,MAAO,GAAE,MAAK+E,KAAL,CAAW2oB,YAAa,iBAAgBC,SAAU,EAA3D,CAAvB;AACA,cAAI5tB,SAASE,MAAT,KAAoB,GAAxB,EAA6B;AAC3B,kBAAM,EAACstB,MAAD,EAASC,aAAT,KAA0B,MAAMztB,SAAS6tB,IAAT,EAAtC;AACA,kBAAK5nB,QAAL,CAAc,EAACunB,MAAD,EAASC,aAAT,EAAd;AACD,WAHD,MAGO;AACL,kBAAKzoB,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGmC,UAAH,CAAc,EAACjC,MAAM,8DAAAC,CAAGgD,yBAAV,EAAqCN,MAAM,EAACuE,OAAO,yBAAR,EAAmC1D,OAAO6F,SAASE,MAAnD,EAA3C,EAAd,CAApB;AACD;AACF,SAVD,CAUE,OAAOnC,KAAP,EAAc;AACd,gBAAKiH,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAGmC,UAAH,CAAc,EAACjC,MAAM,8DAAAC,CAAGgD,yBAAV,EAAqCN,MAAM,EAACuE,OAAO,mBAAR,EAA3C,EAAd,CAApB;AACD;AACF;AAfyB;AAgB3B;;AAED0M,sBAAoB;AAClB,SAAK4iB,SAAL;AACD;;AAEDA,cAAY;AACV;AACA;AACA1hB,eAAW,MAAM;AACf,WAAKxF,QAAL,CAAc,EAAC6nB,MAAM,IAAP,EAAd;AACD,KAFD,EAEG,EAFH;AAGD;;AAEDV,kBAAgB;AACd1rB,WAAO2I,mBAAP,CAA2B,kBAA3B,EAA+C,KAAK+iB,aAApD;AACAp2B,aAASkQ,IAAT,CAAc2E,SAAd,CAAwBkiB,MAAxB,CAA+B,WAA/B;AACA,SAAK9nB,QAAL,CAAc,EAAC6nB,MAAM,KAAP,EAAd;AACAriB,eAAW,MAAM;AACf;AACAzU,eAASkQ,IAAT,CAAc2E,SAAd,CAAwBkiB,MAAxB,CAA+B,SAA/B;AACA,WAAK9nB,QAAL,CAAc,EAACsnB,gBAAgB,IAAjB,EAAd;AACD,KAJD,EAIG,GAJH;AAKD;;AAEDP,gBAAc3sB,CAAd,EAAiB;AACf,QAAItC,QAAQsC,EAAEtH,MAAF,CAASi1B,eAArB;AACA,SAAK/nB,QAAL,CAAc,EAACqnB,YAAYjtB,EAAEtH,MAAF,CAASoB,KAAtB,EAAd;AACA4D,UAAM8N,SAAN,CAAgBkiB,MAAhB,CAAuB,QAAvB;AACA1tB,MAAEtH,MAAF,CAAS8S,SAAT,CAAmBkiB,MAAnB,CAA0B,SAA1B;AACD;;AAEDd,aAAW;AACT,SAAKjoB,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,iBAAcwE,OAAO,cAArB,IAAwC,KAAKowB,YAAL,EAAxC,EAApB;;AAEAvsB,WAAO4I,gBAAP,CAAwB,kBAAxB,EAA4C,KAAK8iB,aAAjD;AACD;;AAEDF,cAAY;AACV,SAAKloB,KAAL,CAAWxO,QAAX,CAAoB,iEAAAC,CAAG4C,SAAH,iBAAcwE,OAAO,gBAArB,IAA0C,KAAKowB,YAAL,EAA1C,EAApB;AACA,SAAKb,aAAL;AACD;;AAED;;;AAGAa,iBAAe;AACb,UAAM9zB,QAAQ,EAAC+zB,iBAAiB,KAAKhsB,KAAL,CAAWsrB,MAAX,CAAkB7jB,MAAlB,GAA2B,CAA7C,EAAd;AACA,WAAO,EAACxP,KAAD,EAAP;AACD;;AAEDkzB,iBAAehtB,CAAf,EAAkB;AAChB,QAAItC,QAAQsC,EAAEtH,MAAF,CAASi1B,eAArB;AACAjwB,UAAM8N,SAAN,CAAgBC,GAAhB,CAAoB,QAApB;AACAzL,MAAEtH,MAAF,CAAS8S,SAAT,CAAmBC,GAAnB,CAAuB,SAAvB;AACAzL,MAAEyf,cAAF,GAJgB,CAII;AACpBzf,MAAEtH,MAAF,CAASo1B,KAAT;AACD;;AAEDvnB,WAAS;AACP;AACA;AACA,QAAI,KAAK1E,KAAL,CAAWqrB,cAAf,EAA+B;AAC7B,aAAO,IAAP;AACD;;AAED,QAAIa,YAAa;AAAA;AAAA,QAAG,MAAO,GAAE,KAAKppB,KAAL,CAAW2oB,YAAa,cAApC,EAAmD,QAAO,QAA1D,EAAmE,KAAI,qBAAvE;AAA6F,iEAAC,2DAAD,IAAkB,IAAG,2BAArB;AAA7F,KAAjB;AACA,QAAIU,cAAe;AAAA;AAAA,QAAG,MAAO,GAAE,KAAKrpB,KAAL,CAAW2oB,YAAa,gBAApC,EAAqD,QAAO,QAA5D,EAAqE,KAAI,qBAAzE;AAA+F,iEAAC,2DAAD,IAAkB,IAAG,yBAArB;AAA/F,KAAnB;;AAEA,WACE;AAAA;AAAA,QAAK,WAAY,mBAAkB,KAAKzrB,KAAL,CAAW4rB,IAAX,GAAkB,MAAlB,GAA2B,EAAG,EAAjE;AACE,0EAAK,WAAU,YAAf,GADF;AAEE;AAAA;AAAA,UAAK,WAAU,gBAAf;AACE;AAAA;AAAA,YAAK,WAAU,sBAAf;AACE;AAAA;AAAA,cAAK,WAAU,uBAAf;AACE;AAAA;AAAA,gBAAI,WAAU,gBAAd;AAA+B,yEAAC,2DAAD,IAAkB,IAAG,gBAArB;AAA/B,aADF;AAEE;AAAA;AAAA,gBAAG,WAAU,kBAAb;AAAgC,yEAAC,2DAAD,IAAkB,IAAG,kBAArB;AAAhC,aAFF;AAGE;AAAA;AAAA,gBAAG,WAAU,eAAb,EAA6B,MAAK,gDAAlC,EAAmF,QAAO,QAA1F,EAAmG,KAAI,qBAAvG;AAA6H,yEAAC,2DAAD,IAAkB,IAAG,0BAArB;AAA7H;AAHF,WADF;AAME;AAAA;AAAA,cAAK,WAAU,kBAAf;AACE;AAAA;AAAA,gBAAG,WAAU,aAAb;AAA2B,yEAAC,2DAAD,IAAkB,IAAG,sBAArB,GAA3B;AAAyE;AAAA;AAAA,kBAAM,WAAU,YAAhB;AAA6B,2EAAC,2DAAD,IAAkB,IAAG,0BAArB;AAA7B;AAAzE,aADF;AAEE;AAAA;AAAA,gBAAM,QAAO,KAAb,EAAmB,QAAQ,KAAK9oB,KAAL,CAAW2oB,YAAtC,EAAoD,QAAO,QAA3D,EAAoE,KAAI,qBAAxE,EAA8F,UAAU,KAAKV,QAA7G;AACE,oFAAO,MAAK,SAAZ,EAAsB,MAAK,QAA3B,EAAoC,OAAM,MAA1C,GADF;AAEE,oFAAO,MAAK,QAAZ,EAAqB,MAAK,QAA1B,EAAmC,OAAM,OAAzC,GAFF;AAGE,oFAAO,MAAK,SAAZ,EAAsB,MAAK,QAA3B,EAAoC,OAAM,eAA1C,GAHF;AAIE,oFAAO,MAAK,YAAZ,EAAyB,MAAK,QAA9B,EAAuC,OAAM,0BAA7C,GAJF;AAKE,oFAAO,MAAK,YAAZ,EAAyB,MAAK,QAA9B,EAAuC,OAAM,iBAA7C,GALF;AAME,oFAAO,MAAK,cAAZ,EAA2B,MAAK,QAAhC,EAAyC,OAAM,UAA/C,GANF;AAOE,oFAAO,MAAK,SAAZ,EAAsB,MAAK,QAA3B,EAAoC,OAAO,KAAK/qB,KAAL,CAAWsrB,MAAtD,GAPF;AAQE,oFAAO,MAAK,iBAAZ,EAA8B,MAAK,QAAnC,EAA4C,OAAO,KAAKtrB,KAAL,CAAWurB,aAA9D,GARF;AASE;AAAA;AAAA,kBAAM,WAAU,OAAhB;AAAyB,qBAAKzoB,KAAL,CAAW8F,IAAX,CAAgBC,aAAhB,CAA8B,EAAC5O,IAAI,wBAAL,EAA9B;AAAzB,eATF;AAUE,oFAAO,WAAU,aAAjB,EAA+B,MAAK,OAApC,EAA4C,MAAK,OAAjD,EAAyD,UAAS,MAAlE,EAAyE,WAAW,KAAKkxB,cAAzF,EAAyG,aAAa,KAAKroB,KAAL,CAAW8F,IAAX,CAAgBC,aAAhB,CAA8B,EAAC5O,IAAI,kCAAL,EAA9B,CAAtH,EAA+L,UAAU,KAAK6wB,aAA9M,GAVF;AAWE;AAAA;AAAA,kBAAK,WAAU,aAAf;AACE,2EAAC,2DAAD;AACE,sBAAG,4BADL;AAEE,0BAAQ;AACNsB,2BAAOF,SADD;AAENG,6BAASF;AAFH,mBAFV;AADF,eAXF;AAmBE;AAAA;AAAA,kBAAQ,WAAU,iBAAlB,EAAoC,MAAK,QAAzC;AAAkD,2EAAC,2DAAD,IAAkB,IAAG,4BAArB;AAAlD;AAnBF,aAFF;AAuBE;AAAA;AAAA,gBAAQ,WAAU,aAAlB,EAAgC,UAAU,CAAC,CAAC,KAAKnsB,KAAL,CAAWorB,UAAvD,EAAmE,SAAS,KAAKJ,SAAjF;AAA4F,yEAAC,2DAAD,IAAkB,IAAG,qBAArB;AAA5F;AAvBF;AANF;AADF;AAFF,KADF;AAuCD;AA/IsD;;AAkJzD,MAAM/qB,WAAWD,UAAU,EAACyrB,cAAczrB,MAAME,KAAN,CAAYC,MAAZ,CAAmBsrB,YAAlC,EAAV,CAAjB;AACO,MAAMa,iBAAiB,2DAAAnxB,CAAQ8E,QAAR,EAAkB,6DAAAyI,CAAWmiB,eAAX,CAAlB,CAAvB,C;;;;;;;;;;;ACxJP;AACA;;AAEA,MAAMhjB,UAAU,SAAhB;AACA,MAAMC,0BAA0B,kBAAhC;;AAEO,MAAMykB,sBAAN,CAA6B;AAClCpzB,cAAYnF,KAAZ,EAAmB+B,UAAU,EAA7B,EAAiC;AAC/B,SAAKy2B,MAAL,GAAcx4B,KAAd;AACA;AACA,SAAKc,QAAL,GAAgBiB,QAAQjB,QAAR,IAAoBZ,OAAOY,QAA3C;AACA,SAAK23B,YAAL,GAAoB12B,QAAQ22B,WAAR,IAAuB,kEAA3C;AACA,SAAKxkB,mBAAL,GAA2B,KAAKA,mBAAL,CAAyB/K,IAAzB,CAA8B,IAA9B,CAA3B;AACD;;AAED;;;;;;AAMA9I,2BAAyB;AACvB,QAAI,KAAKS,QAAL,CAAcmT,eAAd,KAAkCJ,OAAtC,EAA+C;AAC7C;AACA;AACA,WAAK8kB,UAAL;AACD,KAJD,MAIO;AACL;AACA,WAAK73B,QAAL,CAAcsT,gBAAd,CAA+BN,uBAA/B,EAAwD,KAAKI,mBAA7D;AACD;AACF;;AAED;;;;;AAKAykB,eAAa;AACX,SAAKF,YAAL,CAAkBlM,IAAlB,CAAuB,0BAAvB;;AAEA,QAAI;AACF,UAAIqM,2BAA2B,KAAKH,YAAL,CAC5B9L,+BAD4B,CACI,0BADJ,CAA/B;;AAGA,WAAK6L,MAAL,CAAYl4B,QAAZ,CAAqB,iEAAAC,CAAGC,UAAH,CAAc;AACjCC,cAAM,8DAAAC,CAAG4Q,sBADwB;AAEjClO,cAAM,EAACw1B,wBAAD;AAF2B,OAAd,CAArB;AAID,KARD,CAQE,OAAOhmB,EAAP,EAAW;AACX;AACA;AACD;AACF;;AAED;;;;AAIAsB,wBAAsB;AACpB,QAAI,KAAKpT,QAAL,CAAcmT,eAAd,KAAkCJ,OAAtC,EAA+C;AAC7C,WAAK8kB,UAAL;AACA,WAAK73B,QAAL,CAAcqT,mBAAd,CAAkCL,uBAAlC,EAA2D,KAAKI,mBAAhE;AACD;AACF;AAzDiC,C;;;;;;;;;;ACN7B,SAAS7S,qBAAT,CAA+BrB,KAA/B,EAAsCI,eAAtC,EAAuD;AAC5D;AACAJ,QAAM+L,SAAN,CAAgB,MAAM;AACpB,UAAMC,QAAQhM,MAAMiM,QAAN,EAAd;AACA,QAAI,CAACD,MAAMI,QAAN,CAAeT,WAApB,EAAiC;AAC/B;AACD;;AAED,QAAI,CAACvL,gBAAgBuL,WAArB,EAAkC;AAChCvL,sBAAgBgL,IAAhB;AACD;AACF,GATD;AAUA;AACA,SAAO,EAAChL,eAAD,EAAP;AACD,C;;;;;;;;;;;;;ACdD;;AAEA,MAAMy4B,qBAAqB,CAAC,OAAD,EAAU,iBAAV,CAA3B;;AAEO,MAAMC,SAAShqB,SAAS;AAC7B,QAAM5D,QAAQ,EAAd;;AAEA;AACA,OAAK,MAAM6tB,GAAX,IAAkBF,kBAAlB,EAAsC;AACpC,QAAI,OAAO/pB,MAAMiqB,GAAN,CAAP,KAAsB,WAA1B,EAAuC;AACrC7tB,YAAM6tB,GAAN,IAAajqB,MAAMiqB,GAAN,CAAb;AACD;AACF;AACD;AACA,MAAI7tB,MAAM0oB,eAAV,EAA2B;AACzB1oB,UAAM8tB,MAAN,GAAe,GAAf;AACD;;AAED,SAAQ;AAAA;AAAA,MAAQ,SAASlqB,MAAM6F,OAAvB;AACN,iBAAW7F,MAAMsH,SAAN,IAAmB,gBADxB;AAEN,aAAOlL,KAFD;AAGL4D,UAAM0F;AAHD,GAAR;AAKD,CAnBM,C;;;;;;;;ACJA,SAASykB,OAAT,CAAiB5qB,GAAjB,EAAsB;AAC3B,MAAI,CAACA,GAAL,EAAU;AACR,WAAO,EAAP;AACD;AACD,QAAM,EAAC6qB,QAAD,KAAa,IAAI9qB,GAAJ,CAAQC,GAAR,CAAnB;AACA,QAAM8qB,YAAY,CAChB,OADgB,EAEhB,QAFgB,EAGhB,OAHgB,EAIhB,WAJgB,EAKhB,SALgB,EAMhBjzB,QANgB,CAMPgzB,QANO,CAAlB;AAOA,MAAI,CAACC,SAAL,EAAgB;AACd3wB,YAAQ4wB,IAAR,CAAc,gBAAeF,QAAS,oCAAtC,EADc,CAC8D;AAC7E;AACD,SAAOC,YAAY9qB,GAAZ,GAAkB,EAAzB;AACD,C;;;;AChBD;AACA;AACA;AACA;;AAEA;AACA,MAAMgrB,eAAe;AACnBC,KAAG,iDADgB;AAEnB7f,KAAG,iDAFgB;AAGnB8f,KAAG,iDAHgB;AAInBC,UAAQ,sDAJW;AAKnBC,MAAI,kDALe;AAMnBC,MAAI;AANe,CAArB;;AASA;;;;AAIO,SAASC,YAAT,CAAsBC,KAAtB,EAA6B5qB,SAA7B,EAAwC6qB,cAAxC,EAAwD;AAC7D,MAAID,KAAJ,EAAW;AACT,WAAOvuB,OAAOE,IAAP,CAAYquB,KAAZ,EAAmBpd,MAAnB,CAA0B,CAACwS,GAAD,EAAM8K,OAAN,KAAkB;AACjD,YAAM,EAACh4B,MAAD,KAAW83B,MAAME,OAAN,CAAjB;AACA;AACA,YAAMzrB,MAAMvM,SAAS,KAAT,GAAiB,OAAAm3B,CAAQW,MAAME,OAAN,EAAezrB,GAAvB,CAA7B;;AAEA2gB,UAAI8K,OAAJ,IAAgB,8CAAG,MAAMzrB,GAAT;AACd,gBAAQwrB,iBAAiB,QAAjB,GAA4B,EADtB;AAEd,uBAAaD,MAAME,OAAN,EAAevqB,MAFd;AAGd,uBAAazN,MAHC;AAId,qBAAW83B,MAAME,OAAN,EAAerqB,IAJZ;AAKd,iCAAuBoqB,cALT;AAMd,iBAAS7qB,SANK,GAAhB;AAOA,aAAOggB,GAAP;AACD,KAbM,EAaJ,EAbI,CAAP;AAcD;;AAED,SAAO,IAAP;AACD;;AAED;;;AAGO,SAAS+K,QAAT,CAAkBjrB,KAAlB,EAAyB;AAC9B,MAAI,CAAC,mCAAAoE,CAAehN,QAAf,CAAwB4I,MAAMkrB,eAA9B,CAAL,EAAqD;AACnD,UAAM,IAAI73B,KAAJ,CAAW,aAAY2M,MAAMkrB,eAAgB,yHAA7C,CAAN;AACD;AACD,SACE;AAAC,oBAAD;AAAA,eAAW,IAAIlrB,MAAMkrB,eAArB,IAA0CX,YAA1C,EAA4DvqB,MAAMmrB,cAAlE,EAAsFN,aAAa7qB,MAAM8qB,KAAnB,EAA0B9qB,MAAME,SAAhC,EAA2CF,MAAM+qB,cAAjD,CAAtF;AACE;AAAA;AAAA;AAAO/qB,YAAM5E;AAAb;AADF,GADF;AAKD,C;;ACpDD;;AAEO,MAAM,uBAAN,SAA0B,wBAAA0E,CAAMC,aAAhC,CAA8C;AACnD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKorB,cAAL,GAAsB,KAAKA,cAAL,CAAoB/wB,IAApB,CAAyB,IAAzB,CAAtB;AACD;;AAED+wB,mBAAiB;AACf,QAAI,KAAKprB,KAAL,CAAWQ,QAAX,KAAwB,SAA5B,EAAuC;AACrC,WAAKR,KAAL,CAAWI,uBAAX,CAAmC,EAACvH,OAAO,OAAR,EAAiB1B,IAAI,KAAK6I,KAAL,CAAWqrB,SAAhC,EAAnC;AACD;;AAED,SAAKrrB,KAAL,CAAWsrB,OAAX;AACD;;AAEDC,wBAAsB;AACpB,QAAI,KAAKvrB,KAAL,CAAWwrB,aAAf,EAA8B;AAC5B,aACE;AAAA;AAAA,UAAK,WAAU,QAAf;AACE;AAAA;AAAA,YAAK,WAAU,gBAAf;AACE;AAAA;AAAA;AACE,yBAAU,0BADZ;AAEE,uBAAS,KAAKxrB,KAAL,CAAWyrB,SAFtB;AAGG,iBAAKzrB,KAAL,CAAWY,OAAX,CAAmB8qB;AAHtB;AADF;AADF,OADF;AAWD;;AAED,WACE,mDAAQ,WAAU,aAAlB,EAAgC,OAAO,KAAK1rB,KAAL,CAAWY,OAAX,CAAmB+qB,iBAAnB,IAAwC,aAA/E,EAA8F,SAAS,KAAKP,cAA5G,GADF;AAGD;;AAEDxpB,WAAS;AACP,UAAM,EAAC5B,KAAD,KAAU,IAAhB;;AAEA,UAAM4rB,qBAAsB,uBAAsB5rB,MAAMsH,SAAN,GAAmB,IAAGtH,MAAMsH,SAAU,EAAtC,GAA0C,EAAG,EAA/F;;AAEA,WAAQ;AAAA;AAAA,QAAK,WAAWskB,kBAAhB,EAAoC,OAAO,KAAK5rB,KAAL,CAAW6rB,SAAtD;AACN;AAAA;AAAA,UAAK,WAAU,cAAf;AACG7rB,cAAM0F;AADT,OADM;AAIL,WAAK6lB,mBAAL;AAJK,KAAR;AAMD;AA7CkD,C;;;;ACFrD;AACA;AACA;AACA;AACA;;AAEA,MAAMO,oBAAoB,sCAA1B;;AAEO,MAAM,2BAAN,SAA4B,wBAAAhsB,CAAMC,aAAlC,CAAgD;AACrD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK+rB,aAAL,GAAqB,KAAKA,aAAL,CAAmB1xB,IAAnB,CAAwB,IAAxB,CAArB;AACD;;AAED0xB,kBAAgB;AACd,QAAI,KAAK/rB,KAAL,CAAWQ,QAAX,KAAwB,SAA5B,EAAuC;AACrC,WAAKR,KAAL,CAAWI,uBAAX,CAAmC,EAACvH,OAAO,cAAR,EAAwB1B,IAAI,KAAK6I,KAAL,CAAWqrB,SAAvC,EAAnC;AACD;AACD,UAAM,EAACW,UAAD,KAAe,KAAKhsB,KAAL,CAAWY,OAAhC;AACA;AACA,UAAMjP,OAAO,KAAKqO,KAAL,CAAWY,OAAX,CAAmBlC,aAAnB,IAAqCstB,cAAc,UAAhE;AACA,SAAKhsB,KAAL,CAAWisB,QAAX,CAAoB;AAClBt6B,UADkB;AAElB2C,YAAM,EAACqM,MAAM,KAAKX,KAAL,CAAWY,OAAX,CAAmBsrB,kBAAnB,IAAyCF,UAAhD;AAFY,KAApB;AAIA,QAAI,CAAC,KAAKhsB,KAAL,CAAWY,OAAX,CAAmBC,gBAAxB,EAA0C;AACxC,WAAKb,KAAL,CAAWsrB,OAAX;AACD;AACF;;AAEDa,gBAAc;AACZ,UAAM,EAAChe,KAAD,KAAU,KAAKnO,KAAL,CAAWY,OAA3B;AACA,WAAOuN,QAAQ;AAAA;AAAA,QAAI,WAAU,OAAd;AAAuBA;AAAvB,KAAR,GAA6C,IAApD;AACD;;AAEDie,oBAAkB;AAChB,UAAMC,YAAY,OAAAlC,CAAQ,KAAKnqB,KAAL,CAAWY,OAAX,CAAmB0rB,UAA3B,CAAlB;AACA,WAAOD,YAAY,iDAAM,WAAU,WAAhB,EAA4B,OAAO,EAACxR,iBAAkB,QAAOwR,SAAU,IAApC,EAAnC,GAAZ,GAA8F,IAArG;AACD;;AAEDE,iBAAe;AACb,UAAM,EAACvsB,KAAD,KAAU,IAAhB;AACA,QAAI,CAACA,MAAMY,OAAN,CAAclC,aAAf,IAAgC,CAACsB,MAAM+rB,aAAvC,IAAwD,CAAC/rB,MAAMY,OAAN,CAAcorB,UAA3E,EAAuF;AACrF,aAAO,IAAP;AACD;;AAED,WAAQ;AAAC,YAAD;AAAA;AACN,iBAAShsB,MAAM+rB,aAAN,IAAuB,KAAKA,aAD/B;AAEN,eAAO/rB,MAAMY,OAAN,CAAc4rB,YAFf;AAGN,yBAAiBxsB,MAAMY,OAAN,CAAc6rB,uBAHzB;AAILzsB,YAAMY,OAAN,CAAc8rB;AAJT,KAAR;AAMD;;AAEDC,eAAa;AACX,UAAM,EAAC3sB,KAAD,KAAU,IAAhB;AACA,WAAQ,uCAAC,QAAD,IAAU,MAAMA,MAAMY,OAAN,CAAcxF,IAA9B;AACN,sBAAgB,KAAK4E,KAAL,CAAWmrB,cADrB;AAEN,uBAAgB,MAFV;AAGN,aAAOnrB,MAAMY,OAAN,CAAckqB,KAHf;AAIN,iBAAW9qB,MAAME,SAJX,GAAR;AAKD;;AAED0B,WAAS;AACP,UAAM,EAAC5B,KAAD,KAAU,IAAhB;AACA,QAAIsH,YAAY,eAAhB;AACA,QAAItH,MAAMsH,SAAV,EAAqB;AACnBA,mBAAc,IAAGtH,MAAMsH,SAAU,EAAjC;AACD;AACD,QAAItH,MAAMY,OAAN,CAAcgsB,IAAlB,EAAwB;AACtBtlB,mBAAa,OAAb;AACD;AACD,WAAQ;AAAC,6BAAD;AAAA,gCAAiBtH,KAAjB,IAAwB,WAAWsH,SAAnC,EAA8C,WAAW,KAAKtH,KAAL,CAAW6rB,SAApE;AACN,sDAAK,KAAK,OAAA1B,CAAQnqB,MAAMY,OAAN,CAAcmL,IAAtB,KAA+B+f,iBAAzC,EAA4D,WAAU,MAAtE,GADM;AAEN;AAAA;AAAA;AACG,aAAKM,eAAL,EADH;AAAA;AAC4B,aAAKD,WAAL,EAD5B;AAAA;AACgD;AAAA;AAAA,YAAG,WAAU,MAAb;AAAqB,eAAKQ,UAAL;AAArB,SADhD;AAEG,aAAK3sB,KAAL,CAAW6sB;AAFd,OAFM;AAML;AAAA;AAAA;AAAM,aAAKN,YAAL;AAAN;AANK,KAAR;AAQD;AAxEoD,C;;;;ACRvD;AACA;;AAEA,MAAM,yBAAN,SAA6B,wBAAAzsB,CAAMC,aAAnC,CAAiD;AAC/C1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK8sB,YAAL,GAAoB,KAAKA,YAAL,CAAkBzyB,IAAlB,CAAuB,IAAvB,CAApB;AACD;;AAED;;;;AAIA0yB,sBAAoB;AAClB,UAAMC,oBAAoB,KAAKC,IAAL,CAAUC,IAAV,CAAeC,aAAf,CAA6B,mBAA7B,CAA1B;AACA,QAAIH,kBAAkB1iB,OAAtB,EAA+B;AAC7B,WAAK2iB,IAAL,CAAUC,IAAV,CAAeC,aAAf,CAA6B,oBAA7B,EAAmDh4B,KAAnD,GAA2D,SAA3D;AACD;AACF;;AAED23B,eAAaj0B,KAAb,EAAoB;AAClBA,UAAMiiB,cAAN;AACA,SAAKiS,iBAAL;AACA,SAAKE,IAAL,CAAUC,IAAV,CAAeE,MAAf;AACA,QAAI,CAAC,KAAKptB,KAAL,CAAWY,OAAX,CAAmBC,gBAAxB,EAA0C;AACxC,WAAKb,KAAL,CAAWsrB,OAAX;AACD;AACF;;AAED+B,oBAAkB;AAChB,UAAMC,aAAa,CAAC,OAAD,EAAU,QAAV,EAAoB,OAApB,EAA6B,QAA7B,CAAnB;AACA,UAAMC,eAAe,IAAIC,KAAKC,YAAT,CAAsB,KAAKztB,KAAL,CAAWY,OAAX,CAAmBqF,MAAnB,IAA6BynB,UAAUC,QAA7D,EAAuE;AAC1FvxB,aAAO,UADmF;AAE1FwxB,gBAAU,KAAK5tB,KAAL,CAAWY,OAAX,CAAmBitB,aAF6D;AAG1FC,6BAAuB;AAHmE,KAAvE,CAArB;AAKA;AACA,UAAM,EAACC,eAAD,KAAoB,KAAK/tB,KAAL,CAAWY,OAArC;AACA,UAAMotB,WAAW;AACfC,aAAO,KAAKjuB,KAAL,CAAWY,OAAX,CAAmB4rB,YADX;AAEf1H,uBAAiB,KAAK9kB,KAAL,CAAWY,OAAX,CAAmB6rB;AAFrB,KAAjB;;AAKA,WAAQ;AAAA;AAAA,QAAM,WAAU,gBAAhB,EAAiC,QAAQ,KAAKzsB,KAAL,CAAWY,OAAX,CAAmBstB,iBAA5D,EAA+E,QAAQ,KAAKluB,KAAL,CAAWmuB,WAAlG,EAA+G,UAAU,KAAKrB,YAA9H,EAA4I,KAAI,MAAhJ;AACLQ,iBAAWpjB,GAAX,CAAe,CAACkkB,KAAD,EAAQC,GAAR,KAAgB;AAC9B,cAAMC,cAAe,mBAAkBF,KAAM,EAA7C;AACA,cAAMG,SAAS,KAAKvuB,KAAL,CAAWY,OAAX,CAAmB0tB,WAAnB,CAAf;AACA,eAAQ;AAAC,kCAAD,CAAO,QAAP;AAAA,YAAgB,KAAKD,GAArB;AACJ,4DAAO,MAAK,OAAZ,EAAoB,MAAK,QAAzB,EAAkC,OAAOE,MAAzC,EAAiD,IAAIH,KAArD,EAA4D,gBAAgBE,gBAAgBP,eAA5F,GADI;AAEJ;AAAA;AAAA,cAAO,SAASK,KAAhB,EAAuB,WAAU,iBAAjC;AACGb,yBAAaiB,MAAb,CAAoBD,MAApB;AADH;AAFI,SAAR;AAMD,OATA,CADK;AAYN;AAAA;AAAA,UAAK,WAAU,4BAAf;AACE,0DAAO,IAAG,kBAAV,EAA6B,MAAK,UAAlC,GADF;AAEE;AAAA;AAAA,YAAO,SAAQ,kBAAf;AACG,eAAKvuB,KAAL,CAAWY,OAAX,CAAmB6tB;AADtB;AAFF,OAZM;AAmBN,wDAAO,MAAK,QAAZ,EAAqB,MAAK,WAA1B,EAAsC,OAAM,QAA5C,GAnBM;AAoBN,wDAAO,MAAK,QAAZ,EAAqB,MAAK,UAA1B,EAAqC,OAAO,KAAKzuB,KAAL,CAAWY,OAAX,CAAmBitB,aAA/D,GApBM;AAqBN,wDAAO,MAAK,QAAZ,EAAqB,MAAK,SAA1B,EAAoC,OAAOP,WAAWpjB,GAAX,CAAekkB,SAAS,KAAKpuB,KAAL,CAAWY,OAAX,CAAoB,mBAAkBwtB,KAAM,EAA5C,CAAxB,CAA3C,GArBM;AAsBN;AAAA;AAAA,UAAQ,OAAOJ,QAAf,EAAyB,MAAK,QAA9B,EAAuC,WAAU,kCAAjD;AAAqF,aAAKhuB,KAAL,CAAWY,OAAX,CAAmB8rB;AAAxG;AAtBM,KAAR;AAwBD;;AAED9qB,WAAS;AACP,UAAMiqB,YAAY;AAChBoC,aAAO,KAAKjuB,KAAL,CAAWY,OAAX,CAAmB8tB,UADV;AAEhB5J,uBAAiB,KAAK9kB,KAAL,CAAWY,OAAX,CAAmB+tB;AAFpB,KAAlB;AAIA,UAAMC,gBAAgB,+CAAI,OAAO,EAAC9J,iBAAiB,KAAK9kB,KAAL,CAAWY,OAAX,CAAmBiuB,eAArC,EAAX,GAAtB;AACA,WAAQ,uCAAC,2BAAD,yBAAmB,KAAK7uB,KAAxB;AACN,iBAAW,KAAKA,KAAL,CAAWY,OAAX,CAAmBkuB,IADxB;AAEN,sBAAgB,EAACnE,IAAIiE,aAAL,EAFV;AAGN,iBAAW/C,SAHL;AAIN,oBAAc,KAAKwB,eAAL,EAJR,IAAR;AAKD;AA7E8C;;AAgF1C,MAAM0B,aAAa/uB,SAAS;AACjC,QAAMgvB;AACJP,iCAA6B,0BADzB;AAEJxoB,YAAQ,OAFJ;AAGJ4nB,mBAAe,KAHX;AAIJE,qBAAiB;AAJb,KAKD/tB,MAAMY,OALL,CAAN;;AAQA,SAAQ,uCAAC,yBAAD,yBACFZ,KADE;AAEN,aAASgvB,eAFH;AAGN,iBAAY,KAHN,IAAR;AAID,CAbM,C;;;;;;ACnFP;AACA;AACA;AACA;AACA;;AAEO,MAAM,mCAAN,SAAgC,wBAAAlvB,CAAMC,aAAtC,CAAoD;AACzD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKivB,aAAL,GAAqB,KAAKA,aAAL,CAAmB50B,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAKyyB,YAAL,GAAoB,KAAKA,YAAL,CAAkBzyB,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAK2tB,aAAL,GAAqB,KAAKA,aAAL,CAAmB3tB,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAK6C,KAAL,GAAa;AACXgyB,gBAAU,KADC;AAEXC,uBAAiB,KAFN;AAGXC,qBAAe,KAHJ;AAIXC,mBAAa;AAJF,KAAb;AAMD;;AAEKvC,cAAN,CAAmBj0B,KAAnB,EAA0B;AAAA;;AAAA;AACxB,UAAIgwB,IAAJ;;AAEA,UAAI,MAAK3rB,KAAL,CAAWmyB,WAAf,EAA4B;AAC1B;AACD;;AAEDx2B,YAAMiiB,cAAN;AACA,YAAK7Z,QAAL,CAAc,EAACouB,aAAa,IAAd,EAAd;AACA,YAAKrvB,KAAL,CAAWI,uBAAX,CAAmC,EAACvH,OAAO,cAAR,EAAwB1D,OAAO,iCAA/B,EAAkEgC,IAAI,2BAAtE,EAAnC;;AAEA,UAAI,MAAK6I,KAAL,CAAWmuB,WAAX,CAAuBmB,WAAvB,OAAyC,KAA7C,EAAoD;AAClD,cAAKrC,IAAL,CAAUC,IAAV,CAAeE,MAAf;AACA;AACD;;AAED,YAAM,EAAC7tB,GAAD,EAAMgwB,QAAN,KAAkB,MAAKvvB,KAAL,CAAWwvB,eAAX,GACtB,MAAKxvB,KAAL,CAAWwvB,eAAX,CAA2B,MAAKvC,IAAL,CAAUwC,SAArC,EAAgD,MAAKzvB,KAArD,CADsB,GAEtB,EAACT,KAAK,MAAK0tB,IAAL,CAAUC,IAAV,CAAel6B,MAArB,EAA6Bu8B,UAAU,IAAIG,QAAJ,CAAa,MAAKzC,IAAL,CAAUC,IAAvB,CAAvC,EAFF;;AAIA,UAAI;AACF,cAAMyC,eAAe,IAAIC,OAAJ,CAAYrwB,GAAZ,EAAiB,EAAC2C,MAAMqtB,QAAP,EAAiBM,QAAQ,MAAzB,EAAjB,CAArB;AACA,cAAM70B,WAAW,MAAMC,MAAM00B,YAAN,CAAvB;AACA9G,eAAO,MAAM7tB,SAAS6tB,IAAT,EAAb;AACD,OAJD,CAIE,OAAOpvB,GAAP,EAAY;AACZC,gBAAQiE,GAAR,CAAYlE,GAAZ,EADY,CACM;AACnB;;AAED,UAAIovB,QAAQA,KAAK3tB,MAAL,KAAgB,IAA5B,EAAkC;AAChC,cAAK+F,QAAL,CAAc,EAACmuB,eAAe,IAAhB,EAAsBD,iBAAiB,IAAvC,EAAd;AACA,YAAI,CAAC,MAAKnvB,KAAL,CAAWY,OAAX,CAAmBC,gBAAxB,EAA0C;AACxC,gBAAKb,KAAL,CAAWsrB,OAAX,CAAmB,EAACwE,gBAAgB,IAAjB,EAAnB;AACD;AACD,cAAK9vB,KAAL,CAAWI,uBAAX,CAAmC,EAACvH,OAAO,cAAR,EAAwB1D,OAAO,mBAA/B,EAAoDgC,IAAI,2BAAxD,EAAnC;AACD,OAND,MAMO;AACLuC,gBAAQX,KAAR,CAAc,yCAAd,EAAyD8vB,QAAQ,oBAAjE,EADK,CACmF;AACxF,cAAK5nB,QAAL,CAAc,EAACmuB,eAAe,KAAhB,EAAuBD,iBAAiB,IAAxC,EAAd;AACA,cAAKnvB,KAAL,CAAWI,uBAAX,CAAmC,EAACvH,OAAO,cAAR,EAAwB1D,OAAO,iBAA/B,EAAkDgC,IAAI,2BAAtD,EAAnC;AACD;;AAED,YAAK8J,QAAL,CAAc,EAACouB,aAAa,KAAd,EAAd;AAxCwB;AAyCzB;;AAEDJ,kBAAgB;AACd,SAAKhuB,QAAL,CAAc;AACZiuB,gBAAU,IADE;AAEZE,qBAAe,KAFH;AAGZD,uBAAiB;AAHL,KAAd;AAKD;;AAEDY,2BAAyB;AACvB,UAAM,EAACC,aAAD,KAAkB,KAAKhwB,KAAL,CAAWY,OAAnC;;AAEA,QAAI,CAACovB,aAAL,EAAoB;AAClB,aAAO,IAAP;AACD;;AAED,WAAOzzB,OAAOE,IAAP,CAAYuzB,aAAZ,EAA2B9lB,GAA3B,CAA+B,CAACzT,GAAD,EAAM43B,GAAN,KAAc,kDAAO,KAAKA,GAAZ,EAAiB,MAAK,QAAtB,EAA+B,MAAM53B,GAArC,EAA0C,OAAOu5B,cAAcv5B,GAAd,CAAjD,GAA7C,CAAP;AACD;;AAEDw5B,qBAAmB;AACjB,UAAM,EAACrvB,OAAD,KAAY,KAAKZ,KAAvB;AACA,QAAI,CAACY,QAAQsvB,sBAAb,EAAqC;AACnC,aAAO,IAAP;AACD;AACD,WAAQ;AAAA;AAAA,QAAG,WAAU,gBAAb;AACN,6CAAC,QAAD,IAAU,MAAMtvB,QAAQsvB,sBAAxB;AACE,yBAAgB,iBADlB;AAEE,eAAOtvB,QAAQkqB,KAFjB;AAGE,wBAAgB,IAHlB;AAIE,mBAAW,KAAK9qB,KAAL,CAAWE,SAJxB;AADM,KAAR;AAOD;;AAEDiwB,4BAA0B;AACxB,UAAM,EAACvvB,OAAD,KAAY,KAAKZ,KAAvB;AACA,QAAI,CAACY,QAAQwvB,mBAAb,EAAkC;AAChC,aAAO,IAAP;AACD;AACD,WAAQ;AAAA;AAAA,QAAO,WAAU,eAAjB,EAAiC,SAAQ,YAAzC;AACJ;AAAA;AAAA;AACE,0DAAO,MAAK,UAAZ,EAAuB,IAAG,YAA1B,EAAuC,MAAK,SAA5C,EAAsD,UAAS,UAA/D,GADF;AAEE;AAAA;AAAA;AAAM,iDAAC,QAAD,IAAU,MAAMxvB,QAAQwvB,mBAAxB;AACJ,6BAAgB,cADZ;AAEJ,mBAAOxvB,QAAQkqB,KAFX;AAGJ,4BAAgB,IAHZ;AAIJ,uBAAW,KAAK9qB,KAAL,CAAWE,SAJlB;AAAN;AAFF;AADI,KAAR;AAWD;;AAEDmwB,0BAAwB;AACtB,UAAM,EAACzvB,OAAD,KAAY,KAAKZ,KAAvB;AACA,UAAMswB,YAAY,KAAKpzB,KAAL,CAAWkyB,aAA7B;AACA,UAAMmB,eAAeD,aAAa1vB,QAAQ4vB,aAA1C;AACA,UAAMC,WAAWH,YAAY1vB,QAAQ8vB,YAApB,GAAmC9vB,QAAQ+vB,UAA5D;AACA,UAAMC,kBAAkBhwB,QAAQiwB,mBAAhC;AACA,WAAQ;AAAC,6BAAD;AAAiB,WAAK7wB,KAAtB;AAA6B;AAAA;AAAA,UAAK,WAAU,kBAAf;AAClCuwB,uBAAe;AAAA;AAAA,YAAI,WAAU,mBAAd;AAAmCA;AAAnC,SAAf,GAAuE,IADrC;AAEnC;AAAA;AAAA;AAAIE,kBAAJ;AAAcH,sBAAY,IAAZ,GAAmB;AAAC,kBAAD;AAAA,cAAQ,SAAS,KAAKrB,aAAtB;AAAsC2B;AAAtC;AAAjC;AAFmC;AAA7B,KAAR;AAID;;AAED5I,gBAAcnvB,KAAd,EAAqB;AACnB,QAAI,CAAC,KAAKmH,KAAL,CAAW8wB,aAAhB,EAA+B;AAC7B;AACD;AACD,UAAMrkB,WAAW,KAAKzM,KAAL,CAAW8wB,aAAX,CAAyBj4B,MAAM9E,MAAN,CAAaoB,KAAtC,EAA6C,KAAK6K,KAAL,CAAWY,OAAxD,CAAjB;AACA/H,UAAM9E,MAAN,CAAag9B,iBAAb,CAA+BtkB,QAA/B;AACD;;AAEDukB,gBAAc;AACZ,UAAMC,aAAa,KAAKjxB,KAAL,CAAWY,OAAX,CAAmBswB,6BAAnB,IAAoD,KAAKlxB,KAAL,CAAWY,OAAX,CAAmBuwB,wBAA1F;AACA,WAAQ;AACN,WAAI,WADE;AAEN,YAAM,KAAKnxB,KAAL,CAAWoxB,SAAX,IAAwB,OAFxB;AAGN,iBAAU,WAHJ;AAIN,YAAK,OAJC;AAKN,gBAAU,IALJ;AAMN,mBAAaH,UANP;AAON,gBAAU,KAAKjxB,KAAL,CAAW8wB,aAAX,GAA2B,KAAK9I,aAAhC,GAAgD,IAPpD;AAQN,iBAAW,IARL,GAAR;AASD;;AAEDqJ,qBAAmB;AACjB,UAAM,EAACzwB,OAAD,KAAY,KAAKZ,KAAvB;AACA,UAAMsxB,iBAAkB,qBAAoB,KAAKtxB,KAAL,CAAWsH,SAAU,EAAjE;AACA,WAAQ;AAAC,6BAAD;AAAA,oCAAiB,KAAKtH,KAAtB,IAA6B,WAAWsxB,cAAxC,EAAwD,eAAe,IAAvE;AACH1wB,cAAQ2wB,WAAR,GAAsB;AAAA;AAAA,UAAK,WAAU,YAAf;AAA4B,wDAAK,KAAK3wB,QAAQ2wB,WAAlB;AAA5B,OAAtB,GAA4F,IADzF;AAEJ;AAAA;AAAA,UAAK,WAAU,SAAf;AACE;AAAA;AAAA;AAAI3wB,kBAAQ4wB;AAAZ;AADF,OAFI;AAKJ;AAAA;AAAA,UAAM,QAAQ5wB,QAAQ6wB,WAAtB,EAAmC,QAAQ,KAAKzxB,KAAL,CAAWmuB,WAAtD,EAAmE,UAAU,KAAKrB,YAAlF,EAAgG,KAAI,MAApG;AACG,aAAKiD,sBAAL,EADH;AAEE;AAAA;AAAA;AACG,eAAKiB,WAAL,EADH;AAEE;AAAA;AAAA,cAAQ,MAAK,QAAb,EAAsB,WAAU,wBAAhC,EAAyD,KAAI,eAA7D;AAA8EpwB,oBAAQ8wB;AAAtF;AAFF,SAFF;AAMG,aAAKvB,uBAAL,MAAkC,KAAKF,gBAAL;AANrC;AALI,KAAR;AAcD;;AAED0B,yBAAuB;AACrB,WAAOp1B,OAAOE,IAAP,CAAY,KAAKuD,KAAL,CAAWY,OAAvB,EAAgCuG,MAAhC,CAAuC1Q,OAAOA,IAAIW,QAAJ,CAAa,QAAb,CAA9C,EAAsEsW,MAAtE,CAA6E,CAACwS,GAAD,EAAMzpB,GAAN,KAAc;AAChGypB,UAAIzpB,IAAIm7B,MAAJ,CAAW,CAAX,CAAJ,IAAqB,KAAK5xB,KAAL,CAAWY,OAAX,CAAmBnK,GAAnB,CAArB;AACA,aAAOypB,GAAP;AACD,KAHM,EAGJ,EAHI,CAAP;AAID;;AAEDte,WAAS;AACP,UAAMhB,4BAAc,KAAKZ,KAAL,CAAWY,OAAzB,EAAqC,KAAK+wB,oBAAL,EAArC,CAAN;;AAEA,QAAI,KAAKz0B,KAAL,CAAWiyB,eAAf,EAAgC;AAC9B,aAAO,KAAKkB,qBAAL,EAAP;AACD;AACD,QAAI,KAAKnzB,KAAL,CAAWgyB,QAAf,EAAyB;AACvB,aAAO,KAAKmC,gBAAL,EAAP;AACD;AACD,WAAO,uCAAC,2BAAD,gCAAmB,KAAKrxB,KAAxB,IAA+B,SAASY,OAAxC,EAAiD,eAAe,KAAKquB,aAArE,IAAP;AACD;AAhLwD,C;;;;ACN3D;AACA;;AAEO,MAAM4C,mBAAmB7xB,SAAS;AACvC,QAAM8xB,YAAYp1B,OAAOgxB,SAAP,CAAiBoE,SAAjB,CAA2BC,KAA3B,CAAiC,qBAAjC,CAAlB;AACA,QAAMC,kBAAkBF,YAAYlU,SAASkU,UAAU,CAAV,CAAT,EAAuB,EAAvB,CAAZ,GAAyC,CAAjE;AACA,QAAM9C;AACJyC,iBAAa;AADT,KAEDzxB,MAAMY,OAFL;AAGJovB;AACEh9B,cAAQ,OADV;AAEEi/B,eAAS,eAFX;AAGEC,kBAAY,UAHd;AAIEC,eAAS,MAJX;AAKEC,kBAAY,SALd;AAMEC,mBAAaL,eANf;AAOEM,oBAActyB,MAAMY,OAAN,CAAc0xB,YAP9B;AAQEC,gBAAUvyB,MAAMY,OAAN,CAAc2xB;AAR1B,OASKvyB,MAAMY,OAAN,CAAcovB,aATnB;AAHI,IAAN;;AAgBA,SAAQ,uCAAC,mCAAD,+BACFhwB,KADE;AAEN,aAASgvB,eAFH;AAGN,iBAAY,KAHN,IAAR;AAID,CAvBM,C;;;;ACHP;AACA;;AAEO,MAAMwD,oBAAoBxyB,SAAS;AACxC,QAAMgvB;AACJyC,iBAAa;AADT,KAEDzxB,MAAMY,OAFL;AAGJovB;AACEyC,mBAAazyB,MAAMY,OAAN,CAAc8xB,iBAAd,IAAmC,oBADlD;AAEEC,WAAK,GAFP;AAGEvgC,YAAM,OAHR;AAIEwgC,kBAAa,qCAAoC5yB,MAAM7I,EAAG;AAJ5D,OAKK6I,MAAMY,OAAN,CAAcovB,aALnB;AAHI,IAAN;;AAYA,SAAQ,uCAAC,mCAAD,gCACFhwB,KADE;AAEN,aAASgvB,eAFH;AAGN,iBAAY,MAHN,IAAR;AAID,CAjBM,C;;ACHP;;;;;;AAMO,SAAS6D,oBAAT,CAA8BC,GAA9B,EAAmClyB,OAAnC,EAA4C;AACjD,QAAM,EAACqF,MAAD,KAAWrF,OAAjB;AACA;AACA,QAAMmyB,WAAW,sJAAjB;AACA,QAAMC,cAAcD,SAASjE,IAAT,CAAcgE,GAAd,CAApB;AACA,MAAIG,WAAJ,CALiD,CAKhC;AACjB,UAAQhtB,MAAR;AACE,SAAK,OAAL;AACA,SAAK,OAAL;AACE;AACAgtB,oBAAcH,IAAInuB,MAAJ,IAAc,EAAd,IAAoBmuB,IAAInuB,MAAJ,IAAc,EAAlC,IAAwC,CAACuuB,MAAMJ,GAAN,CAAvD;AACA;AACF,SAAK,IAAL;AACE;AACAG,oBAAcH,IAAInuB,MAAJ,IAAc,CAAd,IAAmBmuB,IAAInuB,MAAJ,IAAc,EAAjC,IAAuC,CAACuuB,MAAMJ,GAAN,CAAtD;AACA;AACF;AACA;AACEG,oBAAc,CAACC,MAAMJ,GAAN,CAAf;AACA;AAbJ;AAeA,MAAIE,WAAJ,EAAiB;AACf,WAAO,OAAP;AACD,GAFD,MAEO,IAAIC,WAAJ,EAAiB;AACtB,WAAO,OAAP;AACD;AACD,SAAO,EAAP;AACD,C;;;;ACjCD;AACA;AACA;;AAEA,SAASnC,aAAT,CAAuB37B,KAAvB,EAA8ByL,OAA9B,EAAuC;AACrC,QAAMjP,OAAO,oBAAAkhC,CAAqB19B,KAArB,EAA4ByL,OAA5B,CAAb;AACA,SAAOjP,OAAO,EAAP,GAAY,qCAAnB;AACD;;AAED,SAAS69B,eAAT,CAAyB9gB,KAAzB,EAAgC9O,OAAhC,EAAyC;AACvC,QAAM,EAACgB,OAAD,KAAYhB,OAAlB;AACA,QAAMjO,OAAOiP,QAAQuyB,WAAR,GAAsB,oBAAAN,CAAqBnkB,MAAMvZ,KAA3B,EAAkCyL,OAAlC,CAAtB,GAAmE,OAAhF;AACA,QAAM2uB,WAAW,IAAIG,QAAJ,EAAjB;AACA,MAAInwB,GAAJ;AACA,MAAI5N,SAAS,OAAb,EAAsB;AACpB4N,UAAM,gDAAN;AACAgwB,aAAS6D,MAAT,CAAgB,eAAhB,EAAiC1kB,MAAMvZ,KAAvC;AACAo6B,aAAS6D,MAAT,CAAgB,UAAhB,EAA4BxyB,QAAQyyB,cAApC;AACA9D,aAAS6D,MAAT,CAAgB,SAAhB,EAA2BxyB,QAAQ0yB,OAAnC;AACD,GALD,MAKO,IAAI3hC,SAAS,OAAb,EAAsB;AAC3B4N,UAAM,4CAAN;AACAgwB,aAAS6D,MAAT,CAAgB,OAAhB,EAAyB1kB,MAAMvZ,KAA/B;AACAo6B,aAAS6D,MAAT,CAAgB,aAAhB,EAA+BxyB,QAAQ2yB,gBAAvC;AACAhE,aAAS6D,MAAT,CAAgB,YAAhB,EAA8BI,mBAAoB,qCAAoC5zB,QAAQzI,EAAG,EAAnE,CAA9B;AACD;AACDo4B,WAAS6D,MAAT,CAAgB,MAAhB,EAAwBxyB,QAAQqF,MAAhC;AACA,SAAO,EAACspB,QAAD,EAAWhwB,GAAX,EAAP;AACD;;AAEM,MAAMk0B,sBAAsBzzB,SACjC,uCAAC,mCAAD,kCAAuBA,KAAvB;AACE,eAAY,MADd;AAEE,aAAU,wBAFZ;AAGE,aAAWA,MAAMY,OAAN,CAAcuyB,WAAd,GAA4B,MAA5B,GAAqC,OAHlD;AAIE,iBAAenzB,MAAMY,OAAN,CAAcuyB,WAAd,GAA4BrC,aAA5B,GAA4C,IAJ7D;AAKE,mBAAiBtB,eALnB,IADK,C;;;AC7BP;AACA;AACA;AACA;AACA;;AAEA;AACO,MAAMjuB,oBAAoB;AAC/BmyB,kBAAgB,2BADe;AAE/BC,sBAAoB,iBAFW;AAG/BC,sBAAoB,gBAHW;AAI/BC,0BAAwB,mBAJO;AAK/BC,eAAa,UAAA/E;AALkB,CAA1B,C;;;;;;;;;ACPP;;AAEA,MAAMgF,iBAAiB,GAAvB;;AAEA,MAAMC,oBAAoB,2BAA1B;AACA,MAAMC,eAAe,yBAArB;AACA,MAAMC,uBAAuB,kBAA7B;;AAEA;;;;;;;;;;;;;AAaA,MAAMC,aAAN,CAAoB;AAClB;;;;;;;;;AASAC,cAAY1vB,MAAZ,EAAoB;AAClB,SAAK2vB,OAAL,GAAe3vB,MAAf;AACA,SAAK4vB,MAAL,GAAc,CAAd;AACA,SAAKC,OAAL,GAAe7vB,OAAOC,MAAtB;AACA,SAAKka,OAAL,GAAe,EAAf;;AAEA,UAAM2V,SAAS,EAAf;;AAEA,SAAKC,MAAL;AACA,WAAO,KAAKH,MAAL,GAAc,KAAKC,OAA1B,EAAmC;AACjC,UAAI;AACF,aAAKG,QAAL;AACD,OAFD,CAEE,OAAOr5B,CAAP,EAAU;AACV,YAAIA,aAAas5B,WAAjB,EAA8B;AAC5BH,iBAAOn9B,IAAP,CAAYgE,CAAZ;;AAEA,eAAKu5B,oBAAL;AACD,SAJD,MAIO;AACL,gBAAMv5B,CAAN;AACD;AACF;AACD,WAAKo5B,MAAL;AACD;;AAED,WAAO,CAAC,KAAK5V,OAAN,EAAe2V,MAAf,CAAP;AACD;;AAED;;;;;;AAMAE,aAAW;AACT;AACA;AACA,QAAI,KAAKJ,MAAL,KAAgB,CAAhB,IACA,KAAKD,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,MAAkC,IADtC,EAC4C;AAC1C,YAAM,KAAKv7B,KAAL,CAAY;uDAAZ,CAAN;AAED;;AAED,UAAM87B,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAX;;AAEA;AACA,QAAIO,OAAO,GAAP,IACDA,OAAO,GAAP,IACC,CAAC,GAAD,EAAM,GAAN,EAAW,IAAX,EAAiBz9B,QAAjB,CAA0B,KAAKi9B,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,CAA1B,CAFJ,EAE+D;AAC7D,WAAKQ,WAAL;AACA;AACD;;AAED,QAAID,OAAO,GAAX,EAAgB;AACd,WAAKE,WAAL;AACA;AACD;;AAED,SAAKC,UAAL;AACD;;AAED;;;;;AAKAD,gBAAc;AACZ,SAAKT,MAAL,IAAe,CAAf;AACA,QAAI,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,YAAM,KAAKv7B,KAAL,CAAW,iCAAX,CAAN;AACD;;AAED,SAAKu7B,MAAL,IAAe,CAAf;;AAEA,SAAKW,YAAL;AACA,SAAKC,cAAL;AACA,SAAKD,YAAL;;AAEA,QAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAA9B,IACA,KAAKD,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,MAAkC,GADtC,EAC2C;AACzC,YAAM,KAAKv7B,KAAL,CAAW,kCAAX,CAAN;AACD;;AAED,SAAKu7B,MAAL,IAAe,CAAf;AACD;;AAED;;;;;;AAMAU,eAAa;AACX,UAAM79B,KAAK,KAAKg+B,kBAAL,EAAX;;AAEA,SAAKF,YAAL;;AAEA,QAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,WAAKA,MAAL;AACD;;AAED,SAAKW,YAAL;;AAEA,UAAMnC,MAAM,KAAKsC,UAAL,EAAZ;;AAEA,QAAIj+B,GAAGob,UAAH,CAAc,GAAd,KAAsBugB,QAAQ,IAAlC,EAAwC;AACtC,YAAM,KAAK/5B,KAAL,CAAW,+BAAX,CAAN;AACD;;AAED,QAAIuL,QAAQ,IAAZ;;AAEA,QAAI,KAAK+vB,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,YAAMe,YAAY,KAAKf,MAAvB;AACA,WAAKW,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,aAAKA,MAAL,GAAce,SAAd;AACA/wB,gBAAQ,KAAKgxB,aAAL,EAAR;AACD;AACF;;AAED,QAAIhxB,UAAU,IAAV,IAAkB,OAAOwuB,GAAP,KAAe,QAArC,EAA+C;AAC7C,WAAKjU,OAAL,CAAa1nB,EAAb,IAAmB27B,GAAnB;AACD,KAFD,MAEO;AACL,UAAIA,QAAQ,IAAR,IAAgBxuB,UAAU,IAA9B,EAAoC;AAClC,cAAM,KAAKvL,KAAL,CAAW,gDAAX,CAAN;AACD;;AAED,WAAK8lB,OAAL,CAAa1nB,EAAb,IAAmB,EAAnB;;AAEA,UAAI27B,QAAQ,IAAZ,EAAkB;AAChB,aAAKjU,OAAL,CAAa1nB,EAAb,EAAiB27B,GAAjB,GAAuBA,GAAvB;AACD;;AAED,UAAIxuB,UAAU,IAAd,EAAoB;AAClB,aAAKua,OAAL,CAAa1nB,EAAb,EAAiBmN,KAAjB,GAAyBA,KAAzB;AACD;AACF;AACF;;AAED;;;;;AAKAmwB,WAAS;AACP,QAAII,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAT;AACA,WAAOO,OAAO,GAAP,IAAcA,OAAO,IAArB,IAA6BA,OAAO,IAApC,IAA4CA,OAAO,IAA1D,EAAgE;AAC9DA,WAAK,KAAKR,OAAL,CAAa,EAAE,KAAKC,MAApB,CAAL;AACD;AACF;;AAED;;;;;AAKAW,iBAAe;AACb,QAAIJ,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAT;AACA,WAAOO,OAAO,GAAP,IAAcA,OAAO,IAA5B,EAAkC;AAChCA,WAAK,KAAKR,OAAL,CAAa,EAAE,KAAKC,MAApB,CAAL;AACD;AACF;;AAED;;;;;AAKAiB,mBAAiB;AACf,WAAO,IAAP,EAAa;AACX,YAAMC,MAAM,KAAKlB,MAAjB;;AAEA,WAAKW,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,IAAlC,EAAwC;AACtC,aAAKA,MAAL,IAAe,CAAf;AACD,OAFD,MAEO;AACL,aAAKA,MAAL,GAAckB,GAAd;AACA;AACD;AACF;AACF;;AAED;;;;;;;;;AASAC,gBAAcC,KAAKzB,YAAnB,EAAiC;AAC/ByB,OAAGC,SAAH,GAAe,KAAKrB,MAApB;AACA,UAAMj7B,SAASq8B,GAAGE,IAAH,CAAQ,KAAKvB,OAAb,CAAf;;AAEA,QAAIh7B,WAAW,IAAf,EAAqB;AACnB,WAAKi7B,MAAL,IAAe,CAAf;AACA,YAAM,KAAKv7B,KAAL,CAAY,2BAA0B28B,GAAGG,QAAH,EAAc,GAApD,CAAN;AACD;;AAED,SAAKvB,MAAL,GAAcoB,GAAGC,SAAjB;AACA,WAAOt8B,OAAO,CAAP,CAAP;AACD;;AAED;;;;;;AAMA87B,uBAAqB;AACnB,WAAO,KAAKM,aAAL,CAAmBzB,iBAAnB,CAAP;AACD;;AAED;;;;;;AAMAkB,mBAAiB;AACf,QAAIhgC,OAAO,EAAX;;AAEA,UAAM4gC,QAAQ,KAAKxB,MAAnB;AACA,QAAIyB,KAAK,KAAK1B,OAAL,CAAa2B,UAAb,CAAwB,KAAK1B,MAA7B,CAAT;;AAEA,QAAKyB,MAAM,EAAN,IAAYA,MAAM,GAAnB,IAA2B;AAC1BA,UAAM,EAAN,IAAYA,MAAM,EADnB,IAC0B;AAC1BA,WAAO,EAFP,IAEaA,OAAO,EAFxB,EAE4B;AAAE;AAC5BA,WAAK,KAAK1B,OAAL,CAAa2B,UAAb,CAAwB,EAAE,KAAK1B,MAA/B,CAAL;AACD,KAJD,MAIO;AACL,YAAM,KAAKv7B,KAAL,CAAW,8CAAX,CAAN;AACD;;AAED,WAAQg9B,MAAM,EAAN,IAAYA,MAAM,GAAnB,IAA2B;AAC1BA,UAAM,EAAN,IAAYA,MAAM,EADnB,IAC0B;AACzBA,UAAM,EAAN,IAAYA,MAAM,EAFnB,IAE0B;AAC1BA,WAAO,EAHP,IAGaA,OAAO,EAHpB,IAG0BA,OAAO,EAHxC,EAG4C;AAAE;AAC5CA,WAAK,KAAK1B,OAAL,CAAa2B,UAAb,CAAwB,EAAE,KAAK1B,MAA/B,CAAL;AACD;;AAED;AACA;AACA;AACA;AACA,WAAO,KAAKD,OAAL,CAAa2B,UAAb,CAAwB,KAAK1B,MAAL,GAAc,CAAtC,MAA6C,EAApD,EAAwD;AACtD,WAAKA,MAAL;AACD;;AAEDp/B,YAAQ,KAAKm/B,OAAL,CAAal1B,KAAb,CAAmB22B,KAAnB,EAA0B,KAAKxB,MAA/B,CAAR;;AAEA,WAAO,EAAE3iC,MAAM,SAAR,EAAmBuD,IAAnB,EAAP;AACD;;AAED;;;;;;AAMA+gC,cAAY;AACV,UAAMH,QAAQ,KAAKxB,MAAL,GAAc,CAA5B;;AAEA,WAAO,EAAE,KAAKA,MAAP,GAAgB,KAAKC,OAA5B,EAAqC;AACnC,YAAMM,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAX;;AAEA,UAAIO,OAAO,GAAX,EAAgB;AACd;AACD;;AAED,UAAIA,OAAO,IAAX,EAAiB;AACf,cAAM,KAAK97B,KAAL,CAAW,gCAAX,CAAN;AACD;AACF;;AAED,WAAO,KAAKs7B,OAAL,CAAa6B,SAAb,CAAuBJ,KAAvB,EAA8B,KAAKxB,MAAL,EAA9B,CAAP;AACD;;AAED;;;;;;;;AAQAc,eAAa;AACX;AACA;AACA;AACA;AACA;AACA,UAAMU,QAAQ,KAAKxB,MAAnB;AACA,QAAI6B,MAAM,KAAK9B,OAAL,CAAaj1B,OAAb,CAAqB,IAArB,EAA2B,KAAKk1B,MAAhC,CAAV;;AAEA,QAAI6B,QAAQ,CAAC,CAAb,EAAgB;AACdA,YAAM,KAAK5B,OAAX;AACD;;AAED,UAAM6B,mBAAmBN,UAAUK,GAAV,GACvB,KAAK9B,OAAL,CAAal1B,KAAb,CAAmB22B,KAAnB,EAA0BK,GAA1B,CADuB,GACU,IADnC;;AAGA,QAAIC,oBAAoBA,iBAAiBh/B,QAAjB,CAA0B,GAA1B,CAAxB,EAAwD;AACtD,aAAO,KAAKi/B,iBAAL,EAAP;AACD;;AAED,SAAK/B,MAAL,GAAc6B,MAAM,CAApB;;AAEA,SAAKZ,cAAL;;AAEA,QAAI,KAAKlB,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACA;AACA;AACA,aAAO8B,gBAAP;AACD;;AAED,UAAMf,YAAY,KAAKf,MAAvB;;AAEA,SAAKW,YAAL;;AAEA,QAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACA;AACA,WAAKA,MAAL,GAAce,SAAd;AACA,aAAOe,gBAAP;AACD;;AAED,QAAIA,gBAAJ,EAAsB;AACpB;AACA;AACA,WAAK9B,MAAL,GAAcwB,KAAd;AACD;;AAED,WAAO,KAAKO,iBAAL,EAAP;AACD;;AAED;;;;;;;;;AASA;AACAA,sBAAoB;AAClB,QAAIC,SAAS,EAAb;AACA,UAAM11B,UAAU,EAAhB;AACA,QAAI21B,aAAa,CAAjB;;AAEA,QAAI1B,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAT;;AAEA,WAAO,KAAKA,MAAL,GAAc,KAAKC,OAA1B,EAAmC;AACjC;AACA;AACA,UAAIM,OAAO,IAAX,EAAiB;AACf,aAAKP,MAAL;;AAEA;AACA;AACA;AACA;AACA,cAAMkC,kBAAkB,KAAKlC,MAA7B;AACA,aAAKiB,cAAL;AACA,cAAMkB,gBAAgB,KAAKnC,MAA3B;;AAGA,YAAI,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACD;AACD,aAAKW,YAAL;;AAEA,YAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAA9B,IACA,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAD9B,IAEA,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAF9B,IAGA,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAHlC,EAGuC;AACrC,eAAKA,MAAL,GAAcmC,aAAd;AACA;AACD;;AAEDH,kBAAU,KAAKjC,OAAL,CAAa6B,SAAb,CAAuBM,eAAvB,EAAwCC,aAAxC,CAAV;;AAEA,YAAIH,OAAO3xB,MAAP,IAAiB/D,QAAQ+D,MAA7B,EAAqC;AACnC2xB,oBAAU,IAAV;AACD;AACDzB,aAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAL;AACA;AACD,OAhCD,MAgCO,IAAIO,OAAO,IAAX,EAAiB;AACtB,cAAM6B,MAAM,KAAKrC,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,CAAZ;AACA,YAAIoC,QAAQ,GAAR,IAAeA,QAAQ,GAAvB,IAA8BA,QAAQ,IAA1C,EAAgD;AAC9C7B,eAAK6B,GAAL;AACA,eAAKpC,MAAL;AACD;AACF,OANM,MAMA,IAAIO,OAAO,GAAX,EAAgB;AACrB;AACA,YAAIyB,OAAO3xB,MAAX,EAAmB;AACjB/D,kBAAQvJ,IAAR,CAAai/B,MAAb;AACD;AACD,YAAIC,aAAaxC,iBAAiB,CAAlC,EAAqC;AACnC,gBAAM,KAAKh7B,KAAL,CACH,2CAA0Cg7B,cAAe,EADtD,CAAN;AAED;AACDuC,iBAAS,EAAT;AACA11B,gBAAQvJ,IAAR,CAAa,KAAKs/B,YAAL,EAAb;;AAEA,aAAKrC,MAAL;;AAEAO,aAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAL;AACAiC;AACA;AACD;;AAED,UAAI1B,EAAJ,EAAQ;AACNyB,kBAAUzB,EAAV;AACD;AACD,WAAKP,MAAL;AACAO,WAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAL;AACD;;AAED,QAAI1zB,QAAQ+D,MAAR,KAAmB,CAAvB,EAA0B;AACxB,aAAO2xB,OAAO3xB,MAAP,GAAgB2xB,MAAhB,GAAyB,IAAhC;AACD;;AAED,QAAIA,OAAO3xB,MAAX,EAAmB;AACjB/D,cAAQvJ,IAAR,CAAai/B,MAAb;AACD;;AAED,WAAO11B,OAAP;AACD;AACD;;AAEA;;;;;;;AAOA+1B,iBAAe;AACb,UAAMb,QAAQ,EAAE,KAAKxB,MAArB;;AAEA,SAAKG,MAAL;;AAEA,QAAI,KAAKJ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAA9B,IACA,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAA9B,IACA,KAAKD,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,MAAkC,GAFtC,EAE4C;AAC1C,YAAMsC,WAAW,KAAKC,WAAL,EAAjB;;AAEA,aAAO;AACLllC,cAAM,KADD;AAELmlC,aAAK,IAFA;AAGLC,cAAMH,SAAS,CAAT,CAHD;AAILI,aAAKJ,SAAS,CAAT;AAJA,OAAP;AAMD;;AAED;AACA,SAAKtC,MAAL,GAAcwB,KAAd;AACA,SAAKb,YAAL;;AAEA,UAAMgC,WAAW,KAAKC,qBAAL,EAAjB;;AAEA,SAAKzC,MAAL;;AAEA,UAAMI,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAX;;AAEA,QAAIO,OAAO,GAAX,EAAgB;AACd,UAAIoC,SAAStlC,IAAT,KAAkB,MAAlB,IAA4BslC,SAAS9/B,EAAT,CAAYjC,IAAZ,CAAiBqd,UAAjB,CAA4B,GAA5B,CAAhC,EAAkE;AAChE,cAAM,KAAKxZ,KAAL,CACJ,wDADI,CAAN;AAGD;;AAED,aAAOk+B,QAAP;AACD;;AAED,QAAIpC,OAAO,GAAP,IAAc,KAAKR,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,MAAkC,GAApD,EAAyD;AACvD,YAAM,KAAKv7B,KAAL,CAAW,sBAAX,CAAN;AACD;;AAED,QAAIk+B,SAAStlC,IAAT,KAAkB,KAAtB,EAA6B;AAC3B,YAAM,KAAKoH,KAAL,CAAW,iDAAX,CAAN;AACD;;AAED,QAAIk+B,SAAStlC,IAAT,KAAkB,KAAtB,EAA6B;AAC3B,YAAM,KAAKoH,KAAL,CAAW,uCAAX,CAAN;AACD;;AAED,QAAIk+B,SAAStlC,IAAT,KAAkB,MAAlB,IAA4B,CAACslC,SAAS9/B,EAAT,CAAYjC,IAAZ,CAAiBqd,UAAjB,CAA4B,GAA5B,CAAjC,EAAmE;AACjE,YAAM,KAAKxZ,KAAL,CACJ,4DADI,CAAN;AAGD;;AAGD,SAAKu7B,MAAL,IAAe,CAAf,CAzDa,CAyDK;;AAElB,SAAKW,YAAL;;AAEA,QAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,IAAlC,EAAwC;AACtC,YAAM,KAAKv7B,KAAL,CAAW,yCAAX,CAAN;AACD;;AAED,SAAK07B,MAAL;;AAEA,UAAMmC,WAAW,KAAKC,WAAL,EAAjB;;AAEA,QAAID,SAAS,CAAT,EAAYjyB,MAAZ,KAAuB,CAA3B,EAA8B;AAC5B,YAAM,KAAK5L,KAAL,CAAW,4CAAX,CAAN;AACD;;AAED,WAAO;AACLpH,YAAM,KADD;AAELmlC,WAAKG,QAFA;AAGLF,YAAMH,SAAS,CAAT,CAHD;AAILI,WAAKJ,SAAS,CAAT;AAJA,KAAP;AAMD;;AAED;;;;;;AAMAM,0BAAwB;AACtB,UAAMC,UAAU,KAAKC,UAAL,EAAhB;;AAEA,QAAID,QAAQxlC,IAAR,KAAiB,KAArB,EAA4B;AAC1B,aAAOwlC,OAAP;AACD;;AAED,QAAI,KAAK9C,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,WAAKA,MAAL;;AAEA,YAAMp/B,OAAO,KAAKugC,aAAL,EAAb;AACA,WAAKnB,MAAL;AACA,aAAO;AACL3iC,cAAM,MADD;AAELwF,YAAIggC,OAFC;AAGLjiC;AAHK,OAAP;AAKD;;AAED,QAAI,KAAKm/B,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,WAAKA,MAAL;;AAEA,YAAM79B,MAAM,KAAK4gC,aAAL,EAAZ;AACA,WAAK/C,MAAL;AACA,aAAO;AACL3iC,cAAM,KADD;AAELwF,YAAIggC,OAFC;AAGL1gC;AAHK,OAAP;AAKD;;AAED,QAAI,KAAK49B,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,WAAKA,MAAL;AACA,YAAM3zB,OAAO,KAAK22B,WAAL,EAAb;;AAEA,UAAI,CAACpD,qBAAqBpF,IAArB,CAA0BqI,QAAQjiC,IAAlC,CAAL,EAA8C;AAC5C,cAAM,KAAK6D,KAAL,CAAW,uCAAX,CAAN;AACD;;AAED,WAAKu7B,MAAL;;AAEA6C,cAAQxlC,IAAR,GAAe,KAAf;;AAEA,aAAO;AACLA,cAAM,MADD;AAEL4lC,aAAKJ,OAFA;AAGLx2B;AAHK,OAAP;AAKD;;AAED,WAAOw2B,OAAP;AACD;;AAED;;;;;;AAMAG,gBAAc;AACZ,UAAM32B,OAAO,EAAb;;AAEA,WAAO,KAAK2zB,MAAL,GAAc,KAAKC,OAA1B,EAAmC;AACjC,WAAKU,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,eAAO3zB,IAAP;AACD;;AAED,YAAMm2B,MAAM,KAAKI,qBAAL,EAAZ;;AAEA;AACA;AACA,UAAIJ,IAAInlC,IAAJ,KAAa,KAAjB,EAAwB;AACtBgP,aAAKtJ,IAAL,CAAUy/B,GAAV;AACD,OAFD,MAEO;AACL,aAAK7B,YAAL;;AAEA,YAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,eAAKA,MAAL;AACA,eAAKW,YAAL;;AAEA,gBAAMnC,MAAM,KAAKoE,qBAAL,EAAZ;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAI,OAAOpE,GAAP,KAAe,QAAf,IACAtuB,MAAMC,OAAN,CAAcquB,GAAd,CADA,IAEAA,IAAInhC,IAAJ,KAAa,KAFjB,EAEwB;AACtBgP,iBAAKtJ,IAAL,CAAU;AACR1F,oBAAM,MADE;AAERuD,oBAAM4hC,IAAI5hC,IAFF;AAGR49B;AAHQ,aAAV;AAKD,WARD,MAQO;AACL,iBAAKwB,MAAL,GAAc,KAAKD,OAAL,CAAamD,WAAb,CAAyB,GAAzB,EAA8B,KAAKlD,MAAnC,IAA6C,CAA3D;AACA,kBAAM,KAAKv7B,KAAL,CACJ,oCADI,CAAN;AAED;AAEF,SAzBD,MAyBO;AACL4H,eAAKtJ,IAAL,CAAUy/B,GAAV;AACD;AACF;;AAED,WAAK7B,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACD,OAFD,MAEO,IAAI,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AAC5C,aAAKA,MAAL;AACD,OAFM,MAEA;AACL,cAAM,KAAKv7B,KAAL,CAAW,qBAAX,CAAN;AACD;AACF;;AAED,WAAO4H,IAAP;AACD;;AAED;;;;;;AAMA82B,cAAY;AACV,QAAIC,MAAM,EAAV;AACA,QAAI3B,KAAK,KAAK1B,OAAL,CAAa2B,UAAb,CAAwB,KAAK1B,MAA7B,CAAT;;AAEA;AACA,QAAIyB,OAAO,EAAX,EAAe;AACb2B,aAAO,GAAP;AACA3B,WAAK,KAAK1B,OAAL,CAAa2B,UAAb,CAAwB,EAAE,KAAK1B,MAA/B,CAAL;AACD;;AAED;AACA,QAAIyB,KAAK,EAAL,IAAWA,KAAK,EAApB,EAAwB;AACtB,YAAM,KAAKh9B,KAAL,CAAY,oBAAmB2+B,GAAI,GAAnC,CAAN;AACD;;AAED;AACA,WAAO3B,MAAM,EAAN,IAAYA,MAAM,EAAzB,EAA6B;AAC3B2B,aAAO,KAAKrD,OAAL,CAAa,KAAKC,MAAL,EAAb,CAAP;AACAyB,WAAK,KAAK1B,OAAL,CAAa2B,UAAb,CAAwB,KAAK1B,MAA7B,CAAL;AACD;;AAED;AACA,QAAIyB,OAAO,EAAX,EAAe;AACb2B,aAAO,KAAKrD,OAAL,CAAa,KAAKC,MAAL,EAAb,CAAP;AACAyB,WAAK,KAAK1B,OAAL,CAAa2B,UAAb,CAAwB,KAAK1B,MAA7B,CAAL;;AAEA;AACA,UAAIyB,KAAK,EAAL,IAAWA,KAAK,EAApB,EAAwB;AACtB,cAAM,KAAKh9B,KAAL,CAAY,oBAAmB2+B,GAAI,GAAnC,CAAN;AACD;;AAED;AACA,aAAO3B,MAAM,EAAN,IAAYA,MAAM,EAAzB,EAA6B;AAC3B2B,eAAO,KAAKrD,OAAL,CAAa,KAAKC,MAAL,EAAb,CAAP;AACAyB,aAAK,KAAK1B,OAAL,CAAa2B,UAAb,CAAwB,KAAK1B,MAA7B,CAAL;AACD;AACF;;AAED,WAAO;AACL3iC,YAAM,KADD;AAELmhC,WAAK4E;AAFA,KAAP;AAID;;AAED;;;;;;AAMApC,kBAAgB;AACd,UAAMhxB,QAAQ,EAAd;;AAEA,WAAO,KAAKgwB,MAAL,GAAc,KAAKC,OAA1B,EAAmC;AACjC,UAAI,KAAKF,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACD;AACD,WAAKW,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACD;AACD,WAAKA,MAAL;;AAEA,YAAM79B,MAAM,KAAKg/B,aAAL,EAAZ;;AAEA,WAAKR,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,cAAM,KAAKv7B,KAAL,CAAW,cAAX,CAAN;AACD;AACD,WAAKu7B,MAAL;;AAEA,WAAKW,YAAL;;AAEA,YAAMnC,MAAM,KAAKsC,UAAL,EAAZ;;AAEA,UAAItC,QAAQ,IAAZ,EAAkB;AAChB,cAAM,KAAK/5B,KAAL,CAAW,oCAAX,CAAN;AACD;;AAED,UAAI,OAAO+5B,GAAP,KAAe,QAAnB,EAA6B;AAC3BxuB,cAAM7N,GAAN,IAAaq8B,GAAb;AACD,OAFD,MAEO;AACLxuB,cAAM7N,GAAN,IAAa;AACXq8B;AADW,SAAb;AAGD;;AAED,WAAKyC,cAAL;AACD;;AAED,WAAOjxB,KAAP;AACD;;AAED;;;;;;AAMAuyB,gBAAc;AACZ,UAAMD,WAAW,EAAjB;AACA,QAAIriB,QAAQ,CAAZ;AACA,QAAIojB,YAAJ;;AAEA,WAAO,KAAKrD,MAAL,GAAc,KAAKC,OAA1B,EAAmC;AACjC,YAAMM,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAX;;AAEA,UAAI,CAACO,OAAO,GAAP,IAAc,KAAKR,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,MAAkC,GAAjD,KACAO,OAAO,GADX,EACgB;AACd;AACD;AACD,UAAIA,OAAO,GAAX,EAAgB;AACd,aAAKP,MAAL;AACAqD,uBAAepjB,KAAf;AACD;;AAED,UAAI,KAAK8f,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,cAAM,KAAKv7B,KAAL,CAAW,cAAX,CAAN;AACD;;AAED,WAAKu7B,MAAL;;AAEA,YAAM79B,MAAM,KAAK4gC,aAAL,EAAZ;;AAEA,WAAKpC,YAAL;;AAEA,YAAMnC,MAAM,KAAKsC,UAAL,EAAZ;;AAEA,UAAItC,QAAQ,IAAZ,EAAkB;AAChB,cAAM,KAAK/5B,KAAL,CAAW,kCAAX,CAAN;AACD;;AAED69B,eAASriB,OAAT,IAAoB,EAAC9d,GAAD,EAAMq8B,GAAN,EAApB;;AAEA,WAAK2B,MAAL;AACD;;AAED,WAAO,CAACmC,QAAD,EAAWe,YAAX,CAAP;AACD;;AAED;;;;;;AAMAN,kBAAgB;AACd;;AAEA,UAAMtB,KAAK,KAAK1B,OAAL,CAAa2B,UAAb,CAAwB,KAAK1B,MAA7B,CAAX;AACA,QAAI6C,OAAJ;;AAEA,QAAKpB,MAAM,EAAN,IAAYA,MAAM,EAAnB,IAA0BA,OAAO,EAArC,EAAyC;AACvCoB,gBAAU,KAAKM,SAAL,EAAV;AACD,KAFD,MAEO;AACLN,gBAAU,KAAKjC,cAAL,EAAV;AACD;;AAED,QAAI,KAAKb,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,YAAM,KAAKv7B,KAAL,CAAW,cAAX,CAAN;AACD;;AAED,SAAKu7B,MAAL;AACA,WAAO6C,OAAP;AACD;;AAED;;;;;;AAMAC,eAAa;AACX,UAAMQ,MAAM,KAAKvD,OAAL,CAAa2B,UAAb,CAAwB,KAAK1B,MAA7B,CAAZ;;AAEA,QAAIsD,QAAQ,EAAZ,EAAgB;AAAE;AAChB,WAAKtD,MAAL;AACA,aAAO;AACL3iC,cAAM,KADD;AAELuD,cAAM,KAAKugC,aAAL;AAFD,OAAP;AAID;;AAED,UAAMoC,MAAMD,QAAQ,EAAR,CAAW;AACrB;AADU,MAER,KAAKvD,OAAL,CAAa2B,UAAb,CAAwB,KAAK1B,MAAL,GAAc,CAAtC;AACF;AAHU,MAIRsD,GAJJ;;AAMA,QAAKC,OAAO,EAAP,IAAaA,OAAO,GAArB,IAA6B;AAC5BA,WAAO,EAAP,IAAaA,OAAO,EADzB,EAC8B;AAAE;AAC9B,aAAO;AACLlmC,cAAM,KADD;AAELuD,cAAM,KAAKigC,kBAAL;AAFD,OAAP;AAID;;AAED,QAAK0C,OAAO,EAAP,IAAaA,OAAO,EAAzB,EAA8B;AAAE;AAC9B,aAAO,KAAKJ,SAAL,EAAP;AACD;;AAED,QAAIG,QAAQ,EAAZ,EAAgB;AAAE;AAChB,aAAO,KAAK3B,SAAL,EAAP;AACD;;AAED,UAAM,KAAKl9B,KAAL,CAAW,kBAAX,CAAN;AACD;;AAED;;;;;AAKA+7B,gBAAc;AACZ;AACA;AACA,QAAIqB,MAAM,KAAK9B,OAAL,CAAaj1B,OAAb,CAAqB,IAArB,EAA2B,KAAKk1B,MAAhC,CAAV;;AAEA,WAAO6B,QAAQ,CAAC,CAAT,KACH,KAAK9B,OAAL,CAAa8B,MAAM,CAAnB,MAA0B,GAA1B,IAAiC,KAAK9B,OAAL,CAAa8B,MAAM,CAAnB,MAA0B,GAA5D,IACC,KAAK9B,OAAL,CAAa8B,MAAM,CAAnB,MAA0B,GAA1B,IACC,CAAC,GAAD,EAAM,GAAN,EAAW/+B,QAAX,CAAoB,KAAKi9B,OAAL,CAAa8B,MAAM,CAAnB,CAApB,CAHE,CAAP,EAGmD;AACjD,WAAK7B,MAAL,GAAc6B,MAAM,CAApB;;AAEAA,YAAM,KAAK9B,OAAL,CAAaj1B,OAAb,CAAqB,IAArB,EAA2B,KAAKk1B,MAAhC,CAAN;;AAEA,UAAI6B,QAAQ,CAAC,CAAb,EAAgB;AACd;AACD;AACF;;AAED,QAAIA,QAAQ,CAAC,CAAb,EAAgB;AACd,WAAK7B,MAAL,GAAc,KAAKC,OAAnB;AACD,KAFD,MAEO;AACL,WAAKD,MAAL,GAAc6B,MAAM,CAApB;AACD;AACF;;AAED;;;;;;;AAOAp9B,QAAM6G,OAAN,EAAe;AACb,WAAO,IAAI+0B,WAAJ,CAAgB/0B,OAAhB,CAAP;AACD;;AAED;;;;;;;AAOAg1B,yBAAuB;AACrB,QAAIkB,QAAQ,KAAKxB,MAAjB;;AAEA,WAAO,IAAP,EAAa;AACX,UAAIwB,UAAU,CAAV,IAAe,KAAKzB,OAAL,CAAayB,QAAQ,CAArB,MAA4B,IAA/C,EAAqD;AACnD,cAAMC,KAAK,KAAK1B,OAAL,CAAa2B,UAAb,CAAwBF,KAAxB,CAAX;;AAEA,YAAKC,MAAM,EAAN,IAAYA,MAAM,GAAnB,IAA2B;AAC1BA,cAAM,EAAN,IAAYA,MAAM,EADnB,IAC0B;AACzBA,eAAO,EAFR,IAEcA,OAAO,EAFzB,EAE6B;AAAE;AAC7B,eAAKzB,MAAL,GAAcwB,KAAd;AACA;AACD;AACF;;AAEDA,cAAQ,KAAKzB,OAAL,CAAaj1B,OAAb,CAAqB,IAArB,EAA2B02B,KAA3B,CAAR;;AAEA,UAAIA,UAAU,CAAC,CAAf,EAAkB;AAChB,aAAKxB,MAAL,GAAc,KAAKC,OAAnB;AACA;AACD;AACDuB;AACD;AACF;AAn7BiB;;AAs7BpB;;;;;;;AAOe,SAASgC,KAAT,CAAepzB,MAAf,EAAuB;AACpC,QAAMqzB,SAAS,IAAI5D,aAAJ,EAAf;AACA,SAAO4D,OAAO3D,WAAP,CAAmB1vB,MAAnB,CAAP;AACD,C;;ACr9BD;;AAEA;;;;;;;AAOO,MAAMszB,UAAN,CAAiB;;AAEtB;;;;;;;AAOA3hC,cAAYlB,KAAZ,EAAmB8iC,IAAnB,EAAyB;AACvB,SAAK9iC,KAAL,GAAaA,KAAb;AACA,SAAK8iC,IAAL,GAAYA,IAAZ;AACD;;AAED;;;;;AAKAC,YAAU;AACR,WAAO,KAAK/iC,KAAZ;AACD;;AAED;;;;;;;;;;AAUA0gC,aAAW;AACT,UAAM,IAAIxiC,KAAJ,CAAU,mDAAV,CAAN;AACD;AAnCqB;;AAsCjB,MAAM8kC,UAAN,SAAyBH,UAAzB,CAAoC;AACzCnC,aAAW;AACT,WAAO,KAAK1gC,KAAL,IAAc,KAArB;AACD;AAHwC;;AAMpC,MAAMijC,YAAN,SAA2BJ,UAA3B,CAAsC;AAC3C3hC,cAAYlB,KAAZ,EAAmB8iC,IAAnB,EAAyB;AACvB,UAAMI,WAAWljC,KAAX,CAAN,EAAyB8iC,IAAzB;AACD;;AAEDpC,WAASyC,GAAT,EAAc;AACZ,QAAI;AACF,YAAMC,KAAKD,IAAIE,kBAAJ,CACThL,KAAKC,YADI,EACU,KAAKwK,IADf,CAAX;AAGA,aAAOM,GAAG/J,MAAH,CAAU,KAAKr5B,KAAf,CAAP;AACD,KALD,CAKE,OAAOkG,CAAP,EAAU;AACV;AACA,aAAO,KAAKlG,KAAZ;AACD;AACF;;AAED;;;;;;;AAOA48B,QAAMuG,GAAN,EAAWG,KAAX,EAAkB;AAChB,QAAIA,iBAAiBL,YAArB,EAAmC;AACjC,aAAO,KAAKjjC,KAAL,KAAesjC,MAAMtjC,KAA5B;AACD;AACD,WAAO,KAAP;AACD;AA7B0C;;AAgCtC,MAAMujC,cAAN,SAA6BV,UAA7B,CAAwC;AAC7C3hC,cAAYlB,KAAZ,EAAmB8iC,IAAnB,EAAyB;AACvB,UAAM,IAAIp9B,IAAJ,CAAS1F,KAAT,CAAN,EAAuB8iC,IAAvB;AACD;;AAEDpC,WAASyC,GAAT,EAAc;AACZ,QAAI;AACF,YAAMK,MAAML,IAAIE,kBAAJ,CACVhL,KAAKoL,cADK,EACW,KAAKX,IADhB,CAAZ;AAGA,aAAOU,IAAInK,MAAJ,CAAW,KAAKr5B,KAAhB,CAAP;AACD,KALD,CAKE,OAAOkG,CAAP,EAAU;AACV;AACA,aAAO,KAAKlG,KAAZ;AACD;AACF;AAf4C;;AAkBxC,MAAM0jC,YAAN,SAA2Bb,UAA3B,CAAsC;AAC3CnC,aAAW;AACT,WAAO,KAAK1gC,KAAZ;AACD;;AAED;;;;;;;AAOA48B,QAAMuG,GAAN,EAAWG,KAAX,EAAkB;AAChB,QAAIA,iBAAiBI,YAArB,EAAmC;AACjC,aAAO,KAAK1jC,KAAL,KAAesjC,MAAMtjC,KAA5B;AACD,KAFD,MAEO,IAAI,OAAOsjC,KAAP,KAAiB,QAArB,EAA+B;AACpC,aAAO,KAAKtjC,KAAL,KAAesjC,KAAtB;AACD,KAFM,MAEA,IAAIA,iBAAiBL,YAArB,EAAmC;AACxC,YAAMU,KAAKR,IAAIE,kBAAJ,CACThL,KAAKuL,WADI,EACSN,MAAMR,IADf,CAAX;AAGA,aAAO,KAAK9iC,KAAL,KAAe2jC,GAAGE,MAAH,CAAUP,MAAMtjC,KAAhB,CAAtB;AACD;AACD,WAAO,KAAP;AACD;AAxB0C,C;;ACvG7C;;;;;;;;;;;;;AAaA;;AAEA,6CAAe;AACb,YAAU,CAAC,CAAC8jC,GAAD,CAAD,EAAQhB,IAAR,KACR,IAAI,YAAJ,CAAiBgB,IAAIf,OAAJ,EAAjB,EAAgCgB,MAAMD,IAAIhB,IAAV,EAAgBA,IAAhB,CAAhC,CAFW;AAGb,cAAY,CAAC,CAACgB,GAAD,CAAD,EAAQhB,IAAR,KACV,IAAI,cAAJ,CAAmBgB,IAAIf,OAAJ,EAAnB,EAAkCgB,MAAMD,IAAIhB,IAAV,EAAgBA,IAAhB,CAAlC;AAJW,CAAf;;AAOA,SAASiB,KAAT,CAAeC,OAAf,EAAwBlB,IAAxB,EAA8B;AAC5B,SAAO17B,OAAOC,MAAP,CAAc,EAAd,EAAkB28B,OAAlB,EAA2B97B,OAAO46B,IAAP,CAA3B,CAAP;AACD;;AAED,SAAS56B,MAAT,CAAgB46B,IAAhB,EAAsB;AACpB,QAAMmB,YAAY,EAAlB;AACA,OAAK,MAAM,CAAClkC,IAAD,EAAOmkC,GAAP,CAAX,IAA0B98B,OAAOsiB,OAAP,CAAeoZ,IAAf,CAA1B,EAAgD;AAC9CmB,cAAUlkC,IAAV,IAAkBmkC,IAAInB,OAAJ,EAAlB;AACD;AACD,SAAOkB,SAAP;AACD,C;;AChCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA;AAEA;;AAEA;AACA,MAAME,uBAAuB,IAA7B;;AAEA;AACA,MAAMC,MAAM,QAAZ;AACA,MAAMC,MAAM,QAAZ;;AAGA;;;;;;;;;;;;;;AAcA,SAASC,aAAT,CAAuBC,GAAvB,EAA4BC,OAA5B,EAAqC3C,GAArC,EAA0C;AACxC,MAAI2C,QAAQ3C,GAAR,CAAJ,EAAkB;AAChB,WAAO2C,QAAQ3C,GAAR,CAAP;AACD;;AAED,QAAM,EAAExC,MAAF,KAAakF,GAAnB;AACAlF,SAAOn9B,IAAP,CAAY,IAAIuiC,UAAJ,CAAe,YAAf,CAAZ;AACA,SAAO,IAAI,UAAJ,EAAP;AACD;;AAGD;;;;;;;;;;;;AAYA,SAASC,gBAAT,CAA0BH,GAA1B,EAA+B,EAACxkC,IAAD,EAA/B,EAAuC;AACrC,QAAM,EAAEojC,GAAF,EAAO9D,MAAP,KAAkBkF,GAAxB;AACA,QAAM95B,UAAU1K,KAAKqd,UAAL,CAAgB,GAAhB,IACZ+lB,IAAIwB,MAAJ,CAAW7iC,GAAX,CAAe/B,IAAf,CADY,GAEZojC,IAAIyB,SAAJ,CAAc9iC,GAAd,CAAkB/B,IAAlB,CAFJ;;AAIA,MAAI,CAAC0K,OAAL,EAAc;AACZ,UAAMnG,MAAMvE,KAAKqd,UAAL,CAAgB,GAAhB,IACR,IAAIynB,cAAJ,CAAoB,iBAAgB9kC,IAAK,EAAzC,CADQ,GAER,IAAI8kC,cAAJ,CAAoB,oBAAmB9kC,IAAK,EAA5C,CAFJ;AAGAs/B,WAAOn9B,IAAP,CAAYoC,GAAZ;AACA,WAAO,IAAI,UAAJ,CAAevE,IAAf,CAAP;AACD;;AAED,SAAO0K,OAAP;AACD;;AAED;;;;;;;;;;;;;;;;AAgBA,SAASq6B,iBAAT,CAA2BP,GAA3B,EAAgC,EAACviC,EAAD,EAAKV,GAAL,EAAhC,EAA2C;AACzC,QAAMmJ,UAAUi6B,iBAAiBH,GAAjB,EAAsBviC,EAAtB,CAAhB;AACA,MAAIyI,mBAAmB,UAAvB,EAAmC;AACjC,WAAOA,OAAP;AACD;;AAED,QAAM,EAAE04B,GAAF,EAAO9D,MAAP,KAAkBkF,GAAxB;AACA,QAAM3X,UAAUmY,KAAKR,GAAL,EAAUjjC,GAAV,CAAhB;;AAEA,WAAS0jC,aAAT,CAAuB/f,IAAvB,EAA6B;AAC3B,WAAO5V,MAAMC,OAAN,CAAc2V,IAAd,KACLA,KAAK,CAAL,EAAQzoB,IAAR,KAAiB,KADZ,IAELyoB,KAAK,CAAL,EAAQ0c,GAAR,KAAgB,IAFlB;AAGD;;AAED,MAAIqD,cAAcv6B,QAAQkzB,GAAtB,CAAJ,EAAgC;AAC9B;AACA,SAAK,MAAMsH,OAAX,IAAsBx6B,QAAQkzB,GAAR,CAAY,CAAZ,EAAeiE,IAArC,EAA2C;AACzC,YAAMsD,aAAaH,KAAKR,GAAL,EAAUU,QAAQ3jC,GAAlB,CAAnB;AACA,UAAIsrB,QAAQgQ,KAAR,CAAcuG,GAAd,EAAmB+B,UAAnB,CAAJ,EAAoC;AAClC,eAAOD,OAAP;AACD;AACF;AACF;;AAED5F,SAAOn9B,IAAP,CAAY,IAAI2iC,cAAJ,CAAoB,oBAAmBjY,QAAQ8T,QAAR,CAAiByC,GAAjB,CAAsB,EAA7D,CAAZ;AACA,SAAO4B,KAAKR,GAAL,EAAU95B,OAAV,CAAP;AACD;;AAGD;;;;;;;;;;;;;;AAcA,SAAS06B,mBAAT,CAA6BZ,GAA7B,EAAkC,EAACviC,EAAD,EAAKjC,IAAL,EAAlC,EAA8C;AAC5C,QAAM0K,UAAUi6B,iBAAiBH,GAAjB,EAAsBviC,EAAtB,CAAhB;AACA,MAAIyI,mBAAmB,UAAvB,EAAmC;AACjC,WAAOA,OAAP;AACD;;AAED,MAAIA,QAAQ0E,KAAZ,EAAmB;AACjB;AACA,SAAK,MAAMi2B,QAAX,IAAuB36B,QAAQ0E,KAA/B,EAAsC;AACpC,UAAIpP,SAASqlC,QAAb,EAAuB;AACrB,eAAO36B,QAAQ0E,KAAR,CAAcpP,IAAd,CAAP;AACD;AACF;AACF;;AAED,QAAM,EAAEs/B,MAAF,KAAakF,GAAnB;AACAlF,SAAOn9B,IAAP,CAAY,IAAI2iC,cAAJ,CAAoB,sBAAqB9kC,IAAK,EAA9C,CAAZ;AACA,SAAOglC,KAAKR,GAAL,EAAU95B,OAAV,CAAP;AACD;;AAED;;;;;;;;;;;;;;;;AAgBA,SAAS46B,gBAAT,CAA0Bd,GAA1B,EAA+B,EAAC5C,GAAD,EAAMC,IAAN,EAAYC,GAAZ,EAA/B,EAAiD;AAC/C,MAAIF,QAAQ,IAAZ,EAAkB;AAChB,WAAO2C,cAAcC,GAAd,EAAmB3C,IAAnB,EAAyBC,GAAzB,CAAP;AACD;;AAED,QAAMC,WAAWiD,KAAKR,GAAL,EAAU5C,GAAV,CAAjB;AACA,MAAIG,oBAAoB,UAAxB,EAAoC;AAClC,WAAOwC,cAAcC,GAAd,EAAmB3C,IAAnB,EAAyBC,GAAzB,CAAP;AACD;;AAED;AACA,OAAK,MAAMoD,OAAX,IAAsBrD,IAAtB,EAA4B;AAC1B,UAAMtgC,MAAMyjC,KAAKR,GAAL,EAAUU,QAAQ3jC,GAAlB,CAAZ;AACA,UAAMgkC,cACJhkC,eAAe,YAAf,IAA+BA,eAAe,YADhD;;AAGA,QAAI,CAACgkC,WAAL,EAAkB;AAChB;AACD;;AAED,UAAM,EAAEnC,GAAF,KAAUoB,GAAhB;;AAEA,QAAIjjC,IAAIs7B,KAAJ,CAAUuG,GAAV,EAAerB,QAAf,CAAJ,EAA8B;AAC5B,aAAOmD,OAAP;AACD;AACF;;AAED,SAAOX,cAAcC,GAAd,EAAmB3C,IAAnB,EAAyBC,GAAzB,CAAP;AACD;;AAGD;;;;;;;;;;;;;;AAcA,SAASkD,IAAT,CAAcR,GAAd,EAAmBgB,IAAnB,EAAyB;AACvB;AACA;AACA,MAAI,OAAOA,IAAP,KAAgB,QAAhB,IAA4BA,gBAAgB,UAAhD,EAA4D;AAC1D,WAAOA,IAAP;AACD;;AAED;AACA;AACA,MAAIl2B,MAAMC,OAAN,CAAci2B,IAAd,CAAJ,EAAyB;AACvB,WAAOC,QAAQjB,GAAR,EAAagB,IAAb,CAAP;AACD;;AAGD,UAAQA,KAAK/oC,IAAb;AACE,SAAK,SAAL;AACE,aAAO,IAAI,YAAJ,CAAiB+oC,KAAKxlC,IAAtB,CAAP;AACF,SAAK,KAAL;AACE,aAAO,IAAI,YAAJ,CAAiBwlC,KAAK5H,GAAtB,CAAP;AACF,SAAK,KAAL;AACE,aAAO8H,iBAAiBlB,GAAjB,EAAsBgB,IAAtB,CAAP;AACF,SAAK,KAAL;AACE,aAAOG,kBAAkBnB,GAAlB,EAAuBgB,IAAvB,CAAP;AACF,SAAK,MAAL;AACE,aAAOI,eAAepB,GAAf,EAAoBgB,IAApB,CAAP;AACF,SAAK,KAAL;AAAY;AACV,cAAM96B,UAAUi6B,iBAAiBH,GAAjB,EAAsBgB,IAAtB,CAAhB;AACA,eAAOR,KAAKR,GAAL,EAAU95B,OAAV,CAAP;AACD;AACD,SAAK,MAAL;AAAa;AACX,cAAMgF,OAAO01B,oBAAoBZ,GAApB,EAAyBgB,IAAzB,CAAb;AACA,eAAOR,KAAKR,GAAL,EAAU90B,IAAV,CAAP;AACD;AACD,SAAK,KAAL;AAAY;AACV,cAAMw1B,UAAUH,kBAAkBP,GAAlB,EAAuBgB,IAAvB,CAAhB;AACA,eAAOR,KAAKR,GAAL,EAAUU,OAAV,CAAP;AACD;AACD,SAAK,KAAL;AAAY;AACV,cAAMW,SAASP,iBAAiBd,GAAjB,EAAsBgB,IAAtB,CAAf;AACA,eAAOR,KAAKR,GAAL,EAAUqB,MAAV,CAAP;AACD;AACD,SAAK1gB,SAAL;AAAgB;AACd;AACA,YAAIqgB,KAAK5H,GAAL,KAAa,IAAb,IAAqB4H,KAAK5H,GAAL,KAAazY,SAAtC,EAAiD;AAC/C,iBAAO6f,KAAKR,GAAL,EAAUgB,KAAK5H,GAAf,CAAP;AACD;;AAED,cAAM,EAAE0B,MAAF,KAAakF,GAAnB;AACAlF,eAAOn9B,IAAP,CAAY,IAAIuiC,UAAJ,CAAe,UAAf,CAAZ;AACA,eAAO,IAAI,UAAJ,EAAP;AACD;AACD;AACE,aAAO,IAAI,UAAJ,EAAP;AAtCJ;AAwCD;;AAED;;;;;;;;;;;;AAYA,SAASgB,gBAAT,CAA0BlB,GAA1B,EAA+B,EAACxkC,IAAD,EAA/B,EAAuC;AACrC,QAAM,EAAEyL,IAAF,EAAQ6zB,MAAR,KAAmBkF,GAAzB;;AAEA,MAAI,CAAC/4B,IAAD,IAAS,CAACA,KAAKq6B,cAAL,CAAoB9lC,IAApB,CAAd,EAAyC;AACvCs/B,WAAOn9B,IAAP,CAAY,IAAI2iC,cAAJ,CAAoB,qBAAoB9kC,IAAK,EAA7C,CAAZ;AACA,WAAO,IAAI,UAAJ,CAAeA,IAAf,CAAP;AACD;;AAED,QAAM+jC,MAAMt4B,KAAKzL,IAAL,CAAZ;;AAEA;AACA,MAAI+jC,eAAe,UAAnB,EAA+B;AAC7B,WAAOA,GAAP;AACD;;AAED;AACA,UAAQ,OAAOA,GAAf;AACE,SAAK,QAAL;AACE,aAAOA,GAAP;AACF,SAAK,QAAL;AACE,aAAO,IAAI,YAAJ,CAAiBA,GAAjB,CAAP;AACF,SAAK,QAAL;AACE,UAAIA,eAAep+B,IAAnB,EAAyB;AACvB,eAAO,IAAI,cAAJ,CAAmBo+B,GAAnB,CAAP;AACD;AACH;AACEzE,aAAOn9B,IAAP,CACE,IAAI4jC,SAAJ,CAAe,8BAA6B/lC,IAAK,KAAI,OAAO+jC,GAAI,EAAhE,CADF;AAGA,aAAO,IAAI,UAAJ,CAAe/jC,IAAf,CAAP;AAbJ;AAeD;;AAED;;;;;;;;;;;;AAYA,SAAS2lC,iBAAT,CAA2BnB,GAA3B,EAAgC,EAACxkC,IAAD,EAAhC,EAAwC;AACtC;AACA;AACA,QAAM,EAAEojC,KAAK,EAAE4C,UAAF,EAAP,EAAuB1G,MAAvB,KAAkCkF,GAAxC;AACA,QAAMrzB,OAAO60B,WAAWhmC,IAAX,KAAoB,QAAAimC,CAASjmC,IAAT,CAAjC;;AAEA,MAAI,CAACmR,IAAL,EAAW;AACTmuB,WAAOn9B,IAAP,CAAY,IAAI2iC,cAAJ,CAAoB,qBAAoB9kC,IAAK,IAA7C,CAAZ;AACA,WAAO,IAAI,UAAJ,CAAgB,GAAEA,IAAK,IAAvB,CAAP;AACD;;AAED,MAAI,OAAOmR,IAAP,KAAgB,UAApB,EAAgC;AAC9BmuB,WAAOn9B,IAAP,CAAY,IAAI4jC,SAAJ,CAAe,YAAW/lC,IAAK,oBAA/B,CAAZ;AACA,WAAO,IAAI,UAAJ,CAAgB,GAAEA,IAAK,IAAvB,CAAP;AACD;;AAED,SAAOmR,IAAP;AACD;;AAED;;;;;;;;;;;;;;AAcA,SAASy0B,cAAT,CAAwBpB,GAAxB,EAA6B,EAACnC,GAAD,EAAM52B,IAAN,EAA7B,EAA0C;AACxC,QAAMy6B,SAASP,kBAAkBnB,GAAlB,EAAuBnC,GAAvB,CAAf;;AAEA,MAAI6D,kBAAkB,UAAtB,EAAkC;AAChC,WAAOA,MAAP;AACD;;AAED,QAAMC,UAAU,EAAhB;AACA,QAAMC,UAAU,EAAhB;;AAEA,OAAK,MAAMrC,GAAX,IAAkBt4B,IAAlB,EAAwB;AACtB,QAAIs4B,IAAItnC,IAAJ,KAAa,MAAjB,EAAyB;AACvB2pC,cAAQrC,IAAI/jC,IAAZ,IAAoBglC,KAAKR,GAAL,EAAUT,IAAInG,GAAd,CAApB;AACD,KAFD,MAEO;AACLuI,cAAQhkC,IAAR,CAAa6iC,KAAKR,GAAL,EAAUT,GAAV,CAAb;AACD;AACF;;AAED,MAAI;AACF,WAAOmC,OAAOC,OAAP,EAAgBC,OAAhB,CAAP;AACD,GAFD,CAEE,OAAOjgC,CAAP,EAAU;AACV;AACA,WAAO,IAAI,UAAJ,EAAP;AACD;AACF;;AAED;;;;;;;;;;AAUA,SAASs/B,OAAT,CAAiBjB,GAAjB,EAAsB6B,GAAtB,EAA2B;AACzB,QAAM,EAAEjD,GAAF,EAAOkD,KAAP,EAAchH,MAAd,KAAyBkF,GAA/B;;AAEA,MAAI8B,MAAMC,GAAN,CAAUF,GAAV,CAAJ,EAAoB;AAClB/G,WAAOn9B,IAAP,CAAY,IAAIuiC,UAAJ,CAAe,kBAAf,CAAZ;AACA,WAAO,IAAI,UAAJ,EAAP;AACD;;AAED;AACA4B,QAAM10B,GAAN,CAAUy0B,GAAV;AACA,QAAMliC,SAAS,EAAf;;AAEA;AACA;AACA,QAAMqiC,eAAepD,IAAIqD,aAAJ,IAAqBJ,IAAI52B,MAAJ,GAAa,CAAvD;;AAEA,OAAK,MAAMi3B,IAAX,IAAmBL,GAAnB,EAAwB;AACtB,QAAI,OAAOK,IAAP,KAAgB,QAApB,EAA8B;AAC5BviC,aAAOhC,IAAP,CAAYukC,IAAZ;AACA;AACD;;AAED,UAAMC,OAAO3B,KAAKR,GAAL,EAAUkC,IAAV,EAAgB/F,QAAhB,CAAyByC,GAAzB,CAAb;;AAEA,QAAIoD,YAAJ,EAAkB;AAChBriC,aAAOhC,IAAP,CAAYkiC,GAAZ;AACD;;AAED,QAAIsC,KAAKl3B,MAAL,GAAc20B,oBAAlB,EAAwC;AACtC9E,aAAOn9B,IAAP,CACE,IAAIuiC,UAAJ,CACE,sCACC,IAAGiC,KAAKl3B,MAAO,oBAAmB20B,oBAAqB,GAF1D,CADF;AAMAjgC,aAAOhC,IAAP,CAAYwkC,KAAK18B,KAAL,CAAWm6B,oBAAX,CAAZ;AACD,KARD,MAQO;AACLjgC,aAAOhC,IAAP,CAAYwkC,IAAZ;AACD;;AAED,QAAIH,YAAJ,EAAkB;AAChBriC,aAAOhC,IAAP,CAAYmiC,GAAZ;AACD;AACF;;AAEDgC,QAAM3kC,MAAN,CAAa0kC,GAAb;AACA,SAAOliC,OAAOgO,IAAP,CAAY,EAAZ,CAAP;AACD;;AAED;;;;;;;;;;;;;;;AAee,SAASzP,OAAT,CAAiB0gC,GAAjB,EAAsB33B,IAAtB,EAA4Bf,OAA5B,EAAqC40B,SAAS,EAA9C,EAAkD;AAC/D,QAAMkF,MAAM;AACVpB,OADU,EACL33B,IADK,EACC6zB,MADD,EACSgH,OAAO,IAAIM,OAAJ;AADhB,GAAZ;AAGA,SAAO5B,KAAKR,GAAL,EAAU95B,OAAV,EAAmBi2B,QAAnB,CAA4ByC,GAA5B,CAAP;AACD,C;;AC3fD;AACA;;AAEA;;;;;;;;;;;;;AAaO,MAAM,sBAAN,CAAqB;;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BAjiC,cAAY0lC,OAAZ,EAAqB,EAAEC,YAAY,EAAd,EAAkBN,eAAe,IAAjC,KAA0C,EAA/D,EAAmE;AACjE,SAAKK,OAAL,GAAev3B,MAAMC,OAAN,CAAcs3B,OAAd,IAAyBA,OAAzB,GAAmC,CAACA,OAAD,CAAlD;;AAEA,SAAKjC,MAAL,GAAc,IAAI1jC,GAAJ,EAAd;AACA,SAAK2jC,SAAL,GAAiB,IAAI3jC,GAAJ,EAAjB;AACA,SAAK8kC,UAAL,GAAkBc,SAAlB;AACA,SAAKL,aAAL,GAAqBD,YAArB;AACA,SAAKO,MAAL,GAAc,IAAIC,OAAJ,EAAd;AACD;;AAED;;;;;AAKA,MAAIjzB,QAAJ,GAAe;AACb,WAAO,KAAK8wB,SAAL,CAAeoC,OAAOC,QAAtB,GAAP;AACD;;AAED;;;;;;AAMAC,aAAWllC,EAAX,EAAe;AACb,WAAO,KAAK4iC,SAAL,CAAe0B,GAAf,CAAmBtkC,EAAnB,CAAP;AACD;;AAED;;;;;;;;;AASA69B,aAAW79B,EAAX,EAAe;AACb,WAAO,KAAK4iC,SAAL,CAAe9iC,GAAf,CAAmBE,EAAnB,CAAP;AACD;;AAED;;;;;;;;;;;;;;;;;;AAkBA2N,cAAYxP,MAAZ,EAAoB;AAClB,UAAM,CAACupB,OAAD,EAAU2V,MAAV,IAAoB,KAAAsD,CAAMxiC,MAAN,CAA1B;AACA,SAAK,MAAM6B,EAAX,IAAiB0nB,OAAjB,EAA0B;AACxB,UAAI1nB,GAAGob,UAAH,CAAc,GAAd,CAAJ,EAAwB;AACtB;AACA;AACA,YAAI,KAAKunB,MAAL,CAAY2B,GAAZ,CAAgBtkC,EAAhB,CAAJ,EAAyB;AACvBq9B,iBAAOn9B,IAAP,CAAa,0CAAyCF,EAAG,GAAzD;AACA;AACD;AACD,aAAK2iC,MAAL,CAAYtjC,GAAZ,CAAgBW,EAAhB,EAAoB0nB,QAAQ1nB,EAAR,CAApB;AACD,OARD,MAQO;AACL,YAAI,KAAK4iC,SAAL,CAAe0B,GAAf,CAAmBtkC,EAAnB,CAAJ,EAA4B;AAC1Bq9B,iBAAOn9B,IAAP,CAAa,6CAA4CF,EAAG,GAA5D;AACA;AACD;AACD,aAAK4iC,SAAL,CAAevjC,GAAf,CAAmBW,EAAnB,EAAuB0nB,QAAQ1nB,EAAR,CAAvB;AACD;AACF;;AAED,WAAOq9B,MAAP;AACD;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BAhG,SAAO5uB,OAAP,EAAgBe,IAAhB,EAAsB6zB,MAAtB,EAA8B;AAC5B;AACA,QAAI,OAAO50B,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,aAAOA,OAAP;AACD;;AAED;AACA,QAAI,OAAOA,QAAQkzB,GAAf,KAAuB,QAA3B,EAAqC;AACnC,aAAOlzB,QAAQkzB,GAAf;AACD;;AAED;AACA,QAAIlzB,QAAQkzB,GAAR,KAAgBzY,SAApB,EAA+B;AAC7B,aAAO,IAAP;AACD;;AAED,WAAO,OAAAziB,CAAQ,IAAR,EAAc+I,IAAd,EAAoBf,OAApB,EAA6B40B,MAA7B,CAAP;AACD;;AAEDgE,qBAAmB8D,IAAnB,EAAyBrE,IAAzB,EAA+B;AAC7B,UAAMsE,QAAQ,KAAKN,MAAL,CAAYhlC,GAAZ,CAAgBqlC,IAAhB,KAAyB,EAAvC;AACA,UAAMnlC,KAAK6M,KAAKC,SAAL,CAAeg0B,IAAf,CAAX;;AAEA,QAAI,CAACsE,MAAMplC,EAAN,CAAL,EAAgB;AACdolC,YAAMplC,EAAN,IAAY,IAAImlC,IAAJ,CAAS,KAAKP,OAAd,EAAuB9D,IAAvB,CAAZ;AACA,WAAKgE,MAAL,CAAYzlC,GAAZ,CAAgB8lC,IAAhB,EAAsBC,KAAtB;AACD;;AAED,WAAOA,MAAMplC,EAAN,CAAP;AACD;AA/KyB,C;;;;AChB5B;;;;;;AAMe,MAAMqlC,cAAN,CAAqB;AAClC;;;;;;AAMAnmC,cAAYomC,QAAZ,EAAsB;AACpB,QAAIN,OAAOO,aAAP,IAAwBngC,OAAOkgC,QAAP,CAA5B,EAA8C;AAC5C,WAAKL,QAAL,GAAgBK,SAASN,OAAOO,aAAhB,GAAhB;AACD,KAFD,MAEO,IAAIP,OAAOC,QAAP,IAAmB7/B,OAAOkgC,QAAP,CAAvB,EAAyC;AAC9C,WAAKL,QAAL,GAAgBK,SAASN,OAAOC,QAAhB,GAAhB;AACD,KAFM,MAEA;AACL,YAAM,IAAInB,SAAJ,CAAc,iDAAd,CAAN;AACD;;AAED,SAAK0B,IAAL,GAAY,EAAZ;AACD;;AAED,GAACR,OAAOC,QAAR,IAAoB;AAClB,UAAM,EAAEO,IAAF,EAAQP,QAAR,KAAqB,IAA3B;AACA,QAAIQ,MAAM,CAAV;;AAEA,WAAO;AACL95B,aAAO;AACL,YAAI65B,KAAKh4B,MAAL,IAAei4B,GAAnB,EAAwB;AACtBD,eAAKtlC,IAAL,CAAU+kC,SAASt5B,IAAT,EAAV;AACD;AACD,eAAO65B,KAAKC,KAAL,CAAP;AACD;AANI,KAAP;AAQD;;AAED,GAACT,OAAOO,aAAR,IAAyB;AACvB,UAAM,EAAEC,IAAF,EAAQP,QAAR,KAAqB,IAA3B;AACA,QAAIQ,MAAM,CAAV;;AAEA,WAAO;AACC95B,UAAN,GAAa;AAAA;AACX,cAAI65B,KAAKh4B,MAAL,IAAei4B,GAAnB,EAAwB;AACtBD,iBAAKtlC,IAAL,EAAU,MAAM+kC,SAASt5B,IAAT,EAAhB;AACD;AACD,iBAAO65B,KAAKC,KAAL,CAAP;AAJW;AAKZ;AANI,KAAP;AAQD;;AAED;;;;AAIAC,cAAY;AACV,UAAM,EAAEF,IAAF,EAAQP,QAAR,KAAqB,IAA3B;AACA,QAAIO,KAAKh4B,MAAL,KAAgB,CAAhB,IAAqBg4B,KAAKA,KAAKh4B,MAAL,GAAc,CAAnB,EAAsBm4B,IAAtB,KAA+B,KAAxD,EAA+D;AAC7DH,WAAKtlC,IAAL,CAAU+kC,SAASt5B,IAAT,EAAV;AACD;AACF;AAxDiC,C;;;;;;ACNpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA;;;;;;;;AAQO,SAASi6B,cAAT,CAAwBN,QAAxB,EAAkCO,GAAlC,EAAuC;AAC5C,MAAI,CAACx4B,MAAMC,OAAN,CAAcu4B,GAAd,CAAL,EAAyB;AACvB,WAAOC,gBAAgBR,QAAhB,EAA0BO,GAA1B,CAAP;AACD;;AAED,SAAOA,IAAI9yB,GAAJ,CACL/S,MAAM8lC,gBAAgBR,QAAhB,EAA0BtlC,EAA1B,CADD,CAAP;AAGD;;AAED;;;AAGA,SAAS8lC,eAAT,CAAyBR,QAAzB,EAAmCtlC,EAAnC,EAAuC;AACrC,OAAK,MAAM86B,OAAX,IAAsBwK,QAAtB,EAAgC;AAC9B,QAAIxK,QAAQoK,UAAR,CAAmBllC,EAAnB,CAAJ,EAA4B;AAC1B,aAAO86B,OAAP;AACD;AACF;;AAED,SAAO,IAAP;AACD;;AAED;;;;;;;;AAQA;AAAA,uCAAO,WAA+BwK,QAA/B,EAAyCO,GAAzC,EAA8C;AACnD,QAAI,CAACx4B,MAAMC,OAAN,CAAcu4B,GAAd,CAAL,EAAyB;AAAA;AAAA;AAAA;;AAAA;AACvB,4CAA4BP,QAA5B,oLAAsC;AAAA,gBAArBxK,OAAqB;;AACpC,cAAIA,QAAQoK,UAAR,CAAmBW,GAAnB,CAAJ,EAA6B;AAC3B,mBAAO/K,OAAP;AACD;AACF;AALsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMxB;;AAED,QAAIiL,iBAAiBF,IAAIr4B,MAAzB;AACA,UAAMw4B,gBAAgB,IAAI34B,KAAJ,CAAU04B,cAAV,EAA0BE,IAA1B,CAA+B,IAA/B,CAAtB;;AAVmD;AAAA;AAAA;;AAAA;AAYnD,2CAA4BX,QAA5B,8LAAsC;AAAA,cAArBxK,OAAqB;;AACpC;AACA;AACA,aAAK,IAAI1d,QAAQ,CAAjB,EAAoBA,QAAQyoB,IAAIr4B,MAAhC,EAAwC4P,OAAxC,EAAiD;AAC/C,gBAAMpd,KAAK6lC,IAAIzoB,KAAJ,CAAX;AACA,cAAI,CAAC4oB,cAAc5oB,KAAd,CAAD,IAAyB0d,QAAQoK,UAAR,CAAmBllC,EAAnB,CAA7B,EAAqD;AACnDgmC,0BAAc5oB,KAAd,IAAuB0d,OAAvB;AACAiL;AACD;;AAED;AACA,cAAIA,mBAAmB,CAAvB,EAA0B;AACxB,mBAAOC,aAAP;AACD;AACF;AACF;AA3BkD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AA6BnD,WAAOA,aAAP;AACD,GA9BD;;AAAA,kBAAsBE,eAAtB;AAAA;AAAA;AAAA,K;;ACjFA,SAASC,QAAT,CAAkBC,IAAlB,EAAwB;AACtB,SAAO,CAAC,QAAQzO,IAAR,CAAayO,IAAb,CAAR;AACD;;AAED,SAASC,WAAT,CAAqBD,IAArB,EAA2B;AACzB,QAAM,CAACE,MAAD,IAAWF,KAAKxL,KAAL,CAAW,MAAX,CAAjB;AACA,SAAO0L,OAAO94B,MAAd;AACD;;AAED;;;;;;;AAOO,SAAS+4B,GAAT,CAAal2B,OAAb,EAAsB;AAC3B,QAAM,CAACm2B,IAAD,IAASn2B,OAAf;AACA,QAAMo2B,QAAQD,KAAK1qB,KAAL,CAAW,IAAX,EAAiB9L,MAAjB,CAAwBm2B,QAAxB,CAAd;AACA,QAAMO,UAAUD,MAAM1zB,GAAN,CAAUszB,WAAV,CAAhB;AACA,QAAMM,SAASC,KAAKC,GAAL,CAAS,GAAGH,OAAZ,CAAf;AACA,QAAMJ,SAAS,IAAIQ,MAAJ,CAAY,QAAOH,MAAO,GAA1B,CAAf;;AAEA,SAAOF,MAAM1zB,GAAN,CACLqzB,QAAQA,KAAKW,OAAL,CAAaT,MAAb,EAAqB,EAArB,CADH,EAELp2B,IAFK,CAEA,IAFA,CAAP;AAGD,C;;;;;;;;;;AC1BD;AAAA;;;;;;;;;AASA;;AAEA;AACA;;AAMA;AACA;;;;;;;;;;;;;;;;;;;;;ACnBA;;AAEA;;;;;;;;;;;;;;;AAee,MAAM,8BAAN,CAAwB;AACrChR,cAAY4S,QAAZ,EAAsB;AACpB,SAAKk1B,QAAL,GAAgB,IAAI,qBAAJ,CAAmBl1B,QAAnB,CAAhB;AACA,SAAKm1B,IAAL,GAAY,IAAIC,GAAJ,EAAZ;AACD;;AAED;;;AAGAphC,YAAUqhC,IAAV,EAAgB;AACd,SAAKF,IAAL,CAAUt3B,GAAV,CAAcw3B,IAAd;AACD;;AAED;;;AAGAC,cAAYD,IAAZ,EAAkB;AAChB,SAAKF,IAAL,CAAUvnC,MAAV,CAAiBynC,IAAjB;AACD;;AAED;;;AAGAE,cAAYv1B,QAAZ,EAAsB;AACpB,SAAKk1B,QAAL,GAAgB,IAAI,qBAAJ,CAAmBl1B,QAAnB,CAAhB;;AAEA;AACA,SAAKm1B,IAAL,CAAU9qC,OAAV,CAAkBgrC,QAAQA,KAAKG,UAAL,EAA1B;AACD;;AAEDC,oBAAkBvnC,EAAlB,EAAsB;AACpB,WAAO,6BAAA4lC,CAAe,KAAKoB,QAApB,EAA8BhnC,EAA9B,CAAP;AACD;;AAEDwnC,iBAAeC,GAAf,EAAoB3iC,GAApB,EAAyB0E,IAAzB,EAA+B;AAC7B,UAAMxL,QAAQypC,IAAIpQ,MAAJ,CAAWvyB,GAAX,EAAgB0E,IAAhB,CAAd;;AAEA,QAAI1E,IAAIqI,KAAR,EAAe;AACb,UAAIA,QAAQ,EAAZ;AACA,WAAK,MAAMpP,IAAX,IAAmBqH,OAAOE,IAAP,CAAYR,IAAIqI,KAAhB,CAAnB,EAA2C;AACzCA,cAAMpP,IAAN,IAAc0pC,IAAIpQ,MAAJ,CAAWvyB,IAAIqI,KAAJ,CAAUpP,IAAV,CAAX,EAA4ByL,IAA5B,CAAd;AACD;AACF;;AAED,WAAO,EAAExL,KAAF,EAASmP,KAAT,EAAP;AACD;;AAED;;;AAGA2xB,YAAU9+B,EAAV,EAAcwJ,IAAd,EAAoBk+B,QAApB,EAA8B;AAC5B,UAAMD,MAAM,KAAKF,iBAAL,CAAuBvnC,EAAvB,CAAZ;;AAEA,QAAIynC,QAAQ,IAAZ,EAAkB;AAChB,aAAOC,YAAY1nC,EAAnB;AACD;;AAED,UAAM8E,MAAM2iC,IAAI5J,UAAJ,CAAe79B,EAAf,CAAZ;AACA,WAAOynC,IAAIpQ,MAAJ,CAAWvyB,GAAX,EAAgB0E,IAAhB,CAAP;AACD;AA3DoC;;AA8DhC,SAASm+B,mBAAT,CAA6B9+B,KAA7B,EAAoC++B,QAApC,EAA8C;AACnD,QAAMC,OAAOh/B,MAAM++B,QAAN,CAAb;;AAEA,MAAIC,gBAAgB,8BAApB,EAAuC;AACrC,WAAO,IAAP;AACD;;AAED,SAAO,IAAI3rC,KAAJ,CACJ,OAAM0rC,QAAS,0DADX,CAAP;AAGD,C;;ACzFD;AACA;;AAEA;;AAEA;;;;;;;;;;;;;;;;;;AAkBe,MAAM,6BAAN,SAAmC,4BAAnC,CAA6C;AAC1D1oC,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,UAAM,EAAEiJ,QAAF,KAAejJ,KAArB;;AAEA,QAAIiJ,aAAaoR,SAAjB,EAA4B;AAC1B,YAAM,IAAIhnB,KAAJ,CAAU,sDAAV,CAAN;AACD;;AAED,QAAI,CAAC4V,SAASkzB,OAAOC,QAAhB,CAAL,EAAgC;AAC9B,YAAM,IAAI/oC,KAAJ,CAAU,wCAAV,CAAN;AACD;;AAED,SAAK4rC,IAAL,GAAY,IAAI,8BAAJ,CAAsBh2B,QAAtB,CAAZ;AACD;;AAEDi2B,oBAAkB;AAChB,WAAO;AACLD,YAAM,KAAKA;AADN,KAAP;AAGD;;AAED9a,4BAA0BrhB,IAA1B,EAAgC;AAC9B,UAAM,EAAEmG,QAAF,KAAenG,IAArB;;AAEA,QAAImG,aAAa,KAAKjJ,KAAL,CAAWiJ,QAA5B,EAAsC;AACpC,WAAKg2B,IAAL,CAAUT,WAAV,CAAsBv1B,QAAtB;AACD;AACF;;AAEDrH,WAAS;AACP,WAAO,2BAAAu9B,CAASC,IAAT,CAAc,KAAKp/B,KAAL,CAAW0F,QAAzB,CAAP;AACD;AAhCyD;;AAmC5D,6BAAA25B,CAAqBC,iBAArB,GAAyC;AACvCL,QAAM,mBAAAH;AADiC,CAAzC;;AAIA,6BAAAO,CAAqBE,SAArB,GAAiC;AAC/B75B,YAAU,4BAAA85B,CAAUC,OAAV,CAAkBC,UADG;AAE/Bz2B,YAAU02B;AAFqB,CAAjC;;AAKA,SAASA,UAAT,CAAoB3/B,KAApB,EAA2B++B,QAA3B,EAAqCa,aAArC,EAAoD;AAClD,QAAMZ,OAAOh/B,MAAM++B,QAAN,CAAb;;AAEA,MAAI5C,OAAOC,QAAP,IAAmB7/B,OAAOyiC,IAAP,CAAvB,EAAqC;AACnC,WAAO,IAAP;AACD;;AAED,SAAO,IAAI3rC,KAAJ,CACJ,OAAM0rC,QAAS,qBAAoBa,aAAc,uBAD7C,CAAP;AAGD,C;;AC7ED;;AAEA;;AAEe,SAASC,gBAAT,CAA0BC,KAA1B,EAAiC;AAC9C,QAAMC,gBAAN,SAA+B,4BAA/B,CAAyC;AACvCx6B,wBAAoB;AAClB,YAAM,EAAE05B,IAAF,KAAW,KAAKhN,OAAtB;;AAEA,UAAIgN,IAAJ,EAAU;AACRA,aAAKhiC,SAAL,CAAe,IAAf;AACD;AACF;;AAEDmE,2BAAuB;AACrB,YAAM,EAAE69B,IAAF,KAAW,KAAKhN,OAAtB;;AAEA,UAAIgN,IAAJ,EAAU;AACRA,aAAKV,WAAL,CAAiB,IAAjB;AACD;AACF;;AAED;;;AAGAE,iBAAa;AACX;AACA;AACA,WAAKuB,WAAL;AACD;;AAED;;;AAGA/J,cAAU9+B,EAAV,EAAcwJ,IAAd,EAAoBk+B,QAApB,EAA8B;AAC5B,YAAM,EAAEI,IAAF,KAAW,KAAKhN,OAAtB;;AAEA,UAAI,CAACgN,IAAL,EAAW;AACT,eAAOJ,YAAY1nC,EAAnB;AACD;;AAED,aAAO8nC,KAAKhJ,SAAL,CAAe9+B,EAAf,EAAmBwJ,IAAnB,EAAyBk+B,QAAzB,CAAP;AACD;;AAEDj9B,aAAS;AACP,aAAO,wCAAA9F,CACLgkC,KADK,EAELvjC,OAAOC,MAAP;AACE;AACA,QAAEy5B,WAAW,CAAC,GAAGt1B,IAAJ,KAAa,KAAKs1B,SAAL,CAAe,GAAGt1B,IAAlB,CAA1B,EAFF,EAGE,KAAKX,KAHP,CAFK,CAAP;AAQD;AAhDsC;;AAmDzC+/B,mBAAiBE,WAAjB,GAAgC,oBAAmBA,YAAYH,KAAZ,CAAmB,GAAtE;;AAEAC,mBAAiBG,YAAjB,GAAgC;AAC9BjB,UAAM,mBAAAH;AADwB,GAAhC;;AAIA,SAAOiB,gBAAP;AACD;;AAED,SAASE,WAAT,CAAqBE,SAArB,EAAgC;AAC9B,SAAOA,UAAUF,WAAV,IAAyBE,UAAUjrC,IAAnC,IAA2C,WAAlD;AACD,C;;ACnED;;AAEA,MAAMkrC,WAAWpuC,SAAS8J,aAAT,CAAuB,UAAvB,CAAjB;;AAEO,SAASukC,WAAT,CAAqB5hB,GAArB,EAA0B;AAC/B2hB,WAAS1kC,SAAT,GAAqB+iB,GAArB;AACA,SAAO2hB,SAASx/B,OAAhB;AACD,C;;ACPD;;;;;;;AAOA;AACA;;AAEA,IAAI0/B,mBAAmB;AACrBC,QAAM,IADe;AAErBC,QAAM,IAFe;AAGrB5V,MAAI,IAHiB;AAIrB6V,OAAK,IAJgB;AAKrBC,SAAO,IALc;AAMrBC,MAAI,IANiB;AAOrBC,OAAK,IAPgB;AAQrBlyB,SAAO,IARc;AASrBmyB,UAAQ,IATa;AAUrB1wB,QAAM,IAVe;AAWrBjd,QAAM,IAXe;AAYrB4tC,SAAO,IAZc;AAarBxrC,UAAQ,IAba;AAcrByrC,SAAO,IAdc;AAerBC,OAAK;AACL;AAhBqB,CAAvB;;AAmBA,4DAAeV,gBAAf,E;;AC7BA;;;;;;;AAOA;;AAEA;AACA;;AAEA,IAAIW;AACFC,YAAU;AADR,GAEC,uBAFD,CAAJ;;AAKA,2DAAeD,eAAf,E;;ACjBA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAME,WAAW,WAAjB;;AAEA;;;AAGA,SAASC,WAAT,CAAqBphC,KAArB,EAA4B;AAC1B,QAAMW,OAAO,EAAb;AACA,QAAM0gC,QAAQ,EAAd;;AAEA,OAAK,MAAM,CAACC,QAAD,EAAWC,OAAX,CAAX,IAAkChlC,OAAOsiB,OAAP,CAAe7e,KAAf,CAAlC,EAAyD;AACvD,QAAIshC,SAAS/uB,UAAT,CAAoB,GAApB,CAAJ,EAA8B;AAC5B,YAAMrd,OAAOosC,SAAS1P,MAAT,CAAgB,CAAhB,CAAb;AACAjxB,WAAKzL,IAAL,IAAaqsC,OAAb;AACD,KAHD,MAGO,IAAI,yCAAAC,CAAeD,OAAf,CAAJ,EAA6B;AAClC;AACA;AACA,YAAMrsC,OAAOosC,SAASG,WAAT,EAAb;AACAJ,YAAMnsC,IAAN,IAAcqsC,OAAd;AACD;AACF;;AAED,SAAO,CAAC5gC,IAAD,EAAO0gC,KAAP,CAAP;AACD;;AAED;;;;;;;;;;;;;;;;;;;;;;AAsBe,MAAM,mBAAN,SAAwB,4BAAxB,CAAkC;AAC/C97B,sBAAoB;AAClB,UAAM,EAAE05B,IAAF,KAAW,KAAKhN,OAAtB;;AAEA,QAAIgN,IAAJ,EAAU;AACRA,WAAKhiC,SAAL,CAAe,IAAf;AACD;AACF;;AAEDmE,yBAAuB;AACrB,UAAM,EAAE69B,IAAF,KAAW,KAAKhN,OAAtB;;AAEA,QAAIgN,IAAJ,EAAU;AACRA,WAAKV,WAAL,CAAiB,IAAjB;AACD;AACF;;AAED;;;AAGAE,eAAa;AACX;AACA;AACA,SAAKuB,WAAL;AACD;;AAEDp+B,WAAS;AACP,UAAM,EAAEq9B,IAAF,KAAW,KAAKhN,OAAtB;AACA,UAAM,EAAE96B,EAAF,EAAMmN,KAAN,EAAaoB,QAAb,KAA0B,KAAK1F,KAArC;AACA,UAAM47B,OAAO,2BAAAuD,CAASC,IAAT,CAAc15B,QAAd,CAAb;;AAEA,QAAI,CAACu5B,IAAL,EAAW;AACT;AACA,aAAOrD,IAAP;AACD;;AAED,UAAMgD,MAAMK,KAAKP,iBAAL,CAAuBvnC,EAAvB,CAAZ;;AAEA,QAAIynC,QAAQ,IAAZ,EAAkB;AAChB;AACA,aAAOhD,IAAP;AACD;;AAED,UAAM3/B,MAAM2iC,IAAI5J,UAAJ,CAAe79B,EAAf,CAAZ;AACA,UAAM,CAACwJ,IAAD,EAAO0gC,KAAP,IAAgBD,YAAY,KAAKphC,KAAjB,CAAtB;AACA,UAAM;AACJ7K,aAAOusC,YADH;AAEJp9B,aAAOq9B;AAFH,QAGF1C,KAAKN,cAAL,CAAoBC,GAApB,EAAyB3iC,GAAzB,EAA8B0E,IAA9B,CAHJ;;AAKA;AACA;AACA;AACA,QAAI2D,SAASq9B,YAAb,EAA2B;AACzB,UAAIC,iBAAiB,EAArB;;AAEA,WAAK,MAAM,CAAC1sC,IAAD,EAAOC,KAAP,CAAX,IAA4BoH,OAAOsiB,OAAP,CAAe8iB,YAAf,CAA5B,EAA0D;AACxD,YAAIr9B,MAAMpP,IAAN,CAAJ,EAAiB;AACf0sC,yBAAe1sC,IAAf,IAAuBC,KAAvB;AACD;AACF;AACF;;AAED;AACA;AACA;AACA;AACA,QAAIymC,KAAKjqC,IAAL,IAAa,sBAAjB,EAAgC;AAC9B,aAAO,uCAAAkwC,CAAajG,IAAb,EAAmBgG,cAAnB,CAAP;AACD;;AAED;AACA;AACA;AACA,QAAIF,iBAAiB,IAArB,EAA2B;AACzB,aAAO,uCAAAG,CAAajG,IAAb,EAAmBgG,cAAnB,CAAP;AACD;;AAED;AACA;AACA,QAAI,CAACT,SAASrS,IAAT,CAAc4S,YAAd,CAAL,EAAkC;AAChC,aAAO,uCAAAG,CAAajG,IAAb,EAAmBgG,cAAnB,EAAmCF,YAAnC,CAAP;AACD;;AAED;AACA;AACA,UAAMI,mBAAmBt9B,MAAMrR,IAAN,CAAW,WAAAktC,CAAYqB,YAAZ,EAA0BK,UAArC,CAAzB;AACA,UAAMC,qBAAqBF,iBAAiB53B,GAAjB,CAAqB+3B,aAAa;AAC3D,UAAIA,UAAUC,QAAV,KAAuBD,UAAUE,SAArC,EAAgD;AAC9C,eAAOF,UAAUG,WAAjB;AACD;;AAED;AACA,UAAI,CAACf,MAAMrG,cAAN,CAAqBiH,UAAUI,SAA/B,CAAL,EAAgD;AAC9C,eAAOJ,UAAUG,WAAjB;AACD;;AAED,YAAME,cAAcjB,MAAMY,UAAUI,SAAhB,CAApB;;AAEA;AACA;AACA;AACA;AACA,UAAIC,YAAY3wC,IAAZ,IAAoB,sBAAxB,EAAuC;AACrC,eAAO2wC,WAAP;AACD;;AAED;AACA;AACA;AACA;AACA,aAAO,uCAAAT,CAAaS,WAAb,EAA0B,IAA1B,EAAgCL,UAAUG,WAA1C,CAAP;AACD,KAzB0B,CAA3B;;AA2BA,WAAO,uCAAAP,CAAajG,IAAb,EAAmBgG,cAAnB,EAAmC,GAAGI,kBAAtC,CAAP;AACD;AAnH8C;;AAsHjD,mBAAAO,CAAUrC,YAAV,GAAyB;AACvBjB,QAAM,mBAAAH;AADiB,CAAzB;;AAIA,mBAAAyD,CAAUhD,SAAV,GAAsB;AACpB75B,YAAU,4BAAA85B,CAAUC,OAAV,CAAkBC;AADR,CAAtB,C;;;;;;ACjLA;AAAA;;;;;;;;;;;;;;;;;;;AAmBA;AACA;AACA;;;;;;;;;;;;;ACrBc,MAAM8C,MAAN,CAAa;AACzBnsC,cAAYosC,SAAZ,EAAuB;AACrB,SAAKA,SAAL,GAAiBA,aAAa,KAAKC,gBAAnC;AACD;;AAEDA,mBAAiBC,IAAjB,EAAuB;AACrB,WAAOA,IAAP;AACD;;AAED;;;;;;AAMAC,QAAM,GAAGC,MAAT,EAAiB;AACf,UAAMC,aAAa,IAAIzE,GAAJ,EAAnB;AACA,UAAMhlC,SAAS,EAAf;AACA,SAAK,MAAMgE,MAAX,IAAqBwlC,MAArB,EAA6B;AAC3B,YAAME,WAAW,IAAI3sC,GAAJ,EAAjB;AACA,WAAK,MAAMjB,KAAX,IAAoBkI,MAApB,EAA4B;AAC1B,cAAM5G,MAAM,KAAKgsC,SAAL,CAAettC,KAAf,CAAZ;AACA,YAAI,CAAC2tC,WAAWrH,GAAX,CAAehlC,GAAf,CAAD,IAAwB,CAACssC,SAAStH,GAAT,CAAahlC,GAAb,CAA7B,EAAgD;AAC9CssC,mBAASvsC,GAAT,CAAaC,GAAb,EAAkBtB,KAAlB;AACD;AACF;AACDkE,aAAOhC,IAAP,CAAY0rC,QAAZ;AACAA,eAASzvC,OAAT,CAAiB,CAAC6B,KAAD,EAAQsB,GAAR,KAAgBqsC,WAAWh8B,GAAX,CAAerQ,GAAf,CAAjC;AACD;AACD,WAAO4C,OAAO6Q,GAAP,CAAW84B,KAAKx+B,MAAMrR,IAAN,CAAW6vC,EAAE3lC,MAAF,EAAX,CAAhB,CAAP;AACD;AA9BwB,C;;;;;;ACA3B;AAAA;;;AAGA;;;;AAKA,MAAM4lC,yBAAyB,CAA/B;AACA,MAAMC,8BAA8B,CAApC;;;AAEA,MAAMC,SAAS,IAAI,MAAJ,CAAW9vB,QAAQA,QAAQA,KAAK9T,GAAhC,CAAf;;AAEA,MAAM6jC,gBAAgB;AACpB77B,OAAK;AACH;AACA1K,iBAAa;AAFV,GADe;AAKpBS,YAAU;AACRT,iBAAa,KADL;AAERU,yBAAqB;AAFb,GALU;AASpBE,YAAU,EAACZ,aAAa,KAAd,EATU;AAUpBkkB,YAAU;AACR;AACAlkB,iBAAa,KAFL;AAGR;AACAmT,UAAM,EAJE;AAKR;AACAmR,cAAU,IANF;AAOR;AACAC,6BAAyB,KARjB;AASR;AACAV,qBAAiB;AAVT,GAVU;AAsBpBtjB,SAAO;AACLP,iBAAa,KADR;AAELQ,YAAQ;AAFH,GAtBa;AA0BpB8O,UAAQ;AACNL,aAAS,KADH;AAENxX,UAAM;AAFA,GA1BY;AA8BpB+T,YAAU,EA9BU;AA+BpByI,UAAQ;AACNa,oBAAgB,IADV;AAEND,eAAW,EAFL;AAGNH,oBAAgB;AAHV;AA/BY,CAAtB;;;AAsCA,SAAShK,GAAT,CAAa3E,YAAYwgC,cAAc77B,GAAvC,EAA4CvU,MAA5C,EAAoD;AAClD,UAAQA,OAAOrB,IAAf;AACE,SAAK,sBAAAC,CAAGyR,IAAR;AACE,aAAO9G,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B5P,OAAOsB,IAAP,IAAe,EAA5C,EAAgD,EAACuI,aAAa,IAAd,EAAhD,CAAP;AACF;AACE,aAAO+F,SAAP;AAJJ;AAMD;;AAED,SAAStF,QAAT,CAAkBsF,YAAYwgC,cAAc9lC,QAA5C,EAAsDtK,MAAtD,EAA8D;AAC5D,UAAQA,OAAOrB,IAAf;AACE,SAAK,sBAAAC,CAAGyxC,qBAAR;AACE,+BAAWrwC,OAAOsB,IAAlB,IAAwBuI,aAAa,IAArC;AACF,SAAK,sBAAAjL,CAAG0xC,sBAAR;AACE,+BAAW1gC,SAAX,EAAyB5P,OAAOsB,IAAhC;AACF;AACE,aAAOsO,SAAP;AANJ;AAQD;;AAED;;;;;;;AAOA,SAAS2gC,YAAT,CAAsBzY,KAAtB,EAA6B0Y,MAA7B,EAAqC;AACnC;AACA,QAAMC,aAAaD,OAAOt5B,GAAP,CAAWiG,QAAQA,QAAQA,KAAK5Q,GAAhC,CAAnB;AACA,MAAImkC,WAAW5Y,MAAM3jB,MAAN,CAAagJ,QAASA,OAAO,CAACszB,WAAWrsC,QAAX,CAAoB+Y,KAAK5Q,GAAzB,CAAR,GAAwC,KAA9D,CAAf;AACAmkC,aAAWA,SAASx5B,GAAT,CAAaiG,QAAQ;AAC9B,QAAIA,QAAQA,KAAKgH,QAAjB,EAA2B;AACzB,aAAOhH,KAAKgH,QAAZ;AACA,aAAOhH,KAAKwzB,QAAZ;AACD;AACD,WAAOxzB,IAAP;AACD,GANU,CAAX;;AAQA;AACAqzB,SAAOlwC,OAAP,CAAe,CAACw/B,GAAD,EAAMve,KAAN,KAAgB;AAC7B,QAAI,CAACue,GAAL,EAAU;AAAE;AAAS;AACrB,QAAI3iB,OAAO5T,OAAOC,MAAP,CAAc,EAAd,EAAkBs2B,GAAlB,EAAuB,EAAC3b,UAAU,IAAX,EAAiBwsB,UAAUpvB,KAA3B,EAAvB,CAAX;AACA,QAAIA,QAAQmvB,SAAS/+B,MAArB,EAA6B;AAC3B++B,eAASnvB,KAAT,IAAkBpE,IAAlB;AACD,KAFD,MAEO;AACLuzB,eAASjoB,MAAT,CAAgBlH,KAAhB,EAAuB,CAAvB,EAA0BpE,IAA1B;AACD;AACF,GARD;;AAUA,SAAOuzB,QAAP;AACD;;;AAED,SAAS3iB,QAAT,CAAkBne,YAAYwgC,cAAcriB,QAA5C,EAAsD/tB,MAAtD,EAA8D;AAC5D,MAAI4wC,QAAJ;AACA,MAAIC,OAAJ;AACA,UAAQ7wC,OAAOrB,IAAf;AACE,SAAK,sBAAAC,CAAGkyC,iBAAR;AACE,UAAI,CAAC9wC,OAAOsB,IAAR,IAAgB,CAACtB,OAAOsB,IAAP,CAAYw2B,KAAjC,EAAwC;AACtC,eAAOloB,SAAP;AACD;AACD,aAAOrG,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAAC/F,aAAa,IAAd,EAAoBmT,MAAMhd,OAAOsB,IAAP,CAAYw2B,KAAtC,EAA7B,EAA2E93B,OAAOsB,IAAP,CAAY2Z,IAAZ,GAAmB,EAACA,MAAMjb,OAAOsB,IAAP,CAAY2Z,IAAnB,EAAnB,GAA8C,EAAzH,CAAP;AACF,SAAK,sBAAArc,CAAGmyC,uBAAR;AACE,aAAOxnC,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAACqL,MAAMjb,OAAOsB,IAAP,CAAY2Z,IAAnB,EAA7B,CAAP;AACF,SAAK,sBAAArc,CAAGolB,cAAR;AACE,aAAOza,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B;AAClCue,kBAAU;AACR5M,iBAAOvhB,OAAOsB,IAAP,CAAYigB,KADX;AAERyvB,2BAAiB;AAFT;AADwB,OAA7B,CAAP;AAMF,SAAK,sBAAApyC,CAAGqvB,qBAAR;AACE,aAAO1kB,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAACue,UAAU,IAAX,EAA7B,CAAP;AACF,SAAK,sBAAAvvB,CAAG4qB,qCAAR;AACE,aAAOjgB,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAACwe,yBAAyB,IAA1B,EAA7B,CAAP;AACF,SAAK,sBAAAxvB,CAAGsvB,sCAAR;AACE,aAAO3kB,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAACwe,yBAAyB,KAA1B,EAA7B,CAAP;AACF,SAAK,sBAAAxvB,CAAGqyC,gBAAR;AACE,UAAI,CAACrhC,UAAUue,QAAX,IAAuBnuB,OAAOsB,IAAP,CAAYiL,GAAZ,KAAoBqD,UAAUue,QAAV,CAAmB+iB,UAAlE,EAA8E;AAC5E,eAAOthC,SAAP;AACD;AACD,aAAOrG,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B;AAClCue,kBAAU;AACR5M,iBAAO3R,UAAUue,QAAV,CAAmB5M,KADlB;AAERyvB,2BAAiBhxC,OAAOsB,IAAP,CAAYkzB,OAFrB;AAGR0c,sBAAYlxC,OAAOsB,IAAP,CAAYiL;AAHhB;AADwB,OAA7B,CAAP;AAOF,SAAK,sBAAA3N,CAAGuyC,eAAR;AACE,UAAI,CAACvhC,UAAUue,QAAf,EAAyB;AACvB,eAAOve,SAAP;AACD;AACD,aAAOrG,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B;AAClCue,kBAAU;AACR5M,iBAAO3R,UAAUue,QAAV,CAAmB5M,KADlB;AAERyvB,2BAAiB,IAFT;AAGRE,sBAAYlxC,OAAOsB,IAAP,CAAYiL;AAHhB;AADwB,OAA7B,CAAP;AAOF,SAAK,sBAAA3N,CAAGwyC,sBAAR;AACE,UAAI,CAACxhC,UAAUue,QAAf,EAAyB;AACvB,eAAOve,SAAP;AACD;AACD,aAAOrG,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B;AAClCue,kBAAU;AACR5M,iBAAO3R,UAAUue,QAAV,CAAmB5M,KADlB;AAERyvB,2BAAiB;AAFT;AADwB,OAA7B,CAAP;AAMF,SAAK,sBAAApyC,CAAGyyC,kBAAR;AACER,gBAAUjhC,UAAUoN,IAAV,CAAe9F,GAAf,CAAmBqY,OAAO;AAClC,YAAIA,OAAOA,IAAIhjB,GAAJ,KAAYvM,OAAOsB,IAAP,CAAYiL,GAAnC,EAAwC;AACtCqkC,qBAAW,IAAX;AACA,iBAAOrnC,OAAOC,MAAP,CAAc,EAAd,EAAkB+lB,GAAlB,EAAuB,EAACzC,YAAY9sB,OAAOsB,IAAP,CAAYwrB,UAAzB,EAAvB,CAAP;AACD;AACD,eAAOyC,GAAP;AACD,OANS,CAAV;AAOA,aAAOqhB,WAAWrnC,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAACoN,MAAM6zB,OAAP,EAA7B,CAAX,GAA2DjhC,SAAlE;AACF,SAAK,sBAAAhR,CAAG0yC,qBAAR;AACE,UAAI,CAACtxC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOsO,SAAP;AACD;AACDihC,gBAAUjhC,UAAUoN,IAAV,CAAe9F,GAAf,CAAmBmJ,QAAQ;AACnC,YAAIA,QAAQA,KAAK9T,GAAL,KAAavM,OAAOsB,IAAP,CAAYiL,GAArC,EAA0C;AACxC,gBAAM,EAACyU,YAAD,EAAeuwB,aAAf,EAA8BC,SAA9B,KAA2CxxC,OAAOsB,IAAxD;AACA,iBAAOiI,OAAOC,MAAP,CAAc,EAAd,EAAkB6W,IAAlB,EAAwB,EAACW,YAAD,EAAeuwB,aAAf,EAA8BE,qBAAqBD,SAAnD,EAAxB,CAAP;AACD;AACD,eAAOnxB,IAAP;AACD,OANS,CAAV;AAOA,aAAO9W,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAACoN,MAAM6zB,OAAP,EAA7B,CAAP;AACF,SAAK,sBAAAjyC,CAAG8yC,uBAAR;AACE,UAAI,CAAC1xC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOsO,SAAP;AACD;AACDihC,gBAAUjhC,UAAUoN,IAAV,CAAe9F,GAAf,CAAmBmJ,QAAQ;AACnC,YAAIA,QAAQA,KAAK9T,GAAL,KAAavM,OAAOsB,IAAP,CAAYiL,GAArC,EAA0C;AACxC,gBAAMolC,UAAUpoC,OAAOC,MAAP,CAAc,EAAd,EAAkB6W,IAAlB,CAAhB;AACA,iBAAOsxB,QAAQ3wB,YAAf;AACA,iBAAO2wB,QAAQJ,aAAf;AACA,iBAAOI,QAAQF,mBAAf;AACA,iBAAOE,OAAP;AACD;AACD,eAAOtxB,IAAP;AACD,OATS,CAAV;AAUA,aAAO9W,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAACoN,MAAM6zB,OAAP,EAA7B,CAAP;AACF,SAAK,sBAAAjyC,CAAGgzC,mBAAR;AACE,UAAI,CAAC5xC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOsO,SAAP;AACD;AACDihC,gBAAUjhC,UAAUoN,IAAV,CAAe7I,MAAf,CAAsBkM,QAAQrgB,OAAOsB,IAAP,CAAYiL,GAAZ,KAAoB8T,KAAK9T,GAAvD,CAAV;AACA,aAAOhD,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAACoN,MAAM6zB,OAAP,EAA7B,CAAP;AACF,SAAK,sBAAAjyC,CAAGizC,uBAAR;AACE,+BAAWjiC,SAAX,IAAsB8d,iBAAiB1tB,OAAOsB,IAAP,CAAYosB,eAAnD;AACF,SAAK,sBAAA9uB,CAAGkzC,qBAAR;AACE,+BAAWliC,SAAX,IAAsBoN,MAAM,EAA5B;AACF;AACE,aAAOpN,SAAP;AApGJ;AAsGD;;AAED,SAASuJ,MAAT,CAAgBvJ,YAAYwgC,cAAcj3B,MAA1C,EAAkDnZ,MAAlD,EAA0D;AACxD,UAAQA,OAAOrB,IAAf;AACE,SAAK,sBAAAC,CAAGyjB,WAAR;AACE,aAAO9Y,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAACkJ,SAAS,IAAV,EAAgBxX,MAAMtB,OAAOsB,IAA7B,EAA7B,CAAP;AACF,SAAK,sBAAA1C,CAAG4Z,aAAR;AACE,aAAOjP,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAACkJ,SAAS,KAAV,EAA7B,CAAP;AACF,SAAK,sBAAAla,CAAG0jB,kBAAR;AACE,aAAO/Y,OAAOC,MAAP,CAAc,EAAd,EAAkB4mC,cAAcj3B,MAAhC,CAAP;AACF;AACE,aAAOvJ,SAAP;AARJ;AAUD;;AAED,SAASxF,KAAT,CAAewF,YAAYwgC,cAAchmC,KAAzC,EAAgDpK,MAAhD,EAAwD;AACtD,MAAI+xC,SAAJ;AACA,UAAQ/xC,OAAOrB,IAAf;AACE,SAAK,sBAAAC,CAAGozC,oBAAR;AACE,aAAOzoC,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAAC/F,aAAa,IAAd,EAAoBQ,QAAQrK,OAAOsB,IAAnC,EAA7B,CAAP;AACF,SAAK,sBAAA1C,CAAGqzC,YAAR;AACEF,kBAAYxoC,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,UAAUvF,MAA5B,CAAZ;AACA0nC,gBAAU/xC,OAAOsB,IAAP,CAAYY,IAAtB,IAA8BlC,OAAOsB,IAAP,CAAYa,KAA1C;AACA,aAAOoH,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAACvF,QAAQ0nC,SAAT,EAA7B,CAAP;AACF;AACE,aAAOniC,SAAP;AARJ;AAUD;;AAED,SAASyF,QAAT,CAAkBzF,YAAYwgC,cAAc/6B,QAA5C,EAAsDrV,MAAtD,EAA8D;AAC5D,MAAI4wC,QAAJ;AACA,MAAIsB,QAAJ;AACA,UAAQlyC,OAAOrB,IAAf;AACE,SAAK,sBAAAC,CAAGuzC,kBAAR;AACE,aAAOviC,UAAUuE,MAAV,CAAiBmB,WAAWA,QAAQnR,EAAR,KAAenE,OAAOsB,IAAlD,CAAP;AACF,SAAK,sBAAA1C,CAAGwzC,gBAAR;AACE;AACAF,iBAAWtiC,UAAUsH,GAAV,CAAc5B,WAAW;AAClC,YAAIA,WAAWA,QAAQnR,EAAR,KAAenE,OAAOsB,IAAP,CAAY6C,EAA1C,EAA8C;AAC5CysC,qBAAW,IAAX;AACA,iBAAOrnC,OAAOC,MAAP,CAAc,EAAd,EAAkB8L,OAAlB,EAA2BtV,OAAOsB,IAAlC,CAAP;AACD;AACD,eAAOgU,OAAP;AACD,OANU,CAAX;AAOA;AACA,UAAI,CAACs7B,QAAL,EAAe;AACb,cAAM/mC,cAAc,CAAC,EAAE7J,OAAOsB,IAAP,CAAY0b,IAAZ,IAAoBhd,OAAOsB,IAAP,CAAY0b,IAAZ,CAAiBrL,MAAjB,GAA0B,CAAhD,CAArB;AACA,cAAM2D,UAAU/L,OAAOC,MAAP,CAAc,EAAC2R,OAAO,EAAR,EAAY6B,MAAM,EAAlB,EAAsBzH,SAAS,KAA/B,EAAd,EAAqDvV,OAAOsB,IAA5D,EAAkE,EAACuI,WAAD,EAAlE,CAAhB;AACAqoC,iBAAS7tC,IAAT,CAAciR,OAAd;AACD;AACD,aAAO48B,QAAP;AACF,SAAK,sBAAAtzC,CAAGyzC,cAAR;AACEH,iBAAWtiC,UAAUsH,GAAV,CAAc5B,WAAW;AAClC,YAAIA,WAAWA,QAAQnR,EAAR,KAAenE,OAAOsB,IAAP,CAAY6C,EAA1C,EAA8C;AAC5C;AACA;AACA,gBAAM0F,cAAc7J,OAAOsB,IAAP,CAAY0b,IAAZ,GAAmB,EAACnT,aAAa,IAAd,EAAnB,GAAyC,EAA7D;;AAEA;AACA;AACA,cAAI7J,OAAOsB,IAAP,CAAY0b,IAAZ,IAAoBhd,OAAOsB,IAAP,CAAY0b,IAAZ,CAAiBrL,MAAjB,GAA0B,CAA9C,IAAmD2D,QAAQ0H,IAAR,CAAalF,IAAb,CAAkBw6B,QAAQA,KAAK9B,MAA/B,CAAvD,EAA+F;AAC7F,kBAAMxzB,OAAOxL,MAAMrR,IAAN,CAAWH,OAAOsB,IAAP,CAAY0b,IAAvB,CAAb;AACA1H,oBAAQ0H,IAAR,CAAa1c,OAAb,CAAqB,CAACgyC,IAAD,EAAO/wB,KAAP,KAAiB;AACpC,kBAAI+wB,KAAK9B,MAAT,EAAiB;AACf;AACA,oBAAIxzB,KAAKuE,KAAL,EAAYnE,IAAZ,KAAqBk1B,KAAKl1B,IAA9B,EAAoC;AAClCJ,uBAAKyL,MAAL,CAAYlH,KAAZ,EAAmB,CAAnB,EAAsB+wB,IAAtB;AACD;AACF;AACF,aAPD;AAQA,mBAAO/oC,OAAOC,MAAP,CAAc,EAAd,EAAkB8L,OAAlB,EAA2BzL,WAA3B,EAAwCN,OAAOC,MAAP,CAAc,EAAd,EAAkBxJ,OAAOsB,IAAzB,EAA+B,EAAC0b,IAAD,EAA/B,CAAxC,CAAP;AACD;;AAED,iBAAOzT,OAAOC,MAAP,CAAc,EAAd,EAAkB8L,OAAlB,EAA2BzL,WAA3B,EAAwC7J,OAAOsB,IAA/C,CAAP;AACD;AACD,eAAOgU,OAAP;AACD,OAxBU,CAAX;;AA0BA,UAAI,CAACtV,OAAOsB,IAAP,CAAYixC,oBAAjB,EAAuC;AACrC,eAAOL,QAAP;AACD;;AAEDlyC,aAAOsB,IAAP,CAAYixC,oBAAZ,CAAiCjyC,OAAjC,CAAyCkyC,cAAc;AACrDN,mBAAWA,SAASh7B,GAAT,CAAa5B,WAAW;AACjC,cAAIA,QAAQnR,EAAR,KAAequC,WAAWruC,EAA9B,EAAkC;AAChC,kBAAMsuC,cAAcD,WAAWE,UAAX,CAAsBh4B,MAAtB,CAA6B,CAACsC,IAAD,EAAO21B,eAAP,KAA2B;AAC1E,oBAAMC,gBAAgBV,SAASp6B,IAAT,CAAcqI,KAAKA,EAAEhc,EAAF,KAASwuC,eAA5B,CAAtB;AACA,oBAAM,GAAG9B,OAAH,IAAcV,OAAOP,KAAP,CAAagD,cAAc51B,IAA3B,EAAiCA,IAAjC,CAApB;AACA,qBAAO6zB,OAAP;AACD,aAJmB,EAIjBv7B,QAAQ0H,IAJS,CAApB;;AAMA,mBAAOzT,OAAOC,MAAP,CAAc,EAAd,EAAkB8L,OAAlB,EAA2B,EAAC0H,MAAMy1B,WAAP,EAA3B,CAAP;AACD;;AAED,iBAAOn9B,OAAP;AACD,SAZU,CAAX;AAaD,OAdD;;AAgBA,aAAO48B,QAAP;AACF,SAAK,sBAAAtzC,CAAGi0C,mBAAR;AACE,aAAOjjC,UAAUsH,GAAV,CAAc5B,WAAW;AAC9B,YAAIA,WAAWA,QAAQnR,EAAR,KAAenE,OAAOsB,IAAP,CAAY6C,EAAtC,IAA4CmR,QAAQ0H,IAAxD,EAA8D;AAC5D,gBAAM6zB,UAAUv7B,QAAQ0H,IAAR,CAAa9F,GAAb,CAAiBo7B,QAAQ;AACvC,gBAAIA,KAAK/lC,GAAL,KAAavM,OAAOsB,IAAP,CAAYiL,GAA7B,EAAkC;AAChC,qBAAOhD,OAAOC,MAAP,CAAc,EAAd,EAAkB8oC,IAAlB,EAAwBtyC,OAAOsB,IAAP,CAAYrB,OAApC,CAAP;AACD;AACD,mBAAOqyC,IAAP;AACD,WALe,CAAhB;AAMA,iBAAO/oC,OAAOC,MAAP,CAAc,EAAd,EAAkB8L,OAAlB,EAA2B,EAAC0H,MAAM6zB,OAAP,EAA3B,CAAP;AACD;AACD,eAAOv7B,OAAP;AACD,OAXM,CAAP;AAYF,SAAK,sBAAA1W,CAAG0yC,qBAAR;AACE,UAAI,CAACtxC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOsO,SAAP;AACD;AACD,aAAOA,UAAUsH,GAAV,CAAc5B,WAAW/L,OAAOC,MAAP,CAAc,EAAd,EAAkB8L,OAAlB,EAA2B;AACzD0H,cAAM1H,QAAQ0H,IAAR,CAAa9F,GAAb,CAAiBy4B,QAAQ;AAC7B;AACA,cAAIA,KAAKpjC,GAAL,KAAavM,OAAOsB,IAAP,CAAYiL,GAA7B,EAAkC;AAChC,kBAAM,EAACyU,YAAD,EAAeuwB,aAAf,EAA8BC,SAA9B,KAA2CxxC,OAAOsB,IAAxD;AACA,mBAAOiI,OAAOC,MAAP,CAAc,EAAd,EAAkBmmC,IAAlB,EAAwB;AAC7B3uB,0BAD6B;AAE7BuwB,2BAF6B;AAG7BE,mCAAqBD,SAHQ;AAI7B7yC,oBAAM;AAJuB,aAAxB,CAAP;AAMD;AACD,iBAAOgxC,IAAP;AACD,SAZK;AADmD,OAA3B,CAAzB,CAAP;AAeF,SAAK,sBAAA/wC,CAAGk0C,sBAAR;AACE,UAAI,CAAC9yC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOsO,SAAP;AACD;AACD,aAAOA,UAAUsH,GAAV,CAAc5B,WAAW/L,OAAOC,MAAP,CAAc,EAAd,EAAkB8L,OAAlB,EAA2B;AACzD0H,cAAM1H,QAAQ0H,IAAR,CAAa9F,GAAb,CAAiBy4B,QAAQ;AAC7B,cAAIA,KAAKpjC,GAAL,KAAavM,OAAOsB,IAAP,CAAYiL,GAA7B,EAAkC;AAChC,mBAAOhD,OAAOC,MAAP,CAAc,EAAd,EAAkBmmC,IAAlB,EAAwB;AAC7BluB,wBAAUzhB,OAAOsB,IAAP,CAAYmgB,QADO;AAE7BC,yBAAW1hB,OAAOsB,IAAP,CAAYogB,SAFM;AAG7BvG,qBAAOnb,OAAOsB,IAAP,CAAY6Z,KAHU;AAI7Bxc,oBAAM;AAJuB,aAAxB,CAAP;AAMD;AACD,iBAAOgxC,IAAP;AACD,SAVK;AADmD,OAA3B,CAAzB,CAAP;AAaF,SAAK,sBAAA/wC,CAAG8yC,uBAAR;AACE,UAAI,CAAC1xC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOsO,SAAP;AACD;AACD,aAAOA,UAAUsH,GAAV,CAAc5B,WAAW/L,OAAOC,MAAP,CAAc,EAAd,EAAkB8L,OAAlB,EAA2B;AACzD0H,cAAM1H,QAAQ0H,IAAR,CAAa9F,GAAb,CAAiBy4B,QAAQ;AAC7B;AACA,cAAIA,KAAKpjC,GAAL,KAAavM,OAAOsB,IAAP,CAAYiL,GAA7B,EAAkC;AAChC,kBAAMolC,UAAUpoC,OAAOC,MAAP,CAAc,EAAd,EAAkBmmC,IAAlB,CAAhB;AACA,mBAAOgC,QAAQ3wB,YAAf;AACA,mBAAO2wB,QAAQJ,aAAf;AACA,mBAAOI,QAAQF,mBAAf;AACA,gBAAI,CAACE,QAAQhzC,IAAT,IAAiBgzC,QAAQhzC,IAAR,KAAiB,UAAtC,EAAkD;AAChDgzC,sBAAQhzC,IAAR,GAAe,SAAf;AACD;AACD,mBAAOgzC,OAAP;AACD;AACD,iBAAOhC,IAAP;AACD,SAbK;AADmD,OAA3B,CAAzB,CAAP;AAgBF,SAAK,sBAAA/wC,CAAGgzC,mBAAR;AACA,SAAK,sBAAAhzC,CAAGm0C,mBAAR;AACE,UAAI,CAAC/yC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOsO,SAAP;AACD;AACD,aAAOA,UAAUsH,GAAV,CAAc5B,WACnB/L,OAAOC,MAAP,CAAc,EAAd,EAAkB8L,OAAlB,EAA2B,EAAC0H,MAAM1H,QAAQ0H,IAAR,CAAa7I,MAAb,CAAoBkM,QAAQA,KAAK9T,GAAL,KAAavM,OAAOsB,IAAP,CAAYiL,GAArD,CAAP,EAA3B,CADK,CAAP;AAEF,SAAK,sBAAA3N,CAAGglB,kBAAR;AACA,SAAK,sBAAAhlB,CAAGklB,mBAAR;AACE,aAAOlU,UAAUsH,GAAV,CAAc5B,WACnB/L,OAAOC,MAAP,CAAc,EAAd,EAAkB8L,OAAlB,EAA2B,EAAC0H,MAAM1H,QAAQ0H,IAAR,CAAa7I,MAAb,CAAoBkM,QAAQA,KAAKqB,SAAL,KAAmB1hB,OAAOsB,IAAP,CAAYogB,SAA3D,CAAP,EAA3B,CADK,CAAP;AAEF,SAAK,sBAAA9iB,CAAGkzC,qBAAR;AACE,aAAOliC,UAAUsH,GAAV,CAAc5B,6BAAgBA,OAAhB,IAAyB0H,MAAM,EAA/B,GAAd,CAAP;AACF;AACE,aAAOpN,SAAP;AAtJJ;AAwJD;;AAED,SAASnF,QAAT,CAAkBmF,YAAYwgC,cAAc3lC,QAA5C,EAAsDzK,MAAtD,EAA8D;AAC5D,UAAQA,OAAOrB,IAAf;AACE,SAAK,sBAAAC,CAAGo0C,aAAR;AACE,aAAOzpC,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAAC/F,aAAa,IAAd,EAA7B,EAAkD7J,OAAOsB,IAAzD,CAAP;AACF,SAAK,sBAAA1C,CAAGsK,eAAR;AACE,aAAOK,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAAC5L,WAAW4L,UAAU5L,SAAV,CAAoBmF,MAApB,CAA2BnJ,OAAOsB,IAAlC,CAAZ,EAA7B,CAAP;AACF,SAAK,sBAAA1C,CAAGmF,0BAAR;AACE,aAAOwF,OAAOC,MAAP,CAAc,EAAd,EAAkBoG,SAAlB,EAA6B,EAAC5L,WAAW,EAAZ,EAA7B,CAAP;AACF,SAAK,sBAAApF,CAAGq0C,cAAR;AACE,aAAO7C,cAAc3lC,QAArB;AACF;AACE,aAAOmF,SAAP;AAVJ;AAYD;;AAED,SAASkO,MAAT,CAAgBlO,YAAYwgC,cAActyB,MAA1C,EAAkD9d,MAAlD,EAA0D;AACxD,UAAQA,OAAOrB,IAAf;AACE,SAAK,sBAAAC,CAAGs0C,uBAAR;AACE,+BAAWtjC,SAAX,IAAsB2O,gBAAgBve,OAAOsB,IAA7C;AACF,SAAK,sBAAA1C,CAAGu0C,gBAAR;AACE,+BAAWvjC,SAAX,IAAsB+O,gBAAgB,CAAC,CAAC3e,OAAOsB,IAA/C;AACF,SAAK,sBAAA1C,CAAGw0C,UAAR;AACE,+BACKxjC,SADL;AAEE8O,mBAAW;AACTyN,qBAAWnsB,OAAOsB,IAAP,CAAY+xC,UADd;AAETjnB,mBAASpsB,OAAOsB,IAAP,CAAYgyC,QAFZ;AAGTpnB,kBAAQlsB,OAAOsB,IAAP,CAAYiyC,OAHX;AAIT30B,kBAAQ5e,OAAOsB,IAAP,CAAYkyC;AAJX;AAFb;AASF;AACE,aAAO5jC,SAAP;AAhBJ;AAkBD;;eAMe,EAACme,QAAD,EAAWxZ,GAAX,EAAgBjK,QAAhB,EAA0BG,QAA1B,EAAoCL,KAApC,EAA2C+O,MAA3C,EAAmD9D,QAAnD,EAA6DyI,MAA7D,E;;;;;;;;;;;;;ACnbhB;;AAEO,MAAM,yBAAN,SAA2B,wBAAAhR,CAAMC,aAAjC,CAA+C;AACpDmB,uBAAqB;AACnB,SAAKD,QAAL,CAAc,EAACia,QAAQ,IAAT,EAAd;AACAlpB,aAASkQ,IAAT,CAAc2E,SAAd,CAAwBC,GAAxB,CAA4B,YAA5B;AACD;;AAED1F,yBAAuB;AACrBpP,aAASkQ,IAAT,CAAc2E,SAAd,CAAwBkiB,MAAxB,CAA+B,YAA/B;AACA,SAAK9nB,QAAL,CAAc,EAACia,QAAQ,KAAT,EAAd;AACD;;AAEDtZ,WAAS;AACP,UAAM,EAACsZ,MAAD,KAAW,KAAKhe,KAAtB;AACA,UAAM,EAACiR,KAAD,EAAQue,YAAR,KAAwB,KAAK1sB,KAAnC;AACA,WACE;AAAA;AAAA;AACE,sDAAK,WAAY,qBAAoBkb,SAAS,QAAT,GAAoB,EAAG,EAA5D,GADF;AAEE;AAAA;AAAA,UAAK,WAAY,qBAAoBA,SAAS,QAAT,GAAoB,EAAG,EAA5D;AACE;AAAA;AAAA;AAAA;AAAM/M,eAAN;AAAA;AAAA,SADF;AAEG,aAAKnO,KAAL,CAAW0F,QAFd;AAGE;AAAA;AAAA,YAAK,WAAU,QAAf;AACE;AAAA;AAAA,cAAQ,UAAS,GAAjB,EAAqB,SAAS,KAAK1F,KAAL,CAAWymC,YAAzC,EAAuD,WAAU,4BAAjE;AAAA;AAAgG/Z,wBAAhG;AAAA;AAAA;AADF;AAHF;AAFF,KADF;AAYD;AA1BmD,C;;;;;ACFtD;AACA;;AAEA,MAAM,gCAAN,SAA6B,wBAAA5sB,CAAMC,aAAnC,CAAiD;AAC/C1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK6F,OAAL,GAAe,KAAKA,OAAL,CAAaxL,IAAb,CAAkB,IAAlB,CAAf;AACD;;AAEDwL,YAAU;AACR,UAAM,EAAC7F,KAAD,KAAU,IAAhB;AACA,UAAMjB,OAAO;AACXlG,aAAO,cADI;AAEXyH,kBAAYN,MAAM7I,EAFP;AAGXA,UAAI6I,MAAMqrB;AAHC,KAAb;AAKArrB,UAAMI,uBAAN,CAA8BrB,IAA9B;AACAiB,UAAMisB,QAAN,CAAejsB,MAAMY,OAAN,CAAclC,aAA7B;AACD;;AAEDkD,WAAS;AACP,UAAM,EAAChB,OAAD,KAAY,KAAKZ,KAAvB;AACA,WACE;AAAA;AAAA,QAAK,WAAU,mBAAf;AACE,sDAAK,WAAY,0BAAyBY,QAAQmL,IAAK,EAAvD,GADF;AAEE;AAAA;AAAA,UAAK,WAAU,mBAAf;AACE;AAAA;AAAA;AACE;AAAA;AAAA;AAAA;AAAMnL,oBAAQuN,KAAd;AAAA;AAAA,WADF;AAEE;AAAA;AAAA;AAAA;AAAKvN,oBAAQxF,IAAb;AAAA;AAAA;AAFF,SADF;AAKE;AAAA;AAAA;AACE;AAAA;AAAA,cAAQ,UAAS,GAAjB,EAAqB,WAAU,yBAA/B,EAAyD,SAAS,KAAKyK,OAAvE;AAAA;AAAkFjF,oBAAQ8rB,YAA1F;AAAA;AAAA;AADF;AALF;AAFF,KADF;AAcD;AAjC8C;;AAoC1C,MAAM,mCAAN,SAAgC,wBAAA5sB,CAAMC,aAAtC,CAAoD;AACzD6B,WAAS;AACP,UAAM,EAAC5B,KAAD,KAAU,IAAhB;AACA,UAAM,EAAC0sB,YAAD,EAAega,MAAf,KAAyB1mC,MAAM2mC,oBAArC;AACA,WACE;AAAC,+BAAD;AAAA,mBAAkB3mC,KAAlB,IAAyB,cAAc0sB,YAAvC,EAAqD,OAAOga,MAA5D;AACE;AAAA;AAAA,UAAK,WAAU,4BAAf;AACG1mC,cAAMxB,MAAN,CAAa0L,GAAb,CAAiBtK,WAChB,uCAAC,gCAAD,aAAgB,KAAKA,QAAQzI,EAA7B;AACE,mCAAyB6I,MAAMI,uBADjC;AAEE,oBAAUJ,MAAMisB,QAFlB;AAGE,qBAAWjsB,MAAMqrB;AAHnB,WAIMzrB,OAJN,EADD;AADH;AADF,KADF;AAaD;AAjBwD,C;;;;;;;;;;;;;;;ACvCpD,MAAMgnC,mBAAmB;AAC9BC,WAAS;AACPC,YAAQ,oBADD;AAEP/6B,UAAM;AAFC,GADqB;AAK9Bg7B,YAAU;AACRD,YAAQ,uBADA;AAER/6B,UAAM;AAFE,GALoB;AAS9Bi7B,YAAU;AACRF,YAAQ,wBADA;AAER/6B,UAAM;AAFE,GAToB;AAa9BjR,OAAK;AACHgsC,YAAQ,gBADL;AAEH/6B,UAAM;AAFH,GAbyB;AAiB9B2K,UAAQ;AACNowB,YAAQ,mBADF;AAEN/6B,UAAM;AAFA,GAjBsB;AAqB9Bk7B,YAAU;AACRH,YAAQ,uBADA;AAER/6B,UAAM;AAFE;AArBoB,CAAzB,C;;;;;;;;;;;;;;;;;;;;;;;ACAP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAMm7B,gBAAgB,IAAI9wC,GAAJ,EAAtB;;AAEA;;;;;;;;;AASO,MAAM,SAAN,SAAoB,wBAAA0J,CAAMC,aAA1B,CAAwC;AAC7C1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9C,KAAL,GAAa;AACXiqC,kBAAY,IADD;AAEXC,mBAAa,KAFF;AAGXntB,uBAAiB,KAHN;AAIXotB,iBAAW;AAJA,KAAb;AAMA,SAAK3tB,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBrf,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKwf,YAAL,GAAoB,KAAKA,YAAL,CAAkBxf,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKgrB,WAAL,GAAmB,KAAKA,WAAL,CAAiBhrB,IAAjB,CAAsB,IAAtB,CAAnB;AACD;;AAED;;;AAGMitC,gBAAN,GAAuB;AAAA;;AAAA;AACrB;AACA,YAAM,EAACD,SAAD,KAAc,MAAKnqC,KAAzB;AACA,UAAI,CAACmqC,SAAL,EAAgB;AACd;AACD;;AAED,YAAME,WAAWF,UAAU9nC,GAA3B;AACA,UAAI,CAAC,MAAKrC,KAAL,CAAWkqC,WAAhB,EAA6B;AAC3B;AACA,YAAI,CAACF,cAAczL,GAAd,CAAkB8L,QAAlB,CAAL,EAAkC;AAChC,gBAAMC,gBAAgB,IAAI7vC,OAAJ,CAAY,UAACC,OAAD,EAAUa,MAAV,EAAqB;AACrD,kBAAMgvC,SAAS,IAAIC,KAAJ,EAAf;AACAD,mBAAOniC,gBAAP,CAAwB,MAAxB,EAAgC1N,OAAhC;AACA6vC,mBAAOniC,gBAAP,CAAwB,OAAxB,EAAiC7M,MAAjC;AACAgvC,mBAAOE,GAAP,GAAaJ,QAAb;AACD,WALqB,CAAtB;;AAOA;AACAL,wBAAc1wC,GAAd,CAAkB+wC,QAAlB,EAA4BC,aAA5B;AACAA,wBAAcI,KAAd,CAAoB;AAAA,mBAAM9jC,EAAN;AAAA,WAApB,EAA8B+jC,IAA9B,CAAmC;AAAA,mBAAMX,cAAcrwC,MAAd,CAAqB0wC,QAArB,CAAN;AAAA,WAAnC,EAAyEK,KAAzE;AACD;;AAED;AACA,cAAMV,cAAcjwC,GAAd,CAAkBswC,QAAlB,CAAN;;AAEA;AACA,YAAI,mCAAA9uB,CAAgBW,kBAAhB,CAAmC,MAAKlc,KAAL,CAAWmqC,SAA9C,EAAyD,MAAKrnC,KAAL,CAAWmQ,IAAX,CAAgByI,KAAzE,KACA,CAAC,MAAK1b,KAAL,CAAWkqC,WADhB,EAC6B;AAC3B,gBAAKnmC,QAAL,CAAc,EAACmmC,aAAa,IAAd,EAAd;AACD;AACF;AA/BoB;AAgCtB;;AAED;;;;;;;;;;;AAWA,SAAOpjB,qBAAP,CAA6BtkB,SAA7B,EAAwCkD,SAAxC,EAAmD;AACjD,UAAM,EAACgW,KAAD,KAAUlZ,UAAUyQ,IAA1B;AACA,UAAM8T,eAAe,mCAAAxL,CAAgBW,kBAAhB,CAAmCxW,UAAUykC,SAA7C,EAAwDzuB,KAAxD,CAArB;AACA,QAAIsL,YAAY,IAAhB;;AAEA;AACA,QAAI,CAACD,YAAD,IAAiBvkB,UAAUyQ,IAA/B,EAAqC;AACnC+T,kBAAY,EAACkjB,aAAa,KAAd,EAAZ;AACD;;AAED,QAAInjB,YAAJ,EAAkB;AAChB,aAAOC,SAAP;AACD;;AAED;AACAzL,IAAA,mCAAAA,CAAgBQ,wBAAhB,CAAyCrW,UAAUykC,SAAnD;;AAEAnjB,gBAAYA,aAAa,EAAzB;AACAA,cAAUmjB,SAAV,GAAsB,mCAAA5uB,CAAgBK,sBAAhB,CAAuCF,KAAvC,CAAtB;;AAEA,WAAOsL,SAAP;AACD;;AAEDxK,oBAAkB7gB,KAAlB,EAAyB;AACvBA,UAAMiiB,cAAN;AACA,SAAK7Z,QAAL,CAAc;AACZkmC,kBAAY,KAAKnnC,KAAL,CAAWuU,KADX;AAEZ0F,uBAAiB;AAFL,KAAd;AAID;;AAED;;;AAGAqL,sBAAoB;AAClB;AACA,QAAI,KAAKtlB,KAAL,CAAWmQ,IAAX,CAAgBxe,IAAhB,KAAyB,SAA7B,EAAwC;AACtC,aAAO,EAACwD,OAAO,EAACswB,WAAW,KAAKzlB,KAAL,CAAWmQ,IAAX,CAAgBxe,IAA5B,EAAR,EAAP;AACD;;AAED,WAAO,IAAP;AACD;;AAED0zB,cAAYxsB,KAAZ,EAAmB;AACjBA,UAAMiiB,cAAN;AACA,QAAI,KAAK9a,KAAL,CAAWmQ,IAAX,CAAgBxe,IAAhB,KAAyB,UAA7B,EAAyC;AACvC,WAAKqO,KAAL,CAAWxO,QAAX,CAAoB,yBAAAC,CAAGmC,UAAH,CAAc;AAChCjC,cAAM,sBAAAC,CAAG6jB,kBADuB;AAEhCnhB,cAAM,KAAK0L,KAAL,CAAWmQ;AAFe,OAAd,CAApB;AAID,KALD,MAKO;AACL,YAAM,EAACwV,MAAD,EAAS5B,MAAT,EAAiB6B,OAAjB,EAA0BC,OAA1B,EAAmCrN,QAAnC,KAA+C3f,KAArD;AACA,WAAKmH,KAAL,CAAWxO,QAAX,CAAoB,yBAAAC,CAAGmC,UAAH,CAAc;AAChCjC,cAAM,sBAAAC,CAAGmkB,SADuB;AAEhCzhB,cAAMiI,OAAOC,MAAP,CAAc,KAAKwD,KAAL,CAAWmQ,IAAzB,EAA+B,EAACtX,OAAO,EAAC8sB,MAAD,EAAS5B,MAAT,EAAiB6B,OAAjB,EAA0BC,OAA1B,EAAmCrN,QAAnC,EAAR,EAA/B;AAF0B,OAAd,CAApB;AAID;AACD,QAAI,KAAKxY,KAAL,CAAWmS,cAAf,EAA+B;AAC7B,WAAKnS,KAAL,CAAWxO,QAAX,CAAoB,yBAAAC,CAAG4D,WAAH,CAAe,sBAAAzD,CAAGk2C,YAAlB,EAAgC;AAClDxyC,gBAAQ,KAAK0K,KAAL,CAAWyL,WAD+B;AAElDlM,aAAK,KAAKS,KAAL,CAAWmQ,IAAX,CAAgB5Q,GAF6B;AAGlD0V,yBAAiB,KAAKjV,KAAL,CAAWuU;AAHsB,OAAhC,CAApB;AAKD,KAND,MAMO;AACL,WAAKvU,KAAL,CAAWxO,QAAX,CAAoB,yBAAAC,CAAG4C,SAAH,CAAakI,OAAOC,MAAP,CAAc;AAC7C3D,eAAO,OADsC;AAE7CvD,gBAAQ,KAAK0K,KAAL,CAAWyL,WAF0B;AAG7CwJ,yBAAiB,KAAKjV,KAAL,CAAWuU;AAHiB,OAAd,EAI9B,KAAK+Q,iBAAL,EAJ8B,CAAb,CAApB;;AAMA,UAAI,KAAKtlB,KAAL,CAAWuQ,yBAAf,EAA0C;AACxC,aAAKvQ,KAAL,CAAWxO,QAAX,CAAoB,yBAAAC,CAAGsD,eAAH,CAAmB;AACrCO,kBAAQ,KAAK0K,KAAL,CAAWyL,WADkB;AAErCs8B,iBAAO,CAF8B;AAGrC73B,iBAAO,CAAC,EAAC/Y,IAAI,KAAK6I,KAAL,CAAWmQ,IAAX,CAAgBC,IAArB,EAA2ByE,KAAK,KAAK7U,KAAL,CAAWuU,KAA3C,EAAD;AAH8B,SAAnB,CAApB;AAKD;AACF;AACF;;AAEDsF,eAAaI,eAAb,EAA8B;AAC5B,SAAKhZ,QAAL,CAAc,EAACgZ,eAAD,EAAd;AACD;;AAED1U,sBAAoB;AAClB,SAAK+hC,cAAL;AACD;;AAED7hC,uBAAqB;AACnB,SAAK6hC,cAAL;AACD;;AAED;AACA;AACA;AACApmC,uBAAqB;AACnB,UAAMgjB,YAAY,SAAA8jB,CAAMhkB,qBAAN,CAA4B,KAAKhkB,KAAjC,EAAwC,KAAK9C,KAA7C,CAAlB;AACA,QAAIgnB,SAAJ,EAAe;AACb,WAAKjjB,QAAL,CAAcijB,SAAd;AACD;AACF;;AAED;AACA;AACA;AACAC,4BAA0BzkB,SAA1B,EAAqC;AACnC,UAAMwkB,YAAY,SAAA8jB,CAAMhkB,qBAAN,CAA4BtkB,SAA5B,EAAuC,KAAKxC,KAA5C,CAAlB;AACA,QAAIgnB,SAAJ,EAAe;AACb,WAAKjjB,QAAL,CAAcijB,SAAd;AACD;AACF;;AAED9iB,yBAAuB;AACrBqX,IAAA,mCAAAA,CAAgBQ,wBAAhB,CAAyC,KAAK/b,KAAL,CAAWmqC,SAApD;AACD;;AAEDzlC,WAAS;AACP,UAAM,EAAC2S,KAAD,EAAQjN,SAAR,EAAmB6I,IAAnB,EAAyB3e,QAAzB,EAAmC0f,kBAAnC,EAAuDzF,WAAvD,EAAoE8E,yBAApE,KAAiG,KAAKvQ,KAA5G;AACA,UAAM,EAACA,KAAD,KAAU,IAAhB;AACA,UAAMgmB,oBAAoB,KAAK9oB,KAAL,CAAW+c,eAAX,IAA8B,KAAK/c,KAAL,CAAWiqC,UAAX,KAA0B5yB,KAAlF;AACA;AACA,UAAM,EAACxI,IAAD,EAAO+6B,MAAP,KAAiB,gBAAAF,CAAiBz2B,KAAKxe,IAAL,KAAc,KAAd,GAAsB,UAAtB,GAAmCwe,KAAKxe,IAAzD,KAAkE,EAAzF;AACA,UAAMs2C,WAAW,KAAK/qC,KAAL,CAAWmqC,SAAX,IAAwBl3B,KAAK83B,QAA9C;AACA,UAAMnmB,aAAa,EAACjH,iBAAiB,KAAK3d,KAAL,CAAWmqC,SAAX,GAAwB,OAAM,KAAKnqC,KAAL,CAAWmqC,SAAX,CAAqB9nC,GAAI,GAAvD,GAA4D,MAA9E,EAAnB;AACA,UAAMiJ,iBAAiB,CACrB,YADqB,EAErBlB,SAFqB,EAGrB0e,qBAAqB,QAHA,EAIrBhmB,MAAMkoC,WAAN,IAAqB,aAJA,EAKrB/gC,MALqB,CAKdC,KAAKA,CALS,EAKNC,IALM,CAKD,GALC,CAAvB;;AAOA,WAAQ;AAAA;AAAA,QAAI,WAAWmB,cAAf;AACN;AAAA;AAAA,UAAG,MAAM2H,KAAKxe,IAAL,KAAc,QAAd,GAAyBwe,KAAKsE,QAA9B,GAAyCtE,KAAK5Q,GAAvD,EAA4D,SAAS,CAACS,MAAMkoC,WAAP,GAAqB,KAAK7iB,WAA1B,GAAwChL,SAA7G;AACE;AAAA;AAAA,YAAK,WAAU,MAAf;AACE;AAAA;AAAA,cAAK,WAAU,0BAAf;AACG4tB,wBACC,gDAAK,WAAY,qBAAoB,KAAK/qC,KAAL,CAAWkqC,WAAX,GAAyB,SAAzB,GAAqC,EAAG,EAA7E,EAAgF,OAAOtlB,UAAvF;AAFJ,WADF;AAME;AAAA;AAAA,cAAK,WAAU,cAAf;AACG3R,iBAAKxe,IAAL,KAAc,UAAd,IAA4B;AAAA;AAAA,gBAAK,WAAU,0BAAf;AAA0C,qDAAC,uCAAD,IAAkB,IAAI,8CAAA8hB,CAAkB,KAAKzT,KAAL,CAAW0T,QAA7B,CAAtB;AAA1C,aAD/B;AAEGvD,iBAAKuV,QAAL,IACC;AAAA;AAAA,gBAAK,WAAU,gBAAf;AACGvV,mBAAKuV,QAAL,CAAcvmB,KAAd,CAAoB,CAApB,EAAuB,GAAvB,CADH;AACgCgR,mBAAKxe,IAAL,KAAc,UAAd,IAA6B,YAAWwe,KAAKg4B,WAAY;AADzF,aAHJ;AAOE;AAAA;AAAA,gBAAK,WAAW,CACd,WADc,EAEdp8B,OAAO,EAAP,GAAY,YAFE,EAGdoE,KAAKg4B,WAAL,GAAmB,EAAnB,GAAwB,gBAHV,EAIdh4B,KAAKuV,QAAL,GAAgB,EAAhB,GAAqB,cAJP,EAKdre,IALc,CAKT,GALS,CAAhB;AAME;AAAA;AAAA,kBAAI,WAAU,YAAd,EAA2B,KAAI,MAA/B;AAAuC8I,qBAAKhC;AAA5C,eANF;AAOE;AAAA;AAAA,kBAAG,WAAU,kBAAb,EAAgC,KAAI,MAApC;AAA4CgC,qBAAKg4B;AAAjD;AAPF,aAPF;AAgBE;AAAA;AAAA,gBAAK,WAAU,cAAf;AACGp8B,sBAAQ,CAACoE,KAAK8hB,OAAd,IAAyB,iDAAM,WAAY,+BAA8BlmB,IAAK,EAArD,GAD5B;AAEGoE,mBAAKpE,IAAL,IAAaoE,KAAK8hB,OAAlB,IAA6B,iDAAM,WAAU,wBAAhB,EAAyC,OAAO,EAACpX,iBAAkB,QAAO1K,KAAKpE,IAAK,IAApC,EAAhD,GAFhC;AAGG+6B,wBAAU,CAAC32B,KAAK8hB,OAAhB,IAA2B;AAAA;AAAA,kBAAK,WAAU,oBAAf;AAAoC,uDAAC,uCAAD,IAAkB,IAAI6U,MAAtB,EAA8B,gBAAe,SAA7C;AAApC,eAH9B;AAIG32B,mBAAK8hB,OAAL,IAAgB;AAAA;AAAA,kBAAK,WAAU,oBAAf;AAAqC9hB,qBAAK8hB;AAA1C;AAJnB;AAhBF;AANF;AADF,OADM;AAiCL,OAACjyB,MAAMkoC,WAAP,IAAsB;AAAA;AAAA,UAAQ,WAAU,0BAAlB,EAA6C,OAAO,KAAKloC,KAAL,CAAW8F,IAAX,CAAgBC,aAAhB,CAA8B,EAAC5O,IAAI,oBAAL,EAA9B,CAApD;AACrB,mBAAS,KAAKuiB,iBADO;AAErB;AAAA;AAAA,YAAM,WAAU,SAAhB;AAA4B,mCAAwBvJ,KAAKhC,KAAM;AAA/D;AAFqB,OAjCjB;AAqCL6X,2BACC,uCAAC,oBAAD;AACE,kBAAUx0B,QADZ;AAEE,eAAO+iB,KAFT;AAGE,gBAAQ9I,WAHV;AAIE,kBAAU,KAAKoO,YAJjB;AAKE,iBAAS1J,KAAKe,kBAAL,IAA2BA,kBALtC;AAME,cAAMf,IANR;AAOE,kBAAU,KAAKmV,iBAAL,EAPZ;AAQE,mCAA2B/U,yBAR7B;AAtCI,KAAR;AAiDD;AAlP4C;AAoP/C,SAAAy3B,CAAMnmC,YAAN,GAAqB,EAACsO,MAAM,EAAP,EAArB;AACO,MAAMi4B,OAAO,uCAAA/vC,CAAQ6E,UAAU,EAACwW,UAAUxW,MAAME,KAAN,CAAYC,MAAZ,CAAmBqW,QAA9B,EAAV,CAAR,EAA4D,yCAAA9N,CAAW,SAAX,CAA5D,CAAb;AACA,MAAMyiC,kBAAkBroC,SAAS,uCAAC,IAAD,IAAM,aAAa,IAAnB,EAAyB,WAAWA,MAAMsH,SAA1C,GAAjC,C;;;;;;;;;;;;;;;;;;;;;;AC3QP;AACA;;AAEO,MAAM,iCAAN,SAA+B,wBAAAxH,CAAMC,aAArC,CAAmD;AACxD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9C,KAAL,GAAa,EAACorC,iBAAiB,KAAKtoC,KAAL,CAAWsoC,eAA7B,EAAb;AACA,SAAKtmB,QAAL,GAAgB,KAAKA,QAAL,CAAc3nB,IAAd,CAAmB,IAAnB,CAAhB;AACA,SAAKkuC,OAAL,GAAe,KAAKA,OAAL,CAAaluC,IAAb,CAAkB,IAAlB,CAAf;AACD;;AAED8pB,4BAA0BzkB,SAA1B,EAAqC;AACnC,QAAIA,UAAU8oC,WAAV,IAAyB,CAAC,KAAKxoC,KAAL,CAAWwoC,WAAzC,EAAsD;AACpD,WAAK95B,KAAL,CAAWya,KAAX;AACD;AACD,QAAIzpB,UAAU4oC,eAAV,IAA6B,CAAC,KAAKtoC,KAAL,CAAWsoC,eAA7C,EAA8D;AAC5D,WAAKrnC,QAAL,CAAc,EAACqnC,iBAAiB,IAAlB,EAAd;AACD;AACD;AACA,QAAI,KAAKprC,KAAL,CAAWorC,eAAX,IAA8B,CAAC5oC,UAAUvK,KAA7C,EAAoD;AAClD,WAAK8L,QAAL,CAAc,EAACqnC,iBAAiB,KAAlB,EAAd;AACD;AACF;;AAEDtmB,WAASQ,EAAT,EAAa;AACX,QAAI,KAAKtlB,KAAL,CAAWorC,eAAf,EAAgC;AAC9B,WAAKrnC,QAAL,CAAc,EAACqnC,iBAAiB,KAAlB,EAAd;AACD;AACD,SAAKtoC,KAAL,CAAWgiB,QAAX,CAAoBQ,EAApB;AACD;;AAED+lB,UAAQ75B,KAAR,EAAe;AACb,SAAKA,KAAL,GAAaA,KAAb;AACD;;AAED9M,WAAS;AACP,UAAM6mC,kBAAkB,KAAKzoC,KAAL,CAAW7K,KAAX,IAAoB,KAAK6K,KAAL,CAAW0oC,OAAvD;AACA,UAAM,EAACC,OAAD,KAAY,KAAK3oC,KAAvB;AACA,UAAM,EAACsoC,eAAD,KAAoB,KAAKprC,KAA/B;;AAEA,WAAQ;AAAA;AAAA;AAAO,6CAAC,uCAAD,IAAkB,IAAI,KAAK8C,KAAL,CAAW4oC,OAAjC,GAAP;AACN;AAAA;AAAA,UAAK,WAAY,SAAQD,UAAU,KAAV,GAAkB,EAAG,GAAEL,kBAAkB,UAAlB,GAA+B,EAAG,EAAlF;AACG,aAAKtoC,KAAL,CAAW6oC,OAAX,GACC;AAAA;AAAA,YAAK,WAAU,mBAAf;AAAmC,0DAAK,WAAU,mBAAf;AAAnC,SADD,GAECJ,mBAAmB,gDAAK,WAAU,uBAAf,EAAuC,SAAS,KAAKzoC,KAAL,CAAW0oC,OAA3D,GAHvB;AAIE,0DAAO,MAAK,MAAZ;AACE,iBAAO,KAAK1oC,KAAL,CAAW7K,KADpB;AAEE,eAAK,KAAKozC,OAFZ;AAGE,oBAAU,KAAKvmB,QAHjB;AAIE,uBAAa,KAAKhiB,KAAL,CAAW8F,IAAX,CAAgBC,aAAhB,CAA8B,EAAC5O,IAAI,KAAK6I,KAAL,CAAW8oC,aAAhB,EAA9B,CAJf;AAKE,qBAAW,KAAK9oC,KAAL,CAAWwoC,WALxB;AAME,oBAAU,KAAKxoC,KAAL,CAAW6oC,OANvB,GAJF;AAWGP,2BACC;AAAA;AAAA,YAAO,WAAU,eAAjB;AACE,iDAAC,uCAAD,IAAkB,IAAI,KAAKtoC,KAAL,CAAW+oC,cAAjC;AADF;AAZJ;AADM,KAAR;AAkBD;AAvDuD;;AA0D1D,iCAAAC,CAAiBnnC,YAAjB,GAAgC;AAC9B4mC,mBAAiB,KADa;AAE9BtzC,SAAO,EAFuB;AAG9BmzC,mBAAiB;AAHa,CAAhC,C;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAM,uBAAN,SAA0B,wBAAAxoC,CAAMC,aAAhC,CAA8C;AACnD1J,cAAY2J,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,UAAM,EAACqT,IAAD,KAASrT,KAAf;AACA,SAAK9C,KAAL,GAAa;AACX8N,aAAOqI,OAAQA,KAAKrI,KAAL,IAAcqI,KAAKqS,QAA3B,GAAuC,EADnC;AAEXnmB,WAAK8T,OAAOA,KAAK9T,GAAZ,GAAkB,EAFZ;AAGX+oC,uBAAiB,KAHN;AAIXW,2BAAqB51B,OAAOA,KAAKqM,mBAAZ,GAAkC,EAJ5C;AAKXwpB,gCAA0B71B,OAAOA,KAAKqM,mBAAZ,GAAkC;AALjD,KAAb;AAOA,SAAKypB,sBAAL,GAA8B,KAAKA,sBAAL,CAA4B9uC,IAA5B,CAAiC,IAAjC,CAA9B;AACA,SAAK+uC,aAAL,GAAqB,KAAKA,aAAL,CAAmB/uC,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAKgvC,WAAL,GAAmB,KAAKA,WAAL,CAAiBhvC,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAK8nB,mBAAL,GAA2B,KAAKA,mBAAL,CAAyB9nB,IAAzB,CAA8B,IAA9B,CAA3B;AACA,SAAKivC,eAAL,GAAuB,KAAKA,eAAL,CAAqBjvC,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKkvC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBlvC,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKmvC,2BAAL,GAAmC,KAAKA,2BAAL,CAAiCnvC,IAAjC,CAAsC,IAAtC,CAAnC;AACA,SAAKovC,oBAAL,GAA4B,KAAKA,oBAAL,CAA0BpvC,IAA1B,CAA+B,IAA/B,CAA5B;AACA,SAAKqvC,yBAAL,GAAiC,KAAKA,yBAAL,CAA+BrvC,IAA/B,CAAoC,IAApC,CAAjC;AACA,SAAKsvC,WAAL,GAAmB,KAAKA,WAAL,CAAiBtvC,IAAjB,CAAsB,IAAtB,CAAnB;AACD;;AAED+uC,gBAAcvwC,KAAd,EAAqB;AACnB,SAAKoI,QAAL,CAAc,EAAC,SAASpI,MAAM9E,MAAN,CAAaoB,KAAvB,EAAd;AACD;;AAEDk0C,cAAYxwC,KAAZ,EAAmB;AACjB,SAAKoI,QAAL,CAAc;AACZ1B,WAAK1G,MAAM9E,MAAN,CAAaoB,KADN;AAEZmzC,uBAAiB;AAFL,KAAd;AAID;;AAEDgB,oBAAkB;AAChB,SAAKroC,QAAL,CAAc;AACZ1B,WAAK,EADO;AAEZ+oC,uBAAiB;AAFL,KAAd;AAID;;AAEDoB,8BAA4B;AAC1B,SAAKzoC,QAAL,CAAc,EAACioC,0BAA0B,IAA3B,EAAd;AACD;;AAEDU,+BAA6BX,mBAA7B,EAAkD;AAChD,SAAKhoC,QAAL,CAAc;AACZgoC,yBADY;AAEZX,uBAAiB;AAFL,KAAd;AAIA,SAAKtoC,KAAL,CAAWxO,QAAX,CAAoB,EAACG,MAAM,sBAAAC,CAAGwyC,sBAAV,EAApB;AACD;;AAEDoF,8BAA4B3wC,KAA5B,EAAmC;AACjC,SAAK+wC,4BAAL,CAAkC/wC,MAAM9E,MAAN,CAAaoB,KAA/C;AACD;;AAEDg0C,2BAAyB;AACvB,SAAKS,4BAAL,CAAkC,EAAlC;AACD;;AAEDznB,sBAAoBK,EAApB,EAAwB;AACtBA,OAAG1H,cAAH;AACA,SAAK9a,KAAL,CAAWyiB,OAAX;AACD;;AAED8mB,oBAAkB/mB,EAAlB,EAAsB;AACpBA,OAAG1H,cAAH;;AAEA,QAAI,KAAK+uB,YAAL,EAAJ,EAAyB;AACvB,YAAMx2B,OAAO,EAAC9T,KAAK,KAAKuqC,QAAL,CAAc,KAAK5sC,KAAL,CAAWqC,GAAzB,CAAN,EAAb;AACA,YAAM,EAACgV,KAAD,KAAU,KAAKvU,KAArB;AACA,UAAI,KAAK9C,KAAL,CAAW8N,KAAX,KAAqB,EAAzB,EAA6B;AAC3BqI,aAAKrI,KAAL,GAAa,KAAK9N,KAAL,CAAW8N,KAAxB;AACD;;AAED,UAAI,KAAK9N,KAAL,CAAW+rC,mBAAf,EAAoC;AAClC51B,aAAKqM,mBAAL,GAA2B,KAAKoqB,QAAL,CAAc,KAAK5sC,KAAL,CAAW+rC,mBAAzB,CAA3B;AACD,OAFD,MAEO,IAAI,KAAKjpC,KAAL,CAAWqT,IAAX,IAAmB,KAAKrT,KAAL,CAAWqT,IAAX,CAAgBqM,mBAAvC,EAA4D;AACjE;AACArM,aAAKqM,mBAAL,GAA2B,IAA3B;AACD;AACD,WAAK1f,KAAL,CAAWxO,QAAX,CAAoB,yBAAAC,CAAGC,UAAH,CAAc;AAChCC,cAAM,sBAAAC,CAAGykB,aADuB;AAEhC/hB,cAAM,EAAC+e,IAAD,EAAOkB,KAAP;AAF0B,OAAd,CAApB;AAIA,WAAKvU,KAAL,CAAWxO,QAAX,CAAoB,yBAAAC,CAAG4C,SAAH,CAAa;AAC/BiB,gBAAQ,qCADuB;AAE/BuD,eAAO,gBAFwB;AAG/Boc,yBAAiBV;AAHc,OAAb,CAApB;;AAMA,WAAKvU,KAAL,CAAWyiB,OAAX;AACD;AACF;;AAEDgnB,uBAAqB5wC,KAArB,EAA4B;AAC1BA,UAAMiiB,cAAN;AACA,QAAI,KAAK+uB,YAAL,EAAJ,EAAyB;AACvB,WAAK7pC,KAAL,CAAWxO,QAAX,CAAoB,yBAAAC,CAAGC,UAAH,CAAc;AAChCC,cAAM,sBAAAC,CAAGuyC,eADuB;AAEhC7vC,cAAM,EAACiL,KAAK,KAAKuqC,QAAL,CAAc,KAAK5sC,KAAL,CAAW+rC,mBAAzB,CAAN;AAF0B,OAAd,CAApB;AAIA,WAAKjpC,KAAL,CAAWxO,QAAX,CAAoB,yBAAAC,CAAG4C,SAAH,CAAa;AAC/BiB,gBAAQ,qCADuB;AAE/BuD,eAAO;AAFwB,OAAb,CAApB;AAID;AACF;;AAEDixC,WAASvqC,GAAT,EAAc;AACZ;AACA,QAAI,CAACA,IAAIgT,UAAJ,CAAe,OAAf,CAAD,IAA4B,CAAChT,IAAIgT,UAAJ,CAAe,QAAf,CAAjC,EAA2D;AACzD,aAAQ,UAAShT,GAAI,EAArB;AACD;AACD,WAAOA,GAAP;AACD;;AAEDwqC,eAAaxqC,GAAb,EAAkB;AAChB,QAAI;AACF,aAAO,IAAID,GAAJ,CAAQC,GAAR,CAAP;AACD,KAFD,CAEE,OAAOlE,CAAP,EAAU;AACV,aAAO,IAAP;AACD;AACF;;AAEDsuC,cAAYpqC,GAAZ,EAAiB;AACf,UAAMyqC,iBAAiB,CAAC,OAAD,EAAU,QAAV,CAAvB;AACA,UAAMC,SAAS,KAAKF,YAAL,CAAkBxqC,GAAlB,KAA0B,KAAKwqC,YAAL,CAAkB,KAAKD,QAAL,CAAcvqC,GAAd,CAAlB,CAAzC;;AAEA,WAAO0qC,UAAUD,eAAe5yC,QAAf,CAAwB6yC,OAAO7f,QAA/B,CAAjB;AACD;;AAED8f,gCAA8B;AAC5B,UAAM,EAACjB,mBAAD,KAAwB,KAAK/rC,KAAnC;AACA,WAAO,CAAC+rC,mBAAD,IAAwB,KAAKU,WAAL,CAAiBV,mBAAjB,CAA/B;AACD;;AAEDY,iBAAe;AACb,UAAMM,WAAW,KAAKR,WAAL,CAAiB,KAAKzsC,KAAL,CAAWqC,GAA5B,KAAoC,KAAK2qC,2BAAL,EAArD;;AAEA,QAAI,CAACC,QAAL,EAAe;AACb,WAAKlpC,QAAL,CAAc,EAACqnC,iBAAiB,IAAlB,EAAd;AACD;;AAED,WAAO6B,QAAP;AACD;;AAEDC,iCAA+B;AAC7B,UAAM,EAACnB,mBAAD,KAAwB,KAAK/rC,KAAnC;AACA,UAAMmtC,gBAAgB,KAAKrqC,KAAL,CAAWgkC,eAAX,KAA+B,EAArD;AACA,UAAMsE,kBAAmB,KAAKprC,KAAL,CAAWorC,eAAX,IAA8B,CAAC,KAAK4B,2BAAL,EAAhC,IAAuEG,aAA/F;AACA;AACA,UAAM7B,cAAeF,mBAAmB,KAAKqB,WAAL,CAAiB,KAAKzsC,KAAL,CAAWqC,GAA5B,CAApB,IAAyD,CAAC0pC,mBAA9E;AACA,UAAMqB,YAAY,KAAKtqC,KAAL,CAAWgkC,eAAX,KAA+B,IAA/B,IAChBiF,mBADgB,IACO,KAAKjpC,KAAL,CAAWkkC,UAAX,KAA0B,KAAK4F,QAAL,CAAcb,mBAAd,CADnD;;AAGA,QAAI,CAAC,KAAK/rC,KAAL,CAAWgsC,wBAAhB,EAA0C;AACxC,aAAQ;AAAA;AAAA,UAAG,WAAU,2BAAb,EAAyC,SAAS,KAAKQ,yBAAvD;AACN,+CAAC,uCAAD,IAAkB,IAAG,8BAArB;AADM,OAAR;AAGD;AACD,WAAQ;AAAA;AAAA,QAAK,WAAU,8BAAf;AACN,6CAAC,iCAAD;AACE,wBAAgBW,gBAAgB,gCAAhB,GAAmD,8BADrE;AAEE,iBAASC,SAFX;AAGE,kBAAU,KAAKd,2BAHjB;AAIE,iBAAS,KAAKL,sBAJhB;AAKE,qBAAaX,WALf;AAME,iBAAS,IANX;AAOE,eAAOS,mBAPT;AAQE,yBAAiBX,eARnB;AASE,iBAAQ,+BATV;AAUE,uBAAc,+BAVhB;AAWE,cAAM,KAAKtoC,KAAL,CAAW8F,IAXnB;AADM,KAAR;AAcD;;AAEDlE,WAAS;AACP,UAAM,EAACqnC,mBAAD,KAAwB,KAAK/rC,KAAnC;AACA,UAAMmtC,gBAAgB,KAAKrqC,KAAL,CAAWgkC,eAAX,KAA+B,EAArD;AACA;AACA,UAAMuG,YAAY,CAAC,KAAKvqC,KAAL,CAAWqT,IAA9B;AACA,UAAMm3B,WAAY,KAAKxqC,KAAL,CAAWqT,IAAX,IAAmB,KAAKrT,KAAL,CAAWqT,IAAX,CAAgBqM,mBAApC,IAA4D,EAA7E;AACA,UAAM+qB,UAAUxB,uBAAuB,KAAKa,QAAL,CAAcb,mBAAd,MAAuCuB,QAA9E;AACA;AACA;AACA,UAAME,cAAcD,WAAW,CAAC,KAAKzqC,KAAL,CAAWgkC,eAA3C;AACA,UAAM2G,cAAcpuC,OAAOC,MAAP,CAAc,EAAd,EAAkB,KAAKwD,KAAL,CAAWqT,IAA7B,CAApB;AACA,QAAI,KAAKrT,KAAL,CAAWgkC,eAAf,EAAgC;AAC9B2G,kBAAY7qB,UAAZ,GAAyB,KAAK9f,KAAL,CAAWgkC,eAApC;AACA2G,kBAAYjrB,mBAAZ,GAAkC,KAAK1f,KAAL,CAAWkkC,UAA7C;AACD;AACD,WACE;AAAA;AAAA,QAAM,WAAU,cAAhB;AACE;AAAA;AAAA,UAAK,WAAU,sBAAf;AACE;AAAA;AAAA,YAAI,WAAU,eAAd;AACE,iDAAC,uCAAD,IAAkB,IAAIqG,YAAY,0BAAZ,GAAyC,2BAA/D;AADF,SADF;AAIE;AAAA;AAAA,YAAK,WAAU,oBAAf;AACE;AAAA;AAAA,cAAK,WAAU,cAAf;AACE,mDAAC,iCAAD,IAAkB,UAAU,KAAKnB,aAAjC;AACE,qBAAO,KAAKlsC,KAAL,CAAW8N,KADpB;AAEE,uBAAQ,2BAFV;AAGE,6BAAc,iCAHhB;AAIE,oBAAM,KAAKhL,KAAL,CAAW8F,IAJnB,GADF;AAME,mDAAC,iCAAD,IAAkB,UAAU,KAAKujC,WAAjC;AACE,2BAAa,KAAKnsC,KAAL,CAAWorC,eAAX,IAA8B,CAAC,KAAKqB,WAAL,CAAiB,KAAKzsC,KAAL,CAAWqC,GAA5B,CAD9C;AAEE,qBAAO,KAAKrC,KAAL,CAAWqC,GAFpB;AAGE,uBAAS,KAAK+pC,eAHhB;AAIE,+BAAiB,KAAKpsC,KAAL,CAAWorC,eAAX,IAA8B,CAAC,KAAKqB,WAAL,CAAiB,KAAKzsC,KAAL,CAAWqC,GAA5B,CAJlD;AAKE,uBAAQ,yBALV;AAME,uBAAS,IANX;AAOE,6BAAc,+BAPhB;AAQE,8BAAe,8BARjB;AASE,oBAAM,KAAKS,KAAL,CAAW8F,IATnB,GANF;AAgBG,iBAAKskC,4BAAL;AAhBH,WADF;AAmBE,iDAAC,sBAAD,IAAa,MAAMO,WAAnB;AACE,0BAAcN,aADhB;AAEE,mBAAO,KAAKntC,KAAL,CAAW8N,KAFpB;AAnBF;AAJF,OADF;AA6BE;AAAA;AAAA,UAAS,WAAU,SAAnB;AACE;AAAA;AAAA,YAAQ,WAAU,QAAlB,EAA2B,MAAK,QAAhC,EAAyC,SAAS,KAAKmX,mBAAvD;AACE,iDAAC,uCAAD,IAAkB,IAAG,6BAArB;AADF,SADF;AAIGuoB,sBACC;AAAA;AAAA,YAAQ,WAAU,cAAlB,EAAiC,MAAK,QAAtC,EAA+C,SAAS,KAAKjB,oBAA7D;AACE,iDAAC,uCAAD,IAAkB,IAAG,8BAArB;AADF,SADD,GAIC;AAAA;AAAA,YAAQ,WAAU,MAAlB,EAAyB,MAAK,QAA9B,EAAuC,SAAS,KAAKF,iBAArD;AACE,iDAAC,uCAAD,IAAkB,IAAIgB,YAAY,0BAAZ,GAAyC,2BAA/D;AADF;AARJ;AA7BF,KADF;AA4CD;AA7OkD;;AAgPrD,uBAAAK,CAAY/oC,YAAZ,GAA2B;AACzBwR,QAAM,IADmB;AAEzBkB,SAAO,CAAC;AAFiB,CAA3B,C","file":"activity-stream.bundle.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 = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addSnippetsSubscriber} from \"content-src/lib/snippets\";\nimport {ASRouterContent} from \"content-src/asrouter/asrouter-content\";\nimport {Base} from \"content-src/components/Base/Base\";\nimport {DetectUserSessionStart} from \"content-src/lib/detect-user-session-start\";\nimport {enableASRouterContent} from \"content-src/lib/asroutercontent\";\nimport {initStore} from \"content-src/lib/init-store\";\nimport {Provider} from \"react-redux\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {reducers} from \"common/Reducers.jsm\";\n\nconst store = initStore(reducers, global.gActivityStreamPrerenderedState);\nconst asrouterContent = new ASRouterContent();\n\nnew DetectUserSessionStart(store).sendEventOrAddListener();\n\n// If we are starting in a prerendered state, we must wait until the first render\n// to request state rehydration (see Base.jsx). If we are NOT in a prerendered state,\n// we can request it immedately.\nif (!global.gActivityStreamPrerenderedState) {\n  store.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n}\n\nReactDOM.hydrate(<Provider store={store}>\n  <Base\n    isFirstrun={global.document.location.href === \"about:welcome\"}\n    isPrerendered={!!global.gActivityStreamPrerenderedState}\n    locale={global.document.documentElement.lang}\n    strings={global.gActivityStreamStrings} />\n</Provider>, document.getElementById(\"root\"));\n\nenableASRouterContent(store, asrouterContent);\naddSnippetsSubscriber(store);\n","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nthis.MAIN_MESSAGE_TYPE = \"ActivityStream:Main\";\nthis.CONTENT_MESSAGE_TYPE = \"ActivityStream:Content\";\nthis.PRELOAD_MESSAGE_TYPE = \"ActivityStream:PreloadedBrowser\";\nthis.UI_CODE = 1;\nthis.BACKGROUND_PROCESS = 2;\n\n/**\n * globalImportContext - Are we in UI code (i.e. react, a dom) or some kind of background process?\n *                       Use this in action creators if you need different logic\n *                       for ui/background processes.\n */\nconst globalImportContext = typeof Window === \"undefined\" ? BACKGROUND_PROCESS : UI_CODE;\n// Export for tests\nthis.globalImportContext = globalImportContext;\n\n// Create an object that avoids accidental differing key/value pairs:\n// {\n//   INIT: \"INIT\",\n//   UNINIT: \"UNINIT\"\n// }\nconst actionTypes = {};\nfor (const type of [\n  \"ADDONS_INFO_REQUEST\",\n  \"ADDONS_INFO_RESPONSE\",\n  \"ARCHIVE_FROM_POCKET\",\n  \"AS_ROUTER_INITIALIZED\",\n  \"AS_ROUTER_PREF_CHANGED\",\n  \"AS_ROUTER_TELEMETRY_USER_EVENT\",\n  \"BLOCK_URL\",\n  \"BOOKMARK_URL\",\n  \"COPY_DOWNLOAD_LINK\",\n  \"DELETE_BOOKMARK_BY_ID\",\n  \"DELETE_FROM_POCKET\",\n  \"DELETE_HISTORY_URL\",\n  \"DIALOG_CANCEL\",\n  \"DIALOG_OPEN\",\n  \"DOWNLOAD_CHANGED\",\n  \"FILL_SEARCH_TERM\",\n  \"INIT\",\n  \"MIGRATION_CANCEL\",\n  \"MIGRATION_COMPLETED\",\n  \"MIGRATION_START\",\n  \"NEW_TAB_INIT\",\n  \"NEW_TAB_INITIAL_STATE\",\n  \"NEW_TAB_LOAD\",\n  \"NEW_TAB_REHYDRATED\",\n  \"NEW_TAB_STATE_REQUEST\",\n  \"NEW_TAB_UNLOAD\",\n  \"OPEN_DOWNLOAD_FILE\",\n  \"OPEN_LINK\",\n  \"OPEN_NEW_WINDOW\",\n  \"OPEN_PRIVATE_WINDOW\",\n  \"OPEN_WEBEXT_SETTINGS\",\n  \"PAGE_PRERENDERED\",\n  \"PLACES_BOOKMARK_ADDED\",\n  \"PLACES_BOOKMARK_REMOVED\",\n  \"PLACES_HISTORY_CLEARED\",\n  \"PLACES_LINKS_CHANGED\",\n  \"PLACES_LINK_BLOCKED\",\n  \"PLACES_LINK_DELETED\",\n  \"PLACES_SAVED_TO_POCKET\",\n  \"POCKET_CTA\",\n  \"POCKET_LOGGED_IN\",\n  \"POCKET_WAITING_FOR_SPOC\",\n  \"PREFS_INITIAL_VALUES\",\n  \"PREF_CHANGED\",\n  \"PREVIEW_REQUEST\",\n  \"PREVIEW_REQUEST_CANCEL\",\n  \"PREVIEW_RESPONSE\",\n  \"REMOVE_DOWNLOAD_FILE\",\n  \"RICH_ICON_MISSING\",\n  \"SAVE_SESSION_PERF_DATA\",\n  \"SAVE_TO_POCKET\",\n  \"SCREENSHOT_UPDATED\",\n  \"SECTION_DEREGISTER\",\n  \"SECTION_DISABLE\",\n  \"SECTION_ENABLE\",\n  \"SECTION_MOVE\",\n  \"SECTION_OPTIONS_CHANGED\",\n  \"SECTION_REGISTER\",\n  \"SECTION_UPDATE\",\n  \"SECTION_UPDATE_CARD\",\n  \"SETTINGS_CLOSE\",\n  \"SETTINGS_OPEN\",\n  \"SET_PREF\",\n  \"SHOW_DOWNLOAD_FILE\",\n  \"SHOW_FIREFOX_ACCOUNTS\",\n  \"SKIPPED_SIGNIN\",\n  \"SNIPPETS_BLOCKLIST_CLEARED\",\n  \"SNIPPETS_BLOCKLIST_UPDATED\",\n  \"SNIPPETS_DATA\",\n  \"SNIPPETS_PREVIEW_MODE\",\n  \"SNIPPETS_RESET\",\n  \"SNIPPET_BLOCKED\",\n  \"SUBMIT_EMAIL\",\n  \"SYSTEM_TICK\",\n  \"TELEMETRY_IMPRESSION_STATS\",\n  \"TELEMETRY_PERFORMANCE_EVENT\",\n  \"TELEMETRY_UNDESIRED_EVENT\",\n  \"TELEMETRY_USER_EVENT\",\n  \"TOP_SITES_CANCEL_EDIT\",\n  \"TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL\",\n  \"TOP_SITES_EDIT\",\n  \"TOP_SITES_INSERT\",\n  \"TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL\",\n  \"TOP_SITES_PIN\",\n  \"TOP_SITES_PREFS_UPDATED\",\n  \"TOP_SITES_UNPIN\",\n  \"TOP_SITES_UPDATED\",\n  \"TOTAL_BOOKMARKS_REQUEST\",\n  \"TOTAL_BOOKMARKS_RESPONSE\",\n  \"UNINIT\",\n  \"UPDATE_PINNED_SEARCH_SHORTCUTS\",\n  \"UPDATE_SEARCH_SHORTCUTS\",\n  \"UPDATE_SECTION_PREFS\",\n  \"WEBEXT_CLICK\",\n  \"WEBEXT_DISMISS\",\n]) {\n  actionTypes[type] = type;\n}\n\n// These are acceptable actions for AS Router messages to have. They can show up\n// as call-to-action buttons in snippets, onboarding tour, etc.\nconst ASRouterActions = {};\nfor (const type of [\n  \"INSTALL_ADDON_FROM_URL\",\n  \"OPEN_APPLICATIONS_MENU\",\n  \"OPEN_PRIVATE_BROWSER_WINDOW\",\n  \"OPEN_URL\",\n  \"OPEN_ABOUT_PAGE\",\n  \"OPEN_PREFERENCES_PAGE\",\n  \"SHOW_FIREFOX_ACCOUNTS\",\n]) {\n  ASRouterActions[type] = type;\n}\n\n// Helper function for creating routed actions between content and main\n// Not intended to be used by consumers\nfunction _RouteMessage(action, options) {\n  const meta = action.meta ? {...action.meta} : {};\n  if (!options || !options.from || !options.to) {\n    throw new Error(\"Routed Messages must have options as the second parameter, and must at least include a .from and .to property.\");\n  }\n  // For each of these fields, if they are passed as an option,\n  // add them to the action. If they are not defined, remove them.\n  [\"from\", \"to\", \"toTarget\", \"fromTarget\", \"skipMain\", \"skipLocal\"].forEach(o => {\n    if (typeof options[o] !== \"undefined\") {\n      meta[o] = options[o];\n    } else if (meta[o]) {\n      delete meta[o];\n    }\n  });\n  return {...action, meta};\n}\n\n/**\n * AlsoToMain - Creates a message that will be dispatched locally and also sent to the Main process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {bool}   skipLocal Used by OnlyToMain to skip the main reducer\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToMain(action, fromTarget, skipLocal) {\n  return _RouteMessage(action, {\n    from: CONTENT_MESSAGE_TYPE,\n    to: MAIN_MESSAGE_TYPE,\n    fromTarget,\n    skipLocal,\n  });\n}\n\n/**\n * OnlyToMain - Creates a message that will be sent to the Main process and skip the local reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToMain(action, fromTarget) {\n  return AlsoToMain(action, fromTarget, true);\n}\n\n/**\n * BroadcastToContent - Creates a message that will be dispatched to main and sent to ALL content processes.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction BroadcastToContent(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE,\n  });\n}\n\n/**\n * AlsoToOneContent - Creates a message that will be will be dispatched to the main store\n *                    and also sent to a particular Content process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @param  {bool} skipMain Used by OnlyToOneContent to skip the main process\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToOneContent(action, target, skipMain) {\n  if (!target) {\n    throw new Error(\"You must provide a target ID as the second parameter of AlsoToOneContent. If you want to send to all content processes, use BroadcastToContent\");\n  }\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE,\n    toTarget: target,\n    skipMain,\n  });\n}\n\n/**\n * OnlyToOneContent - Creates a message that will be sent to a particular Content process\n *                    and skip the main reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToOneContent(action, target) {\n  return AlsoToOneContent(action, target, true);\n}\n\n/**\n * AlsoToPreloaded - Creates a message that dispatched to the main reducer and also sent to the preloaded tab.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToPreloaded(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: PRELOAD_MESSAGE_TYPE,\n  });\n}\n\n/**\n * UserEvent - A telemetry ping indicating a user action. This should only\n *                   be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction UserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.TELEMETRY_USER_EVENT,\n    data,\n  });\n}\n\n/**\n * ASRouterUserEvent - A telemetry ping indicating a user action from AS router. This should only\n *                     be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction ASRouterUserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.AS_ROUTER_TELEMETRY_USER_EVENT,\n    data,\n  });\n}\n\n/**\n * UndesiredEvent - A telemetry ping indicating an undesired state.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction UndesiredEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_UNDESIRED_EVENT,\n    data,\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * PerfEvent - A telemetry ping indicating a performance-related event.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction PerfEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_PERFORMANCE_EVENT,\n    data,\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * ImpressionStats - A telemetry ping indicating an impression stats.\n *\n * @param  {object} data Fields to include in the ping\n * @param  {int} importContext (For testing) Override the import context for testing.\n * #return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction ImpressionStats(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_IMPRESSION_STATS,\n    data,\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction SetPref(name, value, importContext = globalImportContext) {\n  const action = {type: actionTypes.SET_PREF, data: {name, value}};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction WebExtEvent(type, data, importContext = globalImportContext) {\n  if (!data || !data.source) {\n    throw new Error(\"WebExtEvent actions should include a property \\\"source\\\", the id of the webextension that should receive the event.\");\n  }\n  const action = {type, data};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nthis.actionTypes = actionTypes;\nthis.ASRouterActions = ASRouterActions;\n\nthis.actionCreators = {\n  BroadcastToContent,\n  UserEvent,\n  ASRouterUserEvent,\n  UndesiredEvent,\n  PerfEvent,\n  ImpressionStats,\n  AlsoToOneContent,\n  OnlyToOneContent,\n  AlsoToMain,\n  OnlyToMain,\n  AlsoToPreloaded,\n  SetPref,\n  WebExtEvent,\n};\n\n// These are helpers to test for certain kinds of actions\nthis.actionUtils = {\n  isSendToMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === MAIN_MESSAGE_TYPE && action.meta.from === CONTENT_MESSAGE_TYPE;\n  },\n  isBroadcastToContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && !action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToOneContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToPreloaded(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === PRELOAD_MESSAGE_TYPE &&\n      action.meta.from === MAIN_MESSAGE_TYPE;\n  },\n  isFromMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.from === MAIN_MESSAGE_TYPE &&\n      action.meta.to === CONTENT_MESSAGE_TYPE;\n  },\n  getPortIdOfSender(action) {\n    return (action.meta && action.meta.fromTarget) || null;\n  },\n  _RouteMessage,\n};\n\nconst EXPORTED_SYMBOLS = [\n  \"actionTypes\",\n  \"actionCreators\",\n  \"actionUtils\",\n  \"ASRouterActions\",\n  \"globalImportContext\",\n  \"UI_CODE\",\n  \"BACKGROUND_PROCESS\",\n  \"MAIN_MESSAGE_TYPE\",\n  \"CONTENT_MESSAGE_TYPE\",\n  \"PRELOAD_MESSAGE_TYPE\",\n];\n","const DATABASE_NAME = \"snippets_db\";\nconst DATABASE_VERSION = 1;\nconst SNIPPETS_OBJECTSTORE_NAME = \"snippets\";\nexport const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.\n\nconst SNIPPETS_ENABLED_EVENT = \"Snippets:Enabled\";\nconst SNIPPETS_DISABLED_EVENT = \"Snippets:Disabled\";\n\nimport {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * SnippetsMap - A utility for cacheing values related to the snippet. It has\n *               the same interface as a Map, but is optionally backed by\n *               indexedDB for persistent storage.\n *               Call .connect() to open a database connection and restore any\n *               previously cached data, if necessary.\n *\n */\nexport class SnippetsMap extends Map {\n  constructor(dispatch) {\n    super();\n    this._db = null;\n    this._dispatch = dispatch;\n  }\n\n  set(key, value) {\n    super.set(key, value);\n    return this._dbTransaction(db => db.put(value, key));\n  }\n\n  delete(key) {\n    super.delete(key);\n    return this._dbTransaction(db => db.delete(key));\n  }\n\n  clear() {\n    super.clear();\n    this._dispatch(ac.OnlyToMain({type: at.SNIPPETS_BLOCKLIST_CLEARED}));\n    return this._dbTransaction(db => db.clear());\n  }\n\n  get blockList() {\n    return this.get(\"blockList\") || [];\n  }\n\n  /**\n   * blockSnippetById - Blocks a snippet given an id\n   *\n   * @param  {str|int} id   The id of the snippet\n   * @return {Promise}      Resolves when the id has been written to indexedDB,\n   *                        or immediately if the snippetMap is not connected\n   */\n  async blockSnippetById(id) {\n    if (!id) {\n      return;\n    }\n    const {blockList} = this;\n    if (!blockList.includes(id)) {\n      blockList.push(id);\n      this._dispatch(ac.AlsoToMain({type: at.SNIPPETS_BLOCKLIST_UPDATED, data: id}));\n      await this.set(\"blockList\", blockList);\n    }\n  }\n\n  disableOnboarding() {}\n\n  showFirefoxAccounts() {\n    this._dispatch(ac.AlsoToMain({type: at.SHOW_FIREFOX_ACCOUNTS}));\n  }\n\n  getTotalBookmarksCount() {\n    return new Promise(resolve => {\n      this._dispatch(ac.OnlyToMain({type: at.TOTAL_BOOKMARKS_REQUEST}));\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n        if (action.type === at.TOTAL_BOOKMARKS_RESPONSE) {\n          resolve(action.data);\n          global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n        }\n      });\n    });\n  }\n\n  getAddonsInfo() {\n    return new Promise(resolve => {\n      this._dispatch(ac.OnlyToMain({type: at.ADDONS_INFO_REQUEST}));\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n        if (action.type === at.ADDONS_INFO_RESPONSE) {\n          resolve(action.data);\n          global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n        }\n      });\n    });\n  }\n\n  /**\n   * connect - Attaches an indexedDB back-end to the Map so that any set values\n   *           are also cached in a store. It also restores any existing values\n   *           that are already stored in the indexedDB store.\n   *\n   * @return {type}  description\n   */\n  async connect() {\n    // Open the connection\n    const db = await this._openDB();\n\n    // Restore any existing values\n    await this._restoreFromDb(db);\n\n    // Attach a reference to the db\n    this._db = db;\n  }\n\n  /**\n   * _dbTransaction - Returns a db transaction wrapped with the given modifier\n   *                  function as a Promise. If the db has not been connected,\n   *                  it resolves immediately.\n   *\n   * @param  {func} modifier A function to call with the transaction\n   * @return {obj}           A Promise that resolves when the transaction has\n   *                         completed or errored\n   */\n  _dbTransaction(modifier) {\n    if (!this._db) {\n      return Promise.resolve();\n    }\n    return new Promise((resolve, reject) => {\n      const transaction = modifier(\n        this._db\n          .transaction(SNIPPETS_OBJECTSTORE_NAME, \"readwrite\")\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME)\n      );\n      transaction.onsuccess = event => resolve();\n\n      /* istanbul ignore next */\n      transaction.onerror = event => reject(transaction.error);\n    });\n  }\n\n  _openDB() {\n    return new Promise((resolve, reject) => {\n      const openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n\n      /* istanbul ignore next */\n      openRequest.onerror = event => {\n        // Try to delete the old database so that we can start this process over\n        // next time.\n        indexedDB.deleteDatabase(DATABASE_NAME);\n        reject(event);\n      };\n\n      openRequest.onupgradeneeded = event => {\n        const db = event.target.result;\n        if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {\n          db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);\n        }\n      };\n\n      openRequest.onsuccess = event => {\n        let db = event.target.result;\n\n        /* istanbul ignore next */\n        db.onerror = err => console.error(err); // eslint-disable-line no-console\n        /* istanbul ignore next */\n        db.onversionchange = versionChangeEvent => versionChangeEvent.target.close();\n\n        resolve(db);\n      };\n    });\n  }\n\n  _restoreFromDb(db) {\n    return new Promise((resolve, reject) => {\n      let cursorRequest;\n      try {\n        cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();\n      } catch (err) {\n        // istanbul ignore next\n        reject(err);\n        // istanbul ignore next\n        return;\n      }\n\n      /* istanbul ignore next */\n      cursorRequest.onerror = event => reject(event);\n\n      cursorRequest.onsuccess = event => {\n        let cursor = event.target.result;\n        // Populate the cache from the persistent storage.\n        if (cursor) {\n          if (cursor.value !== \"blockList\") {\n            this.set(cursor.key, cursor.value);\n          }\n          cursor.continue();\n        } else {\n          // We are done.\n          resolve();\n        }\n      };\n    });\n  }\n}\n\n/**\n * SnippetsProvider - Initializes a SnippetsMap and loads snippets from a\n *                    remote location, or else default snippets if the remote\n *                    snippets cannot be retrieved.\n */\nexport class SnippetsProvider {\n  constructor(dispatch) {\n    // Initialize the Snippets Map and attaches it to a global so that\n    // the snippet payload can interact with it.\n    global.gSnippetsMap = new SnippetsMap(dispatch);\n    this._onAction = this._onAction.bind(this);\n  }\n\n  get snippetsMap() {\n    return global.gSnippetsMap;\n  }\n\n  async _refreshSnippets() {\n    // Check if the cached version of of the snippets in snippetsMap. If it's too\n    // old, blow away the entire snippetsMap.\n    const cachedVersion = this.snippetsMap.get(\"snippets-cached-version\");\n\n    if (cachedVersion !== this.appData.version) {\n      this.snippetsMap.clear();\n    }\n\n    // Has enough time passed for us to require an update?\n    const lastUpdate = this.snippetsMap.get(\"snippets-last-update\");\n    const needsUpdate = !(lastUpdate >= 0) || Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;\n\n    if (needsUpdate && this.appData.snippetsURL) {\n      this.snippetsMap.set(\"snippets-last-update\", Date.now());\n      try {\n        const response = await fetch(this.appData.snippetsURL);\n        if (response.status === 200) {\n          const payload = await response.text();\n\n          this.snippetsMap.set(\"snippets\", payload);\n          this.snippetsMap.set(\"snippets-cached-version\", this.appData.version);\n        }\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n  }\n\n  _noSnippetFallback() {\n    // TODO\n  }\n\n  _showRemoteSnippets() {\n    const snippetsEl = document.getElementById(this.elementId);\n    const payload = this.snippetsMap.get(\"snippets\");\n\n    if (!snippetsEl) {\n      throw new Error(`No element was found with id '${this.elementId}'.`);\n    }\n\n    // This could happen if fetching failed\n    if (!payload) {\n      throw new Error(\"No remote snippets were found in gSnippetsMap.\");\n    }\n\n    if (typeof payload !== \"string\") {\n      throw new Error(\"Snippet payload was incorrectly formatted\");\n    }\n\n    // Note that injecting snippets can throw if they're invalid XML.\n    // eslint-disable-next-line no-unsanitized/property\n    snippetsEl.innerHTML = payload;\n\n    // Scripts injected by innerHTML are inactive, so we have to relocate them\n    // through DOM manipulation to activate their contents.\n    for (const scriptEl of snippetsEl.getElementsByTagName(\"script\")) {\n      const relocatedScript = document.createElement(\"script\");\n      relocatedScript.text = scriptEl.text;\n      scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);\n    }\n  }\n\n  _onAction(msg) {\n    if (msg.data.type === at.SNIPPET_BLOCKED) {\n      if (!this.snippetsMap.blockList.includes(msg.data.data)) {\n        this.snippetsMap.set(\"blockList\", this.snippetsMap.blockList.concat(msg.data.data));\n        document.getElementById(\"snippets-container\").style.display = \"none\";\n      }\n    }\n  }\n\n  /**\n   * init - Fetch the snippet payload and show snippets\n   *\n   * @param  {obj} options\n   * @param  {str} options.appData.snippetsURL  The URL from which we fetch snippets\n   * @param  {int} options.appData.version  The current snippets version\n   * @param  {str} options.elementId  The id of the element in which to inject snippets\n   * @param  {bool} options.connect  Should gSnippetsMap connect to indexedDB?\n   */\n  async init(options) {\n    Object.assign(this, {\n      appData: {},\n      elementId: \"snippets\",\n      connect: true,\n    }, options);\n\n    // Add listener so we know when snippets are blocked on other pages\n    if (global.RPMAddMessageListener) {\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n\n    // TODO: Requires enabling indexedDB on newtab\n    // Restore the snippets map from indexedDB\n    if (this.connect) {\n      try {\n        await this.snippetsMap.connect();\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n\n    // Cache app data values so they can be accessible from gSnippetsMap\n    for (const key of Object.keys(this.appData)) {\n      if (key === \"blockList\") {\n        this.snippetsMap.set(\"blockList\", this.appData[key]);\n      } else {\n        this.snippetsMap.set(`appData.${key}`, this.appData[key]);\n      }\n    }\n\n    // Refresh snippets, if enough time has passed.\n    await this._refreshSnippets();\n\n    // Try showing remote snippets, falling back to defaults if necessary.\n    try {\n      this._showRemoteSnippets();\n    } catch (e) {\n      this._noSnippetFallback(e);\n    }\n\n    window.dispatchEvent(new Event(SNIPPETS_ENABLED_EVENT));\n\n    this.initialized = true;\n  }\n\n  uninit() {\n    window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));\n    if (global.RPMRemoveMessageListener) {\n      global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n    this.initialized = false;\n  }\n}\n\n/**\n * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes\n *                         when the store has received the appropriate\n *                         Snippet data.\n *\n * @param  {obj} store   The redux store\n * @return {obj}         Returns the snippets instance, asrouterContent instance and unsubscribe function\n */\nexport function addSnippetsSubscriber(store) {\n  const snippets = new SnippetsProvider(store.dispatch);\n\n  let initializing = false;\n\n  store.subscribe(async () => {\n    const state = store.getState();\n\n    /**\n     * Sorry this code is so complicated. It will be removed soon.\n     * This is what the different values actually mean:\n     *\n     * ASRouter.initialized                   Is ASRouter.jsm initialised?\n     * ASRouter.allowLegacySnippets           Are ASRouter snippets turned OFF (i.e. legacy snippets are allowed)\n     * state.Prefs.values[\"feeds.snippets\"]   User preference for snippets\n     * state.Snippets.initialized             Is SnippetsFeed.jsm initialised?\n     * snippets.initialized                   Is in-content snippets currently initialised?\n     * state.Prefs.values.disableSnippets     This pref is used to disable legacy snippets in an emergency\n     *                                        in a way that is not user-editable (true = disabled)\n     */\n\n    /** If we should initialize snippets... */\n    if (\n      state.Prefs.values[\"feeds.snippets\"] &&\n      state.ASRouter.initialized &&\n      state.ASRouter.allowLegacySnippets &&\n      !state.Prefs.values.disableSnippets &&\n      state.Snippets.initialized &&\n      !snippets.initialized &&\n      // Don't call init multiple times\n      !initializing &&\n      location.href !== \"about:welcome\" &&\n      location.hash !== \"#asrouter\"\n    ) {\n      initializing = true;\n      await snippets.init({appData: state.Snippets});\n      // istanbul ignore if\n      if (state.Prefs.values[\"asrouter.devtoolsEnabled\"]) {\n        console.log(\"Legacy snippets initialized\"); // eslint-disable-line no-console\n      }\n      initializing = false;\n\n    /** If we should remove snippets... */\n    } else if (\n      (\n        state.Prefs.values[\"feeds.snippets\"] === false ||\n        state.Prefs.values.disableSnippets === true ||\n        (state.ASRouter.initialized && !state.ASRouter.allowLegacySnippets)\n      ) &&\n      snippets.initialized\n    ) {\n      // Remove snippets\n      snippets.uninit();\n      // istanbul ignore if\n      if (state.Prefs.values[\"asrouter.devtoolsEnabled\"]) {\n        console.log(\"Legacy snippets removed\"); // eslint-disable-line no-console\n      }\n    }\n  });\n\n  // Returned for testing purposes\n  return {snippets};\n}\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {OUTGOING_MESSAGE_NAME as AS_GENERAL_OUTGOING_MESSAGE_NAME} from \"content-src/lib/init-store\";\nimport {generateMessages} from \"./rich-text-strings\";\nimport {ImpressionsWrapper} from \"./components/ImpressionsWrapper/ImpressionsWrapper\";\nimport {LocalizationProvider} from \"fluent-react\";\nimport {OnboardingMessage} from \"./templates/OnboardingMessage/OnboardingMessage\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {SnippetsTemplates} from \"./templates/template-manifest\";\n\nconst INCOMING_MESSAGE_NAME = \"ASRouter:parent-to-child\";\nconst OUTGOING_MESSAGE_NAME = \"ASRouter:child-to-parent\";\nconst ASR_CONTAINER_ID = \"asr-newtab-container\";\n\nexport const ASRouterUtils = {\n  addListener(listener) {\n    global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  removeListener(listener) {\n    global.RPMRemoveMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  sendMessage(action) {\n    global.RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  },\n  blockById(id, options) {\n    ASRouterUtils.sendMessage({type: \"BLOCK_MESSAGE_BY_ID\", data: {id, ...options}});\n  },\n  dismissById(id) {\n    ASRouterUtils.sendMessage({type: \"DISMISS_MESSAGE_BY_ID\", data: {id}});\n  },\n  blockBundle(bundle) {\n    ASRouterUtils.sendMessage({type: \"BLOCK_BUNDLE\", data: {bundle}});\n  },\n  executeAction(button_action) {\n    ASRouterUtils.sendMessage({\n      type: \"USER_ACTION\",\n      data: button_action,\n    });\n  },\n  unblockById(id) {\n    ASRouterUtils.sendMessage({type: \"UNBLOCK_MESSAGE_BY_ID\", data: {id}});\n  },\n  unblockBundle(bundle) {\n    ASRouterUtils.sendMessage({type: \"UNBLOCK_BUNDLE\", data: {bundle}});\n  },\n  overrideMessage(id) {\n    ASRouterUtils.sendMessage({type: \"OVERRIDE_MESSAGE\", data: {id}});\n  },\n  sendTelemetry(ping) {\n    const payload = ac.ASRouterUserEvent(ping);\n    global.RPMSendAsyncMessage(AS_GENERAL_OUTGOING_MESSAGE_NAME, payload);\n  },\n  getPreviewEndpoint() {\n    if (window.location.href.includes(\"endpoint\")) {\n      const params = new URLSearchParams(window.location.href.slice(window.location.href.indexOf(\"endpoint\")));\n      try {\n        const endpoint = new URL(params.get(\"endpoint\"));\n        return {\n          url: endpoint.href,\n          snippetId: params.get(\"snippetId\"),\n        };\n      } catch (e) {}\n    }\n\n    return null;\n  },\n};\n\n// Note: nextProps/prevProps refer to props passed to <ImpressionsWrapper />, not <ASRouterUISurface />\nfunction shouldSendImpressionOnUpdate(nextProps, prevProps) {\n  return (nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id));\n}\n\nexport class ASRouterUISurface extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessageFromParent = this.onMessageFromParent.bind(this);\n    this.sendClick = this.sendClick.bind(this);\n    this.sendImpression = this.sendImpression.bind(this);\n    this.sendUserActionTelemetry = this.sendUserActionTelemetry.bind(this);\n    this.state = {message: {}, bundle: {}};\n  }\n\n  sendUserActionTelemetry(extraProps = {}) {\n    const {message, bundle} = this.state;\n    if (!message && !extraProps.message_id) {\n      throw new Error(`You must provide a message_id for bundled messages`);\n    }\n    const eventType = `${message.provider || bundle.provider}_user_event`;\n    ASRouterUtils.sendTelemetry({\n      message_id: message.id || extraProps.message_id,\n      source: extraProps.id,\n      action: eventType,\n      ...extraProps,\n    });\n  }\n\n  sendImpression(extraProps) {\n    if (this.state.message.provider === \"preview\") {\n      return;\n    }\n\n    ASRouterUtils.sendMessage({type: \"IMPRESSION\", data: this.state.message});\n    this.sendUserActionTelemetry({event: \"IMPRESSION\", ...extraProps});\n  }\n\n  // If link has a `metric` data attribute send it as part of the `value`\n  // telemetry field which can have arbitrary values.\n  // Used for router messages with links as part of the content.\n  sendClick(event) {\n    const metric = {\n      value: event.target.dataset.metric,\n      // Used for the `source` of the event. Needed to differentiate\n      // from other snippet or onboarding events that may occur.\n      id: \"NEWTAB_FOOTER_BAR_CONTENT\",\n    };\n    const action = {\n      type: event.target.dataset.action,\n      data: {args: event.target.dataset.args},\n    };\n    if (action.type) {\n      ASRouterUtils.executeAction(action);\n    }\n    if (!this.state.message.content.do_not_autoblock && !event.target.dataset.do_not_autoblock) {\n      ASRouterUtils.blockById(this.state.message.id);\n    }\n    if (this.state.message.provider !== \"preview\") {\n      this.sendUserActionTelemetry({event: \"CLICK_BUTTON\", ...metric});\n    }\n  }\n\n  onBlockById(id) {\n    return options => ASRouterUtils.blockById(id, options);\n  }\n\n  onDismissById(id) {\n    return () => ASRouterUtils.dismissById(id);\n  }\n\n  clearBundle(bundle) {\n    return () => ASRouterUtils.blockBundle(bundle);\n  }\n\n  onMessageFromParent({data: action}) {\n    switch (action.type) {\n      case \"SET_MESSAGE\":\n        this.setState({message: action.data});\n        break;\n      case \"SET_BUNDLED_MESSAGES\":\n        this.setState({bundle: action.data});\n        break;\n      case \"CLEAR_MESSAGE\":\n        if (action.data.id === this.state.message.id) {\n          this.setState({message: {}});\n        }\n        break;\n      case \"CLEAR_PROVIDER\":\n        if (action.data.id === this.state.message.provider) {\n          this.setState({message: {}});\n        }\n        break;\n      case \"CLEAR_BUNDLE\":\n        if (this.state.bundle.bundle) {\n          this.setState({bundle: {}});\n        }\n        break;\n      case \"CLEAR_ALL\":\n        this.setState({message: {}, bundle: {}});\n    }\n  }\n\n  componentWillMount() {\n    const endpoint = ASRouterUtils.getPreviewEndpoint();\n    ASRouterUtils.addListener(this.onMessageFromParent);\n\n    // If we are loading about:welcome we want to trigger the onboarding messages\n    if (this.props.document.location.href === \"about:welcome\") {\n      ASRouterUtils.sendMessage({type: \"TRIGGER\", data: {trigger: {id: \"firstRun\"}}});\n    } else {\n      ASRouterUtils.sendMessage({type: \"SNIPPETS_REQUEST\", data: {endpoint}});\n    }\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessageFromParent);\n  }\n\n  renderSnippets() {\n    const SnippetComponent = SnippetsTemplates[this.state.message.template];\n    const {content} = this.state.message;\n\n    return (\n      <ImpressionsWrapper\n        id=\"NEWTAB_FOOTER_BAR\"\n        message={this.state.message}\n        sendImpression={this.sendImpression}\n        shouldSendImpressionOnUpdate={shouldSendImpressionOnUpdate}\n        // This helps with testing\n        document={this.props.document}>\n          <LocalizationProvider messages={generateMessages(content)}>\n            <SnippetComponent\n              {...this.state.message}\n              UISurface=\"NEWTAB_FOOTER_BAR\"\n              onBlock={this.onBlockById(this.state.message.id)}\n              onDismiss={this.onDismissById(this.state.message.id)}\n              onAction={ASRouterUtils.executeAction}\n              sendClick={this.sendClick}\n              sendUserActionTelemetry={this.sendUserActionTelemetry} />\n          </LocalizationProvider>\n      </ImpressionsWrapper>);\n  }\n\n  renderOnboarding() {\n    return (\n      <OnboardingMessage\n        {...this.state.bundle}\n        UISurface=\"NEWTAB_OVERLAY\"\n        onAction={ASRouterUtils.executeAction}\n        onDoneButton={this.clearBundle(this.state.bundle.bundle)}\n        sendUserActionTelemetry={this.sendUserActionTelemetry} />);\n  }\n\n  renderPreviewBanner() {\n    if (this.state.message.provider !== \"preview\") {\n      return null;\n    }\n\n    return (\n      <div className=\"snippets-preview-banner\">\n        <span className=\"icon icon-small-spacer icon-info\" />\n        <span>Preview Purposes Only</span>\n      </div>\n    );\n  }\n\n  render() {\n    const {message, bundle} = this.state;\n    if (!message.id && !bundle.template) { return null; }\n    return (\n      <React.Fragment>\n        {this.renderPreviewBanner()}\n        {bundle.template === \"onboarding\" ? this.renderOnboarding() : this.renderSnippets()}\n      </React.Fragment>\n    );\n  }\n}\n\nASRouterUISurface.defaultProps = {document: global.document};\n\nexport class ASRouterContent {\n  constructor() {\n    this.initialized = false;\n    this.containerElement = null;\n  }\n\n  _mount() {\n    this.containerElement = global.document.getElementById(ASR_CONTAINER_ID);\n    if (!this.containerElement) {\n      this.containerElement = global.document.createElement(\"div\");\n      this.containerElement.id = ASR_CONTAINER_ID;\n      this.containerElement.style.zIndex = 1;\n      global.document.body.appendChild(this.containerElement);\n    }\n\n    ReactDOM.render(<ASRouterUISurface />, this.containerElement);\n  }\n\n  _unmount() {\n    ReactDOM.unmountComponentAtNode(this.containerElement);\n  }\n\n  init() {\n    this._mount();\n    this.initialized = true;\n  }\n\n  uninit() {\n    if (this.initialized) {\n      this._unmount();\n      this.initialized = false;\n    }\n  }\n}\n","/* eslint-env mozilla/frame-script */\n\nimport {actionCreators as ac, actionTypes as at, actionUtils as au} from \"common/Actions.jsm\";\nimport {applyMiddleware, combineReducers, createStore} from \"redux\";\n\nexport const MERGE_STORE_ACTION = \"NEW_TAB_INITIAL_STATE\";\nexport const OUTGOING_MESSAGE_NAME = \"ActivityStream:ContentToMain\";\nexport const INCOMING_MESSAGE_NAME = \"ActivityStream:MainToContent\";\nexport const EARLY_QUEUED_ACTIONS = [at.SAVE_SESSION_PERF_DATA, at.PAGE_PRERENDERED];\n\n/**\n * A higher-order function which returns a reducer that, on MERGE_STORE action,\n * will return the action.data object merged into the previous state.\n *\n * For all other actions, it merely calls mainReducer.\n *\n * Because we want this to merge the entire state object, it's written as a\n * higher order function which takes the main reducer (itself often a call to\n * combineReducers) as a parameter.\n *\n * @param  {function} mainReducer reducer to call if action != MERGE_STORE_ACTION\n * @return {function}             a reducer that, on MERGE_STORE_ACTION action,\n *                                will return the action.data object merged\n *                                into the previous state, and the result\n *                                of calling mainReducer otherwise.\n */\nfunction mergeStateReducer(mainReducer) {\n  return (prevState, action) => {\n    if (action.type === MERGE_STORE_ACTION) {\n      return {...prevState, ...action.data};\n    }\n\n    return mainReducer(prevState, action);\n  };\n}\n\n/**\n * messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary\n */\nconst messageMiddleware = store => next => action => {\n  const skipLocal = action.meta && action.meta.skipLocal;\n  if (au.isSendToMain(action)) {\n    RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  }\n  if (!skipLocal) {\n    next(action);\n  }\n};\n\nexport const rehydrationMiddleware = store => next => action => {\n  if (store._didRehydrate) {\n    return next(action);\n  }\n\n  const isMergeStoreAction = action.type === MERGE_STORE_ACTION;\n  const isRehydrationRequest = action.type === at.NEW_TAB_STATE_REQUEST;\n\n  if (isRehydrationRequest) {\n    store._didRequestInitialState = true;\n    return next(action);\n  }\n\n  if (isMergeStoreAction) {\n    store._didRehydrate = true;\n    return next(action);\n  }\n\n  // If init happened after our request was made, we need to re-request\n  if (store._didRequestInitialState && action.type === at.INIT) {\n    return next(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n  }\n\n  if (au.isBroadcastToContent(action) || au.isSendToOneContent(action) || au.isSendToPreloaded(action)) {\n    // Note that actions received before didRehydrate will not be dispatched\n    // because this could negatively affect preloading and the the state\n    // will be replaced by rehydration anyway.\n    return null;\n  }\n\n  return next(action);\n};\n\n/**\n * This middleware queues up all the EARLY_QUEUED_ACTIONS until it receives\n * the first action from main. This is useful for those actions for main which\n * require higher reliability, i.e. the action will not be lost in the case\n * that it gets sent before the main is ready to receive it. Conversely, any\n * actions allowed early are accepted to be ignorable or re-sendable.\n */\nexport const queueEarlyMessageMiddleware = store => next => action => {\n  if (store._receivedFromMain) {\n    next(action);\n  } else if (au.isFromMain(action)) {\n    next(action);\n    store._receivedFromMain = true;\n    // Sending out all the early actions as main is ready now\n    if (store._earlyActionQueue) {\n      store._earlyActionQueue.forEach(next);\n      store._earlyActionQueue = [];\n    }\n  } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {\n    store._earlyActionQueue = store._earlyActionQueue || [];\n    store._earlyActionQueue.push(action);\n  } else {\n    // Let any other type of action go through\n    next(action);\n  }\n};\n\n/**\n * initStore - Create a store and listen for incoming actions\n *\n * @param  {object} reducers An object containing Redux reducers\n * @param  {object} intialState (optional) The initial state of the store, if desired\n * @return {object}          A redux store\n */\nexport function initStore(reducers, initialState) {\n  const store = createStore(\n    mergeStateReducer(combineReducers(reducers)),\n    initialState,\n    global.RPMAddMessageListener && applyMiddleware(rehydrationMiddleware, queueEarlyMessageMiddleware, messageMiddleware)\n  );\n\n  store._didRehydrate = false;\n  store._didRequestInitialState = false;\n\n  if (global.RPMAddMessageListener) {\n    global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, msg => {\n      try {\n        store.dispatch(msg.data);\n      } catch (ex) {\n        console.error(\"Content msg:\", msg, \"Dispatch error: \", ex); // eslint-disable-line no-console\n        dump(`Content msg: ${JSON.stringify(msg)}\\nDispatch error: ${ex}\\n${ex.stack}`);\n      }\n    });\n  }\n\n  return store;\n}\n","module.exports = Redux;","import {MessageContext} from \"fluent\";\n\n/**\n * Properties that allow rich text MUST be added to this list.\n *   key: the localization_id that should be used\n *   value: a property or array of properties on the message.content object\n */\nconst RICH_TEXT_CONFIG = {\n  \"text\": [\"text\", \"scene1_text\"],\n  \"privacy_html\": \"scene2_privacy_html\",\n  \"disclaimer_html\": \"scene2_disclaimer_html\",\n};\n\nexport const RICH_TEXT_KEYS = Object.keys(RICH_TEXT_CONFIG);\n\n/**\n * Generates an array of messages suitable for fluent's localization provider\n * including all needed strings for rich text.\n * @param {object} content A .content object from an ASR message (i.e. message.content)\n * @returns {MessageContext[]} A array containing the fluent message context\n */\nexport function generateMessages(content) {\n  const cx = new MessageContext(\"en-US\");\n\n  RICH_TEXT_KEYS.forEach(key => {\n    const attrs = RICH_TEXT_CONFIG[key];\n    const attrsToTry = Array.isArray(attrs) ? [...attrs] : [attrs];\n    let string = \"\";\n    while (!string && attrsToTry.length) {\n      const attr = attrsToTry.pop();\n      string = content[attr];\n    }\n    cx.addMessages(`${key} = ${string}`);\n  });\n  return [cx];\n}\n","import React from \"react\";\n\nexport const VISIBLE = \"visible\";\nexport const VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\n/**\n * Component wrapper used to send telemetry pings on every impression.\n */\nexport class ImpressionsWrapper extends React.PureComponent {\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionOrAddListener() {\n    if (this.props.document.visibilityState === VISIBLE) {\n      this.props.sendImpression({id: this.props.id});\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (this.props.document.visibilityState === VISIBLE) {\n          this.props.sendImpression({id: this.props.id});\n          this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentDidMount() {\n    if (this.props.sendOnMount) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  render() {\n    return this.props.children;\n  }\n}\n\nImpressionsWrapper.defaultProps = {\n  document: global.document,\n  sendOnMount: true,\n};\n","module.exports = React;","module.exports = PropTypes;","module.exports = ReactDOM;","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addLocaleData, injectIntl, IntlProvider} from \"react-intl\";\nimport {ASRouterAdmin} from \"content-src/components/ASRouterAdmin/ASRouterAdmin\";\nimport {ConfirmDialog} from \"content-src/components/ConfirmDialog/ConfirmDialog\";\nimport {connect} from \"react-redux\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport {ManualMigration} from \"content-src/components/ManualMigration/ManualMigration\";\nimport {PrerenderData} from \"common/PrerenderData.jsm\";\nimport React from \"react\";\nimport {Search} from \"content-src/components/Search/Search\";\nimport {Sections} from \"content-src/components/Sections/Sections\";\nimport {StartupOverlay} from \"content-src/components/StartupOverlay/StartupOverlay\";\n\nconst PrefsButton = injectIntl(props => (\n  <div className=\"prefs-button\">\n    <button className=\"icon icon-settings\" onClick={props.onClick} title={props.intl.formatMessage({id: \"settings_pane_button_label\"})} />\n  </div>\n));\n\n// Add the locale data for pluralization and relative-time formatting for now,\n// this just uses english locale data. We can make this more sophisticated if\n// more features are needed.\nfunction addLocaleDataForReactIntl(locale) {\n  addLocaleData([{locale, parentLocale: \"en\"}]);\n}\n\n// Returns a function will not be continuously triggered when called. The\n// function will be triggered if called again after `wait` milliseconds.\nfunction debounce(func, wait) {\n  let timer;\n  return (...args) => {\n    if (timer) { return; }\n\n    let wakeUp = () => { timer = null; };\n\n    timer = setTimeout(wakeUp, wait);\n    func.apply(this, args);\n  };\n}\n\nexport class _Base extends React.PureComponent {\n  componentWillMount() {\n    const {locale} = this.props;\n    addLocaleDataForReactIntl(locale);\n    if (this.props.isFirstrun) {\n      global.document.body.classList.add(\"welcome\", \"hide-main\");\n    }\n  }\n\n  componentDidMount() {\n    // Request state AFTER the first render to ensure we don't cause the\n    // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is\n    // dispatched right after the store is ready.\n    if (this.props.isPrerendered) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n      this.props.dispatch(ac.AlsoToMain({type: at.PAGE_PRERENDERED}));\n    }\n  }\n\n  componentWillUnmount() {\n    this.updateTheme();\n  }\n\n  componentWillUpdate() {\n    this.updateTheme();\n  }\n\n  updateTheme() {\n    const bodyClassName = [\n      \"activity-stream\",\n      // If we skipped the about:welcome overlay and removed the CSS classes\n      // we don't want to add them back to the Activity Stream view\n      document.body.classList.contains(\"welcome\") ? \"welcome\" : \"\",\n      document.body.classList.contains(\"hide-main\") ? \"hide-main\" : \"\",\n    ].filter(v => v).join(\" \");\n    global.document.body.className = bodyClassName;\n  }\n\n  render() {\n    const {props} = this;\n    const {App, locale, strings} = props;\n    const {initialized} = App;\n\n    const prefs = props.Prefs.values;\n    if (prefs[\"asrouter.devtoolsEnabled\"]) {\n      if (window.location.hash === \"#asrouter\") {\n        return (<ASRouterAdmin />);\n      }\n      console.log(\"ASRouter devtools enabled. To access visit %cabout:newtab#asrouter\", \"font-weight: bold\"); // eslint-disable-line no-console\n    }\n\n    if (!props.isPrerendered && !initialized) {\n      return null;\n    }\n\n    return (<IntlProvider locale={locale} messages={strings}>\n        <ErrorBoundary className=\"base-content-fallback\">\n          <BaseContent {...this.props} />\n        </ErrorBoundary>\n      </IntlProvider>);\n  }\n}\n\nexport class BaseContent extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.openPreferences = this.openPreferences.bind(this);\n    this.onWindowScroll = debounce(this.onWindowScroll.bind(this), 5);\n    this.state = {fixedSearch: false};\n  }\n\n  componentDidMount() {\n    global.addEventListener(\"scroll\", this.onWindowScroll);\n  }\n\n  componentWillUnmount() {\n    global.removeEventListener(\"scroll\", this.onWindowScroll);\n  }\n\n  onWindowScroll() {\n    const SCROLL_THRESHOLD = 34;\n    if (global.scrollY > SCROLL_THRESHOLD && !this.state.fixedSearch) {\n      this.setState({fixedSearch: true});\n    } else if (global.scrollY <= SCROLL_THRESHOLD && this.state.fixedSearch) {\n      this.setState({fixedSearch: false});\n    }\n  }\n\n  openPreferences() {\n    this.props.dispatch(ac.OnlyToMain({type: at.SETTINGS_OPEN}));\n    this.props.dispatch(ac.UserEvent({event: \"OPEN_NEWTAB_PREFS\"}));\n  }\n\n  render() {\n    const {props} = this;\n    const {App} = props;\n    const {initialized} = App;\n    const prefs = props.Prefs.values;\n\n    const shouldBeFixedToTop = PrerenderData.arePrefsValid(name => prefs[name]);\n    const noSectionsEnabled = !prefs[\"feeds.topsites\"] && props.Sections.filter(section => section.enabled).length === 0;\n\n    const outerClassName = [\n      \"outer-wrapper\",\n      shouldBeFixedToTop && \"fixed-to-top\",\n      prefs.showSearch && this.state.fixedSearch && !noSectionsEnabled && \"fixed-search\",\n      prefs.showSearch && noSectionsEnabled && \"only-search\",\n    ].filter(v => v).join(\" \");\n\n    return (\n      <div>\n        <div className={outerClassName}>\n          <main>\n            {prefs.showSearch &&\n              <div className=\"non-collapsible-section\">\n                <ErrorBoundary>\n                  <Search showLogo={noSectionsEnabled} />\n                </ErrorBoundary>\n              </div>\n            }\n            <div className={`body-wrapper${(initialized ? \" on\" : \"\")}`}>\n              {!prefs.migrationExpired &&\n                <div className=\"non-collapsible-section\">\n                  <ManualMigration />\n                </div>\n                }\n              <Sections />\n              <PrefsButton onClick={this.openPreferences} />\n            </div>\n            <ConfirmDialog />\n          </main>\n        </div>\n        {this.props.isFirstrun && <StartupOverlay />}\n      </div>);\n  }\n}\n\nexport const Base = connect(state => ({App: state.App, Prefs: state.Prefs, Sections: state.Sections}))(_Base);\n","module.exports = ReactIntl;","import {ASRouterUtils} from \"../../asrouter/asrouter-content\";\nimport React from \"react\";\n\nexport class ASRouterAdmin extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessage = this.onMessage.bind(this);\n    this.handleEnabledToggle = this.handleEnabledToggle.bind(this);\n    this.onChangeMessageFilter = this.onChangeMessageFilter.bind(this);\n    this.findOtherBundledMessagesOfSameTemplate = this.findOtherBundledMessagesOfSameTemplate.bind(this);\n    this.state = {messageFilter: \"all\"};\n  }\n\n  onMessage({data: action}) {\n    if (action.type === \"ADMIN_SET_STATE\") {\n      this.setState(action.data);\n    }\n  }\n\n  componentWillMount() {\n    const endpoint = ASRouterUtils.getPreviewEndpoint();\n    ASRouterUtils.sendMessage({type: \"ADMIN_CONNECT_STATE\", data: {endpoint}});\n    ASRouterUtils.addListener(this.onMessage);\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessage);\n  }\n\n  findOtherBundledMessagesOfSameTemplate(template) {\n    return this.state.messages.filter(msg => msg.template === template && msg.bundled);\n  }\n\n  handleBlock(msg) {\n    if (msg.bundled) {\n      // If we are blocking a message that belongs to a bundle, block all other messages that are bundled of that same template\n      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n      return () => ASRouterUtils.blockBundle(bundle);\n    }\n    return () => ASRouterUtils.blockById(msg.id);\n  }\n\n  handleUnblock(msg) {\n    if (msg.bundled) {\n      // If we are unblocking a message that belongs to a bundle, unblock all other messages that are bundled of that same template\n      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n      return () => ASRouterUtils.unblockBundle(bundle);\n    }\n    return () => ASRouterUtils.unblockById(msg.id);\n  }\n\n  handleOverride(id) {\n    return () => ASRouterUtils.overrideMessage(id);\n  }\n\n  expireCache() {\n    ASRouterUtils.sendMessage({type: \"EXPIRE_QUERY_CACHE\"});\n  }\n\n  resetPref() {\n    ASRouterUtils.sendMessage({type: \"RESET_PROVIDER_PREF\"});\n  }\n\n  renderMessageItem(msg) {\n    const isCurrent = msg.id === this.state.lastMessageId;\n    const isBlocked = this.state.messageBlockList.includes(msg.id);\n    const impressions = this.state.messageImpressions[msg.id] ? this.state.messageImpressions[msg.id].length : 0;\n\n    let itemClassName = \"message-item\";\n    if (isCurrent) { itemClassName += \" current\"; }\n    if (isBlocked) { itemClassName += \" blocked\"; }\n\n    return (<tr className={itemClassName} key={msg.id}>\n      <td className=\"message-id\"><span>{msg.id} <br /></span></td>\n      <td>\n        <button className={`button ${(isBlocked ? \"\" : \" primary\")}`} onClick={isBlocked ? this.handleUnblock(msg) : this.handleBlock(msg)}>{isBlocked ? \"Unblock\" : \"Block\"}</button>\n       {isBlocked ? null : <button className=\"button\" onClick={this.handleOverride(msg.id)}>Show</button>}\n       <br />({impressions} impressions)\n      </td>\n      <td className=\"message-summary\">\n        <pre>{JSON.stringify(msg, null, 2)}</pre>\n      </td>\n    </tr>);\n  }\n\n  renderMessages() {\n    if (!this.state.messages) {\n      return null;\n    }\n    const messagesToShow = this.state.messageFilter === \"all\" ? this.state.messages : this.state.messages.filter(message => message.provider === this.state.messageFilter);\n    return (<table><tbody>\n      {messagesToShow.map(msg => this.renderMessageItem(msg))}\n    </tbody></table>);\n  }\n\n  onChangeMessageFilter(event) {\n    this.setState({messageFilter: event.target.value});\n  }\n\n  renderMessageFilter() {\n    if (!this.state.providers) {\n      return null;\n    }\n    return (<p>Show messages from <select value={this.state.messageFilter} onChange={this.onChangeMessageFilter}>\n      <option value=\"all\">all providers</option>\n      {this.state.providers.map(provider => (<option key={provider.id} value={provider.id}>{provider.id}</option>))}\n    </select></p>);\n  }\n\n  renderTableHead() {\n    return (<thead>\n      <tr className=\"message-item\">\n        <td>id</td>\n        <td>enabled</td>\n        <td>source</td>\n        <td>last updated</td>\n      </tr>\n    </thead>);\n  }\n\n  handleEnabledToggle(event) {\n    const action = {type: event.target.checked ? \"ENABLE_PROVIDER\" : \"DISABLE_PROVIDER\", data: event.target.name};\n    ASRouterUtils.sendMessage(action);\n    this.setState({messageFilter: \"all\"});\n  }\n\n  renderProviders() {\n    const providersConfig = this.state.providerPrefs;\n    const providerInfo = this.state.providers;\n    return (<table>{this.renderTableHead()}<tbody>\n      {providersConfig.map((provider, i) => {\n        const isTestProvider = provider.id === \"snippets_local_testing\";\n        const info = providerInfo.find(p => p.id === provider.id) || {};\n        let label = \"(local)\";\n        if (provider.type === \"remote\") {\n          label = <a target=\"_blank\" href={info.url}>{info.url}</a>;\n        } else if (provider.type === \"remote-settings\") {\n          label = `${provider.bucket} (Remote Settings)`;\n        }\n        return (<tr className=\"message-item\" key={i}>\n          <td>{provider.id}</td>\n          <td>{isTestProvider ? null : <input type=\"checkbox\" name={provider.id} checked={provider.enabled} onChange={this.handleEnabledToggle} />}</td>\n          <td>{label}</td>\n          <td style={{whiteSpace: \"nowrap\"}}>{info.lastUpdated ? new Date(info.lastUpdated).toLocaleString() : \"\"}</td>\n        </tr>);\n      })}\n    </tbody></table>);\n  }\n\n  render() {\n    return (<div className=\"asrouter-admin outer-wrapper\">\n      <h1>AS Router Admin</h1>\n      <h2>Targeting Utilities</h2>\n      <button className=\"button\" onClick={this.expireCache}>Expire Cache</button> (This expires the cache in ASR Targeting for bookmarks and top sites)\n      <h2>Message Providers</h2>\n      <button className=\"button\" onClick={this.resetPref}>Restore defaults</button>\n      {this.state.providers ? this.renderProviders() : null}\n      <h2>Messages</h2>\n      {this.renderMessageFilter()}\n      {this.renderMessages()}\n    </div>);\n  }\n}\n","import {actionCreators as ac, actionTypes} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * ConfirmDialog component.\n * One primary action button, one cancel button.\n *\n * Content displayed is controlled by `data` prop the component receives.\n * Example:\n * data: {\n *   // Any sort of data needed to be passed around by actions.\n *   payload: site.url,\n *   // Primary button AlsoToMain action.\n *   action: \"DELETE_HISTORY_URL\",\n *   // Primary button USerEvent action.\n *   userEvent: \"DELETE\",\n *   // Array of locale ids to display.\n *   message_body: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n *   // Text for primary button.\n *   confirm_button_string_id: \"menu_action_delete\"\n * },\n */\nexport class _ConfirmDialog extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this._handleCancelBtn = this._handleCancelBtn.bind(this);\n    this._handleConfirmBtn = this._handleConfirmBtn.bind(this);\n  }\n\n  _handleCancelBtn() {\n    this.props.dispatch({type: actionTypes.DIALOG_CANCEL});\n    this.props.dispatch(ac.UserEvent({event: actionTypes.DIALOG_CANCEL, source: this.props.data.eventSource}));\n  }\n\n  _handleConfirmBtn() {\n    this.props.data.onConfirm.forEach(this.props.dispatch);\n  }\n\n  _renderModalMessage() {\n    const message_body = this.props.data.body_string_id;\n\n    if (!message_body) {\n      return null;\n    }\n\n    return (<span>\n      {message_body.map(msg => <p key={msg}><FormattedMessage id={msg} /></p>)}\n    </span>);\n  }\n\n  render() {\n    if (!this.props.visible) {\n      return null;\n    }\n\n    return (<div className=\"confirmation-dialog\">\n      <div className=\"modal-overlay\" onClick={this._handleCancelBtn} />\n      <div className=\"modal\">\n        <section className=\"modal-message\">\n          {this.props.data.icon && <span className={`icon icon-spacer icon-${this.props.data.icon}`} />}\n          {this._renderModalMessage()}\n        </section>\n        <section className=\"actions\">\n          <button onClick={this._handleCancelBtn}>\n            <FormattedMessage id={this.props.data.cancel_button_string_id} />\n          </button>\n          <button className=\"done\" onClick={this._handleConfirmBtn}>\n            <FormattedMessage id={this.props.data.confirm_button_string_id} />\n          </button>\n        </section>\n      </div>\n    </div>);\n  }\n}\n\nexport const ConfirmDialog = connect(state => state.Dialog)(_ConfirmDialog);\n","module.exports = ReactRedux;","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class ErrorBoundaryFallback extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.windowObj = this.props.windowObj || window;\n    this.onClick = this.onClick.bind(this);\n  }\n\n  /**\n   * Since we only get here if part of the page has crashed, do a\n   * forced reload to give us the best chance at recovering.\n   */\n  onClick() {\n    this.windowObj.location.reload(true);\n  }\n\n  render() {\n    const defaultClass = \"as-error-fallback\";\n    let className;\n    if (\"className\" in this.props) {\n      className = `${this.props.className} ${defaultClass}`;\n    } else {\n      className = defaultClass;\n    }\n\n    // href=\"#\" to force normal link styling stuff (eg cursor on hover)\n    return (\n      <div className={className}>\n        <div>\n          <FormattedMessage\n            defaultMessage=\"Oops, something went wrong loading this content.\"\n            id=\"error_fallback_default_info\" />\n        </div>\n        <span>\n          <a href=\"#\" className=\"reload-button\" onClick={this.onClick}>\n            <FormattedMessage\n              defaultMessage=\"Refresh page to try again.\"\n              id=\"error_fallback_default_refresh_suggestion\" />\n          </a>\n        </span>\n      </div>\n    );\n  }\n}\nErrorBoundaryFallback.defaultProps = {className: \"as-error-fallback\"};\n\nexport class ErrorBoundary extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {hasError: false};\n  }\n\n  componentDidCatch(error, info) {\n    this.setState({hasError: true});\n  }\n\n  render() {\n    if (!this.state.hasError) {\n      return (this.props.children);\n    }\n\n    return <this.props.FallbackComponent className={this.props.className} />;\n  }\n}\n\nErrorBoundary.defaultProps = {FallbackComponent: ErrorBoundaryFallback};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * Manual migration component used to start the profile import wizard.\n * Message is presented temporarily and will go away if:\n * 1.  User clicks \"No Thanks\"\n * 2.  User completed the data import\n * 3.  After 3 active days\n * 4.  User clicks \"Cancel\" on the import wizard (currently not implemented).\n */\nexport class _ManualMigration extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onLaunchTour = this.onLaunchTour.bind(this);\n    this.onCancelTour = this.onCancelTour.bind(this);\n  }\n\n  onLaunchTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_START}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_START}));\n  }\n\n  onCancelTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_CANCEL}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_CANCEL}));\n  }\n\n  render() {\n    return (<div className=\"manual-migration-container\">\n        <p>\n          <span className=\"icon icon-import\" />\n          <FormattedMessage id=\"manual_migration_explanation2\" />\n        </p>\n        <div className=\"manual-migration-actions actions\">\n          <button className=\"dismiss\" onClick={this.onCancelTour}>\n            <FormattedMessage id=\"manual_migration_cancel_button\" />\n          </button>\n          <button onClick={this.onLaunchTour}>\n            <FormattedMessage id=\"manual_migration_import_button\" />\n          </button>\n        </div>\n    </div>);\n  }\n}\n\nexport const ManualMigration = connect()(_ManualMigration);\n","class _PrerenderData {\n  constructor(options) {\n    this.initialPrefs = options.initialPrefs;\n    this.initialSections = options.initialSections;\n    this._setValidation(options.validation);\n  }\n\n  get validation() {\n    return this._validation;\n  }\n\n  set validation(value) {\n    this._setValidation(value);\n  }\n\n  get invalidatingPrefs() {\n    return this._invalidatingPrefs;\n  }\n\n    // This is needed so we can use it in the constructor\n  _setValidation(value = []) {\n    this._validation = value;\n    this._invalidatingPrefs = value.reduce((result, next) => {\n      if (typeof next === \"string\") {\n        result.push(next);\n        return result;\n      } else if (next && next.oneOf) {\n        return result.concat(next.oneOf);\n      } else if (next && next.indexedDB) {\n        return result.concat(next.indexedDB);\n      }\n      throw new Error(\"Your validation configuration is not properly configured\");\n    }, []);\n  }\n\n  arePrefsValid(getPref, indexedDBPrefs) {\n    for (const prefs of this.validation) {\n      // {oneOf: [\"foo\", \"bar\"]}\n      if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {\n        return false;\n\n        // {indexedDB: [\"foo\", \"bar\"]}\n      } else if (indexedDBPrefs && prefs && prefs.indexedDB) {\n        const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));\n        if (anyModifiedPrefs) {\n          return false;\n        }\n        // \"foo\"\n      } else if (getPref(prefs) !== this.initialPrefs[prefs]) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nthis.PrerenderData = new _PrerenderData({\n  initialPrefs: {\n    \"migrationExpired\": true,\n    \"feeds.topsites\": true,\n    \"showSearch\": true,\n    \"topSitesRows\": 1,\n    \"feeds.section.topstories\": true,\n    \"feeds.section.highlights\": true,\n    \"sectionOrder\": \"topsites,topstories,highlights\",\n    \"collapsed\": false,\n  },\n  // Prefs listed as invalidating will prevent the prerendered version\n  // of AS from being used if their value is something other than what is listed\n  // here. This is required because some preferences cause the page layout to be\n  // too different for the prerendered version to be used. Unfortunately, this\n  // will result in users who have modified some of their preferences not being\n  // able to get the benefits of prerendering.\n  validation: [\n    \"feeds.topsites\",\n    \"showSearch\",\n    \"topSitesRows\",\n    \"sectionOrder\",\n    // This means if either of these are set to their default values,\n    // prerendering can be used.\n    {oneOf: [\"feeds.section.topstories\", \"feeds.section.highlights\"]},\n    // If any component has the following preference set to `true` it will\n    // invalidate the prerendered version.\n    {indexedDB: [\"collapsed\"]},\n  ],\n  initialSections: [\n    {\n      enabled: true,\n      icon: \"pocket\",\n      id: \"topstories\",\n      order: 1,\n      title: {id: \"header_recommended_by\", values: {provider: \"Pocket\"}},\n    },\n    {\n      enabled: true,\n      id: \"highlights\",\n      icon: \"highlights\",\n      order: 2,\n      title: {id: \"header_highlights\"},\n    },\n  ],\n});\n\nthis._PrerenderData = _PrerenderData;\nconst EXPORTED_SYMBOLS = [\"PrerenderData\", \"_PrerenderData\"];\n","/* globals ContentSearchUIController */\n\"use strict\";\n\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {IS_NEWTAB} from \"content-src/lib/constants\";\nimport React from \"react\";\n\nexport class _Search extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onInputMount = this.onInputMount.bind(this);\n  }\n\n  handleEvent(event) {\n    // Also track search events with our own telemetry\n    if (event.detail.type === \"Search\") {\n      this.props.dispatch(ac.UserEvent({event: \"SEARCH\"}));\n    }\n  }\n\n  onClick(event) {\n    window.gContentSearchController.search(event);\n  }\n\n  componentWillUnmount() {\n    delete window.gContentSearchController;\n  }\n\n  onInputMount(input) {\n    if (input) {\n      // The \"healthReportKey\" and needs to be \"newtab\" or \"abouthome\" so that\n      // BrowserUsageTelemetry.jsm knows to handle events with this name, and\n      // can add the appropriate telemetry probes for search. Without the correct\n      // name, certain tests like browser_UsageTelemetry_content.js will fail\n      // (See github ticket #2348 for more details)\n      const healthReportKey = IS_NEWTAB ? \"newtab\" : \"abouthome\";\n\n      // The \"searchSource\" needs to be \"newtab\" or \"homepage\" and is sent with\n      // the search data and acts as context for the search request (See\n      // nsISearchEngine.getSubmission). It is necessary so that search engine\n      // plugins can correctly atribute referrals. (See github ticket #3321 for\n      // more details)\n      const searchSource = IS_NEWTAB ? \"newtab\" : \"homepage\";\n\n      // gContentSearchController needs to exist as a global so that tests for\n      // the existing about:home can find it; and so it allows these tests to pass.\n      // In the future, when activity stream is default about:home, this can be renamed\n      window.gContentSearchController = new ContentSearchUIController(input, input.parentNode,\n        healthReportKey, searchSource);\n      addEventListener(\"ContentSearchClient\", this);\n    } else {\n      window.gContentSearchController = null;\n      removeEventListener(\"ContentSearchClient\", this);\n    }\n  }\n\n  /*\n   * Do not change the ID on the input field, as legacy newtab code\n   * specifically looks for the id 'newtab-search-text' on input fields\n   * in order to execute searches in various tests\n   */\n  render() {\n    return (<div className=\"search-wrapper\">\n      {this.props.showLogo &&\n        <div className=\"logo-and-wordmark\">\n          <div className=\"logo\" />\n          <div className=\"wordmark\" />\n        </div>\n      }\n      <div className=\"search-inner-wrapper\">\n        <label htmlFor=\"newtab-search-text\" className=\"search-label\">\n          <span className=\"sr-only\"><FormattedMessage id=\"search_web_placeholder\" /></span>\n        </label>\n        <input\n          id=\"newtab-search-text\"\n          maxLength=\"256\"\n          placeholder={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n          ref={this.onInputMount}\n          title={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n          type=\"search\" />\n        <button\n          id=\"searchSubmit\"\n          className=\"search-button\"\n          onClick={this.onClick}\n          title={this.props.intl.formatMessage({id: \"search_button\"})}>\n          <span className=\"sr-only\"><FormattedMessage id=\"search_button\" /></span>\n        </button>\n      </div>\n    </div>);\n  }\n}\n\nexport const Search = connect()(injectIntl(_Search));\n","export const IS_NEWTAB = global.document && global.document.documentURI === \"about:newtab\";\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {Card, PlaceholderCard} from \"content-src/components/Card/Card\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {MoreRecommendations} from \"content-src/components/MoreRecommendations/MoreRecommendations\";\nimport {PocketLoggedInCta} from \"content-src/components/PocketLoggedInCta/PocketLoggedInCta\";\nimport React from \"react\";\nimport {Topics} from \"content-src/components/Topics/Topics\";\nimport {TopSites} from \"content-src/components/TopSites/TopSites\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\nconst CARDS_PER_ROW_DEFAULT = 3;\nconst CARDS_PER_ROW_COMPACT_WIDE = 4;\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class Section extends React.PureComponent {\n  get numRows() {\n    const {rowsPref, maxRows, Prefs} = this.props;\n    return rowsPref ? Prefs.values[rowsPref] : maxRows;\n  }\n\n  _dispatchImpressionStats() {\n    const {props} = this;\n    let cardsPerRow = CARDS_PER_ROW_DEFAULT;\n    if (props.compactCards && global.matchMedia(`(min-width: 1072px)`).matches) {\n      // If the section has compact cards and the viewport is wide enough, we show\n      // 4 columns instead of 3.\n      // $break-point-widest = 1072px (from _variables.scss)\n      cardsPerRow = CARDS_PER_ROW_COMPACT_WIDE;\n    }\n    const maxCards = cardsPerRow * this.numRows;\n    const cards = props.rows.slice(0, maxCards);\n\n    if (this.needsImpressionStats(cards)) {\n      props.dispatch(ac.ImpressionStats({\n        source: props.eventSource,\n        tiles: cards.map(link => ({id: link.guid})),\n      }));\n      this.impressionCardGuids = cards.map(link => link.guid);\n    }\n  }\n\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionStatsOrAddListener() {\n    const {props} = this;\n\n    if (!props.shouldSendImpressionStats || !props.dispatch) {\n      return;\n    }\n\n    if (props.document.visibilityState === VISIBLE) {\n      this._dispatchImpressionStats();\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (props.document.visibilityState === VISIBLE) {\n          if (!this.props.pref.collapsed) {\n            this._dispatchImpressionStats();\n          }\n          props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentWillMount() {\n    this.sendNewTabRehydrated(this.props.initialized);\n  }\n\n  componentDidMount() {\n    if (this.props.rows.length && !this.props.pref.collapsed) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    const {props} = this;\n    const isCollapsed = props.pref.collapsed;\n    const wasCollapsed = prevProps.pref.collapsed;\n    if (\n      // Don't send impression stats for the empty state\n      props.rows.length &&\n      (\n        // We only want to send impression stats if the content of the cards has changed\n        // and the section is not collapsed...\n        (props.rows !== prevProps.rows && !isCollapsed) ||\n        // or if we are expanding a section that was collapsed.\n        (wasCollapsed && !isCollapsed)\n      )\n    ) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentWillUpdate(nextProps) {\n    this.sendNewTabRehydrated(nextProps.initialized);\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  needsImpressionStats(cards) {\n    if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {\n      return true;\n    }\n\n    for (let i = 0; i < cards.length; i++) {\n      if (cards[i].guid !== this.impressionCardGuids[i]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  // The NEW_TAB_REHYDRATED event is used to inform feeds that their\n  // data has been consumed e.g. for counting the number of tabs that\n  // have rendered that data.\n  sendNewTabRehydrated(initialized) {\n    if (initialized && !this.renderNotified) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_REHYDRATED, data: {}}));\n      this.renderNotified = true;\n    }\n  }\n\n  render() {\n    const {\n      id, eventSource, title, icon, rows, Pocket, topics,\n      emptyState, dispatch, compactCards, read_more_endpoint,\n      contextMenuOptions, initialized, learnMore,\n      pref, privacyNoticeURL, isFirst, isLast,\n    } = this.props;\n\n    const waitingForSpoc = id === \"topstories\" && this.props.Pocket.waitingForSpoc;\n    const maxCardsPerRow = compactCards ? CARDS_PER_ROW_COMPACT_WIDE : CARDS_PER_ROW_DEFAULT;\n    const {numRows} = this;\n    const maxCards = maxCardsPerRow * numRows;\n    const maxCardsOnNarrow = CARDS_PER_ROW_DEFAULT * numRows;\n\n    const {pocketCta, isUserLoggedIn} = Pocket || {};\n    const {useCta} = pocketCta || {};\n\n    // Don't display anything until we have a definitve result from Pocket,\n    // to avoid a flash of logged out state while we render.\n    const isPocketLoggedInDefined = (isUserLoggedIn === true || isUserLoggedIn === false);\n\n    const shouldShowPocketCta = (id === \"topstories\" &&\n      useCta && isUserLoggedIn === false);\n\n    // Show topics only for top stories and if it has loaded with topics.\n    // The classs .top-stories-bottom-container ensures content doesn't shift as things load.\n    const shouldShowTopics = (id === \"topstories\" &&\n      (topics && topics.length > 0) &&\n      ((useCta && isUserLoggedIn === true) || (!useCta && isPocketLoggedInDefined)));\n\n    const realRows = rows.slice(0, maxCards);\n\n    // The empty state should only be shown after we have initialized and there is no content.\n    // Otherwise, we should show placeholders.\n    const shouldShowEmptyState = initialized && !rows.length;\n\n    const cards = [];\n    if (!shouldShowEmptyState) {\n      for (let i = 0; i < maxCards; i++) {\n        const link = realRows[i];\n        // On narrow viewports, we only show 3 cards per row. We'll mark the rest as\n        // .hide-for-narrow to hide in CSS via @media query.\n        const className = (i >= maxCardsOnNarrow) ? \"hide-for-narrow\" : \"\";\n        let usePlaceholder = !link;\n        // If we are in the third card and waiting for spoc,\n        // use the placeholder.\n        if (!usePlaceholder && i === 2 && waitingForSpoc) {\n          usePlaceholder = true;\n        }\n        cards.push(!usePlaceholder ? (\n          <Card key={i}\n            index={i}\n            className={className}\n            dispatch={dispatch}\n            link={link}\n            contextMenuOptions={contextMenuOptions}\n            eventSource={eventSource}\n            shouldSendImpressionStats={this.props.shouldSendImpressionStats}\n            isWebExtension={this.props.isWebExtension} />\n        ) : (\n          <PlaceholderCard key={i} className={className} />\n        ));\n      }\n    }\n\n    const sectionClassName = [\n      \"section\",\n      compactCards ? \"compact-cards\" : \"normal-cards\",\n    ].join(\" \");\n\n    // <Section> <-- React component\n    // <section> <-- HTML5 element\n    return (<ComponentPerfTimer {...this.props}>\n      <CollapsibleSection className={sectionClassName} icon={icon}\n        title={title}\n        id={id}\n        eventSource={eventSource}\n        collapsed={this.props.pref.collapsed}\n        showPrefName={(pref && pref.feed) || id}\n        privacyNoticeURL={privacyNoticeURL}\n        Prefs={this.props.Prefs}\n        isFirst={isFirst}\n        isLast={isLast}\n        learnMore={learnMore}\n        dispatch={this.props.dispatch}\n        isWebExtension={this.props.isWebExtension}>\n\n        {!shouldShowEmptyState && (<ul className=\"section-list\" style={{padding: 0}}>\n          {cards}\n        </ul>)}\n        {shouldShowEmptyState &&\n          <div className=\"section-empty-state\">\n            <div className=\"empty-state\">\n              {emptyState.icon && emptyState.icon.startsWith(\"moz-extension://\") ?\n                <img className=\"empty-state-icon icon\" style={{\"background-image\": `url('${emptyState.icon}')`}} /> :\n                <img className={`empty-state-icon icon icon-${emptyState.icon}`} />}\n              <p className=\"empty-state-message\">\n                {getFormattedMessage(emptyState.message)}\n              </p>\n            </div>\n          </div>}\n        {id === \"topstories\" &&\n          <div className=\"top-stories-bottom-container\">\n            {shouldShowTopics && <Topics topics={this.props.topics} />}\n            {shouldShowPocketCta && <PocketLoggedInCta />}\n            {read_more_endpoint &&\n              <MoreRecommendations read_more_endpoint={read_more_endpoint} />}\n          </div>}\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nSection.defaultProps = {\n  document: global.document,\n  rows: [],\n  emptyState: {},\n  pref: {},\n  title: \"\",\n};\n\nexport const SectionIntl = connect(state => ({Prefs: state.Prefs, Pocket: state.Pocket}))(injectIntl(Section));\n\nexport class _Sections extends React.PureComponent {\n  renderSections() {\n    const sections = [];\n    const enabledSections = this.props.Sections.filter(section => section.enabled);\n    const {sectionOrder, \"feeds.topsites\": showTopSites} = this.props.Prefs.values;\n    // Enabled sections doesn't include Top Sites, so we add it if enabled.\n    const expectedCount = enabledSections.length + ~~showTopSites;\n\n    for (const sectionId of sectionOrder.split(\",\")) {\n      const commonProps = {\n        key: sectionId,\n        isFirst: sections.length === 0,\n        isLast: sections.length === expectedCount - 1,\n      };\n      if (sectionId === \"topsites\" && showTopSites) {\n        sections.push(<TopSites {...commonProps} />);\n      } else {\n        const section = enabledSections.find(s => s.id === sectionId);\n        if (section) {\n          sections.push(<SectionIntl {...section} {...commonProps} />);\n        }\n      }\n    }\n    return sections;\n  }\n\n  render() {\n    return (\n      <div className=\"sections-list\">\n        {this.renderSections()}\n      </div>\n    );\n  }\n}\n\nexport const Sections = connect(state => ({Sections: state.Sections, Prefs: state.Prefs}))(_Sections);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\nconst _OpenInPrivateWindow = site => ({\n  id: \"menu_action_open_private_window\",\n  icon: \"new-window-private\",\n  action: ac.OnlyToMain({\n    type: at.OPEN_PRIVATE_WINDOW,\n    data: {url: site.url, referrer: site.referrer},\n  }),\n  userEvent: \"OPEN_PRIVATE_WINDOW\",\n});\n\nexport const GetPlatformString = platform => {\n  switch (platform) {\n    case \"win\":\n      return \"menu_action_show_file_windows\";\n    case \"macosx\":\n      return \"menu_action_show_file_mac_os\";\n    case \"linux\":\n      return \"menu_action_show_file_linux\";\n    default:\n      return \"menu_action_show_file_default\";\n  }\n};\n\n/**\n * List of functions that return items that can be included as menu options in a\n * LinkMenu. All functions take the site as the first parameter, and optionally\n * the index of the site.\n */\nexport const LinkMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  EmptyItem: () => ({type: \"empty\"}),\n  RemoveBookmark: site => ({\n    id: \"menu_action_remove_bookmark\",\n    icon: \"bookmark-added\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_BOOKMARK_BY_ID,\n      data: site.bookmarkGuid,\n    }),\n    userEvent: \"BOOKMARK_DELETE\",\n  }),\n  AddBookmark: site => ({\n    id: \"menu_action_bookmark\",\n    icon: \"bookmark-hollow\",\n    action: ac.AlsoToMain({\n      type: at.BOOKMARK_URL,\n      data: {url: site.url, title: site.title, type: site.type},\n    }),\n    userEvent: \"BOOKMARK_ADD\",\n  }),\n  OpenInNewWindow: site => ({\n    id: \"menu_action_open_new_window\",\n    icon: \"new-window\",\n    action: ac.AlsoToMain({\n      type: at.OPEN_NEW_WINDOW,\n      data: {\n        referrer: site.referrer,\n        typedBonus: site.typedBonus,\n        url: site.url,\n      },\n    }),\n    userEvent: \"OPEN_NEW_WINDOW\",\n  }),\n  BlockUrl: (site, index, eventSource) => ({\n    id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.AlsoToMain({\n      type: at.BLOCK_URL,\n      data: {url: site.open_url || site.url, pocket_id: site.pocket_id},\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      block: 0,\n      tiles: [{id: site.guid, pos: index}],\n    }),\n    userEvent: \"BLOCK\",\n  }),\n\n  // This is an option for web extentions which will result in remove items from\n  // memory and notify the web extenion, rather than using the built-in block list.\n  WebExtDismiss: (site, index, eventSource) => ({\n    id: \"menu_action_webext_dismiss\",\n    string_id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.WebExtEvent(at.WEBEXT_DISMISS, {\n      source: eventSource,\n      url: site.url,\n      action_position: index,\n    }),\n  }),\n  DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({\n    id: \"menu_action_delete\",\n    icon: \"delete\",\n    action: {\n      type: at.DIALOG_OPEN,\n      data: {\n        onConfirm: [\n          ac.AlsoToMain({type: at.DELETE_HISTORY_URL, data: {url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid}}),\n          ac.UserEvent(Object.assign({event: \"DELETE\", source: eventSource, action_position: index}, siteInfo)),\n        ],\n        eventSource,\n        body_string_id: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n        confirm_button_string_id: \"menu_action_delete\",\n        cancel_button_string_id: \"topsites_form_cancel_button\",\n        icon: \"modal-delete\",\n      },\n    },\n    userEvent: \"DIALOG_OPEN\",\n  }),\n  ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({\n    id: GetPlatformString(platform),\n    icon: \"search\",\n    action: ac.OnlyToMain({\n      type: at.SHOW_DOWNLOAD_FILE,\n      data: {url: site.url},\n    }),\n  }),\n  OpenFile: site => ({\n    id: \"menu_action_open_file\",\n    icon: \"open-file\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_DOWNLOAD_FILE,\n      data: {url: site.url},\n    }),\n  }),\n  CopyDownloadLink: site => ({\n    id: \"menu_action_copy_download_link\",\n    icon: \"copy\",\n    action: ac.OnlyToMain({\n      type: at.COPY_DOWNLOAD_LINK,\n      data: {url: site.url},\n    }),\n  }),\n  GoToDownloadPage: site => ({\n    id: \"menu_action_go_to_download_page\",\n    icon: \"download\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: site.referrer},\n    }),\n    disabled: !site.referrer,\n  }),\n  RemoveDownload: site => ({\n    id: \"menu_action_remove_download\",\n    icon: \"delete\",\n    action: ac.OnlyToMain({\n      type: at.REMOVE_DOWNLOAD_FILE,\n      data: {url: site.url},\n    }),\n  }),\n  PinTopSite: ({url, searchTopSite, label}, index) => ({\n    id: \"menu_action_pin\",\n    icon: \"pin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_PIN,\n      data: {\n        site: {\n          url,\n          ...(searchTopSite && {searchTopSite, label}),\n        },\n        index,\n      },\n    }),\n    userEvent: \"PIN\",\n  }),\n  UnpinTopSite: site => ({\n    id: \"menu_action_unpin\",\n    icon: \"unpin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_UNPIN,\n      data: {site: {url: site.url}},\n    }),\n    userEvent: \"UNPIN\",\n  }),\n  SaveToPocket: (site, index, eventSource) => ({\n    id: \"menu_action_save_to_pocket\",\n    icon: \"pocket-save\",\n    action: ac.AlsoToMain({\n      type: at.SAVE_TO_POCKET,\n      data: {site: {url: site.url, title: site.title}},\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      pocket: 0,\n      tiles: [{id: site.guid, pos: index}],\n    }),\n    userEvent: \"SAVE_TO_POCKET\",\n  }),\n  DeleteFromPocket: site => ({\n    id: \"menu_action_delete_pocket\",\n    icon: \"delete\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id},\n    }),\n    userEvent: \"DELETE_FROM_POCKET\",\n  }),\n  ArchiveFromPocket: site => ({\n    id: \"menu_action_archive_pocket\",\n    icon: \"check\",\n    action: ac.AlsoToMain({\n      type: at.ARCHIVE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id},\n    }),\n    userEvent: \"ARCHIVE_FROM_POCKET\",\n  }),\n  EditTopSite: (site, index) => ({\n    id: \"edit_topsites_button_text\",\n    icon: \"edit\",\n    action: {\n      type: at.TOP_SITES_EDIT,\n      data: {index},\n    },\n  }),\n  CheckBookmark: site => (site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site)),\n  CheckPinTopSite: (site, index) => (site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index)),\n  CheckSavedToPocket: (site, index) => (site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index)),\n  CheckBookmarkOrArchive: site => (site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site)),\n  OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem()),\n};\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport {LinkMenuOptions} from \"content-src/lib/link-menu-options\";\nimport React from \"react\";\n\nconst DEFAULT_SITE_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\", \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\"];\n\nexport class _LinkMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n    const {site, index, source, isPrivateBrowsingEnabled, siteInfo, platform} = props;\n\n    // Handle special case of default site\n    const propOptions = (!site.isDefault || site.searchTopSite) ? props.options : DEFAULT_SITE_MENU_OPTIONS;\n\n    const options = propOptions.map(o => LinkMenuOptions[o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {\n      const {action, impression, id, string_id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id: string_id || id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            const userEventData = Object.assign({\n              event: userEvent,\n              source,\n              action_position: index,\n            }, siteInfo);\n            props.dispatch(ac.UserEvent(userEventData));\n          }\n          if (impression && props.shouldSendImpressionStats) {\n            props.dispatch(impression);\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nconst getState = state => ({isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled, platform: state.Prefs.values.platform});\nexport const LinkMenu = connect(getState)(injectIntl(_LinkMenu));\n","import React from \"react\";\n\nexport class ContextMenu extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.hideContext = this.hideContext.bind(this);\n    this.onClick = this.onClick.bind(this);\n  }\n\n  hideContext() {\n    this.props.onUpdate(false);\n  }\n\n  componentDidMount() {\n    setTimeout(() => {\n      global.addEventListener(\"click\", this.hideContext);\n    }, 0);\n  }\n\n  componentWillUnmount() {\n    global.removeEventListener(\"click\", this.hideContext);\n  }\n\n  onClick(event) {\n    // Eat all clicks on the context menu so they don't bubble up to window.\n    // This prevents the context menu from closing when clicking disabled items\n    // or the separators.\n    event.stopPropagation();\n  }\n\n  render() {\n    return (<span className=\"context-menu\" onClick={this.onClick}>\n      <ul role=\"menu\" className=\"context-menu-list\">\n        {this.props.options.map((option, i) => (option.type === \"separator\" ?\n          (<li key={i} className=\"separator\" />) :\n          (option.type !== \"empty\" && <ContextMenuItem key={i} option={option} hideContext={this.hideContext} />)\n        ))}\n      </ul>\n    </span>);\n  }\n}\n\nexport class ContextMenuItem extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onKeyDown = this.onKeyDown.bind(this);\n  }\n\n  onClick() {\n    this.props.hideContext();\n    this.props.option.onClick();\n  }\n\n  onKeyDown(event) {\n    const {option} = this.props;\n    switch (event.key) {\n      case \"Tab\":\n        // tab goes down in context menu, shift + tab goes up in context menu\n        // if we're on the last item, one more tab will close the context menu\n        // similarly, if we're on the first item, one more shift + tab will close it\n        if ((event.shiftKey && option.first) || (!event.shiftKey && option.last)) {\n          this.props.hideContext();\n        }\n        break;\n      case \"Enter\":\n        this.props.hideContext();\n        option.onClick();\n        break;\n    }\n  }\n\n  render() {\n    const {option} = this.props;\n    return (\n      <li role=\"menuitem\" className=\"context-menu-item\">\n        <a onClick={this.onClick} onKeyDown={this.onKeyDown} tabIndex=\"0\" className={option.disabled ? \"disabled\" : \"\"}>\n          {option.icon && <span className={`icon icon-spacer icon-${option.icon}`} />}\n          {option.label}\n        </a>\n      </li>);\n  }\n}\n","/**\n * List of helper functions for screenshot-based images.\n *\n * There are two kinds of images:\n * 1. Remote Image: This is the image from the main process and it refers to\n *    the image in the React props. This can either be an object with the `data`\n *    and `path` properties, if it is a blob, or a string, if it is a normal image.\n * 2. Local Image: This is the image object in the content process and it refers\n *    to the image *object* in the React component's state. All local image\n *    objects have the `url` property, and an additional property `path`, if they\n *    are blobs.\n */\nexport const ScreenshotUtils = {\n  isBlob(isLocal, image) {\n    return !!(image && image.path && ((!isLocal && image.data) || (isLocal && image.url)));\n  },\n\n  // This should always be called with a remote image and not a local image.\n  createLocalImageObject(remoteImage) {\n    if (!remoteImage) {\n      return null;\n    }\n    if (this.isBlob(false, remoteImage)) {\n      return {url: global.URL.createObjectURL(remoteImage.data), path: remoteImage.path};\n    }\n    return {url: remoteImage};\n  },\n\n  // Revokes the object URL of the image if the local image is a blob.\n  // This should always be called with a local image and not a remote image.\n  maybeRevokeBlobObjectURL(localImage) {\n    if (this.isBlob(true, localImage)) {\n      global.URL.revokeObjectURL(localImage.url);\n    }\n  },\n\n  // Checks if remoteImage and localImage are the same.\n  isRemoteImageLocal(localImage, remoteImage) {\n    // Both remoteImage and localImage are present.\n    if (remoteImage && localImage) {\n      return this.isBlob(false, remoteImage) ?\n             localImage.path === remoteImage.path :\n             localImage.url === remoteImage;\n    }\n\n    // This will only handle the remaining three possible outcomes.\n    // (i.e. everything except when both image and localImage are present)\n    return !remoteImage && !localImage;\n  },\n};\n","import {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport React from \"react\";\nimport {SectionMenu} from \"content-src/components/SectionMenu/SectionMenu\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class _CollapsibleSection extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBodyMount = this.onBodyMount.bind(this);\n    this.onHeaderClick = this.onHeaderClick.bind(this);\n    this.onTransitionEnd = this.onTransitionEnd.bind(this);\n    this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);\n    this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n    this.state = {enableAnimation: true, isAnimating: false, menuButtonHover: false, showContextMenu: false};\n  }\n\n  componentWillMount() {\n    this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  componentWillUpdate(nextProps) {\n    // Check if we're about to go from expanded to collapsed\n    if (!this.props.collapsed && nextProps.collapsed) {\n      // This next line forces a layout flush of the section body, which has a\n      // max-height style set, so that the upcoming collapse animation can\n      // animate from that height to the collapsed height. Without this, the\n      // update is coalesced and there's no animation from no-max-height to 0.\n      this.sectionBody.scrollHeight; // eslint-disable-line no-unused-expressions\n    }\n  }\n\n  componentWillUnmount() {\n    this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  enableOrDisableAnimation() {\n    // Only animate the collapse/expand for visible tabs.\n    const visible = this.props.document.visibilityState === VISIBLE;\n    if (this.state.enableAnimation !== visible) {\n      this.setState({enableAnimation: visible});\n    }\n  }\n\n  onBodyMount(node) {\n    this.sectionBody = node;\n  }\n\n  onHeaderClick() {\n    // If this.sectionBody is unset, it means that we're in some sort of error\n    // state, probably displaying the error fallback, so we won't be able to\n    // compute the height, and we don't want to persist the preference.\n    // If props.collapsed is undefined handler shouldn't do anything.\n    if (!this.sectionBody || this.props.collapsed === undefined) {\n      return;\n    }\n\n    // Get the current height of the body so max-height transitions can work\n    this.setState({\n      isAnimating: true,\n      maxHeight: `${this._getSectionBodyHeight()}px`,\n    });\n    const {action, userEvent} = SectionMenuOptions.CheckCollapsed(this.props);\n    this.props.dispatch(action);\n    this.props.dispatch(ac.UserEvent({\n      event: userEvent,\n      source: this.props.source,\n    }));\n  }\n\n  _getSectionBodyHeight() {\n    const div = this.sectionBody;\n    if (div.style.display === \"none\") {\n      // If the div isn't displayed, we can't get it's height. So we display it\n      // to get the height (it doesn't show up because max-height is set to 0px\n      // in CSS). We don't undo this because we are about to expand the section.\n      div.style.display = \"block\";\n    }\n    return div.scrollHeight;\n  }\n\n  onTransitionEnd(event) {\n    // Only update the animating state for our own transition (not a child's)\n    if (event.target === event.currentTarget) {\n      this.setState({isAnimating: false});\n    }\n  }\n\n  renderIcon() {\n    const {icon} = this.props;\n    if (icon && icon.startsWith(\"moz-extension://\")) {\n      return <span className=\"icon icon-small-spacer\" style={{backgroundImage: `url('${icon}')`}} />;\n    }\n    return <span className={`icon icon-small-spacer icon-${icon || \"webextension\"}`} />;\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuButtonMouseEnter() {\n    this.setState({menuButtonHover: true});\n  }\n\n  onMenuButtonMouseLeave() {\n    this.setState({menuButtonHover: false});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const isCollapsible = this.props.collapsed !== undefined;\n    const {enableAnimation, isAnimating, maxHeight, menuButtonHover, showContextMenu} = this.state;\n    const {id, eventSource, collapsed, learnMore, title, extraMenuOptions, showPrefName, privacyNoticeURL, dispatch, isFirst, isLast, isWebExtension} = this.props;\n    const active = menuButtonHover || showContextMenu;\n    let bodyStyle;\n    if (isAnimating && !collapsed) {\n      bodyStyle = {maxHeight};\n    } else if (!isAnimating && collapsed) {\n      bodyStyle = {display: \"none\"};\n    }\n    return (\n      <section\n        className={`collapsible-section ${this.props.className}${enableAnimation ? \" animation-enabled\" : \"\"}${collapsed ? \" collapsed\" : \"\"}${active ? \" active\" : \"\"}`}\n        // Note: data-section-id is used for web extension api tests in mozilla central\n        data-section-id={id}>\n        <div className=\"section-top-bar\">\n          <h3 className=\"section-title\">\n            <span className=\"click-target-container\">\n              <span className=\"click-target\" onClick={this.onHeaderClick}>\n                {this.renderIcon()}\n                {getFormattedMessage(title)}\n              </span>\n              <span className=\"click-target\" onClick={this.onHeaderClick}>\n                {isCollapsible && <span className={`collapsible-arrow icon ${collapsed ? \"icon-arrowhead-forward-small\" : \"icon-arrowhead-down-small\"}`} />}\n              </span>\n              <span>\n                {learnMore &&\n                  <span className=\"learn-more-link\">\n                    <a href={learnMore.link.href}>\n                      <FormattedMessage id={learnMore.link.id} />\n                    </a>\n                  </span>\n                }\n              </span>\n            </span>\n          </h3>\n          <div>\n            <button\n              className=\"context-menu-button icon\"\n              title={this.props.intl.formatMessage({id: \"context_menu_title\"})}\n              onClick={this.onMenuButtonClick}\n              onMouseEnter={this.onMenuButtonMouseEnter}\n              onMouseLeave={this.onMenuButtonMouseLeave}>\n              <span className=\"sr-only\">\n                <FormattedMessage id=\"section_context_menu_button_sr\" />\n              </span>\n            </button>\n            {showContextMenu &&\n              <SectionMenu\n                id={id}\n                extraOptions={extraMenuOptions}\n                eventSource={eventSource}\n                showPrefName={showPrefName}\n                privacyNoticeURL={privacyNoticeURL}\n                collapsed={collapsed}\n                onUpdate={this.onMenuUpdate}\n                isFirst={isFirst}\n                isLast={isLast}\n                dispatch={dispatch}\n                isWebExtension={isWebExtension} />\n            }\n          </div>\n        </div>\n        <ErrorBoundary className=\"section-body-fallback\">\n          <div\n            className={`section-body${isAnimating ? \" animating\" : \"\"}`}\n            onTransitionEnd={this.onTransitionEnd}\n            ref={this.onBodyMount}\n            style={bodyStyle}>\n            {this.props.children}\n          </div>\n        </ErrorBoundary>\n      </section>\n    );\n  }\n}\n\n_CollapsibleSection.defaultProps = {\n  document: global.document || {\n    addEventListener: () => {},\n    removeEventListener: () => {},\n    visibilityState: \"hidden\",\n  },\n  Prefs: {values: {}},\n};\n\nexport const CollapsibleSection = injectIntl(_CollapsibleSection);\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst DEFAULT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"RemoveSection\", \"CheckCollapsed\", \"Separator\", \"ManageSection\"];\nconst WEBEXT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"CheckCollapsed\", \"Separator\", \"ManageWebExtension\"];\n\nexport class _SectionMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n\n    const propOptions = props.isWebExtension ? [...WEBEXT_SECTION_MENU_OPTIONS] : [...DEFAULT_SECTION_MENU_OPTIONS];\n    // Prepend custom options and a separator\n    if (props.extraOptions) {\n      propOptions.splice(0, 0, ...props.extraOptions, \"Separator\");\n    }\n    // Insert privacy notice before the last option (\"ManageSection\")\n    if (props.privacyNoticeURL) {\n      propOptions.splice(-1, 0, \"PrivacyNotice\");\n    }\n\n    const options = propOptions.map(o => SectionMenuOptions[o](props)).map(option => {\n      const {action, id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            props.dispatch(ac.UserEvent({\n              event: userEvent,\n              source: props.source,\n            }));\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nexport const SectionMenu = injectIntl(_SectionMenu);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * List of functions that return items that can be included as menu options in a\n * SectionMenu. All functions take the section as the only parameter.\n */\nexport const SectionMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  MoveUp: section => ({\n    id: \"section_menu_action_move_up\",\n    icon: \"arrowhead-up\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: -1},\n    }),\n    userEvent: \"MENU_MOVE_UP\",\n    disabled: !!section.isFirst,\n  }),\n  MoveDown: section => ({\n    id: \"section_menu_action_move_down\",\n    icon: \"arrowhead-down\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: +1},\n    }),\n    userEvent: \"MENU_MOVE_DOWN\",\n    disabled: !!section.isLast,\n  }),\n  RemoveSection: section => ({\n    id: \"section_menu_action_remove_section\",\n    icon: \"dismiss\",\n    action: ac.SetPref(section.showPrefName, false),\n    userEvent: \"MENU_REMOVE\",\n  }),\n  CollapseSection: section => ({\n    id: \"section_menu_action_collapse_section\",\n    icon: \"minimize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: true}}}),\n    userEvent: \"MENU_COLLAPSE\",\n  }),\n  ExpandSection: section => ({\n    id: \"section_menu_action_expand_section\",\n    icon: \"maximize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: false}}}),\n    userEvent: \"MENU_EXPAND\",\n  }),\n  ManageSection: section => ({\n    id: \"section_menu_action_manage_section\",\n    icon: \"settings\",\n    action: ac.OnlyToMain({type: at.SETTINGS_OPEN}),\n    userEvent: \"MENU_MANAGE\",\n  }),\n  ManageWebExtension: section => ({\n    id: \"section_menu_action_manage_webext\",\n    icon: \"settings\",\n    action: ac.OnlyToMain({type: at.OPEN_WEBEXT_SETTINGS, data: section.id}),\n  }),\n  AddTopSite: section => ({\n    id: \"section_menu_action_add_topsite\",\n    icon: \"add\",\n    action: {type: at.TOP_SITES_EDIT, data: {index: -1}},\n    userEvent: \"MENU_ADD_TOPSITE\",\n  }),\n  AddSearchShortcut: section => ({\n    id: \"section_menu_action_add_search_engine\",\n    icon: \"search\",\n    action: {type: at.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL},\n    userEvent: \"MENU_ADD_SEARCH\",\n  }),\n  PrivacyNotice: section => ({\n    id: \"section_menu_action_privacy_notice\",\n    icon: \"info\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: section.privacyNoticeURL},\n    }),\n    userEvent: \"MENU_PRIVACY_NOTICE\",\n  }),\n  CheckCollapsed: section => (section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section)),\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\nimport React from \"react\";\n\n// Currently record only a fixed set of sections. This will prevent data\n// from custom sections from showing up or from topstories.\nconst RECORDED_SECTIONS = [\"highlights\", \"topsites\"];\n\nexport class ComponentPerfTimer extends React.Component {\n  constructor(props) {\n    super(props);\n    // Just for test dependency injection:\n    this.perfSvc = this.props.perfSvc || perfSvc;\n\n    this._sendBadStateEvent = this._sendBadStateEvent.bind(this);\n    this._sendPaintedEvent = this._sendPaintedEvent.bind(this);\n    this._reportMissingData = false;\n    this._timestampHandled = false;\n    this._recordedFirstRender = false;\n  }\n\n  componentDidMount() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  componentDidUpdate() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  /**\n   * Call the given callback after the upcoming frame paints.\n   *\n   * @note Both setTimeout and requestAnimationFrame are throttled when the page\n   * is hidden, so this callback may get called up to a second or so after the\n   * requestAnimationFrame \"paint\" for hidden tabs.\n   *\n   * Newtabs hidden while loading will presumably be fairly rare (other than\n   * preloaded tabs, which we will be filtering out on the server side), so such\n   * cases should get lost in the noise.\n   *\n   * If we decide that it's important to find out when something that's hidden\n   * has \"painted\", however, another option is to post a message to this window.\n   * That should happen even faster than setTimeout, and, at least as of this\n   * writing, it's not throttled in hidden windows in Firefox.\n   *\n   * @param {Function} callback\n   *\n   * @returns void\n   */\n  _afterFramePaint(callback) {\n    requestAnimationFrame(() => setTimeout(callback, 0));\n  }\n\n  _maybeSendBadStateEvent() {\n    // Follow up bugs:\n    // https://github.com/mozilla/activity-stream/issues/3691\n    if (!this.props.initialized) {\n      // Remember to report back when data is available.\n      this._reportMissingData = true;\n    } else if (this._reportMissingData) {\n      this._reportMissingData = false;\n      // Report how long it took for component to become initialized.\n      this._sendBadStateEvent();\n    }\n  }\n\n  _maybeSendPaintedEvent() {\n    // If we've already handled a timestamp, don't do it again.\n    if (this._timestampHandled || !this.props.initialized) {\n      return;\n    }\n\n    // And if we haven't, we're doing so now, so remember that. Even if\n    // something goes wrong in the callback, we can't try again, as we'd be\n    // sending back the wrong data, and we have to do it here, so that other\n    // calls to this method while waiting for the next frame won't also try to\n    // handle it.\n    this._timestampHandled = true;\n    this._afterFramePaint(this._sendPaintedEvent);\n  }\n\n  /**\n   * Triggered by call to render. Only first call goes through due to\n   * `_recordedFirstRender`.\n   */\n  _ensureFirstRenderTsRecorded() {\n    // Used as t0 for recording how long component took to initialize.\n    if (!this._recordedFirstRender) {\n      this._recordedFirstRender = true;\n      // topsites_first_render_ts, highlights_first_render_ts.\n      const key = `${this.props.id}_first_render_ts`;\n      this.perfSvc.mark(key);\n    }\n  }\n\n  /**\n   * Creates `TELEMETRY_UNDESIRED_EVENT` with timestamp in ms\n   * of how much longer the data took to be ready for display than it would\n   * have been the ideal case.\n   * https://github.com/mozilla/ping-centre/issues/98\n   */\n  _sendBadStateEvent() {\n    // highlights_data_ready_ts, topsites_data_ready_ts.\n    const dataReadyKey = `${this.props.id}_data_ready_ts`;\n    this.perfSvc.mark(dataReadyKey);\n\n    try {\n      const firstRenderKey = `${this.props.id}_first_render_ts`;\n      // value has to be Int32.\n      const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) -\n                             this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        // highlights_data_late_by_ms, topsites_data_late_by_ms.\n        data: {[`${this.props.id}_data_late_by_ms`]: value},\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.\n    }\n  }\n\n  _sendPaintedEvent() {\n    // Record first_painted event but only send if topsites.\n    if (this.props.id !== \"topsites\") {\n      return;\n    }\n\n    // topsites_first_painted_ts.\n    const key = `${this.props.id}_first_painted_ts`;\n    this.perfSvc.mark(key);\n\n    try {\n      const data = {};\n      data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);\n\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data,\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up, and should continue\n      // to set this._timestampHandled to avoid going through this again.\n    }\n  }\n\n  render() {\n    if (RECORDED_SECTIONS.includes(this.props.id)) {\n      this._ensureFirstRenderTsRecorded();\n      this._maybeSendBadStateEvent();\n    }\n    return this.props.children;\n  }\n}\n","/* globals Services */\n\"use strict\";\n\n/* istanbul ignore if */\nif (typeof ChromeUtils !== \"undefined\") {\n  ChromeUtils.import(\"resource://gre/modules/Services.jsm\");\n}\n\nlet usablePerfObj;\n\n/* istanbul ignore if */\n/* istanbul ignore else */\nif (typeof Services !== \"undefined\") {\n  // Borrow the high-resolution timer from the hidden window....\n  usablePerfObj = Services.appShell.hiddenDOMWindow.performance;\n} else if (typeof performance !== \"undefined\") {\n  // we must be running in content space\n  // eslint-disable-next-line no-undef\n  usablePerfObj = performance;\n} else {\n  // This is a dummy object so this file doesn't crash in the node prerendering\n  // task.\n  usablePerfObj = {\n    now() {},\n    mark() {},\n  };\n}\n\nfunction _PerfService(options) {\n  // For testing, so that we can use a fake Window.performance object with\n  // known state.\n  if (options && options.performanceObj) {\n    this._perf = options.performanceObj;\n  } else {\n    this._perf = usablePerfObj;\n  }\n}\n\n_PerfService.prototype = {\n  /**\n   * Calls the underlying mark() method on the appropriate Window.performance\n   * object to add a mark with the given name to the appropriate performance\n   * timeline.\n   *\n   * @param  {String} name  the name to give the current mark\n   * @return {void}\n   */\n  mark: function mark(str) {\n    this._perf.mark(str);\n  },\n\n  /**\n   * Calls the underlying getEntriesByName on the appropriate Window.performance\n   * object.\n   *\n   * @param  {String} name\n   * @param  {String} type eg \"mark\"\n   * @return {Array}       Performance* objects\n   */\n  getEntriesByName: function getEntriesByName(name, type) {\n    return this._perf.getEntriesByName(name, type);\n  },\n\n  /**\n   * The timeOrigin property from the appropriate performance object.\n   * Used to ensure that timestamps from the add-on code and the content code\n   * are comparable.\n   *\n   * @note If this is called from a context without a window\n   * (eg a JSM in chrome), it will return the timeOrigin of the XUL hidden\n   * window, which appears to be the first created window (and thus\n   * timeOrigin) in the browser.  Note also, however, there is also a private\n   * hidden window, presumably for private browsing, which appears to be\n   * created dynamically later.  Exactly how/when that shows up needs to be\n   * investigated.\n   *\n   * @return {Number} A double of milliseconds with a precision of 0.5us.\n   */\n  get timeOrigin() {\n    return this._perf.timeOrigin;\n  },\n\n  /**\n   * Returns the \"absolute\" version of performance.now(), i.e. one that\n   * should ([bug 1401406](https://bugzilla.mozilla.org/show_bug.cgi?id=1401406)\n   * be comparable across both chrome and content.\n   *\n   * @return {Number}\n   */\n  absNow: function absNow() {\n    return this.timeOrigin + this._perf.now();\n  },\n\n  /**\n   * This returns the absolute startTime from the most recent performance.mark()\n   * with the given name.\n   *\n   * @param  {String} name  the name to lookup the start time for\n   *\n   * @return {Number}       the returned start time, as a DOMHighResTimeStamp\n   *\n   * @throws {Error}        \"No Marks with the name ...\" if none are available\n   *\n   * @note Always surround calls to this by try/catch.  Otherwise your code\n   * may fail when the `privacy.resistFingerprinting` pref is true.  When\n   * this pref is set, all attempts to get marks will likely fail, which will\n   * cause this method to throw.\n   *\n   * See [bug 1369303](https://bugzilla.mozilla.org/show_bug.cgi?id=1369303)\n   * for more info.\n   */\n  getMostRecentAbsMarkStartByName(name) {\n    let entries = this.getEntriesByName(name, \"mark\");\n\n    if (!entries.length) {\n      throw new Error(`No marks with the name ${name}`);\n    }\n\n    let mostRecentEntry = entries[entries.length - 1];\n    return this._perf.timeOrigin + mostRecentEntry.startTime;\n  },\n};\n\nthis.perfService = new _PerfService();\nconst EXPORTED_SYMBOLS = [\"_PerfService\", \"perfService\"];\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class MoreRecommendations extends React.PureComponent {\n  render() {\n    const {read_more_endpoint} = this.props;\n    if (read_more_endpoint) {\n      return (\n        <a className=\"more-recommendations\" href={read_more_endpoint}>\n          <FormattedMessage id=\"pocket_more_reccommendations\" />\n        </a>\n      );\n    }\n    return null;\n  }\n}\n","import {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class _PocketLoggedInCta extends React.PureComponent {\n  render() {\n    const {pocketCta} = this.props.Pocket;\n    return (\n      <span className=\"pocket-logged-in-cta\">\n        <a className=\"pocket-cta-button\" href={pocketCta.ctaUrl ? pocketCta.ctaUrl : \"https://getpocket.com/\"}>\n         {pocketCta.ctaButton ? pocketCta.ctaButton : <FormattedMessage id=\"pocket_cta_button\" />}\n        </a>\n\n        <a href={pocketCta.ctaUrl ? pocketCta.ctaUrl : \"https://getpocket.com/\"}>\n          <span className=\"cta-text\">\n           {pocketCta.ctaText ? pocketCta.ctaText : <FormattedMessage id=\"pocket_cta_text\" />}\n          </span>\n        </a>\n      </span>\n    );\n  }\n}\n\nexport const PocketLoggedInCta = connect(state => ({Pocket: state.Pocket}))(_PocketLoggedInCta);\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class Topic extends React.PureComponent {\n  render() {\n    const {url, name} = this.props;\n    return (<li><a key={name} href={url}>{name}</a></li>);\n  }\n}\n\nexport class Topics extends React.PureComponent {\n  render() {\n    const {topics} = this.props;\n    return (\n      <span className=\"topics\">\n        <span><FormattedMessage id=\"pocket_read_more\" /></span>\n        <ul>{topics && topics.map(t => <Topic key={t.name} url={t.url} name={t.name} />)}</ul>\n      </span>\n    );\n  }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {MIN_CORNER_FAVICON_SIZE, MIN_RICH_FAVICON_SIZE, TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SearchShortcutsForm} from \"./SearchShortcutsForm\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\nimport {TopSiteForm} from \"./TopSiteForm\";\nimport {TopSiteList} from \"./TopSite\";\n\nfunction topSiteIconType(link) {\n  if (link.customScreenshotURL) {\n    return \"custom_screenshot\";\n  }\n  if (link.tippyTopIcon || link.faviconRef === \"tippytop\") {\n    return \"tippytop\";\n  }\n  if (link.faviconSize >= MIN_RICH_FAVICON_SIZE) {\n    return \"rich_icon\";\n  }\n  if (link.screenshot && link.faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n    return \"screenshot_with_icon\";\n  }\n  if (link.screenshot) {\n    return \"screenshot\";\n  }\n  return \"no_image\";\n}\n\n/**\n * Iterates through TopSites and counts types of images.\n * @param acc Accumulator for reducer.\n * @param topsite Entry in TopSites.\n */\nfunction countTopSitesIconsTypes(topSites) {\n  const countTopSitesTypes = (acc, link) => {\n    acc[topSiteIconType(link)]++;\n    return acc;\n  };\n\n  return topSites.reduce(countTopSitesTypes, {\n    \"custom_screenshot\": 0,\n    \"screenshot_with_icon\": 0,\n    \"screenshot\": 0,\n    \"tippytop\": 0,\n    \"rich_icon\": 0,\n    \"no_image\": 0,\n  });\n}\n\nexport class _TopSites extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onEditFormClose = this.onEditFormClose.bind(this);\n    this.onSearchShortcutsFormClose = this.onSearchShortcutsFormClose.bind(this);\n  }\n\n  /**\n   * Dispatch session statistics about the quality of TopSites icons and pinned count.\n   */\n  _dispatchTopSitesStats() {\n    const topSites = this._getVisibleTopSites();\n    const topSitesIconsStats = countTopSitesIconsTypes(topSites);\n    const topSitesPinned = topSites.filter(site => !!site.isPinned).length;\n    const searchShortcuts = topSites.filter(site => !!site.searchTopSite).length;\n    // Dispatch telemetry event with the count of TopSites images types.\n    this.props.dispatch(ac.AlsoToMain({\n      type: at.SAVE_SESSION_PERF_DATA,\n      data: {\n        topsites_icon_stats: topSitesIconsStats,\n        topsites_pinned: topSitesPinned,\n        topsites_search_shortcuts: searchShortcuts,\n      },\n    }));\n  }\n\n  /**\n   * Return the TopSites that are visible based on prefs and window width.\n   */\n  _getVisibleTopSites() {\n    // We hide 2 sites per row when not in the wide layout.\n    let sitesPerRow = TOP_SITES_MAX_SITES_PER_ROW;\n    // $break-point-widest = 1072px (from _variables.scss)\n    if (!global.matchMedia(`(min-width: 1072px)`).matches) {\n      sitesPerRow -= 2;\n    }\n    return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);\n  }\n\n  componentDidUpdate() {\n    this._dispatchTopSitesStats();\n  }\n\n  componentDidMount() {\n    this._dispatchTopSitesStats();\n  }\n\n  onEditFormClose() {\n    this.props.dispatch(ac.UserEvent({\n      source: TOP_SITES_SOURCE,\n      event: \"TOP_SITES_EDIT_CLOSE\",\n    }));\n    this.props.dispatch({type: at.TOP_SITES_CANCEL_EDIT});\n  }\n\n  onSearchShortcutsFormClose() {\n    this.props.dispatch(ac.UserEvent({\n      source: TOP_SITES_SOURCE,\n      event: \"SEARCH_EDIT_CLOSE\",\n    }));\n    this.props.dispatch({type: at.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL});\n  }\n\n  render() {\n    const {props} = this;\n    const {editForm, showSearchShortcutsForm} = props.TopSites;\n    const extraMenuOptions = [\"AddTopSite\"];\n    if (props.Prefs.values[\"improvesearch.topSiteSearchShortcuts\"]) {\n      extraMenuOptions.push(\"AddSearchShortcut\");\n    }\n\n    return (<ComponentPerfTimer id=\"topsites\" initialized={props.TopSites.initialized} dispatch={props.dispatch}>\n      <CollapsibleSection\n        className=\"top-sites\"\n        icon=\"topsites\"\n        id=\"topsites\"\n        title={{id: \"header_top_sites\"}}\n        extraMenuOptions={extraMenuOptions}\n        showPrefName=\"feeds.topsites\"\n        eventSource={TOP_SITES_SOURCE}\n        collapsed={props.TopSites.pref ? props.TopSites.pref.collapsed : undefined}\n        isFirst={props.isFirst}\n        isLast={props.isLast}\n        dispatch={props.dispatch}>\n        <TopSiteList TopSites={props.TopSites} TopSitesRows={props.TopSitesRows} dispatch={props.dispatch} intl={props.intl} topSiteIconType={topSiteIconType} />\n        <div className=\"edit-topsites-wrapper\">\n          {editForm &&\n            <div className=\"edit-topsites\">\n              <div className=\"modal-overlay\" onClick={this.onEditFormClose} />\n              <div className=\"modal\">\n                <TopSiteForm\n                  site={props.TopSites.rows[editForm.index]}\n                  onClose={this.onEditFormClose}\n                  dispatch={this.props.dispatch}\n                  intl={this.props.intl}\n                  {...editForm} />\n              </div>\n            </div>\n          }\n          {showSearchShortcutsForm &&\n            <div className=\"edit-search-shortcuts\">\n              <div className=\"modal-overlay\" onClick={this.onSearchShortcutsFormClose} />\n              <div className=\"modal\">\n                <SearchShortcutsForm\n                  TopSites={props.TopSites}\n                  onClose={this.onSearchShortcutsFormClose}\n                  dispatch={this.props.dispatch} />\n              </div>\n            </div>\n          }\n        </div>\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nexport const TopSites = connect(state => ({\n  TopSites: state.TopSites,\n  Prefs: state.Prefs,\n  TopSitesRows: state.Prefs.values.topSitesRows,\n}))(injectIntl(_TopSites));\n","export const TOP_SITES_SOURCE = \"TOP_SITES\";\nexport const TOP_SITES_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\",\n  \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\", \"DeleteUrl\"];\n// the special top site for search shortcut experiment can only have the option to unpin (which removes) the topsite\nexport const TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"Separator\", \"BlockUrl\"];\n// minimum size necessary to show a rich icon instead of a screenshot\nexport const MIN_RICH_FAVICON_SIZE = 96;\n// minimum size necessary to show any icon in the top left corner with a screenshot\nexport const MIN_CORNER_FAVICON_SIZE = 16;\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_SOURCE} from \"./TopSitesConstants\";\n\nclass SelectableSearchShortcut extends React.PureComponent {\n  render() {\n    const {shortcut, selected} = this.props;\n    const imageStyle = {backgroundImage: `url(\"${shortcut.tippyTopIcon}\")`};\n    return (\n      <div className=\"top-site-outer search-shortcut\">\n        <input type=\"checkbox\" id={shortcut.keyword} name={shortcut.keyword} checked={selected} onChange={this.props.onChange} />\n        <label htmlFor={shortcut.keyword}>\n          <div className=\"top-site-inner\">\n            <span>\n              <div className=\"tile\">\n                <div className=\"top-site-icon rich-icon\" style={imageStyle} data-fallback=\"@\" />\n                <div className=\"top-site-icon search-topsite\" />\n              </div>\n              <div className=\"title\">\n                <span dir=\"auto\">{shortcut.keyword}</span>\n              </div>\n            </span>\n          </div>\n        </label>\n      </div>\n    );\n  }\n}\n\nexport class SearchShortcutsForm extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.handleChange = this.handleChange.bind(this);\n    this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n    this.onSaveButtonClick = this.onSaveButtonClick.bind(this);\n\n    // clone the shortcuts and add them to the state so we can add isSelected property\n    const shortcuts = [];\n    const {rows, searchShortcuts} = props.TopSites;\n    searchShortcuts.forEach(shortcut => {\n      shortcuts.push({\n        ...shortcut,\n        isSelected: !!rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword),\n      });\n    });\n    this.state = {shortcuts};\n  }\n\n  handleChange(event) {\n    const {target} = event;\n    const {name, checked} = target;\n    this.setState(prevState => {\n      const shortcuts = prevState.shortcuts.slice();\n      let shortcut = shortcuts.find(({keyword}) => keyword === name);\n      shortcut.isSelected = checked;\n      return {shortcuts};\n    });\n  }\n\n  onCancelButtonClick(ev) {\n    ev.preventDefault();\n    this.props.onClose();\n  }\n\n  onSaveButtonClick(ev) {\n    ev.preventDefault();\n\n    // Check if there were any changes and act accordingly\n    const {rows} = this.props.TopSites;\n    const pinQueue = [];\n    const unpinQueue = [];\n    this.state.shortcuts.forEach(shortcut => {\n      const alreadyPinned = rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword);\n      if (shortcut.isSelected && !alreadyPinned) {\n        pinQueue.push(this._searchTopSite(shortcut));\n      } else if (!shortcut.isSelected && alreadyPinned) {\n        unpinQueue.push({url: alreadyPinned.url, searchVendor: shortcut.shortURL});\n      }\n    });\n\n    // Tell the feed to do the work.\n    this.props.dispatch(ac.OnlyToMain({\n      type: at.UPDATE_PINNED_SEARCH_SHORTCUTS,\n      data: {\n        addedShortcuts: pinQueue,\n        deletedShortcuts: unpinQueue,\n      },\n    }));\n\n    // Send the Telemetry pings.\n    pinQueue.forEach(shortcut => {\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"SEARCH_EDIT_ADD\",\n        value: {search_vendor: shortcut.searchVendor},\n      }));\n    });\n    unpinQueue.forEach(shortcut => {\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"SEARCH_EDIT_DELETE\",\n        value: {search_vendor: shortcut.searchVendor},\n      }));\n    });\n\n    this.props.onClose();\n  }\n\n  _searchTopSite(shortcut) {\n    return {\n      url: shortcut.url,\n      searchTopSite: true,\n      label: shortcut.keyword,\n      searchVendor: shortcut.shortURL,\n    };\n  }\n\n  render() {\n    return (\n      <form className=\"topsite-form\">\n        <div className=\"search-shortcuts-container\">\n          <h3 className=\"section-title\">\n            <FormattedMessage id=\"section_menu_action_add_search_engine\" />\n          </h3>\n          <div>\n            {this.state.shortcuts.map(shortcut => <SelectableSearchShortcut key={shortcut.keyword} shortcut={shortcut} selected={shortcut.isSelected} onChange={this.handleChange} />)}\n          </div>\n        </div>\n        <section className=\"actions\">\n          <button className=\"cancel\" type=\"button\" onClick={this.onCancelButtonClick}>\n            <FormattedMessage id=\"topsites_form_cancel_button\" />\n          </button>\n          <button className=\"done\" type=\"submit\" onClick={this.onSaveButtonClick}>\n            <FormattedMessage id=\"topsites_form_save_button\" />\n          </button>\n        </section>\n      </form>\n    );\n  }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {\n  MIN_CORNER_FAVICON_SIZE,\n  MIN_RICH_FAVICON_SIZE,\n  TOP_SITES_CONTEXT_MENU_OPTIONS,\n  TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS,\n  TOP_SITES_SOURCE,\n} from \"./TopSitesConstants\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\n\nexport class TopSiteLink extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {screenshotImage: null};\n    this.onDragEvent = this.onDragEvent.bind(this);\n    this.onKeyPress = this.onKeyPress.bind(this);\n  }\n\n  /*\n   * Helper to determine whether the drop zone should allow a drop. We only allow\n   * dropping top sites for now.\n   */\n  _allowDrop(e) {\n    return e.dataTransfer.types.includes(\"text/topsite-index\");\n  }\n\n  onDragEvent(event) {\n    switch (event.type) {\n      case \"click\":\n        // Stop any link clicks if we started any dragging\n        if (this.dragged) {\n          event.preventDefault();\n        }\n        break;\n      case \"dragstart\":\n        this.dragged = true;\n        event.dataTransfer.effectAllowed = \"move\";\n        event.dataTransfer.setData(\"text/topsite-index\", this.props.index);\n        event.target.blur();\n        this.props.onDragEvent(event, this.props.index, this.props.link, this.props.title);\n        break;\n      case \"dragend\":\n        this.props.onDragEvent(event);\n        break;\n      case \"dragenter\":\n      case \"dragover\":\n      case \"drop\":\n        if (this._allowDrop(event)) {\n          event.preventDefault();\n          this.props.onDragEvent(event, this.props.index);\n        }\n        break;\n      case \"mousedown\":\n        // Block the scroll wheel from appearing for middle clicks on search top sites\n        if (event.button === 1 && this.props.link.searchTopSite) {\n          event.preventDefault();\n        }\n        // Reset at the first mouse event of a potential drag\n        this.dragged = false;\n        break;\n    }\n  }\n\n  /**\n   * Helper to obtain the next state based on nextProps and prevState.\n   *\n   * NOTE: Rename this method to getDerivedStateFromProps when we update React\n   *       to >= 16.3. We will need to update tests as well. We cannot rename this\n   *       method to getDerivedStateFromProps now because there is a mismatch in\n   *       the React version that we are using for both testing and production.\n   *       (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n   *\n   * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n   */\n  static getNextStateFromProps(nextProps, prevState) {\n    const {screenshot} = nextProps.link;\n    const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.screenshotImage, screenshot);\n    if (imageInState) {\n      return null;\n    }\n\n    // Since image was updated, attempt to revoke old image blob URL, if it exists.\n    ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.screenshotImage);\n\n    return {screenshotImage: ScreenshotUtils.createLocalImageObject(screenshot)};\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillMount() {\n    const nextState = TopSiteLink.getNextStateFromProps(this.props, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillReceiveProps(nextProps) {\n    const nextState = TopSiteLink.getNextStateFromProps(nextProps, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  componentWillUnmount() {\n    ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.screenshotImage);\n  }\n\n  onKeyPress(event) {\n    // If we have tabbed to a search shortcut top site, and we click 'enter',\n    // we should execute the onClick function. This needs to be added because\n    // search top sites are anchor tags without an href. See bug 1483135\n    if (this.props.link.searchTopSite && event.key === \"Enter\") {\n      this.props.onClick(event);\n    }\n  }\n\n  render() {\n    const {children, className, defaultStyle, isDraggable, link, onClick, title} = this.props;\n    const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : \"\"}${link.isDragged ? \" dragged\" : \"\"}${link.searchTopSite ? \" search-shortcut\" : \"\"}`;\n    const {tippyTopIcon, faviconSize} = link;\n    const [letterFallback] = title;\n    let imageClassName;\n    let imageStyle;\n    let showSmallFavicon = false;\n    let smallFaviconStyle;\n    let smallFaviconFallback;\n    let hasScreenshotImage = this.state.screenshotImage && this.state.screenshotImage.url;\n    if (defaultStyle) { // force no styles (letter fallback) even if the link has imagery\n      smallFaviconFallback = false;\n    } else if (link.searchTopSite) {\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: `url(${tippyTopIcon})`,\n      };\n      smallFaviconStyle = {backgroundImage:  `url(${tippyTopIcon})`};\n    } else if (link.customScreenshotURL) {\n      // assume high quality custom screenshot and use rich icon styles and class names\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\",\n      };\n    } else if (tippyTopIcon || faviconSize >= MIN_RICH_FAVICON_SIZE) {\n      // styles and class names for top sites with rich icons\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: `url(${tippyTopIcon || link.favicon})`,\n      };\n    } else {\n      // styles and class names for top sites with screenshot + small icon in top left corner\n      imageClassName = `screenshot${hasScreenshotImage ? \" active\" : \"\"}`;\n      imageStyle = {backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\"};\n\n      // only show a favicon in top left if it's greater than 16x16\n      if (faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n        showSmallFavicon = true;\n        smallFaviconStyle = {backgroundImage:  `url(${link.favicon})`};\n      } else if (hasScreenshotImage) {\n        // Don't show a small favicon if there is no screenshot, because that\n        // would result in two fallback icons\n        showSmallFavicon = true;\n        smallFaviconFallback = true;\n      }\n    }\n    let draggableProps = {};\n    if (isDraggable) {\n      draggableProps = {\n        onClick: this.onDragEvent,\n        onDragEnd: this.onDragEvent,\n        onDragStart: this.onDragEvent,\n        onMouseDown: this.onDragEvent,\n      };\n    }\n    return (<li className={topSiteOuterClassName} onDrop={this.onDragEvent} onDragOver={this.onDragEvent} onDragEnter={this.onDragEvent} onDragLeave={this.onDragEvent} {...draggableProps}>\n      <div className=\"top-site-inner\">\n         <a href={!link.searchTopSite && link.url} tabIndex=\"0\" onKeyPress={this.onKeyPress} onClick={onClick} draggable={true}>\n            <div className=\"tile\" aria-hidden={true} data-fallback={letterFallback}>\n              <div className={imageClassName} style={imageStyle} />\n              {link.searchTopSite && <div className=\"top-site-icon search-topsite\" />}\n              {showSmallFavicon && <div\n                className=\"top-site-icon default-icon\"\n                data-fallback={smallFaviconFallback && letterFallback}\n                style={smallFaviconStyle} />}\n           </div>\n           <div className={`title ${link.isPinned ? \"pinned\" : \"\"}`}>\n             {link.isPinned && <div className=\"icon icon-pin-small\" />}\n              <span dir=\"auto\">{title}</span>\n           </div>\n         </a>\n         {children}\n      </div>\n    </li>);\n  }\n}\nTopSiteLink.defaultProps = {\n  title: \"\",\n  link: {},\n  isDraggable: true,\n};\n\nexport class TopSite extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {showContextMenu: false};\n    this.onLinkClick = this.onLinkClick.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n  }\n\n  /**\n   * Report to telemetry additional information about the item.\n   */\n  _getTelemetryInfo() {\n    const value = {icon_type: this.props.link.iconType};\n    // Filter out \"not_pinned\" type for being the default\n    if (this.props.link.isPinned) {\n      value.card_type = \"pinned\";\n    }\n    if (this.props.link.searchTopSite) {\n      // Set the card_type as \"search\" regardless of its pinning status\n      value.card_type = \"search\";\n      value.search_vendor = this.props.link.hostname;\n    }\n    return {value};\n  }\n\n  userEvent(event) {\n    this.props.dispatch(ac.UserEvent(Object.assign({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: this.props.index,\n    }, this._getTelemetryInfo())));\n  }\n\n  onLinkClick(event) {\n    this.userEvent(\"CLICK\");\n\n    // Specially handle a top site link click for \"typed\" frecency bonus as\n    // specified as a property on the link.\n    event.preventDefault();\n    const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n    if (!this.props.link.searchTopSite) {\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.OPEN_LINK,\n        data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}}),\n      }));\n    } else {\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.FILL_SEARCH_TERM,\n        data: {label: this.props.link.label},\n      }));\n    }\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.props.onActivate(this.props.index);\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const {props} = this;\n    const {link} = props;\n    const isContextMenuOpen = this.state.showContextMenu && props.activeIndex === props.index;\n    const title = link.label || link.hostname;\n    return (<TopSiteLink {...props} onClick={this.onLinkClick} onDragEvent={this.props.onDragEvent} className={`${props.className || \"\"}${isContextMenuOpen ? \" active\" : \"\"}`} title={title}>\n        <div>\n          <button className=\"context-menu-button icon\" title={this.props.intl.formatMessage({id: \"context_menu_title\"})} onClick={this.onMenuButtonClick}>\n            <span className=\"sr-only\">\n              <FormattedMessage id=\"context_menu_button_sr\" values={{title}} />\n            </span>\n          </button>\n          {isContextMenuOpen &&\n            <LinkMenu\n              dispatch={props.dispatch}\n              index={props.index}\n              onUpdate={this.onMenuUpdate}\n              options={link.searchTopSite ? TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS : TOP_SITES_CONTEXT_MENU_OPTIONS}\n              site={link}\n              siteInfo={this._getTelemetryInfo()}\n              source={TOP_SITES_SOURCE} />\n          }\n        </div>\n    </TopSiteLink>);\n  }\n}\nTopSite.defaultProps = {\n  link: {},\n  onActivate() {},\n};\n\nexport class TopSitePlaceholder extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onEditButtonClick = this.onEditButtonClick.bind(this);\n  }\n\n  onEditButtonClick() {\n    this.props.dispatch(\n      {type: at.TOP_SITES_EDIT, data: {index: this.props.index}});\n  }\n\n  render() {\n    return (<TopSiteLink {...this.props} className={`placeholder ${this.props.className || \"\"}`} isDraggable={false}>\n      <button className=\"context-menu-button edit-button icon\"\n       title={this.props.intl.formatMessage({id: \"edit_topsites_edit_button\"})}\n       onClick={this.onEditButtonClick} />\n    </TopSiteLink>);\n  }\n}\n\nexport class _TopSiteList extends React.PureComponent {\n  static get DEFAULT_STATE() {\n    return {\n      activeIndex: null,\n      draggedIndex: null,\n      draggedSite: null,\n      draggedTitle: null,\n      topSitesPreview: null,\n    };\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = _TopSiteList.DEFAULT_STATE;\n    this.onDragEvent = this.onDragEvent.bind(this);\n    this.onActivate = this.onActivate.bind(this);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (this.state.draggedSite) {\n      const prevTopSites = this.props.TopSites && this.props.TopSites.rows;\n      const newTopSites = nextProps.TopSites && nextProps.TopSites.rows;\n      if (prevTopSites && prevTopSites[this.state.draggedIndex] &&\n        prevTopSites[this.state.draggedIndex].url === this.state.draggedSite.url &&\n        (!newTopSites[this.state.draggedIndex] || newTopSites[this.state.draggedIndex].url !== this.state.draggedSite.url)) {\n        // We got the new order from the redux store via props. We can clear state now.\n        this.setState(_TopSiteList.DEFAULT_STATE);\n      }\n    }\n  }\n\n  userEvent(event, index) {\n    this.props.dispatch(ac.UserEvent({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: index,\n    }));\n  }\n\n  onDragEvent(event, index, link, title) {\n    switch (event.type) {\n      case \"dragstart\":\n        this.dropped = false;\n        this.setState({\n          draggedIndex: index,\n          draggedSite: link,\n          draggedTitle: title,\n          activeIndex: null,\n        });\n        this.userEvent(\"DRAG\", index);\n        break;\n      case \"dragend\":\n        if (!this.dropped) {\n          // If there was no drop event, reset the state to the default.\n          this.setState(_TopSiteList.DEFAULT_STATE);\n        }\n        break;\n      case \"dragenter\":\n        if (index === this.state.draggedIndex) {\n          this.setState({topSitesPreview: null});\n        } else {\n          this.setState({topSitesPreview: this._makeTopSitesPreview(index)});\n        }\n        break;\n      case \"drop\":\n        if (index !== this.state.draggedIndex) {\n          this.dropped = true;\n          this.props.dispatch(ac.AlsoToMain({\n            type: at.TOP_SITES_INSERT,\n            data: {\n              site: {\n                url: this.state.draggedSite.url,\n                label: this.state.draggedTitle,\n                customScreenshotURL: this.state.draggedSite.customScreenshotURL,\n                // Only if the search topsites experiment is enabled\n                ...(this.state.draggedSite.searchTopSite && {searchTopSite: true}),\n              },\n              index,\n              draggedFromIndex: this.state.draggedIndex,\n            },\n          }));\n          this.userEvent(\"DROP\", index);\n        }\n        break;\n    }\n  }\n\n  _getTopSites() {\n    // Make a copy of the sites to truncate or extend to desired length\n    let topSites = this.props.TopSites.rows.slice();\n    topSites.length = this.props.TopSitesRows * TOP_SITES_MAX_SITES_PER_ROW;\n    return topSites;\n  }\n\n  /**\n   * Make a preview of the topsites that will be the result of dropping the currently\n   * dragged site at the specified index.\n   */\n  _makeTopSitesPreview(index) {\n    const topSites = this._getTopSites();\n    topSites[this.state.draggedIndex] = null;\n    const pinnedOnly = topSites.map(site => ((site && site.isPinned) ? site : null));\n    const unpinned = topSites.filter(site => site && !site.isPinned);\n    const siteToInsert = Object.assign({}, this.state.draggedSite, {isPinned: true, isDragged: true});\n    if (!pinnedOnly[index]) {\n      pinnedOnly[index] = siteToInsert;\n    } else {\n      // Find the hole to shift the pinned site(s) towards. We shift towards the\n      // hole left by the site being dragged.\n      let holeIndex = index;\n      const indexStep = index > this.state.draggedIndex ? -1 : 1;\n      while (pinnedOnly[holeIndex]) {\n        holeIndex += indexStep;\n      }\n\n      // Shift towards the hole.\n      const shiftingStep = index > this.state.draggedIndex ? 1 : -1;\n      while (holeIndex !== index) {\n        const nextIndex = holeIndex + shiftingStep;\n        pinnedOnly[holeIndex] = pinnedOnly[nextIndex];\n        holeIndex = nextIndex;\n      }\n      pinnedOnly[index] = siteToInsert;\n    }\n\n    // Fill in the remaining holes with unpinned sites.\n    const preview = pinnedOnly;\n    for (let i = 0; i < preview.length; i++) {\n      if (!preview[i]) {\n        preview[i] = unpinned.shift() || null;\n      }\n    }\n\n    return preview;\n  }\n\n  onActivate(index) {\n    this.setState({activeIndex: index});\n  }\n\n  render() {\n    const {props} = this;\n    const topSites = this.state.topSitesPreview || this._getTopSites();\n    const topSitesUI = [];\n    const commonProps = {\n      onDragEvent: this.onDragEvent,\n      dispatch: props.dispatch,\n      intl: props.intl,\n    };\n    // We assign a key to each placeholder slot. We need it to be independent\n    // of the slot index (i below) so that the keys used stay the same during\n    // drag and drop reordering and the underlying DOM nodes are reused.\n    // This mostly (only?) affects linux so be sure to test on linux before changing.\n    let holeIndex = 0;\n\n    // On narrow viewports, we only show 6 sites per row. We'll mark the rest as\n    // .hide-for-narrow to hide in CSS via @media query.\n    const maxNarrowVisibleIndex = props.TopSitesRows * 6;\n\n    for (let i = 0, l = topSites.length; i < l; i++) {\n      const link = topSites[i] && Object.assign({}, topSites[i], {iconType: this.props.topSiteIconType(topSites[i])});\n      const slotProps = {\n        key: link ? link.url : holeIndex++,\n        index: i,\n      };\n      if (i >= maxNarrowVisibleIndex) {\n        slotProps.className = \"hide-for-narrow\";\n      }\n      topSitesUI.push(!link ? (\n        <TopSitePlaceholder\n          {...slotProps}\n          {...commonProps} />\n      ) : (\n        <TopSite\n          link={link}\n          activeIndex={this.state.activeIndex}\n          onActivate={this.onActivate}\n          {...slotProps}\n          {...commonProps} />\n      ));\n    }\n    return (<ul className={`top-sites-list${this.state.draggedSite ? \" dnd-active\" : \"\"}`}>\n      {topSitesUI}\n    </ul>);\n  }\n}\n\nexport const TopSiteList = injectIntl(_TopSiteList);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\n\nexport class _StartupOverlay extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onInputChange = this.onInputChange.bind(this);\n    this.onSubmit = this.onSubmit.bind(this);\n    this.clickSkip = this.clickSkip.bind(this);\n    this.initScene = this.initScene.bind(this);\n    this.removeOverlay = this.removeOverlay.bind(this);\n    this.onInputInvalid = this.onInputInvalid.bind(this);\n\n    this.state = {\n      emailInput: \"\",\n      overlayRemoved: false,\n      flowId: \"\",\n      flowBeginTime: 0,\n    };\n    this.didFetch = false;\n  }\n\n  async componentWillUpdate() {\n    if (this.props.fxa_endpoint && !this.didFetch) {\n      try {\n        this.didFetch = true;\n        const fxaParams = \"entrypoint=activity-stream-firstrun&utm_source=activity-stream&utm_campaign=firstrun&form_type=email\";\n        const response = await fetch(`${this.props.fxa_endpoint}/metrics-flow?${fxaParams}`);\n        if (response.status === 200) {\n          const {flowId, flowBeginTime} = await response.json();\n          this.setState({flowId, flowBeginTime});\n        } else {\n          this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: \"FXA_METRICS_FETCH_ERROR\", value: response.status}}));\n        }\n      } catch (error) {\n        this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: \"FXA_METRICS_ERROR\"}}));\n      }\n    }\n  }\n\n  componentDidMount() {\n    this.initScene();\n  }\n\n  initScene() {\n    // Timeout to allow the scene to render once before attaching the attribute\n    // to trigger the animation.\n    setTimeout(() => {\n      this.setState({show: true});\n    }, 10);\n  }\n\n  removeOverlay() {\n    window.removeEventListener(\"visibilitychange\", this.removeOverlay);\n    document.body.classList.remove(\"hide-main\");\n    this.setState({show: false});\n    setTimeout(() => {\n      // Allow scrolling and fully remove overlay after animation finishes.\n      document.body.classList.remove(\"welcome\");\n      this.setState({overlayRemoved: true});\n    }, 400);\n  }\n\n  onInputChange(e) {\n    let error = e.target.previousSibling;\n    this.setState({emailInput: e.target.value});\n    error.classList.remove(\"active\");\n    e.target.classList.remove(\"invalid\");\n  }\n\n  onSubmit() {\n    this.props.dispatch(ac.UserEvent({event: \"SUBMIT_EMAIL\", ...this._getFormInfo()}));\n\n    window.addEventListener(\"visibilitychange\", this.removeOverlay);\n  }\n\n  clickSkip() {\n    this.props.dispatch(ac.UserEvent({event: \"SKIPPED_SIGNIN\", ...this._getFormInfo()}));\n    this.removeOverlay();\n  }\n\n  /**\n   * Report to telemetry additional information about the form submission.\n   */\n  _getFormInfo() {\n    const value = {has_flow_params: this.state.flowId.length > 0};\n    return {value};\n  }\n\n  onInputInvalid(e) {\n    let error = e.target.previousSibling;\n    error.classList.add(\"active\");\n    e.target.classList.add(\"invalid\");\n    e.preventDefault(); // Override built-in form validation popup\n    e.target.focus();\n  }\n\n  render() {\n    // When skipping the onboarding tour we show AS but we are still on\n    // about:welcome, prop.isFirstrun is true and StartupOverlay is rendered\n    if (this.state.overlayRemoved) {\n      return null;\n    }\n\n    let termsLink = (<a href={`${this.props.fxa_endpoint}/legal/terms`} target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_terms_of_service\" /></a>);\n    let privacyLink = (<a href={`${this.props.fxa_endpoint}/legal/privacy`} target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_privacy_notice\" /></a>);\n\n    return (\n      <div className={`overlay-wrapper ${this.state.show ? \"show\" : \"\"}`}>\n        <div className=\"background\" />\n        <div className=\"firstrun-scene\">\n          <div className=\"fxaccounts-container\">\n            <div className=\"firstrun-left-divider\">\n              <h1 className=\"firstrun-title\"><FormattedMessage id=\"firstrun_title\" /></h1>\n              <p className=\"firstrun-content\"><FormattedMessage id=\"firstrun_content\" /></p>\n              <a className=\"firstrun-link\" href=\"https://www.mozilla.org/firefox/features/sync/\" target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_learn_more_link\" /></a>\n            </div>\n            <div className=\"firstrun-sign-in\">\n              <p className=\"form-header\"><FormattedMessage id=\"firstrun_form_header\" /><span className=\"sub-header\"><FormattedMessage id=\"firstrun_form_sub_header\" /></span></p>\n              <form method=\"get\" action={this.props.fxa_endpoint} target=\"_blank\" rel=\"noopener noreferrer\" onSubmit={this.onSubmit}>\n                <input name=\"service\" type=\"hidden\" value=\"sync\" />\n                <input name=\"action\" type=\"hidden\" value=\"email\" />\n                <input name=\"context\" type=\"hidden\" value=\"fx_desktop_v3\" />\n                <input name=\"entrypoint\" type=\"hidden\" value=\"activity-stream-firstrun\" />\n                <input name=\"utm_source\" type=\"hidden\" value=\"activity-stream\" />\n                <input name=\"utm_campaign\" type=\"hidden\" value=\"firstrun\" />\n                <input name=\"flow_id\" type=\"hidden\" value={this.state.flowId} />\n                <input name=\"flow_begin_time\" type=\"hidden\" value={this.state.flowBeginTime} />\n                <span className=\"error\">{this.props.intl.formatMessage({id: \"firstrun_invalid_input\"})}</span>\n                <input className=\"email-input\" name=\"email\" type=\"email\" required=\"true\" onInvalid={this.onInputInvalid} placeholder={this.props.intl.formatMessage({id: \"firstrun_email_input_placeholder\"})} onChange={this.onInputChange} />\n                <div className=\"extra-links\">\n                  <FormattedMessage\n                    id=\"firstrun_extra_legal_links\"\n                    values={{\n                      terms: termsLink,\n                      privacy: privacyLink,\n                    }} />\n                </div>\n                <button className=\"continue-button\" type=\"submit\"><FormattedMessage id=\"firstrun_continue_to_login\" /></button>\n              </form>\n              <button className=\"skip-button\" disabled={!!this.state.emailInput} onClick={this.clickSkip}><FormattedMessage id=\"firstrun_skip_login\" /></button>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nconst getState = state => ({fxa_endpoint: state.Prefs.values.fxa_endpoint});\nexport const StartupOverlay = connect(getState)(injectIntl(_StartupOverlay));\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nexport class DetectUserSessionStart {\n  constructor(store, options = {}) {\n    this._store = store;\n    // Overrides for testing\n    this.document = options.document || global.document;\n    this._perfService = options.perfService || perfSvc;\n    this._onVisibilityChange = this._onVisibilityChange.bind(this);\n  }\n\n  /**\n   * sendEventOrAddListener - Notify immediately if the page is already visible,\n   *                    or else set up a listener for when visibility changes.\n   *                    This is needed for accurate session tracking for telemetry,\n   *                    because tabs are pre-loaded.\n   */\n  sendEventOrAddListener() {\n    if (this.document.visibilityState === VISIBLE) {\n      // If the document is already visible, to the user, send a notification\n      // immediately that a session has started.\n      this._sendEvent();\n    } else {\n      // If the document is not visible, listen for when it does become visible.\n      this.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  /**\n   * _sendEvent - Sends a message to the main process to indicate the current\n   *              tab is now visible to the user, includes the\n   *              visibility_event_rcvd_ts time in ms from the UNIX epoch.\n   */\n  _sendEvent() {\n    this._perfService.mark(\"visibility_event_rcvd_ts\");\n\n    try {\n      let visibility_event_rcvd_ts = this._perfService\n        .getMostRecentAbsMarkStartByName(\"visibility_event_rcvd_ts\");\n\n      this._store.dispatch(ac.AlsoToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data: {visibility_event_rcvd_ts},\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up.\n    }\n  }\n\n  /**\n   * _onVisibilityChange - If the visibility has changed to visible, sends a notification\n   *                      and removes the event listener. This should only be called once per tab.\n   */\n  _onVisibilityChange() {\n    if (this.document.visibilityState === VISIBLE) {\n      this._sendEvent();\n      this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n}\n","export function enableASRouterContent(store, asrouterContent) {\n  // Enable asrouter content\n  store.subscribe(() => {\n    const state = store.getState();\n    if (!state.ASRouter.initialized) {\n      return;\n    }\n\n    if (!asrouterContent.initialized) {\n      asrouterContent.init();\n    }\n  });\n  // Return this for testing purposes\n  return {asrouterContent};\n}\n","import React from \"react\";\n\nconst ALLOWED_STYLE_TAGS = [\"color\", \"backgroundColor\"];\n\nexport const Button = props => {\n  const style = {};\n\n  // Add allowed style tags from props, e.g. props.color becomes style={color: props.color}\n  for (const tag of ALLOWED_STYLE_TAGS) {\n    if (typeof props[tag] !== \"undefined\") {\n      style[tag] = props[tag];\n    }\n  }\n  // remove border if bg is set to something custom\n  if (style.backgroundColor) {\n    style.border = \"0\";\n  }\n\n  return (<button onClick={props.onClick}\n    className={props.className || \"ASRouterButton\"}\n    style={style}>\n    {props.children}\n  </button>);\n};\n","export function safeURI(url) {\n  if (!url) {\n    return \"\";\n  }\n  const {protocol} = new URL(url);\n  const isAllowed = [\n    \"http:\",\n    \"https:\",\n    \"data:\",\n    \"resource:\",\n    \"chrome:\",\n  ].includes(protocol);\n  if (!isAllowed) {\n    console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console\n  }\n  return isAllowed ? url : \"\";\n}\n","import {Localized} from \"fluent-react\";\nimport React from \"react\";\nimport {RICH_TEXT_KEYS} from \"../../rich-text-strings\";\nimport {safeURI} from \"../../template-utils\";\n\n// Elements allowed in snippet content\nconst ALLOWED_TAGS = {\n  b: <b />,\n  i: <i />,\n  u: <u />,\n  strong: <strong />,\n  em: <em />,\n  br: <br />,\n};\n\n/**\n * Transform an object (tag name: {url}) into (tag name: anchor) where the url\n * is used as href, in order to render links inside a Fluent.Localized component.\n */\nexport function convertLinks(links, sendClick, doNotAutoBlock) {\n  if (links) {\n    return Object.keys(links).reduce((acc, linkTag) => {\n      const {action} = links[linkTag];\n      // Setting the value to false will not include the attribute in the anchor\n      const url = action ? false : safeURI(links[linkTag].url);\n\n      acc[linkTag] = (<a href={url}\n        target={doNotAutoBlock ? \"_blank\" : \"\"}\n        data-metric={links[linkTag].metric}\n        data-action={action}\n        data-args={links[linkTag].args}\n        data-do_not_autoblock={doNotAutoBlock}\n        onClick={sendClick} />);\n      return acc;\n    }, {});\n  }\n\n  return null;\n}\n\n/**\n * Message wrapper used to sanitize markup and render HTML.\n */\nexport function RichText(props) {\n  if (!RICH_TEXT_KEYS.includes(props.localization_id)) {\n    throw new Error(`ASRouter: ${props.localization_id} is not a valid rich text property. If you want it to be processed, you need to add it to asrouter/rich-text-strings.js`);\n  }\n  return (\n    <Localized id={props.localization_id} {...ALLOWED_TAGS} {...props.customElements} {...convertLinks(props.links, props.sendClick, props.doNotAutoBlock)}>\n      <span>{props.text}</span>\n    </Localized>\n  );\n}\n","import React from \"react\";\n\nexport class SnippetBase extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBlockClicked = this.onBlockClicked.bind(this);\n  }\n\n  onBlockClicked() {\n    if (this.props.provider !== \"preview\") {\n      this.props.sendUserActionTelemetry({event: \"BLOCK\", id: this.props.UISurface});\n    }\n\n    this.props.onBlock();\n  }\n\n  renderDismissButton() {\n    if (this.props.footerDismiss) {\n      return (\n        <div className=\"footer\">\n          <div className=\"footer-content\">\n            <button\n              className=\"ASRouterButton secondary\"\n              onClick={this.props.onDismiss}>\n              {this.props.content.scene2_dismiss_button_text}\n            </button>\n          </div>\n        </div>\n      );\n    }\n\n    return (\n      <button className=\"blockButton\" title={this.props.content.block_button_text || \"Remove this\"} onClick={this.onBlockClicked} />\n    );\n  }\n\n  render() {\n    const {props} = this;\n\n    const containerClassName = `SnippetBaseContainer${props.className ? ` ${props.className}` : \"\"}`;\n\n    return (<div className={containerClassName} style={this.props.textStyle}>\n      <div className=\"innerWrapper\">\n        {props.children}\n      </div>\n      {this.renderDismissButton()}\n    </div>);\n  }\n}\n","import {Button} from \"../../components/Button/Button\";\nimport React from \"react\";\nimport {RichText} from \"../../components/RichText/RichText\";\nimport {safeURI} from \"../../template-utils\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nconst DEFAULT_ICON_PATH = \"chrome://branding/content/icon64.png\";\n\nexport class SimpleSnippet extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onButtonClick = this.onButtonClick.bind(this);\n  }\n\n  onButtonClick() {\n    if (this.props.provider !== \"preview\") {\n      this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", id: this.props.UISurface});\n    }\n    const {button_url} = this.props.content;\n    // If button_url is defined handle it as OPEN_URL action\n    const type = this.props.content.button_action || (button_url && \"OPEN_URL\");\n    this.props.onAction({\n      type,\n      data: {args: this.props.content.button_action_args || button_url},\n    });\n    if (!this.props.content.do_not_autoblock) {\n      this.props.onBlock();\n    }\n  }\n\n  renderTitle() {\n    const {title} = this.props.content;\n    return title ? <h3 className=\"title\">{title}</h3> : null;\n  }\n\n  renderTitleIcon() {\n    const titleIcon = safeURI(this.props.content.title_icon);\n    return titleIcon ? <span className=\"titleIcon\" style={{backgroundImage: `url(\"${titleIcon}\")`}} /> : null;\n  }\n\n  renderButton() {\n    const {props} = this;\n    if (!props.content.button_action && !props.onButtonClick && !props.content.button_url) {\n      return null;\n    }\n\n    return (<Button\n      onClick={props.onButtonClick || this.onButtonClick}\n      color={props.content.button_color}\n      backgroundColor={props.content.button_background_color}>\n      {props.content.button_label}\n    </Button>);\n  }\n\n  renderText() {\n    const {props} = this;\n    return (<RichText text={props.content.text}\n      customElements={this.props.customElements}\n      localization_id=\"text\"\n      links={props.content.links}\n      sendClick={props.sendClick} />);\n  }\n\n  render() {\n    const {props} = this;\n    let className = \"SimpleSnippet\";\n    if (props.className) {\n      className += ` ${props.className}`;\n    }\n    if (props.content.tall) {\n      className += \" tall\";\n    }\n    return (<SnippetBase {...props} className={className} textStyle={this.props.textStyle}>\n      <img src={safeURI(props.content.icon) || DEFAULT_ICON_PATH} className=\"icon\" />\n      <div>\n        {this.renderTitleIcon()} {this.renderTitle()} <p className=\"body\">{this.renderText()}</p>\n        {this.props.extraContent}\n      </div>\n      {<div>{this.renderButton()}</div>}\n    </SnippetBase>);\n  }\n}\n","import React from \"react\";\nimport {SimpleSnippet} from \"../SimpleSnippet/SimpleSnippet\";\n\nclass EOYSnippetBase extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  /**\n   * setFrequencyValue - `frequency` form parameter value should be `monthly`\n   *                     if `monthly-checkbox` is selected or `single` otherwise\n   */\n  setFrequencyValue() {\n    const frequencyCheckbox = this.refs.form.querySelector(\"#monthly-checkbox\");\n    if (frequencyCheckbox.checked) {\n      this.refs.form.querySelector(\"[name='frequency']\").value = \"monthly\";\n    }\n  }\n\n  handleSubmit(event) {\n    event.preventDefault();\n    this.setFrequencyValue();\n    this.refs.form.submit();\n    if (!this.props.content.do_not_autoblock) {\n      this.props.onBlock();\n    }\n  }\n\n  renderDonations() {\n    const fieldNames = [\"first\", \"second\", \"third\", \"fourth\"];\n    const numberFormat = new Intl.NumberFormat(this.props.content.locale || navigator.language, {\n      style: \"currency\",\n      currency: this.props.content.currency_code,\n      minimumFractionDigits: 0,\n    });\n    // Default to `second` button\n    const {selected_button} = this.props.content;\n    const btnStyle = {\n      color: this.props.content.button_color,\n      backgroundColor: this.props.content.button_background_color,\n    };\n\n    return (<form className=\"EOYSnippetForm\" action={this.props.content.donation_form_url} method={this.props.form_method} onSubmit={this.handleSubmit} ref=\"form\">\n      {fieldNames.map((field, idx) => {\n        const button_name = `donation_amount_${field}`;\n        const amount = this.props.content[button_name];\n        return (<React.Fragment key={idx}>\n            <input type=\"radio\" name=\"amount\" value={amount} id={field} defaultChecked={button_name === selected_button} />\n            <label htmlFor={field} className=\"donation-amount\">\n              {numberFormat.format(amount)}\n            </label>\n          </React.Fragment>);\n      })}\n\n      <div className=\"monthly-checkbox-container\">\n        <input id=\"monthly-checkbox\" type=\"checkbox\" />\n        <label htmlFor=\"monthly-checkbox\">\n          {this.props.content.monthly_checkbox_label_text}\n        </label>\n      </div>\n\n      <input type=\"hidden\" name=\"frequency\" value=\"single\" />\n      <input type=\"hidden\" name=\"currency\" value={this.props.content.currency_code} />\n      <input type=\"hidden\" name=\"presets\" value={fieldNames.map(field => this.props.content[`donation_amount_${field}`])} />\n      <button style={btnStyle} type=\"submit\" className=\"ASRouterButton donation-form-url\">{this.props.content.button_label}</button>\n    </form>);\n  }\n\n  render() {\n    const textStyle = {\n      color: this.props.content.text_color,\n      backgroundColor: this.props.content.background_color,\n    };\n    const customElement = <em style={{backgroundColor: this.props.content.highlight_color}} />;\n    return (<SimpleSnippet {...this.props}\n      className={this.props.content.test}\n      customElements={{em: customElement}}\n      textStyle={textStyle}\n      extraContent={this.renderDonations()} />);\n  }\n}\n\nexport const EOYSnippet = props => {\n  const extendedContent = {\n    monthly_checkbox_label_text: \"Make my donation monthly\",\n    locale: \"en-US\",\n    currency_code: \"usd\",\n    selected_button: \"donation_amount_second\",\n    ...props.content,\n  };\n\n  return (<EOYSnippetBase\n    {...props}\n    content={extendedContent}\n    form_method=\"GET\" />);\n};\n","import {Button} from \"../../components/Button/Button\";\nimport React from \"react\";\nimport {RichText} from \"../../components/RichText/RichText\";\nimport {SimpleSnippet} from \"../SimpleSnippet/SimpleSnippet\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nexport class SubmitFormSnippet extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.expandSnippet = this.expandSnippet.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.onInputChange = this.onInputChange.bind(this);\n    this.state = {\n      expanded: false,\n      signupSubmitted: false,\n      signupSuccess: false,\n      disableForm: false,\n    };\n  }\n\n  async handleSubmit(event) {\n    let json;\n\n    if (this.state.disableForm) {\n      return;\n    }\n\n    event.preventDefault();\n    this.setState({disableForm: true});\n    this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"conversion-subscribe-activation\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n\n    if (this.props.form_method.toUpperCase() === \"GET\") {\n      this.refs.form.submit();\n      return;\n    }\n\n    const {url, formData} = this.props.processFormData ?\n      this.props.processFormData(this.refs.mainInput, this.props) :\n      {url: this.refs.form.action, formData: new FormData(this.refs.form)};\n\n    try {\n      const fetchRequest = new Request(url, {body: formData, method: \"POST\"});\n      const response = await fetch(fetchRequest);\n      json = await response.json();\n    } catch (err) {\n      console.log(err); // eslint-disable-line no-console\n    }\n\n    if (json && json.status === \"ok\") {\n      this.setState({signupSuccess: true, signupSubmitted: true});\n      if (!this.props.content.do_not_autoblock) {\n        this.props.onBlock({preventDismiss: true});\n      }\n      this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"subscribe-success\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n    } else {\n      console.error(\"There was a problem submitting the form\", json || \"[No JSON response]\"); // eslint-disable-line no-console\n      this.setState({signupSuccess: false, signupSubmitted: true});\n      this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"subscribe-error\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n    }\n\n    this.setState({disableForm: false});\n  }\n\n  expandSnippet() {\n    this.setState({\n      expanded: true,\n      signupSuccess: false,\n      signupSubmitted: false,\n    });\n  }\n\n  renderHiddenFormInputs() {\n    const {hidden_inputs} = this.props.content;\n\n    if (!hidden_inputs) {\n      return null;\n    }\n\n    return Object.keys(hidden_inputs).map((key, idx) => <input key={idx} type=\"hidden\" name={key} value={hidden_inputs[key]} />);\n  }\n\n  renderDisclaimer() {\n    const {content} = this.props;\n    if (!content.scene2_disclaimer_html) {\n      return null;\n    }\n    return (<p className=\"disclaimerText\">\n      <RichText text={content.scene2_disclaimer_html}\n        localization_id=\"disclaimer_html\"\n        links={content.links}\n        doNotAutoBlock={true}\n        sendClick={this.props.sendClick} />\n    </p>);\n  }\n\n  renderFormPrivacyNotice() {\n    const {content} = this.props;\n    if (!content.scene2_privacy_html) {\n      return null;\n    }\n    return (<label className=\"privacyNotice\" htmlFor=\"id_privacy\">\n        <p>\n          <input type=\"checkbox\" id=\"id_privacy\" name=\"privacy\" required=\"required\" />\n          <span><RichText text={content.scene2_privacy_html}\n            localization_id=\"privacy_html\"\n            links={content.links}\n            doNotAutoBlock={true}\n            sendClick={this.props.sendClick} />\n          </span>\n        </p>\n      </label>);\n  }\n\n  renderSignupSubmitted() {\n    const {content} = this.props;\n    const isSuccess = this.state.signupSuccess;\n    const successTitle = isSuccess && content.success_title;\n    const bodyText = isSuccess ? content.success_text : content.error_text;\n    const retryButtonText = content.scene1_button_label;\n    return (<SnippetBase {...this.props}><div className=\"submissionStatus\">\n      {successTitle ? <h2 className=\"submitStatusTitle\">{successTitle}</h2> : null}\n      <p>{bodyText}{isSuccess ? null : <Button onClick={this.expandSnippet}>{retryButtonText}</Button>}</p>\n    </div></SnippetBase>);\n  }\n\n  onInputChange(event) {\n    if (!this.props.validateInput) {\n      return;\n    }\n    const hasError = this.props.validateInput(event.target.value, this.props.content);\n    event.target.setCustomValidity(hasError);\n  }\n\n  renderInput() {\n    const placholder = this.props.content.scene2_email_placeholder_text || this.props.content.scene2_input_placeholder;\n    return (<input\n      ref=\"mainInput\"\n      type={this.props.inputType || \"email\"}\n      className=\"mainInput\"\n      name=\"email\"\n      required={true}\n      placeholder={placholder}\n      onChange={this.props.validateInput ? this.onInputChange : null}\n      autoFocus={true} />);\n  }\n\n  renderSignupView() {\n    const {content} = this.props;\n    const containerClass = `SubmitFormSnippet ${this.props.className}`;\n    return (<SnippetBase {...this.props} className={containerClass} footerDismiss={true}>\n        {content.scene2_icon ? <div className=\"scene2Icon\"><img src={content.scene2_icon} /></div> : null}\n        <div className=\"message\">\n          <p>{content.scene2_text}</p>\n        </div>\n        <form action={content.form_action} method={this.props.form_method} onSubmit={this.handleSubmit} ref=\"form\">\n          {this.renderHiddenFormInputs()}\n          <div>\n            {this.renderInput()}\n            <button type=\"submit\" className=\"ASRouterButton primary\" ref=\"formSubmitBtn\">{content.scene2_button_label}</button>\n          </div>\n          {this.renderFormPrivacyNotice() || this.renderDisclaimer()}\n        </form>\n      </SnippetBase>);\n  }\n\n  getFirstSceneContent() {\n    return Object.keys(this.props.content).filter(key => key.includes(\"scene1\")).reduce((acc, key) => {\n      acc[key.substr(7)] = this.props.content[key];\n      return acc;\n    }, {});\n  }\n\n  render() {\n    const content = {...this.props.content, ...this.getFirstSceneContent()};\n\n    if (this.state.signupSubmitted) {\n      return this.renderSignupSubmitted();\n    }\n    if (this.state.expanded) {\n      return this.renderSignupView();\n    }\n    return <SimpleSnippet {...this.props} content={content} onButtonClick={this.expandSnippet} />;\n  }\n}\n","import React from \"react\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nexport const FXASignupSnippet = props => {\n  const userAgent = window.navigator.userAgent.match(/Firefox\\/([0-9]+)\\./);\n  const firefox_version = userAgent ? parseInt(userAgent[1], 10) : 0;\n  const extendedContent = {\n    form_action: \"https://accounts.firefox.com/\",\n    ...props.content,\n    hidden_inputs: {\n      action: \"email\",\n      context: \"fx_desktop_v3\",\n      entrypoint: \"snippets\",\n      service: \"sync\",\n      utm_source: \"snippet\",\n      utm_content: firefox_version,\n      utm_campaign: props.content.utm_campaign,\n      utm_term: props.content.utm_term,\n      ...props.content.hidden_inputs,\n    },\n  };\n\n  return (<SubmitFormSnippet\n    {...props}\n    content={extendedContent}\n    form_method=\"GET\" />);\n};\n","import React from \"react\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nexport const NewsletterSnippet = props => {\n  const extendedContent = {\n    form_action: \"https://basket.mozilla.org/subscribe.json\",\n    ...props.content,\n    hidden_inputs: {\n      newsletters: props.content.scene2_newsletter || \"mozilla-foundation\",\n      fmt: \"H\",\n      lang: \"en-US\",\n      source_url: `https://snippets.mozilla.com/show/${props.id}`,\n      ...props.content.hidden_inputs,\n    },\n  };\n\n  return (<SubmitFormSnippet\n    {...props}\n    content={extendedContent}\n    form_method=\"POST\" />);\n};\n","/**\n * Checks if a given string is an email or phone number or neither\n * @param {string} val The user input\n * @param {ASRMessageContent} content .content property on ASR message\n * @returns {\"email\"|\"phone\"|\"\"} The type of the input\n */\nexport function isEmailOrPhoneNumber(val, content) {\n  const {locale} = content;\n  // http://emailregex.com/\n  const email_re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n  const check_email = email_re.test(val);\n  let check_phone; // depends on locale\n  switch (locale) {\n    case \"en-US\":\n    case \"en-CA\":\n      // allow 10-11 digits in case user wants to enter country code\n      check_phone = val.length >= 10 && val.length <= 11 && !isNaN(val);\n      break;\n    case \"de\":\n      // allow between 2 and 12 digits for german phone numbers\n      check_phone = val.length >= 2 && val.length <= 12 && !isNaN(val);\n      break;\n    // this case should never be hit, but good to have a fallback just in case\n    default:\n      check_phone = !isNaN(val);\n      break;\n  }\n  if (check_email) {\n    return \"email\";\n  } else if (check_phone) {\n    return \"phone\";\n  }\n  return \"\";\n}\n","import {isEmailOrPhoneNumber} from \"./isEmailOrPhoneNumber\";\nimport React from \"react\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nfunction validateInput(value, content) {\n  const type = isEmailOrPhoneNumber(value, content);\n  return type ? \"\" : \"Must be an email or a phone number.\";\n}\n\nfunction processFormData(input, message) {\n  const {content} = message;\n  const type = content.include_sms ? isEmailOrPhoneNumber(input.value, content) : \"email\";\n  const formData = new FormData();\n  let url;\n  if (type === \"phone\") {\n    url = \"https://basket.mozilla.org/news/subscribe_sms/\";\n    formData.append(\"mobile_number\", input.value);\n    formData.append(\"msg_name\", content.message_id_sms);\n    formData.append(\"country\", content.country);\n  } else if (type === \"email\") {\n    url = \"https://basket.mozilla.org/news/subscribe/\";\n    formData.append(\"email\", input.value);\n    formData.append(\"newsletters\", content.message_id_email);\n    formData.append(\"source_url\", encodeURIComponent(`https://snippets.mozilla.com/show/${message.id}`));\n  }\n  formData.append(\"lang\", content.locale);\n  return {formData, url};\n}\n\nexport const SendToDeviceSnippet = props => (\n  <SubmitFormSnippet {...props}\n    form_method=\"POST\"\n    className=\"send_to_device_snippet\"\n    inputType={props.content.include_sms ? \"text\" : \"email\"}\n    validateInput={props.content.include_sms ? validateInput : null}\n    processFormData={processFormData} />\n);\n","import {EOYSnippet} from \"./EOYSnippet/EOYSnippet\";\nimport {FXASignupSnippet} from \"./FXASignupSnippet/FXASignupSnippet\";\nimport {NewsletterSnippet} from \"./NewsletterSnippet/NewsletterSnippet\";\nimport {SendToDeviceSnippet} from \"./SendToDeviceSnippet/SendToDeviceSnippet\";\nimport {SimpleSnippet} from \"./SimpleSnippet/SimpleSnippet\";\n\n// Key names matching schema name of templates\nexport const SnippetsTemplates = {\n  simple_snippet: SimpleSnippet,\n  newsletter_snippet: NewsletterSnippet,\n  fxa_signup_snippet: FXASignupSnippet,\n  send_to_device_snippet: SendToDeviceSnippet,\n  eoy_snippet: EOYSnippet,\n};\n","/*  eslint no-magic-numbers: [0]  */\n\nconst MAX_PLACEABLES = 100;\n\nconst entryIdentifierRe = /-?[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst identifierRe = /[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst functionIdentifierRe = /^[A-Z][A-Z_?-]*$/;\n\n/**\n * The `Parser` class is responsible for parsing FTL resources.\n *\n * It's only public method is `getResource(source)` which takes an FTL string\n * and returns a two element Array with an Object of entries generated from the\n * source as the first element and an array of SyntaxError objects as the\n * second.\n *\n * This parser is optimized for runtime performance.\n *\n * There is an equivalent of this parser in syntax/parser which is\n * generating full AST which is useful for FTL tools.\n */\nclass RuntimeParser {\n  /**\n   * Parse FTL code into entries formattable by the MessageContext.\n   *\n   * Given a string of FTL syntax, return a map of entries that can be passed\n   * to MessageContext.format and a list of errors encountered during parsing.\n   *\n   * @param {String} string\n   * @returns {Array<Object, Array>}\n   */\n  getResource(string) {\n    this._source = string;\n    this._index = 0;\n    this._length = string.length;\n    this.entries = {};\n\n    const errors = [];\n\n    this.skipWS();\n    while (this._index < this._length) {\n      try {\n        this.getEntry();\n      } catch (e) {\n        if (e instanceof SyntaxError) {\n          errors.push(e);\n\n          this.skipToNextEntryStart();\n        } else {\n          throw e;\n        }\n      }\n      this.skipWS();\n    }\n\n    return [this.entries, errors];\n  }\n\n  /**\n   * Parse the source string from the current index as an FTL entry\n   * and add it to object's entries property.\n   *\n   * @private\n   */\n  getEntry() {\n    // The index here should either be at the beginning of the file\n    // or right after new line.\n    if (this._index !== 0 &&\n        this._source[this._index - 1] !== \"\\n\") {\n      throw this.error(`Expected an entry to start\n        at the beginning of the file or on a new line.`);\n    }\n\n    const ch = this._source[this._index];\n\n    // We don't care about comments or sections at runtime\n    if (ch === \"/\" ||\n      (ch === \"#\" &&\n        [\" \", \"#\", \"\\n\"].includes(this._source[this._index + 1]))) {\n      this.skipComment();\n      return;\n    }\n\n    if (ch === \"[\") {\n      this.skipSection();\n      return;\n    }\n\n    this.getMessage();\n  }\n\n  /**\n   * Skip the section entry from the current index.\n   *\n   * @private\n   */\n  skipSection() {\n    this._index += 1;\n    if (this._source[this._index] !== \"[\") {\n      throw this.error('Expected \"[[\" to open a section');\n    }\n\n    this._index += 1;\n\n    this.skipInlineWS();\n    this.getVariantName();\n    this.skipInlineWS();\n\n    if (this._source[this._index] !== \"]\" ||\n        this._source[this._index + 1] !== \"]\") {\n      throw this.error('Expected \"]]\" to close a section');\n    }\n\n    this._index += 2;\n  }\n\n  /**\n   * Parse the source string from the current index as an FTL message\n   * and add it to the entries property on the Parser.\n   *\n   * @private\n   */\n  getMessage() {\n    const id = this.getEntryIdentifier();\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] === \"=\") {\n      this._index++;\n    }\n\n    this.skipInlineWS();\n\n    const val = this.getPattern();\n\n    if (id.startsWith(\"-\") && val === null) {\n      throw this.error(\"Expected term to have a value\");\n    }\n\n    let attrs = null;\n\n    if (this._source[this._index] === \" \") {\n      const lineStart = this._index;\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \".\") {\n        this._index = lineStart;\n        attrs = this.getAttributes();\n      }\n    }\n\n    if (attrs === null && typeof val === \"string\") {\n      this.entries[id] = val;\n    } else {\n      if (val === null && attrs === null) {\n        throw this.error(\"Expected message to have a value or attributes\");\n      }\n\n      this.entries[id] = {};\n\n      if (val !== null) {\n        this.entries[id].val = val;\n      }\n\n      if (attrs !== null) {\n        this.entries[id].attrs = attrs;\n      }\n    }\n  }\n\n  /**\n   * Skip whitespace.\n   *\n   * @private\n   */\n  skipWS() {\n    let ch = this._source[this._index];\n    while (ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\") {\n      ch = this._source[++this._index];\n    }\n  }\n\n  /**\n   * Skip inline whitespace (space and \\t).\n   *\n   * @private\n   */\n  skipInlineWS() {\n    let ch = this._source[this._index];\n    while (ch === \" \" || ch === \"\\t\") {\n      ch = this._source[++this._index];\n    }\n  }\n\n  /**\n   * Skip blank lines.\n   *\n   * @private\n   */\n  skipBlankLines() {\n    while (true) {\n      const ptr = this._index;\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \"\\n\") {\n        this._index += 1;\n      } else {\n        this._index = ptr;\n        break;\n      }\n    }\n  }\n\n  /**\n   * Get identifier using the provided regex.\n   *\n   * By default this will get identifiers of public messages, attributes and\n   * external arguments (without the $).\n   *\n   * @returns {String}\n   * @private\n   */\n  getIdentifier(re = identifierRe) {\n    re.lastIndex = this._index;\n    const result = re.exec(this._source);\n\n    if (result === null) {\n      this._index += 1;\n      throw this.error(`Expected an identifier [${re.toString()}]`);\n    }\n\n    this._index = re.lastIndex;\n    return result[0];\n  }\n\n  /**\n   * Get identifier of a Message or a Term (staring with a dash).\n   *\n   * @returns {String}\n   * @private\n   */\n  getEntryIdentifier() {\n    return this.getIdentifier(entryIdentifierRe);\n  }\n\n  /**\n   * Get Variant name.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getVariantName() {\n    let name = \"\";\n\n    const start = this._index;\n    let cc = this._source.charCodeAt(this._index);\n\n    if ((cc >= 97 && cc <= 122) || // a-z\n        (cc >= 65 && cc <= 90) || // A-Z\n        cc === 95 || cc === 32) { // _ <space>\n      cc = this._source.charCodeAt(++this._index);\n    } else {\n      throw this.error(\"Expected a keyword (starting with [a-zA-Z_])\");\n    }\n\n    while ((cc >= 97 && cc <= 122) || // a-z\n           (cc >= 65 && cc <= 90) || // A-Z\n           (cc >= 48 && cc <= 57) || // 0-9\n           cc === 95 || cc === 45 || cc === 32) { // _- <space>\n      cc = this._source.charCodeAt(++this._index);\n    }\n\n    // If we encountered the end of name, we want to test if the last\n    // collected character is a space.\n    // If it is, we will backtrack to the last non-space character because\n    // the keyword cannot end with a space character.\n    while (this._source.charCodeAt(this._index - 1) === 32) {\n      this._index--;\n    }\n\n    name += this._source.slice(start, this._index);\n\n    return { type: \"varname\", name };\n  }\n\n  /**\n   * Get simple string argument enclosed in `\"`.\n   *\n   * @returns {String}\n   * @private\n   */\n  getString() {\n    const start = this._index + 1;\n\n    while (++this._index < this._length) {\n      const ch = this._source[this._index];\n\n      if (ch === '\"') {\n        break;\n      }\n\n      if (ch === \"\\n\") {\n        throw this.error(\"Unterminated string expression\");\n      }\n    }\n\n    return this._source.substring(start, this._index++);\n  }\n\n  /**\n   * Parses a Message pattern.\n   * Message Pattern may be a simple string or an array of strings\n   * and placeable expressions.\n   *\n   * @returns {String|Array}\n   * @private\n   */\n  getPattern() {\n    // We're going to first try to see if the pattern is simple.\n    // If it is we can just look for the end of the line and read the string.\n    //\n    // Then, if either the line contains a placeable opening `{` or the\n    // next line starts an indentation, we switch to complex pattern.\n    const start = this._index;\n    let eol = this._source.indexOf(\"\\n\", this._index);\n\n    if (eol === -1) {\n      eol = this._length;\n    }\n\n    const firstLineContent = start !== eol ?\n      this._source.slice(start, eol) : null;\n\n    if (firstLineContent && firstLineContent.includes(\"{\")) {\n      return this.getComplexPattern();\n    }\n\n    this._index = eol + 1;\n\n    this.skipBlankLines();\n\n    if (this._source[this._index] !== \" \") {\n      // No indentation means we're done with this message. Callers should check\n      // if the return value here is null. It may be OK for messages, but not OK\n      // for terms, attributes and variants.\n      return firstLineContent;\n    }\n\n    const lineStart = this._index;\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] === \".\") {\n      // The pattern is followed by an attribute. Rewind _index to the first\n      // column of the current line as expected by getAttributes.\n      this._index = lineStart;\n      return firstLineContent;\n    }\n\n    if (firstLineContent) {\n      // It's a multiline pattern which started on the same line as the\n      // identifier. Reparse the whole pattern to make sure we get all of it.\n      this._index = start;\n    }\n\n    return this.getComplexPattern();\n  }\n\n  /**\n   * Parses a complex Message pattern.\n   * This function is called by getPattern when the message is multiline,\n   * or contains escape chars or placeables.\n   * It does full parsing of complex patterns.\n   *\n   * @returns {Array}\n   * @private\n   */\n  /* eslint-disable complexity */\n  getComplexPattern() {\n    let buffer = \"\";\n    const content = [];\n    let placeables = 0;\n\n    let ch = this._source[this._index];\n\n    while (this._index < this._length) {\n      // This block handles multi-line strings combining strings separated\n      // by new line.\n      if (ch === \"\\n\") {\n        this._index++;\n\n        // We want to capture the start and end pointers\n        // around blank lines and add them to the buffer\n        // but only if the blank lines are in the middle\n        // of the string.\n        const blankLinesStart = this._index;\n        this.skipBlankLines();\n        const blankLinesEnd = this._index;\n\n\n        if (this._source[this._index] !== \" \") {\n          break;\n        }\n        this.skipInlineWS();\n\n        if (this._source[this._index] === \"}\" ||\n            this._source[this._index] === \"[\" ||\n            this._source[this._index] === \"*\" ||\n            this._source[this._index] === \".\") {\n          this._index = blankLinesEnd;\n          break;\n        }\n\n        buffer += this._source.substring(blankLinesStart, blankLinesEnd);\n\n        if (buffer.length || content.length) {\n          buffer += \"\\n\";\n        }\n        ch = this._source[this._index];\n        continue;\n      } else if (ch === \"\\\\\") {\n        const ch2 = this._source[this._index + 1];\n        if (ch2 === '\"' || ch2 === \"{\" || ch2 === \"\\\\\") {\n          ch = ch2;\n          this._index++;\n        }\n      } else if (ch === \"{\") {\n        // Push the buffer to content array right before placeable\n        if (buffer.length) {\n          content.push(buffer);\n        }\n        if (placeables > MAX_PLACEABLES - 1) {\n          throw this.error(\n            `Too many placeables, maximum allowed is ${MAX_PLACEABLES}`);\n        }\n        buffer = \"\";\n        content.push(this.getPlaceable());\n\n        this._index++;\n\n        ch = this._source[this._index];\n        placeables++;\n        continue;\n      }\n\n      if (ch) {\n        buffer += ch;\n      }\n      this._index++;\n      ch = this._source[this._index];\n    }\n\n    if (content.length === 0) {\n      return buffer.length ? buffer : null;\n    }\n\n    if (buffer.length) {\n      content.push(buffer);\n    }\n\n    return content;\n  }\n  /* eslint-enable complexity */\n\n  /**\n   * Parses a single placeable in a Message pattern and returns its\n   * expression.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getPlaceable() {\n    const start = ++this._index;\n\n    this.skipWS();\n\n    if (this._source[this._index] === \"*\" ||\n       (this._source[this._index] === \"[\" &&\n        this._source[this._index + 1] !== \"]\")) {\n      const variants = this.getVariants();\n\n      return {\n        type: \"sel\",\n        exp: null,\n        vars: variants[0],\n        def: variants[1]\n      };\n    }\n\n    // Rewind the index and only support in-line white-space now.\n    this._index = start;\n    this.skipInlineWS();\n\n    const selector = this.getSelectorExpression();\n\n    this.skipWS();\n\n    const ch = this._source[this._index];\n\n    if (ch === \"}\") {\n      if (selector.type === \"attr\" && selector.id.name.startsWith(\"-\")) {\n        throw this.error(\n          \"Attributes of private messages cannot be interpolated.\"\n        );\n      }\n\n      return selector;\n    }\n\n    if (ch !== \"-\" || this._source[this._index + 1] !== \">\") {\n      throw this.error('Expected \"}\" or \"->\"');\n    }\n\n    if (selector.type === \"ref\") {\n      throw this.error(\"Message references cannot be used as selectors.\");\n    }\n\n    if (selector.type === \"var\") {\n      throw this.error(\"Variants cannot be used as selectors.\");\n    }\n\n    if (selector.type === \"attr\" && !selector.id.name.startsWith(\"-\")) {\n      throw this.error(\n        \"Attributes of public messages cannot be used as selectors.\"\n      );\n    }\n\n\n    this._index += 2; // ->\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] !== \"\\n\") {\n      throw this.error(\"Variants should be listed in a new line\");\n    }\n\n    this.skipWS();\n\n    const variants = this.getVariants();\n\n    if (variants[0].length === 0) {\n      throw this.error(\"Expected members for the select expression\");\n    }\n\n    return {\n      type: \"sel\",\n      exp: selector,\n      vars: variants[0],\n      def: variants[1]\n    };\n  }\n\n  /**\n   * Parses a selector expression.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getSelectorExpression() {\n    const literal = this.getLiteral();\n\n    if (literal.type !== \"ref\") {\n      return literal;\n    }\n\n    if (this._source[this._index] === \".\") {\n      this._index++;\n\n      const name = this.getIdentifier();\n      this._index++;\n      return {\n        type: \"attr\",\n        id: literal,\n        name\n      };\n    }\n\n    if (this._source[this._index] === \"[\") {\n      this._index++;\n\n      const key = this.getVariantKey();\n      this._index++;\n      return {\n        type: \"var\",\n        id: literal,\n        key\n      };\n    }\n\n    if (this._source[this._index] === \"(\") {\n      this._index++;\n      const args = this.getCallArgs();\n\n      if (!functionIdentifierRe.test(literal.name)) {\n        throw this.error(\"Function names must be all upper-case\");\n      }\n\n      this._index++;\n\n      literal.type = \"fun\";\n\n      return {\n        type: \"call\",\n        fun: literal,\n        args\n      };\n    }\n\n    return literal;\n  }\n\n  /**\n   * Parses call arguments for a CallExpression.\n   *\n   * @returns {Array}\n   * @private\n   */\n  getCallArgs() {\n    const args = [];\n\n    while (this._index < this._length) {\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \")\") {\n        return args;\n      }\n\n      const exp = this.getSelectorExpression();\n\n      // MessageReference in this place may be an entity reference, like:\n      // `call(foo)`, or, if it's followed by `:` it will be a key-value pair.\n      if (exp.type !== \"ref\") {\n        args.push(exp);\n      } else {\n        this.skipInlineWS();\n\n        if (this._source[this._index] === \":\") {\n          this._index++;\n          this.skipInlineWS();\n\n          const val = this.getSelectorExpression();\n\n          // If the expression returned as a value of the argument\n          // is not a quote delimited string or number, throw.\n          //\n          // We don't have to check here if the pattern is quote delimited\n          // because that's the only type of string allowed in expressions.\n          if (typeof val === \"string\" ||\n              Array.isArray(val) ||\n              val.type === \"num\") {\n            args.push({\n              type: \"narg\",\n              name: exp.name,\n              val\n            });\n          } else {\n            this._index = this._source.lastIndexOf(\":\", this._index) + 1;\n            throw this.error(\n              \"Expected string in quotes, number.\");\n          }\n\n        } else {\n          args.push(exp);\n        }\n      }\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \")\") {\n        break;\n      } else if (this._source[this._index] === \",\") {\n        this._index++;\n      } else {\n        throw this.error('Expected \",\" or \")\"');\n      }\n    }\n\n    return args;\n  }\n\n  /**\n   * Parses an FTL Number.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getNumber() {\n    let num = \"\";\n    let cc = this._source.charCodeAt(this._index);\n\n    // The number literal may start with negative sign `-`.\n    if (cc === 45) {\n      num += \"-\";\n      cc = this._source.charCodeAt(++this._index);\n    }\n\n    // next, we expect at least one digit\n    if (cc < 48 || cc > 57) {\n      throw this.error(`Unknown literal \"${num}\"`);\n    }\n\n    // followed by potentially more digits\n    while (cc >= 48 && cc <= 57) {\n      num += this._source[this._index++];\n      cc = this._source.charCodeAt(this._index);\n    }\n\n    // followed by an optional decimal separator `.`\n    if (cc === 46) {\n      num += this._source[this._index++];\n      cc = this._source.charCodeAt(this._index);\n\n      // followed by at least one digit\n      if (cc < 48 || cc > 57) {\n        throw this.error(`Unknown literal \"${num}\"`);\n      }\n\n      // and optionally more digits\n      while (cc >= 48 && cc <= 57) {\n        num += this._source[this._index++];\n        cc = this._source.charCodeAt(this._index);\n      }\n    }\n\n    return {\n      type: \"num\",\n      val: num\n    };\n  }\n\n  /**\n   * Parses a list of Message attributes.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getAttributes() {\n    const attrs = {};\n\n    while (this._index < this._length) {\n      if (this._source[this._index] !== \" \") {\n        break;\n      }\n      this.skipInlineWS();\n\n      if (this._source[this._index] !== \".\") {\n        break;\n      }\n      this._index++;\n\n      const key = this.getIdentifier();\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] !== \"=\") {\n        throw this.error('Expected \"=\"');\n      }\n      this._index++;\n\n      this.skipInlineWS();\n\n      const val = this.getPattern();\n\n      if (val === null) {\n        throw this.error(\"Expected attribute to have a value\");\n      }\n\n      if (typeof val === \"string\") {\n        attrs[key] = val;\n      } else {\n        attrs[key] = {\n          val\n        };\n      }\n\n      this.skipBlankLines();\n    }\n\n    return attrs;\n  }\n\n  /**\n   * Parses a list of Selector variants.\n   *\n   * @returns {Array}\n   * @private\n   */\n  getVariants() {\n    const variants = [];\n    let index = 0;\n    let defaultIndex;\n\n    while (this._index < this._length) {\n      const ch = this._source[this._index];\n\n      if ((ch !== \"[\" || this._source[this._index + 1] === \"[\") &&\n          ch !== \"*\") {\n        break;\n      }\n      if (ch === \"*\") {\n        this._index++;\n        defaultIndex = index;\n      }\n\n      if (this._source[this._index] !== \"[\") {\n        throw this.error('Expected \"[\"');\n      }\n\n      this._index++;\n\n      const key = this.getVariantKey();\n\n      this.skipInlineWS();\n\n      const val = this.getPattern();\n\n      if (val === null) {\n        throw this.error(\"Expected variant to have a value\");\n      }\n\n      variants[index++] = {key, val};\n\n      this.skipWS();\n    }\n\n    return [variants, defaultIndex];\n  }\n\n  /**\n   * Parses a Variant key.\n   *\n   * @returns {String}\n   * @private\n   */\n  getVariantKey() {\n    // VariantKey may be a Keyword or Number\n\n    const cc = this._source.charCodeAt(this._index);\n    let literal;\n\n    if ((cc >= 48 && cc <= 57) || cc === 45) {\n      literal = this.getNumber();\n    } else {\n      literal = this.getVariantName();\n    }\n\n    if (this._source[this._index] !== \"]\") {\n      throw this.error('Expected \"]\"');\n    }\n\n    this._index++;\n    return literal;\n  }\n\n  /**\n   * Parses an FTL literal.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getLiteral() {\n    const cc0 = this._source.charCodeAt(this._index);\n\n    if (cc0 === 36) { // $\n      this._index++;\n      return {\n        type: \"ext\",\n        name: this.getIdentifier()\n      };\n    }\n\n    const cc1 = cc0 === 45 // -\n      // Peek at the next character after the dash.\n      ? this._source.charCodeAt(this._index + 1)\n      // Or keep using the character at the current index.\n      : cc0;\n\n    if ((cc1 >= 97 && cc1 <= 122) || // a-z\n        (cc1 >= 65 && cc1 <= 90)) { // A-Z\n      return {\n        type: \"ref\",\n        name: this.getEntryIdentifier()\n      };\n    }\n\n    if ((cc1 >= 48 && cc1 <= 57)) { // 0-9\n      return this.getNumber();\n    }\n\n    if (cc0 === 34) { // \"\n      return this.getString();\n    }\n\n    throw this.error(\"Expected literal\");\n  }\n\n  /**\n   * Skips an FTL comment.\n   *\n   * @private\n   */\n  skipComment() {\n    // At runtime, we don't care about comments so we just have\n    // to parse them properly and skip their content.\n    let eol = this._source.indexOf(\"\\n\", this._index);\n\n    while (eol !== -1 &&\n      ((this._source[eol + 1] === \"/\" && this._source[eol + 2] === \"/\") ||\n       (this._source[eol + 1] === \"#\" &&\n         [\" \", \"#\"].includes(this._source[eol + 2])))) {\n      this._index = eol + 3;\n\n      eol = this._source.indexOf(\"\\n\", this._index);\n\n      if (eol === -1) {\n        break;\n      }\n    }\n\n    if (eol === -1) {\n      this._index = this._length;\n    } else {\n      this._index = eol + 1;\n    }\n  }\n\n  /**\n   * Creates a new SyntaxError object with a given message.\n   *\n   * @param {String} message\n   * @returns {Object}\n   * @private\n   */\n  error(message) {\n    return new SyntaxError(message);\n  }\n\n  /**\n   * Skips to the beginning of a next entry after the current position.\n   * This is used to mark the boundary of junk entry in case of error,\n   * and recover from the returned position.\n   *\n   * @private\n   */\n  skipToNextEntryStart() {\n    let start = this._index;\n\n    while (true) {\n      if (start === 0 || this._source[start - 1] === \"\\n\") {\n        const cc = this._source.charCodeAt(start);\n\n        if ((cc >= 97 && cc <= 122) || // a-z\n            (cc >= 65 && cc <= 90) || // A-Z\n             cc === 47 || cc === 91) { // /[\n          this._index = start;\n          return;\n        }\n      }\n\n      start = this._source.indexOf(\"\\n\", start);\n\n      if (start === -1) {\n        this._index = this._length;\n        return;\n      }\n      start++;\n    }\n  }\n}\n\n/**\n * Parses an FTL string using RuntimeParser and returns the generated\n * object with entries and a list of errors.\n *\n * @param {String} string\n * @returns {Array<Object, Array>}\n */\nexport default function parse(string) {\n  const parser = new RuntimeParser();\n  return parser.getResource(string);\n}\n","/* global Intl */\n\n/**\n * The `FluentType` class is the base of Fluent's type system.\n *\n * Fluent types wrap JavaScript values and store additional configuration for\n * them, which can then be used in the `toString` method together with a proper\n * `Intl` formatter.\n */\nexport class FluentType {\n\n  /**\n   * Create an `FluentType` instance.\n   *\n   * @param   {Any}    value - JavaScript value to wrap.\n   * @param   {Object} opts  - Configuration.\n   * @returns {FluentType}\n   */\n  constructor(value, opts) {\n    this.value = value;\n    this.opts = opts;\n  }\n\n  /**\n   * Unwrap the raw value stored by this `FluentType`.\n   *\n   * @returns {Any}\n   */\n  valueOf() {\n    return this.value;\n  }\n\n  /**\n   * Format this instance of `FluentType` to a string.\n   *\n   * Formatted values are suitable for use outside of the `MessageContext`.\n   * This method can use `Intl` formatters memoized by the `MessageContext`\n   * instance passed as an argument.\n   *\n   * @param   {MessageContext} [ctx]\n   * @returns {string}\n   */\n  toString() {\n    throw new Error(\"Subclasses of FluentType must implement toString.\");\n  }\n}\n\nexport class FluentNone extends FluentType {\n  toString() {\n    return this.value || \"???\";\n  }\n}\n\nexport class FluentNumber extends FluentType {\n  constructor(value, opts) {\n    super(parseFloat(value), opts);\n  }\n\n  toString(ctx) {\n    try {\n      const nf = ctx._memoizeIntlObject(\n        Intl.NumberFormat, this.opts\n      );\n      return nf.format(this.value);\n    } catch (e) {\n      // XXX Report the error.\n      return this.value;\n    }\n  }\n\n  /**\n   * Compare the object with another instance of a FluentType.\n   *\n   * @param   {MessageContext} ctx\n   * @param   {FluentType}     other\n   * @returns {bool}\n   */\n  match(ctx, other) {\n    if (other instanceof FluentNumber) {\n      return this.value === other.value;\n    }\n    return false;\n  }\n}\n\nexport class FluentDateTime extends FluentType {\n  constructor(value, opts) {\n    super(new Date(value), opts);\n  }\n\n  toString(ctx) {\n    try {\n      const dtf = ctx._memoizeIntlObject(\n        Intl.DateTimeFormat, this.opts\n      );\n      return dtf.format(this.value);\n    } catch (e) {\n      // XXX Report the error.\n      return this.value;\n    }\n  }\n}\n\nexport class FluentSymbol extends FluentType {\n  toString() {\n    return this.value;\n  }\n\n  /**\n   * Compare the object with another instance of a FluentType.\n   *\n   * @param   {MessageContext} ctx\n   * @param   {FluentType}     other\n   * @returns {bool}\n   */\n  match(ctx, other) {\n    if (other instanceof FluentSymbol) {\n      return this.value === other.value;\n    } else if (typeof other === \"string\") {\n      return this.value === other;\n    } else if (other instanceof FluentNumber) {\n      const pr = ctx._memoizeIntlObject(\n        Intl.PluralRules, other.opts\n      );\n      return this.value === pr.select(other.value);\n    }\n    return false;\n  }\n}\n","/**\n * @overview\n *\n * The FTL resolver ships with a number of functions built-in.\n *\n * Each function take two arguments:\n *   - args - an array of positional args\n *   - opts - an object of key-value args\n *\n * Arguments to functions are guaranteed to already be instances of\n * `FluentType`.  Functions must return `FluentType` objects as well.\n */\n\nimport { FluentNumber, FluentDateTime } from \"./types\";\n\nexport default {\n  \"NUMBER\": ([arg], opts) =>\n    new FluentNumber(arg.valueOf(), merge(arg.opts, opts)),\n  \"DATETIME\": ([arg], opts) =>\n    new FluentDateTime(arg.valueOf(), merge(arg.opts, opts)),\n};\n\nfunction merge(argopts, opts) {\n  return Object.assign({}, argopts, values(opts));\n}\n\nfunction values(opts) {\n  const unwrapped = {};\n  for (const [name, opt] of Object.entries(opts)) {\n    unwrapped[name] = opt.valueOf();\n  }\n  return unwrapped;\n}\n","/**\n * @overview\n *\n * The role of the Fluent resolver is to format a translation object to an\n * instance of `FluentType` or an array of instances.\n *\n * Translations can contain references to other messages or external arguments,\n * conditional logic in form of select expressions, traits which describe their\n * grammatical features, and can use Fluent builtins which make use of the\n * `Intl` formatters to format numbers, dates, lists and more into the\n * context's language.  See the documentation of the Fluent syntax for more\n * information.\n *\n * In case of errors the resolver will try to salvage as much of the\n * translation as possible.  In rare situations where the resolver didn't know\n * how to recover from an error it will return an instance of `FluentNone`.\n *\n * `MessageReference`, `VariantExpression`, `AttributeExpression` and\n * `SelectExpression` resolve to raw Runtime Entries objects and the result of\n * the resolution needs to be passed into `Type` to get their real value.\n * This is useful for composing expressions.  Consider:\n *\n *     brand-name[nominative]\n *\n * which is a `VariantExpression` with properties `id: MessageReference` and\n * `key: Keyword`.  If `MessageReference` was resolved eagerly, it would\n * instantly resolve to the value of the `brand-name` message.  Instead, we\n * want to get the message object and look for its `nominative` variant.\n *\n * All other expressions (except for `FunctionReference` which is only used in\n * `CallExpression`) resolve to an instance of `FluentType`.  The caller should\n * use the `toString` method to convert the instance to a native value.\n *\n *\n * All functions in this file pass around a special object called `env`.\n * This object stores a set of elements used by all resolve functions:\n *\n *  * {MessageContext} ctx\n *      context for which the given resolution is happening\n *  * {Object} args\n *      list of developer provided arguments that can be used\n *  * {Array} errors\n *      list of errors collected while resolving\n *  * {WeakSet} dirty\n *      Set of patterns already encountered during this resolution.\n *      This is used to prevent cyclic resolutions.\n */\n\n\nimport { FluentType, FluentNone, FluentNumber, FluentDateTime, FluentSymbol }\n  from \"./types\";\nimport builtins from \"./builtins\";\n\n// Prevent expansion of too long placeables.\nconst MAX_PLACEABLE_LENGTH = 2500;\n\n// Unicode bidi isolation characters.\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\n\n\n/**\n * Helper for choosing the default value from a set of members.\n *\n * Used in SelectExpressions and Type.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} members\n *    Hash map of variants from which the default value is to be selected.\n * @param   {Number} def\n *    The index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction DefaultMember(env, members, def) {\n  if (members[def]) {\n    return members[def];\n  }\n\n  const { errors } = env;\n  errors.push(new RangeError(\"No default\"));\n  return new FluentNone();\n}\n\n\n/**\n * Resolve a reference to another message.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} id\n *    The identifier of the message to be resolved.\n * @param   {String} id.name\n *    The name of the identifier.\n * @returns {FluentType}\n * @private\n */\nfunction MessageReference(env, {name}) {\n  const { ctx, errors } = env;\n  const message = name.startsWith(\"-\")\n    ? ctx._terms.get(name)\n    : ctx._messages.get(name);\n\n  if (!message) {\n    const err = name.startsWith(\"-\")\n      ? new ReferenceError(`Unknown term: ${name}`)\n      : new ReferenceError(`Unknown message: ${name}`);\n    errors.push(err);\n    return new FluentNone(name);\n  }\n\n  return message;\n}\n\n/**\n * Resolve a variant expression to the variant object.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {Object} expr.id\n *    An Identifier of a message for which the variant is resolved.\n * @param   {Object} expr.id.name\n *    Name a message for which the variant is resolved.\n * @param   {Object} expr.key\n *    Variant key to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction VariantExpression(env, {id, key}) {\n  const message = MessageReference(env, id);\n  if (message instanceof FluentNone) {\n    return message;\n  }\n\n  const { ctx, errors } = env;\n  const keyword = Type(env, key);\n\n  function isVariantList(node) {\n    return Array.isArray(node) &&\n      node[0].type === \"sel\" &&\n      node[0].exp === null;\n  }\n\n  if (isVariantList(message.val)) {\n    // Match the specified key against keys of each variant, in order.\n    for (const variant of message.val[0].vars) {\n      const variantKey = Type(env, variant.key);\n      if (keyword.match(ctx, variantKey)) {\n        return variant;\n      }\n    }\n  }\n\n  errors.push(new ReferenceError(`Unknown variant: ${keyword.toString(ctx)}`));\n  return Type(env, message);\n}\n\n\n/**\n * Resolve an attribute expression to the attribute object.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.id\n *    An ID of a message for which the attribute is resolved.\n * @param   {String} expr.name\n *    Name of the attribute to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction AttributeExpression(env, {id, name}) {\n  const message = MessageReference(env, id);\n  if (message instanceof FluentNone) {\n    return message;\n  }\n\n  if (message.attrs) {\n    // Match the specified name against keys of each attribute.\n    for (const attrName in message.attrs) {\n      if (name === attrName) {\n        return message.attrs[name];\n      }\n    }\n  }\n\n  const { errors } = env;\n  errors.push(new ReferenceError(`Unknown attribute: ${name}`));\n  return Type(env, message);\n}\n\n/**\n * Resolve a select expression to the member object.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.exp\n *    Selector expression\n * @param   {Array} expr.vars\n *    List of variants for the select expression.\n * @param   {Number} expr.def\n *    Index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction SelectExpression(env, {exp, vars, def}) {\n  if (exp === null) {\n    return DefaultMember(env, vars, def);\n  }\n\n  const selector = Type(env, exp);\n  if (selector instanceof FluentNone) {\n    return DefaultMember(env, vars, def);\n  }\n\n  // Match the selector against keys of each variant, in order.\n  for (const variant of vars) {\n    const key = Type(env, variant.key);\n    const keyCanMatch =\n      key instanceof FluentNumber || key instanceof FluentSymbol;\n\n    if (!keyCanMatch) {\n      continue;\n    }\n\n    const { ctx } = env;\n\n    if (key.match(ctx, selector)) {\n      return variant;\n    }\n  }\n\n  return DefaultMember(env, vars, def);\n}\n\n\n/**\n * Resolve expression to a Fluent type.\n *\n * JavaScript strings are a special case.  Since they natively have the\n * `toString` method they can be used as if they were a Fluent type without\n * paying the cost of creating a instance of one.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression object to be resolved into a Fluent type.\n * @returns {FluentType}\n * @private\n */\nfunction Type(env, expr) {\n  // A fast-path for strings which are the most common case, and for\n  // `FluentNone` which doesn't require any additional logic.\n  if (typeof expr === \"string\" || expr instanceof FluentNone) {\n    return expr;\n  }\n\n  // The Runtime AST (Entries) encodes patterns (complex strings with\n  // placeables) as Arrays.\n  if (Array.isArray(expr)) {\n    return Pattern(env, expr);\n  }\n\n\n  switch (expr.type) {\n    case \"varname\":\n      return new FluentSymbol(expr.name);\n    case \"num\":\n      return new FluentNumber(expr.val);\n    case \"ext\":\n      return ExternalArgument(env, expr);\n    case \"fun\":\n      return FunctionReference(env, expr);\n    case \"call\":\n      return CallExpression(env, expr);\n    case \"ref\": {\n      const message = MessageReference(env, expr);\n      return Type(env, message);\n    }\n    case \"attr\": {\n      const attr = AttributeExpression(env, expr);\n      return Type(env, attr);\n    }\n    case \"var\": {\n      const variant = VariantExpression(env, expr);\n      return Type(env, variant);\n    }\n    case \"sel\": {\n      const member = SelectExpression(env, expr);\n      return Type(env, member);\n    }\n    case undefined: {\n      // If it's a node with a value, resolve the value.\n      if (expr.val !== null && expr.val !== undefined) {\n        return Type(env, expr.val);\n      }\n\n      const { errors } = env;\n      errors.push(new RangeError(\"No value\"));\n      return new FluentNone();\n    }\n    default:\n      return new FluentNone();\n  }\n}\n\n/**\n * Resolve a reference to an external argument.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.name\n *    Name of an argument to be returned.\n * @returns {FluentType}\n * @private\n */\nfunction ExternalArgument(env, {name}) {\n  const { args, errors } = env;\n\n  if (!args || !args.hasOwnProperty(name)) {\n    errors.push(new ReferenceError(`Unknown external: ${name}`));\n    return new FluentNone(name);\n  }\n\n  const arg = args[name];\n\n  // Return early if the argument already is an instance of FluentType.\n  if (arg instanceof FluentType) {\n    return arg;\n  }\n\n  // Convert the argument to a Fluent type.\n  switch (typeof arg) {\n    case \"string\":\n      return arg;\n    case \"number\":\n      return new FluentNumber(arg);\n    case \"object\":\n      if (arg instanceof Date) {\n        return new FluentDateTime(arg);\n      }\n    default:\n      errors.push(\n        new TypeError(`Unsupported external type: ${name}, ${typeof arg}`)\n      );\n      return new FluentNone(name);\n  }\n}\n\n/**\n * Resolve a reference to a function.\n *\n * @param   {Object}  env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.name\n *    Name of the function to be returned.\n * @returns {Function}\n * @private\n */\nfunction FunctionReference(env, {name}) {\n  // Some functions are built-in.  Others may be provided by the runtime via\n  // the `MessageContext` constructor.\n  const { ctx: { _functions }, errors } = env;\n  const func = _functions[name] || builtins[name];\n\n  if (!func) {\n    errors.push(new ReferenceError(`Unknown function: ${name}()`));\n    return new FluentNone(`${name}()`);\n  }\n\n  if (typeof func !== \"function\") {\n    errors.push(new TypeError(`Function ${name}() is not callable`));\n    return new FluentNone(`${name}()`);\n  }\n\n  return func;\n}\n\n/**\n * Resolve a call to a Function with positional and key-value arguments.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {Object} expr.fun\n *    FTL Function object.\n * @param   {Array} expr.args\n *    FTL Function argument list.\n * @returns {FluentType}\n * @private\n */\nfunction CallExpression(env, {fun, args}) {\n  const callee = FunctionReference(env, fun);\n\n  if (callee instanceof FluentNone) {\n    return callee;\n  }\n\n  const posargs = [];\n  const keyargs = {};\n\n  for (const arg of args) {\n    if (arg.type === \"narg\") {\n      keyargs[arg.name] = Type(env, arg.val);\n    } else {\n      posargs.push(Type(env, arg));\n    }\n  }\n\n  try {\n    return callee(posargs, keyargs);\n  } catch (e) {\n    // XXX Report errors.\n    return new FluentNone();\n  }\n}\n\n/**\n * Resolve a pattern (a complex string with placeables).\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Array} ptn\n *    Array of pattern elements.\n * @returns {Array}\n * @private\n */\nfunction Pattern(env, ptn) {\n  const { ctx, dirty, errors } = env;\n\n  if (dirty.has(ptn)) {\n    errors.push(new RangeError(\"Cyclic reference\"));\n    return new FluentNone();\n  }\n\n  // Tag the pattern as dirty for the purpose of the current resolution.\n  dirty.add(ptn);\n  const result = [];\n\n  // Wrap interpolations with Directional Isolate Formatting characters\n  // only when the pattern has more than one element.\n  const useIsolating = ctx._useIsolating && ptn.length > 1;\n\n  for (const elem of ptn) {\n    if (typeof elem === \"string\") {\n      result.push(elem);\n      continue;\n    }\n\n    const part = Type(env, elem).toString(ctx);\n\n    if (useIsolating) {\n      result.push(FSI);\n    }\n\n    if (part.length > MAX_PLACEABLE_LENGTH) {\n      errors.push(\n        new RangeError(\n          \"Too many characters in placeable \" +\n          `(${part.length}, max allowed is ${MAX_PLACEABLE_LENGTH})`\n        )\n      );\n      result.push(part.slice(MAX_PLACEABLE_LENGTH));\n    } else {\n      result.push(part);\n    }\n\n    if (useIsolating) {\n      result.push(PDI);\n    }\n  }\n\n  dirty.delete(ptn);\n  return result.join(\"\");\n}\n\n/**\n * Format a translation into a string.\n *\n * @param   {MessageContext} ctx\n *    A MessageContext instance which will be used to resolve the\n *    contextual information of the message.\n * @param   {Object}         args\n *    List of arguments provided by the developer which can be accessed\n *    from the message.\n * @param   {Object}         message\n *    An object with the Message to be resolved.\n * @param   {Array}          errors\n *    An error array that any encountered errors will be appended to.\n * @returns {FluentType}\n */\nexport default function resolve(ctx, args, message, errors = []) {\n  const env = {\n    ctx, args, errors, dirty: new WeakSet()\n  };\n  return Type(env, message).toString(ctx);\n}\n","import resolve from \"./resolver\";\nimport parse from \"./parser\";\n\n/**\n * Message contexts are single-language stores of translations.  They are\n * responsible for parsing translation resources in the Fluent syntax and can\n * format translation units (entities) to strings.\n *\n * Always use `MessageContext.format` to retrieve translation units from\n * a context.  Translations can contain references to other entities or\n * external arguments, conditional logic in form of select expressions, traits\n * which describe their grammatical features, and can use Fluent builtins which\n * make use of the `Intl` formatters to format numbers, dates, lists and more\n * into the context's language.  See the documentation of the Fluent syntax for\n * more information.\n */\nexport class MessageContext {\n\n  /**\n   * Create an instance of `MessageContext`.\n   *\n   * The `locales` argument is used to instantiate `Intl` formatters used by\n   * translations.  The `options` object can be used to configure the context.\n   *\n   * Examples:\n   *\n   *     const ctx = new MessageContext(locales);\n   *\n   *     const ctx = new MessageContext(locales, { useIsolating: false });\n   *\n   *     const ctx = new MessageContext(locales, {\n   *       useIsolating: true,\n   *       functions: {\n   *         NODE_ENV: () => process.env.NODE_ENV\n   *       }\n   *     });\n   *\n   * Available options:\n   *\n   *   - `functions` - an object of additional functions available to\n   *                   translations as builtins.\n   *\n   *   - `useIsolating` - boolean specifying whether to use Unicode isolation\n   *                    marks (FSI, PDI) for bidi interpolations.\n   *\n   * @param   {string|Array<string>} locales - Locale or locales of the context\n   * @param   {Object} [options]\n   * @returns {MessageContext}\n   */\n  constructor(locales, { functions = {}, useIsolating = true } = {}) {\n    this.locales = Array.isArray(locales) ? locales : [locales];\n\n    this._terms = new Map();\n    this._messages = new Map();\n    this._functions = functions;\n    this._useIsolating = useIsolating;\n    this._intls = new WeakMap();\n  }\n\n  /*\n   * Return an iterator over public `[id, message]` pairs.\n   *\n   * @returns {Iterator}\n   */\n  get messages() {\n    return this._messages[Symbol.iterator]();\n  }\n\n  /*\n   * Check if a message is present in the context.\n   *\n   * @param {string} id - The identifier of the message to check.\n   * @returns {bool}\n   */\n  hasMessage(id) {\n    return this._messages.has(id);\n  }\n\n  /*\n   * Return the internal representation of a message.\n   *\n   * The internal representation should only be used as an argument to\n   * `MessageContext.format`.\n   *\n   * @param {string} id - The identifier of the message to check.\n   * @returns {Any}\n   */\n  getMessage(id) {\n    return this._messages.get(id);\n  }\n\n  /**\n   * Add a translation resource to the context.\n   *\n   * The translation resource must use the Fluent syntax.  It will be parsed by\n   * the context and each translation unit (message) will be available in the\n   * context by its identifier.\n   *\n   *     ctx.addMessages('foo = Foo');\n   *     ctx.getMessage('foo');\n   *\n   *     // Returns a raw representation of the 'foo' message.\n   *\n   * Parsed entities should be formatted with the `format` method in case they\n   * contain logic (references, select expressions etc.).\n   *\n   * @param   {string} source - Text resource with translations.\n   * @returns {Array<Error>}\n   */\n  addMessages(source) {\n    const [entries, errors] = parse(source);\n    for (const id in entries) {\n      if (id.startsWith(\"-\")) {\n        // Identifiers starting with a dash (-) define terms. Terms are private\n        // and cannot be retrieved from MessageContext.\n        if (this._terms.has(id)) {\n          errors.push(`Attempt to override an existing term: \"${id}\"`);\n          continue;\n        }\n        this._terms.set(id, entries[id]);\n      } else {\n        if (this._messages.has(id)) {\n          errors.push(`Attempt to override an existing message: \"${id}\"`);\n          continue;\n        }\n        this._messages.set(id, entries[id]);\n      }\n    }\n\n    return errors;\n  }\n\n  /**\n   * Format a message to a string or null.\n   *\n   * Format a raw `message` from the context into a string (or a null if it has\n   * a null value).  `args` will be used to resolve references to external\n   * arguments inside of the translation.\n   *\n   * In case of errors `format` will try to salvage as much of the translation\n   * as possible and will still return a string.  For performance reasons, the\n   * encountered errors are not returned but instead are appended to the\n   * `errors` array passed as the third argument.\n   *\n   *     const errors = [];\n   *     ctx.addMessages('hello = Hello, { $name }!');\n   *     const hello = ctx.getMessage('hello');\n   *     ctx.format(hello, { name: 'Jane' }, errors);\n   *\n   *     // Returns 'Hello, Jane!' and `errors` is empty.\n   *\n   *     ctx.format(hello, undefined, errors);\n   *\n   *     // Returns 'Hello, name!' and `errors` is now:\n   *\n   *     [<ReferenceError: Unknown external: name>]\n   *\n   * @param   {Object | string}    message\n   * @param   {Object | undefined} args\n   * @param   {Array}              errors\n   * @returns {?string}\n   */\n  format(message, args, errors) {\n    // optimize entities which are simple strings with no attributes\n    if (typeof message === \"string\") {\n      return message;\n    }\n\n    // optimize simple-string entities with attributes\n    if (typeof message.val === \"string\") {\n      return message.val;\n    }\n\n    // optimize entities with null values\n    if (message.val === undefined) {\n      return null;\n    }\n\n    return resolve(this, args, message, errors);\n  }\n\n  _memoizeIntlObject(ctor, opts) {\n    const cache = this._intls.get(ctor) || {};\n    const id = JSON.stringify(opts);\n\n    if (!cache[id]) {\n      cache[id] = new ctor(this.locales, opts);\n      this._intls.set(ctor, cache);\n    }\n\n    return cache[id];\n  }\n}\n","/*\n * CachedIterable caches the elements yielded by an iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedIterable {\n  /**\n   * Create an `CachedIterable` instance.\n   *\n   * @param {Iterable} iterable\n   * @returns {CachedIterable}\n   */\n  constructor(iterable) {\n    if (Symbol.asyncIterator in Object(iterable)) {\n      this.iterator = iterable[Symbol.asyncIterator]();\n    } else if (Symbol.iterator in Object(iterable)) {\n      this.iterator = iterable[Symbol.iterator]();\n    } else {\n      throw new TypeError(\"Argument must implement the iteration protocol.\");\n    }\n\n    this.seen = [];\n  }\n\n  [Symbol.iterator]() {\n    const { seen, iterator } = this;\n    let cur = 0;\n\n    return {\n      next() {\n        if (seen.length <= cur) {\n          seen.push(iterator.next());\n        }\n        return seen[cur++];\n      }\n    };\n  }\n\n  [Symbol.asyncIterator]() {\n    const { seen, iterator } = this;\n    let cur = 0;\n\n    return {\n      async next() {\n        if (seen.length <= cur) {\n          seen.push(await iterator.next());\n        }\n        return seen[cur++];\n      }\n    };\n  }\n\n  /**\n   * This method allows user to consume the next element from the iterator\n   * into the cache.\n   */\n  touchNext() {\n    const { seen, iterator } = this;\n    if (seen.length === 0 || seen[seen.length - 1].done === false) {\n      seen.push(iterator.next());\n    }\n  }\n}\n","/*\n * @overview\n *\n * Functions for managing ordered sequences of MessageContexts.\n *\n * An ordered iterable of MessageContext instances can represent the current\n * negotiated fallback chain of languages.  This iterable can be used to find\n * the best existing translation for a given identifier.\n *\n * The mapContext* methods can be used to find the first MessageContext in the\n * given iterable which contains the translation with the given identifier.  If\n * the iterable is ordered according to the result of a language negotiation\n * the returned MessageContext contains the best available translation.\n *\n * A simple function which formats translations based on the identifier might\n * be implemented as follows:\n *\n *     formatString(id, args) {\n *         const ctx = mapContextSync(contexts, id);\n *\n *         if (ctx === null) {\n *             return id;\n *         }\n *\n *         const msg = ctx.getMessage(id);\n *         return ctx.format(msg, args);\n *     }\n *\n * In order to pass an iterator to mapContext*, wrap it in CachedIterable.\n * This allows multiple calls to mapContext* without advancing and eventually\n * depleting the iterator.\n *\n *     function *generateMessages() {\n *         // Some lazy logic for yielding MessageContexts.\n *         yield *[ctx1, ctx2];\n *     }\n *\n *     const contexts = new CachedIterable(generateMessages());\n *     const ctx = mapContextSync(contexts, id);\n *\n */\n\n/*\n * Synchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {Iterable} iterable\n * @param {string|Array<string>} ids\n * @returns {MessageContext|Array<MessageContext>}\n */\nexport function mapContextSync(iterable, ids) {\n  if (!Array.isArray(ids)) {\n    return getContextForId(iterable, ids);\n  }\n\n  return ids.map(\n    id => getContextForId(iterable, id)\n  );\n}\n\n/*\n * Find the best `MessageContext` with the translation for `id`.\n */\nfunction getContextForId(iterable, id) {\n  for (const context of iterable) {\n    if (context.hasMessage(id)) {\n      return context;\n    }\n  }\n\n  return null;\n}\n\n/*\n * Asynchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {AsyncIterable} iterable\n * @param {string|Array<string>} ids\n * @returns {Promise<MessageContext|Array<MessageContext>>}\n */\nexport async function mapContextAsync(iterable, ids) {\n  if (!Array.isArray(ids)) {\n    for await (const context of iterable) {\n      if (context.hasMessage(ids)) {\n        return context;\n      }\n    }\n  }\n\n  let remainingCount = ids.length;\n  const foundContexts = new Array(remainingCount).fill(null);\n\n  for await (const context of iterable) {\n    // XXX Switch to const [index, id] of id.entries() when we move to Babel 7.\n    // See https://github.com/babel/babel/issues/5880.\n    for (let index = 0; index < ids.length; index++) {\n      const id = ids[index];\n      if (!foundContexts[index] && context.hasMessage(id)) {\n        foundContexts[index] = context;\n        remainingCount--;\n      }\n\n      // Return early when all ids have been mapped to contexts.\n      if (remainingCount === 0) {\n        return foundContexts;\n      }\n    }\n  }\n\n  return foundContexts;\n}\n","function nonBlank(line) {\n  return !/^\\s*$/.test(line);\n}\n\nfunction countIndent(line) {\n  const [indent] = line.match(/^\\s*/);\n  return indent.length;\n}\n\n/**\n * Template literal tag for dedenting FTL code.\n *\n * Strip the common indent of non-blank lines. Remove blank lines.\n *\n * @param {Array<string>} strings\n */\nexport function ftl(strings) {\n  const [code] = strings;\n  const lines = code.split(\"\\n\").filter(nonBlank);\n  const indents = lines.map(countIndent);\n  const common = Math.min(...indents);\n  const indent = new RegExp(`^\\\\s{${common}}`);\n\n  return lines.map(\n    line => line.replace(indent, \"\")\n  ).join(\"\\n\");\n}\n","/*\n * @module fluent\n * @overview\n *\n * `fluent` is a JavaScript implementation of Project Fluent, a localization\n * framework designed to unleash the expressive power of the natural language.\n *\n */\n\nexport { default as _parse } from \"./parser\";\n\nexport { MessageContext } from \"./context\";\nexport {\n  FluentType as MessageArgument,\n  FluentNumber as MessageNumberArgument,\n  FluentDateTime as MessageDateTimeArgument,\n} from \"./types\";\n\nexport { default as CachedIterable } from \"./cached_iterable\";\nexport { mapContextSync, mapContextAsync } from \"./fallback\";\n\nexport { ftl } from \"./util\";\n","import { CachedIterable, mapContextSync } from \"fluent\";\n\n/*\n * `ReactLocalization` handles translation formatting and fallback.\n *\n * The current negotiated fallback chain of languages is stored in the\n * `ReactLocalization` instance in form of an iterable of `MessageContext`\n * instances.  This iterable is used to find the best existing translation for\n * a given identifier.\n *\n * `Localized` components must subscribe to the changes of the\n * `ReactLocalization`'s fallback chain.  When the fallback chain changes (the\n * `messages` iterable is set anew), all subscribed compontent must relocalize.\n *\n * The `ReactLocalization` class instances are exposed to `Localized` elements\n * via the `LocalizationProvider` component.\n */\nexport default class ReactLocalization {\n  constructor(messages) {\n    this.contexts = new CachedIterable(messages);\n    this.subs = new Set();\n  }\n\n  /*\n   * Subscribe a `Localized` component to changes of `messages`.\n   */\n  subscribe(comp) {\n    this.subs.add(comp);\n  }\n\n  /*\n   * Unsubscribe a `Localized` component from `messages` changes.\n   */\n  unsubscribe(comp) {\n    this.subs.delete(comp);\n  }\n\n  /*\n   * Set a new `messages` iterable and trigger the retranslation.\n   */\n  setMessages(messages) {\n    this.contexts = new CachedIterable(messages);\n\n    // Update all subscribed Localized components.\n    this.subs.forEach(comp => comp.relocalize());\n  }\n\n  getMessageContext(id) {\n    return mapContextSync(this.contexts, id);\n  }\n\n  formatCompound(mcx, msg, args) {\n    const value = mcx.format(msg, args);\n\n    if (msg.attrs) {\n      var attrs = {};\n      for (const name of Object.keys(msg.attrs)) {\n        attrs[name] = mcx.format(msg.attrs[name], args);\n      }\n    }\n\n    return { value, attrs };\n  }\n\n  /*\n   * Find a translation by `id` and format it to a string using `args`.\n   */\n  getString(id, args, fallback) {\n    const mcx = this.getMessageContext(id);\n\n    if (mcx === null) {\n      return fallback || id;\n    }\n\n    const msg = mcx.getMessage(id);\n    return mcx.format(msg, args);\n  }\n}\n\nexport function isReactLocalization(props, propName) {\n  const prop = props[propName];\n\n  if (prop instanceof ReactLocalization) {\n    return null;\n  }\n\n  return new Error(\n    `The ${propName} context field must be an instance of ReactLocalization.`\n  );\n}\n","import { Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ReactLocalization, { isReactLocalization} from \"./localization\";\n\n/*\n * The Provider component for the `ReactLocalization` class.\n *\n * Exposes a `ReactLocalization` instance to all descendants via React's\n * context feature.  It makes translations available to all localizable\n * elements in the descendant's render tree without the need to pass them\n * explicitly.\n *\n *     <LocalizationProvider messages={…}>\n *         …\n *     </LocalizationProvider>\n *\n * The `LocalizationProvider` component takes one prop: `messages`.  It should\n * be an iterable of `MessageContext` instances in order of the user's\n * preferred languages.  The `MessageContext` instances will be used by\n * `ReactLocalization` to format translations.  If a translation is missing in\n * one instance, `ReactLocalization` will fall back to the next one.\n */\nexport default class LocalizationProvider extends Component {\n  constructor(props) {\n    super(props);\n    const { messages } = props;\n\n    if (messages === undefined) {\n      throw new Error(\"LocalizationProvider must receive the messages prop.\");\n    }\n\n    if (!messages[Symbol.iterator]) {\n      throw new Error(\"The messages prop must be an iterable.\");\n    }\n\n    this.l10n = new ReactLocalization(messages);\n  }\n\n  getChildContext() {\n    return {\n      l10n: this.l10n\n    };\n  }\n\n  componentWillReceiveProps(next) {\n    const { messages } = next;\n\n    if (messages !== this.props.messages) {\n      this.l10n.setMessages(messages);\n    }\n  }\n\n  render() {\n    return Children.only(this.props.children);\n  }\n}\n\nLocalizationProvider.childContextTypes = {\n  l10n: isReactLocalization\n};\n\nLocalizationProvider.propTypes = {\n  children: PropTypes.element.isRequired,\n  messages: isIterable\n};\n\nfunction isIterable(props, propName, componentName) {\n  const prop = props[propName];\n\n  if (Symbol.iterator in Object(prop)) {\n    return null;\n  }\n\n  return new Error(\n    `The ${propName} prop supplied to ${componentName} must be an iterable.`\n  );\n}\n","import { createElement, Component } from \"react\";\n\nimport { isReactLocalization } from \"./localization\";\n\nexport default function withLocalization(Inner) {\n  class WithLocalization extends Component {\n    componentDidMount() {\n      const { l10n } = this.context;\n\n      if (l10n) {\n        l10n.subscribe(this);\n      }\n    }\n\n    componentWillUnmount() {\n      const { l10n } = this.context;\n\n      if (l10n) {\n        l10n.unsubscribe(this);\n      }\n    }\n\n    /*\n     * Rerender this component in a new language.\n     */\n    relocalize() {\n      // When the `ReactLocalization`'s fallback chain changes, update the\n      // component.\n      this.forceUpdate();\n    }\n\n    /*\n     * Find a translation by `id` and format it to a string using `args`.\n     */\n    getString(id, args, fallback) {\n      const { l10n } = this.context;\n\n      if (!l10n) {\n        return fallback || id;\n      }\n\n      return l10n.getString(id, args, fallback);\n    }\n\n    render() {\n      return createElement(\n        Inner,\n        Object.assign(\n          // getString needs to be re-bound on updates to trigger a re-render\n          { getString: (...args) => this.getString(...args) },\n          this.props\n        )\n      );\n    }\n  }\n\n  WithLocalization.displayName = `WithLocalization(${displayName(Inner)})`;\n\n  WithLocalization.contextTypes = {\n    l10n: isReactLocalization\n  };\n\n  return WithLocalization;\n}\n\nfunction displayName(component) {\n  return component.displayName || component.name || \"Component\";\n}\n","/* eslint-env browser */\n\nconst TEMPLATE = document.createElement(\"template\");\n\nexport function parseMarkup(str) {\n  TEMPLATE.innerHTML = str;\n  return TEMPLATE.content;\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\n\nvar omittedCloseTags = {\n  area: true,\n  base: true,\n  br: true,\n  col: true,\n  embed: true,\n  hr: true,\n  img: true,\n  input: true,\n  keygen: true,\n  link: true,\n  meta: true,\n  param: true,\n  source: true,\n  track: true,\n  wbr: true,\n  // NOTE: menuitem's close tag should be omitted, but that causes problems.\n};\n\nexport default omittedCloseTags;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\nimport omittedCloseTags from './omittedCloseTags';\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = {\n  menuitem: true,\n  ...omittedCloseTags,\n};\n\nexport default voidElementTags;\n","import { isValidElement, cloneElement, Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { isReactLocalization } from \"./localization\";\nimport { parseMarkup } from \"./markup\";\nimport VOID_ELEMENTS from \"../vendor/voidElementTags\";\n\n// Match the opening angle bracket (<) in HTML tags, and HTML entities like\n// &amp;, &#0038;, &#x0026;.\nconst reMarkup = /<|&#?\\w+;/;\n\n/*\n * Prepare props passed to `Localized` for formatting.\n */\nfunction toArguments(props) {\n  const args = {};\n  const elems = {};\n\n  for (const [propname, propval] of Object.entries(props)) {\n    if (propname.startsWith(\"$\")) {\n      const name = propname.substr(1);\n      args[name] = propval;\n    } else if (isValidElement(propval)) {\n      // We'll try to match localNames of elements found in the translation with\n      // names of elements passed as props. localNames are always lowercase.\n      const name = propname.toLowerCase();\n      elems[name] = propval;\n    }\n  }\n\n  return [args, elems];\n}\n\n/*\n * The `Localized` class renders its child with translated props and children.\n *\n *     <Localized id=\"hello-world\">\n *         <p>{'Hello, world!'}</p>\n *     </Localized>\n *\n * The `id` prop should be the unique identifier of the translation.  Any\n * attributes found in the translation will be applied to the wrapped element.\n *\n * Arguments to the translation can be passed as `$`-prefixed props on\n * `Localized`.\n *\n *     <Localized id=\"hello-world\" $username={name}>\n *         <p>{'Hello, { $username }!'}</p>\n *     </Localized>\n *\n *  It's recommended that the contents of the wrapped component be a string\n *  expression.  The string will be used as the ultimate fallback if no\n *  translation is available.  It also makes it easy to grep for strings in the\n *  source code.\n */\nexport default class Localized extends Component {\n  componentDidMount() {\n    const { l10n } = this.context;\n\n    if (l10n) {\n      l10n.subscribe(this);\n    }\n  }\n\n  componentWillUnmount() {\n    const { l10n } = this.context;\n\n    if (l10n) {\n      l10n.unsubscribe(this);\n    }\n  }\n\n  /*\n   * Rerender this component in a new language.\n   */\n  relocalize() {\n    // When the `ReactLocalization`'s fallback chain changes, update the\n    // component.\n    this.forceUpdate();\n  }\n\n  render() {\n    const { l10n } = this.context;\n    const { id, attrs, children } = this.props;\n    const elem = Children.only(children);\n\n    if (!l10n) {\n      // Use the wrapped component as fallback.\n      return elem;\n    }\n\n    const mcx = l10n.getMessageContext(id);\n\n    if (mcx === null) {\n      // Use the wrapped component as fallback.\n      return elem;\n    }\n\n    const msg = mcx.getMessage(id);\n    const [args, elems] = toArguments(this.props);\n    const {\n      value: messageValue,\n      attrs: messageAttrs\n    } = l10n.formatCompound(mcx, msg, args);\n\n    // The default is to forbid all message attributes. If the attrs prop exists\n    // on the Localized instance, only set message attributes which have been\n    // explicitly allowed by the developer.\n    if (attrs && messageAttrs) {\n      var localizedProps = {};\n\n      for (const [name, value] of Object.entries(messageAttrs)) {\n        if (attrs[name]) {\n          localizedProps[name] = value;\n        }\n      }\n    }\n\n    // If the wrapped component is a known void element, explicitly dismiss the\n    // message value and do not pass it to cloneElement in order to avoid the\n    // \"void element tags must neither have `children` nor use\n    // `dangerouslySetInnerHTML`\" error.\n    if (elem.type in VOID_ELEMENTS) {\n      return cloneElement(elem, localizedProps);\n    }\n\n    // If the message has a null value, we're only interested in its attributes.\n    // Do not pass the null value to cloneElement as it would nuke all children\n    // of the wrapped component.\n    if (messageValue === null) {\n      return cloneElement(elem, localizedProps);\n    }\n\n    // If the message value doesn't contain any markup nor any HTML entities,\n    // insert it as the only child of the wrapped component.\n    if (!reMarkup.test(messageValue)) {\n      return cloneElement(elem, localizedProps, messageValue);\n    }\n\n    // If the message contains markup, parse it and try to match the children\n    // found in the translation with the props passed to this Localized.\n    const translationNodes = Array.from(parseMarkup(messageValue).childNodes);\n    const translatedChildren = translationNodes.map(childNode => {\n      if (childNode.nodeType === childNode.TEXT_NODE) {\n        return childNode.textContent;\n      }\n\n      // If the child is not expected just take its textContent.\n      if (!elems.hasOwnProperty(childNode.localName)) {\n        return childNode.textContent;\n      }\n\n      const sourceChild = elems[childNode.localName];\n\n      // If the element passed as a prop to <Localized> is a known void element,\n      // explicitly dismiss any textContent which might have accidentally been\n      // defined in the translation to prevent the \"void element tags must not\n      // have children\" error.\n      if (sourceChild.type in VOID_ELEMENTS) {\n        return sourceChild;\n      }\n\n      // TODO Protect contents of elements wrapped in <Localized>\n      // https://github.com/projectfluent/fluent.js/issues/184\n      // TODO  Control localizable attributes on elements passed as props\n      // https://github.com/projectfluent/fluent.js/issues/185\n      return cloneElement(sourceChild, null, childNode.textContent);\n    });\n\n    return cloneElement(elem, localizedProps, ...translatedChildren);\n  }\n}\n\nLocalized.contextTypes = {\n  l10n: isReactLocalization\n};\n\nLocalized.propTypes = {\n  children: PropTypes.element.isRequired,\n};\n","/*\n * @module fluent-react\n * @overview\n *\n\n * `fluent-react` provides React bindings for Fluent.  It takes advantage of\n * React's Components system and the virtual DOM.  Translations are exposed to\n * components via the provider pattern.\n *\n *     <LocalizationProvider messages={…}>\n *         <Localized id=\"hello-world\">\n *             <p>{'Hello, world!'}</p>\n *         </Localized>\n *     </LocalizationProvider>\n *\n * Consult the documentation of the `LocalizationProvider` and the `Localized`\n * components for more information.\n */\n\nexport { default as LocalizationProvider } from \"./provider\";\nexport { default as withLocalization } from \"./with_localization\";\nexport { default as Localized } from \"./localized\";\nexport { default as ReactLocalization, isReactLocalization }\n  from \"./localization\";\n","this.Dedupe = class Dedupe {\n  constructor(createKey) {\n    this.createKey = createKey || this.defaultCreateKey;\n  }\n\n  defaultCreateKey(item) {\n    return item;\n  }\n\n  /**\n   * Dedupe any number of grouped elements favoring those from earlier groups.\n   *\n   * @param {Array} groups Contains an arbitrary number of arrays of elements.\n   * @returns {Array} A matching array of each provided group deduped.\n   */\n  group(...groups) {\n    const globalKeys = new Set();\n    const result = [];\n    for (const values of groups) {\n      const valueMap = new Map();\n      for (const value of values) {\n        const key = this.createKey(value);\n        if (!globalKeys.has(key) && !valueMap.has(key)) {\n          valueMap.set(key, value);\n        }\n      }\n      result.push(valueMap);\n      valueMap.forEach((value, key) => globalKeys.add(key));\n    }\n    return result.map(m => Array.from(m.values()));\n  }\n};\n\nconst EXPORTED_SYMBOLS = [\"Dedupe\"];\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nconst {actionTypes: at} = ChromeUtils.import(\"resource://activity-stream/common/Actions.jsm\", {});\nconst {Dedupe} = ChromeUtils.import(\"resource://activity-stream/common/Dedupe.jsm\", {});\n\nconst TOP_SITES_DEFAULT_ROWS = 1;\nconst TOP_SITES_MAX_SITES_PER_ROW = 8;\n\nconst dedupe = new Dedupe(site => site && site.url);\n\nconst INITIAL_STATE = {\n  App: {\n    // Have we received real data from the app yet?\n    initialized: false,\n  },\n  ASRouter: {\n    initialized: false,\n    allowLegacySnippets: null,\n  },\n  Snippets: {initialized: false},\n  TopSites: {\n    // Have we received real data from history yet?\n    initialized: false,\n    // The history (and possibly default) links\n    rows: [],\n    // Used in content only to dispatch action to TopSiteForm.\n    editForm: null,\n    // Used in content only to open the SearchShortcutsForm modal.\n    showSearchShortcutsForm: false,\n    // The list of available search shortcuts.\n    searchShortcuts: [],\n  },\n  Prefs: {\n    initialized: false,\n    values: {},\n  },\n  Dialog: {\n    visible: false,\n    data: {},\n  },\n  Sections: [],\n  Pocket: {\n    isUserLoggedIn: null,\n    pocketCta: {},\n    waitingForSpoc: true,\n  },\n};\n\nfunction App(prevState = INITIAL_STATE.App, action) {\n  switch (action.type) {\n    case at.INIT:\n      return Object.assign({}, prevState, action.data || {}, {initialized: true});\n    default:\n      return prevState;\n  }\n}\n\nfunction ASRouter(prevState = INITIAL_STATE.ASRouter, action) {\n  switch (action.type) {\n    case at.AS_ROUTER_INITIALIZED:\n      return {...action.data, initialized: true};\n    case at.AS_ROUTER_PREF_CHANGED:\n      return {...prevState, ...action.data};\n    default:\n      return prevState;\n  }\n}\n\n/**\n * insertPinned - Inserts pinned links in their specified slots\n *\n * @param {array} a list of links\n * @param {array} a list of pinned links\n * @return {array} resulting list of links with pinned links inserted\n */\nfunction insertPinned(links, pinned) {\n  // Remove any pinned links\n  const pinnedUrls = pinned.map(link => link && link.url);\n  let newLinks = links.filter(link => (link ? !pinnedUrls.includes(link.url) : false));\n  newLinks = newLinks.map(link => {\n    if (link && link.isPinned) {\n      delete link.isPinned;\n      delete link.pinIndex;\n    }\n    return link;\n  });\n\n  // Then insert them in their specified location\n  pinned.forEach((val, index) => {\n    if (!val) { return; }\n    let link = Object.assign({}, val, {isPinned: true, pinIndex: index});\n    if (index > newLinks.length) {\n      newLinks[index] = link;\n    } else {\n      newLinks.splice(index, 0, link);\n    }\n  });\n\n  return newLinks;\n}\n\nfunction TopSites(prevState = INITIAL_STATE.TopSites, action) {\n  let hasMatch;\n  let newRows;\n  switch (action.type) {\n    case at.TOP_SITES_UPDATED:\n      if (!action.data || !action.data.links) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {initialized: true, rows: action.data.links}, action.data.pref ? {pref: action.data.pref} : {});\n    case at.TOP_SITES_PREFS_UPDATED:\n      return Object.assign({}, prevState, {pref: action.data.pref});\n    case at.TOP_SITES_EDIT:\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: action.data.index,\n          previewResponse: null,\n        },\n      });\n    case at.TOP_SITES_CANCEL_EDIT:\n      return Object.assign({}, prevState, {editForm: null});\n    case at.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL:\n      return Object.assign({}, prevState, {showSearchShortcutsForm: true});\n    case at.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL:\n      return Object.assign({}, prevState, {showSearchShortcutsForm: false});\n    case at.PREVIEW_RESPONSE:\n      if (!prevState.editForm || action.data.url !== prevState.editForm.previewUrl) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: action.data.preview,\n          previewUrl: action.data.url,\n        },\n      });\n    case at.PREVIEW_REQUEST:\n      if (!prevState.editForm) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: null,\n          previewUrl: action.data.url,\n        },\n      });\n    case at.PREVIEW_REQUEST_CANCEL:\n      if (!prevState.editForm) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: null,\n        },\n      });\n    case at.SCREENSHOT_UPDATED:\n      newRows = prevState.rows.map(row => {\n        if (row && row.url === action.data.url) {\n          hasMatch = true;\n          return Object.assign({}, row, {screenshot: action.data.screenshot});\n        }\n        return row;\n      });\n      return hasMatch ? Object.assign({}, prevState, {rows: newRows}) : prevState;\n    case at.PLACES_BOOKMARK_ADDED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.map(site => {\n        if (site && site.url === action.data.url) {\n          const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n          return Object.assign({}, site, {bookmarkGuid, bookmarkTitle, bookmarkDateCreated: dateAdded});\n        }\n        return site;\n      });\n      return Object.assign({}, prevState, {rows: newRows});\n    case at.PLACES_BOOKMARK_REMOVED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.map(site => {\n        if (site && site.url === action.data.url) {\n          const newSite = Object.assign({}, site);\n          delete newSite.bookmarkGuid;\n          delete newSite.bookmarkTitle;\n          delete newSite.bookmarkDateCreated;\n          return newSite;\n        }\n        return site;\n      });\n      return Object.assign({}, prevState, {rows: newRows});\n    case at.PLACES_LINK_DELETED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.filter(site => action.data.url !== site.url);\n      return Object.assign({}, prevState, {rows: newRows});\n    case at.UPDATE_SEARCH_SHORTCUTS:\n      return {...prevState, searchShortcuts: action.data.searchShortcuts};\n    case at.SNIPPETS_PREVIEW_MODE:\n      return {...prevState, rows: []};\n    default:\n      return prevState;\n  }\n}\n\nfunction Dialog(prevState = INITIAL_STATE.Dialog, action) {\n  switch (action.type) {\n    case at.DIALOG_OPEN:\n      return Object.assign({}, prevState, {visible: true, data: action.data});\n    case at.DIALOG_CANCEL:\n      return Object.assign({}, prevState, {visible: false});\n    case at.DELETE_HISTORY_URL:\n      return Object.assign({}, INITIAL_STATE.Dialog);\n    default:\n      return prevState;\n  }\n}\n\nfunction Prefs(prevState = INITIAL_STATE.Prefs, action) {\n  let newValues;\n  switch (action.type) {\n    case at.PREFS_INITIAL_VALUES:\n      return Object.assign({}, prevState, {initialized: true, values: action.data});\n    case at.PREF_CHANGED:\n      newValues = Object.assign({}, prevState.values);\n      newValues[action.data.name] = action.data.value;\n      return Object.assign({}, prevState, {values: newValues});\n    default:\n      return prevState;\n  }\n}\n\nfunction Sections(prevState = INITIAL_STATE.Sections, action) {\n  let hasMatch;\n  let newState;\n  switch (action.type) {\n    case at.SECTION_DEREGISTER:\n      return prevState.filter(section => section.id !== action.data);\n    case at.SECTION_REGISTER:\n      // If section exists in prevState, update it\n      newState = prevState.map(section => {\n        if (section && section.id === action.data.id) {\n          hasMatch = true;\n          return Object.assign({}, section, action.data);\n        }\n        return section;\n      });\n      // Otherwise, append it\n      if (!hasMatch) {\n        const initialized = !!(action.data.rows && action.data.rows.length > 0);\n        const section = Object.assign({title: \"\", rows: [], enabled: false}, action.data, {initialized});\n        newState.push(section);\n      }\n      return newState;\n    case at.SECTION_UPDATE:\n      newState = prevState.map(section => {\n        if (section && section.id === action.data.id) {\n          // If the action is updating rows, we should consider initialized to be true.\n          // This can be overridden if initialized is defined in the action.data\n          const initialized = action.data.rows ? {initialized: true} : {};\n\n          // Make sure pinned cards stay at their current position when rows are updated.\n          // Disabling a section (SECTION_UPDATE with empty rows) does not retain pinned cards.\n          if (action.data.rows && action.data.rows.length > 0 && section.rows.find(card => card.pinned)) {\n            const rows = Array.from(action.data.rows);\n            section.rows.forEach((card, index) => {\n              if (card.pinned) {\n                // Only add it if it's not already there.\n                if (rows[index].guid !== card.guid) {\n                  rows.splice(index, 0, card);\n                }\n              }\n            });\n            return Object.assign({}, section, initialized, Object.assign({}, action.data, {rows}));\n          }\n\n          return Object.assign({}, section, initialized, action.data);\n        }\n        return section;\n      });\n\n      if (!action.data.dedupeConfigurations) {\n        return newState;\n      }\n\n      action.data.dedupeConfigurations.forEach(dedupeConf => {\n        newState = newState.map(section => {\n          if (section.id === dedupeConf.id) {\n            const dedupedRows = dedupeConf.dedupeFrom.reduce((rows, dedupeSectionId) => {\n              const dedupeSection = newState.find(s => s.id === dedupeSectionId);\n              const [, newRows] = dedupe.group(dedupeSection.rows, rows);\n              return newRows;\n            }, section.rows);\n\n            return Object.assign({}, section, {rows: dedupedRows});\n          }\n\n          return section;\n        });\n      });\n\n      return newState;\n    case at.SECTION_UPDATE_CARD:\n      return prevState.map(section => {\n        if (section && section.id === action.data.id && section.rows) {\n          const newRows = section.rows.map(card => {\n            if (card.url === action.data.url) {\n              return Object.assign({}, card, action.data.options);\n            }\n            return card;\n          });\n          return Object.assign({}, section, {rows: newRows});\n        }\n        return section;\n      });\n    case at.PLACES_BOOKMARK_ADDED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          // find the item within the rows that is attempted to be bookmarked\n          if (item.url === action.data.url) {\n            const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n            return Object.assign({}, item, {\n              bookmarkGuid,\n              bookmarkTitle,\n              bookmarkDateCreated: dateAdded,\n              type: \"bookmark\",\n            });\n          }\n          return item;\n        }),\n      }));\n    case at.PLACES_SAVED_TO_POCKET:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          if (item.url === action.data.url) {\n            return Object.assign({}, item, {\n              open_url: action.data.open_url,\n              pocket_id: action.data.pocket_id,\n              title: action.data.title,\n              type: \"pocket\",\n            });\n          }\n          return item;\n        }),\n      }));\n    case at.PLACES_BOOKMARK_REMOVED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          // find the bookmark within the rows that is attempted to be removed\n          if (item.url === action.data.url) {\n            const newSite = Object.assign({}, item);\n            delete newSite.bookmarkGuid;\n            delete newSite.bookmarkTitle;\n            delete newSite.bookmarkDateCreated;\n            if (!newSite.type || newSite.type === \"bookmark\") {\n              newSite.type = \"history\";\n            }\n            return newSite;\n          }\n          return item;\n        }),\n      }));\n    case at.PLACES_LINK_DELETED:\n    case at.PLACES_LINK_BLOCKED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section =>\n        Object.assign({}, section, {rows: section.rows.filter(site => site.url !== action.data.url)}));\n    case at.DELETE_FROM_POCKET:\n    case at.ARCHIVE_FROM_POCKET:\n      return prevState.map(section =>\n        Object.assign({}, section, {rows: section.rows.filter(site => site.pocket_id !== action.data.pocket_id)}));\n    case at.SNIPPETS_PREVIEW_MODE:\n      return prevState.map(section => ({...section, rows: []}));\n    default:\n      return prevState;\n  }\n}\n\nfunction Snippets(prevState = INITIAL_STATE.Snippets, action) {\n  switch (action.type) {\n    case at.SNIPPETS_DATA:\n      return Object.assign({}, prevState, {initialized: true}, action.data);\n    case at.SNIPPET_BLOCKED:\n      return Object.assign({}, prevState, {blockList: prevState.blockList.concat(action.data)});\n    case at.SNIPPETS_BLOCKLIST_CLEARED:\n      return Object.assign({}, prevState, {blockList: []});\n    case at.SNIPPETS_RESET:\n      return INITIAL_STATE.Snippets;\n    default:\n      return prevState;\n  }\n}\n\nfunction Pocket(prevState = INITIAL_STATE.Pocket, action) {\n  switch (action.type) {\n    case at.POCKET_WAITING_FOR_SPOC:\n      return {...prevState, waitingForSpoc: action.data};\n    case at.POCKET_LOGGED_IN:\n      return {...prevState, isUserLoggedIn: !!action.data};\n    case at.POCKET_CTA:\n      return {\n        ...prevState,\n        pocketCta: {\n          ctaButton: action.data.cta_button,\n          ctaText: action.data.cta_text,\n          ctaUrl: action.data.cta_url,\n          useCta: action.data.use_cta,\n        },\n      };\n    default:\n      return prevState;\n  }\n}\n\nthis.INITIAL_STATE = INITIAL_STATE;\nthis.TOP_SITES_DEFAULT_ROWS = TOP_SITES_DEFAULT_ROWS;\nthis.TOP_SITES_MAX_SITES_PER_ROW = TOP_SITES_MAX_SITES_PER_ROW;\n\nthis.reducers = {TopSites, App, ASRouter, Snippets, Prefs, Dialog, Sections, Pocket};\n\nconst EXPORTED_SYMBOLS = [\"reducers\", \"INITIAL_STATE\", \"insertPinned\", \"TOP_SITES_DEFAULT_ROWS\", \"TOP_SITES_MAX_SITES_PER_ROW\"];\n","import React from \"react\";\n\nexport class ModalOverlay extends React.PureComponent {\n  componentWillMount() {\n    this.setState({active: true});\n    document.body.classList.add(\"modal-open\");\n  }\n\n  componentWillUnmount() {\n    document.body.classList.remove(\"modal-open\");\n    this.setState({active: false});\n  }\n\n  render() {\n    const {active} = this.state;\n    const {title, button_label} = this.props;\n    return (\n      <div>\n        <div className={`modalOverlayOuter ${active ? \"active\" : \"\"}`} />\n        <div className={`modalOverlayInner ${active ? \"active\" : \"\"}`}>\n          <h2> {title} </h2>\n          {this.props.children}\n          <div className=\"footer\">\n            <button tabIndex=\"2\" onClick={this.props.onDoneButton} className=\"button primary modalButton\"> {button_label} </button>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n","import {ModalOverlay} from \"../../components/ModalOverlay/ModalOverlay\";\nimport React from \"react\";\n\nclass OnboardingCard extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n  }\n\n  onClick() {\n    const {props} = this;\n    const ping = {\n      event: \"CLICK_BUTTON\",\n      message_id: props.id,\n      id: props.UISurface,\n    };\n    props.sendUserActionTelemetry(ping);\n    props.onAction(props.content.button_action);\n  }\n\n  render() {\n    const {content} = this.props;\n    return (\n      <div className=\"onboardingMessage\">\n        <div className={`onboardingMessageImage ${content.icon}`} />\n        <div className=\"onboardingContent\">\n          <span>\n            <h3> {content.title} </h3>\n            <p> {content.text} </p>\n          </span>\n          <span>\n            <button tabIndex=\"1\" className=\"button onboardingButton\" onClick={this.onClick}> {content.button_label} </button>\n          </span>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport class OnboardingMessage extends React.PureComponent {\n  render() {\n    const {props} = this;\n    const {button_label, header} = props.extraTemplateStrings;\n    return (\n      <ModalOverlay {...props} button_label={button_label} title={header}>\n        <div className=\"onboardingMessageContainer\">\n          {props.bundle.map(message => (\n            <OnboardingCard key={message.id}\n              sendUserActionTelemetry={props.sendUserActionTelemetry}\n              onAction={props.onAction}\n              UISurface={props.UISurface}\n              {...message} />\n          ))}\n        </div>\n      </ModalOverlay>\n    );\n  }\n}\n","export const cardContextTypes = {\n  history: {\n    intlID: \"type_label_visited\",\n    icon: \"history-item\",\n  },\n  bookmark: {\n    intlID: \"type_label_bookmarked\",\n    icon: \"bookmark-added\",\n  },\n  trending: {\n    intlID: \"type_label_recommended\",\n    icon: \"trending\",\n  },\n  now: {\n    intlID: \"type_label_now\",\n    icon: \"now\",\n  },\n  pocket: {\n    intlID: \"type_label_pocket\",\n    icon: \"pocket\",\n  },\n  download: {\n    intlID: \"type_label_downloaded\",\n    icon: \"download\",\n  },\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {cardContextTypes} from \"./types\";\nimport {connect} from \"react-redux\";\nimport {GetPlatformString} from \"content-src/lib/link-menu-options\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\n\n// Keep track of pending image loads to only request once\nconst gImageLoading = new Map();\n\n/**\n * Card component.\n * Cards are found within a Section component and contain information about a link such\n * as preview image, page title, page description, and some context about if the page\n * was visited, bookmarked, trending etc...\n * Each Section can make an unordered list of Cards which will create one instane of\n * this class. Each card will then get a context menu which reflects the actions that\n * can be done on this Card.\n */\nexport class _Card extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {\n      activeCard: null,\n      imageLoaded: false,\n      showContextMenu: false,\n      cardImage: null,\n    };\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n    this.onLinkClick = this.onLinkClick.bind(this);\n  }\n\n  /**\n   * Helper to conditionally load an image and update state when it loads.\n   */\n  async maybeLoadImage() {\n    // No need to load if it's already loaded or no image\n    const {cardImage} = this.state;\n    if (!cardImage) {\n      return;\n    }\n\n    const imageUrl = cardImage.url;\n    if (!this.state.imageLoaded) {\n      // Initialize a promise to share a load across multiple card updates\n      if (!gImageLoading.has(imageUrl)) {\n        const loaderPromise = new Promise((resolve, reject) => {\n          const loader = new Image();\n          loader.addEventListener(\"load\", resolve);\n          loader.addEventListener(\"error\", reject);\n          loader.src = imageUrl;\n        });\n\n        // Save and remove the promise only while it's pending\n        gImageLoading.set(imageUrl, loaderPromise);\n        loaderPromise.catch(ex => ex).then(() => gImageLoading.delete(imageUrl)).catch();\n      }\n\n      // Wait for the image whether just started loading or reused promise\n      await gImageLoading.get(imageUrl);\n\n      // Only update state if we're still waiting to load the original image\n      if (ScreenshotUtils.isRemoteImageLocal(this.state.cardImage, this.props.link.image) &&\n          !this.state.imageLoaded) {\n        this.setState({imageLoaded: true});\n      }\n    }\n  }\n\n  /**\n   * Helper to obtain the next state based on nextProps and prevState.\n   *\n   * NOTE: Rename this method to getDerivedStateFromProps when we update React\n   *       to >= 16.3. We will need to update tests as well. We cannot rename this\n   *       method to getDerivedStateFromProps now because there is a mismatch in\n   *       the React version that we are using for both testing and production.\n   *       (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n   *\n   * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n   */\n  static getNextStateFromProps(nextProps, prevState) {\n    const {image} = nextProps.link;\n    const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.cardImage, image);\n    let nextState = null;\n\n    // Image is updating.\n    if (!imageInState && nextProps.link) {\n      nextState = {imageLoaded: false};\n    }\n\n    if (imageInState) {\n      return nextState;\n    }\n\n    // Since image was updated, attempt to revoke old image blob URL, if it exists.\n    ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.cardImage);\n\n    nextState = nextState || {};\n    nextState.cardImage = ScreenshotUtils.createLocalImageObject(image);\n\n    return nextState;\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.setState({\n      activeCard: this.props.index,\n      showContextMenu: true,\n    });\n  }\n\n  /**\n   * Report to telemetry additional information about the item.\n   */\n  _getTelemetryInfo() {\n    // Filter out \"history\" type for being the default\n    if (this.props.link.type !== \"history\") {\n      return {value: {card_type: this.props.link.type}};\n    }\n\n    return null;\n  }\n\n  onLinkClick(event) {\n    event.preventDefault();\n    if (this.props.link.type === \"download\") {\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SHOW_DOWNLOAD_FILE,\n        data: this.props.link,\n      }));\n    } else {\n      const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.OPEN_LINK,\n        data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}}),\n      }));\n    }\n    if (this.props.isWebExtension) {\n      this.props.dispatch(ac.WebExtEvent(at.WEBEXT_CLICK, {\n        source: this.props.eventSource,\n        url: this.props.link.url,\n        action_position: this.props.index,\n      }));\n    } else {\n      this.props.dispatch(ac.UserEvent(Object.assign({\n        event: \"CLICK\",\n        source: this.props.eventSource,\n        action_position: this.props.index,\n      }, this._getTelemetryInfo())));\n\n      if (this.props.shouldSendImpressionStats) {\n        this.props.dispatch(ac.ImpressionStats({\n          source: this.props.eventSource,\n          click: 0,\n          tiles: [{id: this.props.link.guid, pos: this.props.index}],\n        }));\n      }\n    }\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  componentDidMount() {\n    this.maybeLoadImage();\n  }\n\n  componentDidUpdate() {\n    this.maybeLoadImage();\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillMount() {\n    const nextState = _Card.getNextStateFromProps(this.props, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillReceiveProps(nextProps) {\n    const nextState = _Card.getNextStateFromProps(nextProps, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  componentWillUnmount() {\n    ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.cardImage);\n  }\n\n  render() {\n    const {index, className, link, dispatch, contextMenuOptions, eventSource, shouldSendImpressionStats} = this.props;\n    const {props} = this;\n    const isContextMenuOpen = this.state.showContextMenu && this.state.activeCard === index;\n    // Display \"now\" as \"trending\" until we have new strings #3402\n    const {icon, intlID} = cardContextTypes[link.type === \"now\" ? \"trending\" : link.type] || {};\n    const hasImage = this.state.cardImage || link.hasImage;\n    const imageStyle = {backgroundImage: this.state.cardImage ? `url(${this.state.cardImage.url})` : \"none\"};\n    const outerClassName = [\n      \"card-outer\",\n      className,\n      isContextMenuOpen && \"active\",\n      props.placeholder && \"placeholder\",\n    ].filter(v => v).join(\" \");\n\n    return (<li className={outerClassName}>\n      <a href={link.type === \"pocket\" ? link.open_url : link.url} onClick={!props.placeholder ? this.onLinkClick : undefined}>\n        <div className=\"card\">\n          <div className=\"card-preview-image-outer\">\n            {hasImage &&\n              <div className={`card-preview-image${this.state.imageLoaded ? \" loaded\" : \"\"}`} style={imageStyle} />\n            }\n          </div>\n          <div className=\"card-details\">\n            {link.type === \"download\" && <div className=\"card-host-name alternate\"><FormattedMessage id={GetPlatformString(this.props.platform)} /></div>}\n            {link.hostname &&\n              <div className=\"card-host-name\">\n                {link.hostname.slice(0, 100)}{link.type === \"download\" && `  \\u2014 ${link.description}`}\n              </div>\n            }\n            <div className={[\n              \"card-text\",\n              icon ? \"\" : \"no-context\",\n              link.description ? \"\" : \"no-description\",\n              link.hostname ? \"\" : \"no-host-name\",\n            ].join(\" \")}>\n              <h4 className=\"card-title\" dir=\"auto\">{link.title}</h4>\n              <p className=\"card-description\" dir=\"auto\">{link.description}</p>\n            </div>\n            <div className=\"card-context\">\n              {icon && !link.context && <span className={`card-context-icon icon icon-${icon}`} />}\n              {link.icon && link.context && <span className=\"card-context-icon icon\" style={{backgroundImage: `url('${link.icon}')`}} />}\n              {intlID && !link.context && <div className=\"card-context-label\"><FormattedMessage id={intlID} defaultMessage=\"Visited\" /></div>}\n              {link.context && <div className=\"card-context-label\">{link.context}</div>}\n            </div>\n          </div>\n        </div>\n      </a>\n      {!props.placeholder && <button className=\"context-menu-button icon\" title={this.props.intl.formatMessage({id: \"context_menu_title\"})}\n        onClick={this.onMenuButtonClick}>\n        <span className=\"sr-only\">{`Open context menu for ${link.title}`}</span>\n      </button>}\n      {isContextMenuOpen &&\n        <LinkMenu\n          dispatch={dispatch}\n          index={index}\n          source={eventSource}\n          onUpdate={this.onMenuUpdate}\n          options={link.contextMenuOptions || contextMenuOptions}\n          site={link}\n          siteInfo={this._getTelemetryInfo()}\n          shouldSendImpressionStats={shouldSendImpressionStats} />\n      }\n   </li>);\n  }\n}\n_Card.defaultProps = {link: {}};\nexport const Card = connect(state => ({platform: state.Prefs.values.platform}))(injectIntl(_Card));\nexport const PlaceholderCard = props => <Card placeholder={true} className={props.className} />;\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class TopSiteFormInput extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {validationError: this.props.validationError};\n    this.onChange = this.onChange.bind(this);\n    this.onMount = this.onMount.bind(this);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (nextProps.shouldFocus && !this.props.shouldFocus) {\n      this.input.focus();\n    }\n    if (nextProps.validationError && !this.props.validationError) {\n      this.setState({validationError: true});\n    }\n    // If the component is in an error state but the value was cleared by the parent\n    if (this.state.validationError && !nextProps.value) {\n      this.setState({validationError: false});\n    }\n  }\n\n  onChange(ev) {\n    if (this.state.validationError) {\n      this.setState({validationError: false});\n    }\n    this.props.onChange(ev);\n  }\n\n  onMount(input) {\n    this.input = input;\n  }\n\n  render() {\n    const showClearButton = this.props.value && this.props.onClear;\n    const {typeUrl} = this.props;\n    const {validationError} = this.state;\n\n    return (<label><FormattedMessage id={this.props.titleId} />\n      <div className={`field ${typeUrl ? \"url\" : \"\"}${validationError ? \" invalid\" : \"\"}`}>\n        {this.props.loading ?\n          <div className=\"loading-container\"><div className=\"loading-animation\" /></div> :\n          showClearButton && <div className=\"icon icon-clear-input\" onClick={this.props.onClear} />}\n        <input type=\"text\"\n          value={this.props.value}\n          ref={this.onMount}\n          onChange={this.onChange}\n          placeholder={this.props.intl.formatMessage({id: this.props.placeholderId})}\n          autoFocus={this.props.shouldFocus}\n          disabled={this.props.loading} />\n        {validationError &&\n          <aside className=\"error-tooltip\">\n            <FormattedMessage id={this.props.errorMessageId} />\n          </aside>}\n      </div>\n    </label>);\n  }\n}\n\nTopSiteFormInput.defaultProps = {\n  showClearButton: false,\n  value: \"\",\n  validationError: false,\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {TopSiteFormInput} from \"./TopSiteFormInput\";\nimport {TopSiteLink} from \"./TopSite\";\n\nexport class TopSiteForm extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    const {site} = props;\n    this.state = {\n      label: site ? (site.label || site.hostname) : \"\",\n      url: site ? site.url : \"\",\n      validationError: false,\n      customScreenshotUrl: site ? site.customScreenshotURL : \"\",\n      showCustomScreenshotForm: site ? site.customScreenshotURL : false,\n    };\n    this.onClearScreenshotInput = this.onClearScreenshotInput.bind(this);\n    this.onLabelChange = this.onLabelChange.bind(this);\n    this.onUrlChange = this.onUrlChange.bind(this);\n    this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n    this.onClearUrlClick = this.onClearUrlClick.bind(this);\n    this.onDoneButtonClick = this.onDoneButtonClick.bind(this);\n    this.onCustomScreenshotUrlChange = this.onCustomScreenshotUrlChange.bind(this);\n    this.onPreviewButtonClick = this.onPreviewButtonClick.bind(this);\n    this.onEnableScreenshotUrlForm = this.onEnableScreenshotUrlForm.bind(this);\n    this.validateUrl = this.validateUrl.bind(this);\n  }\n\n  onLabelChange(event) {\n    this.setState({\"label\": event.target.value});\n  }\n\n  onUrlChange(event) {\n    this.setState({\n      url: event.target.value,\n      validationError: false,\n    });\n  }\n\n  onClearUrlClick() {\n    this.setState({\n      url: \"\",\n      validationError: false,\n    });\n  }\n\n  onEnableScreenshotUrlForm() {\n    this.setState({showCustomScreenshotForm: true});\n  }\n\n  _updateCustomScreenshotInput(customScreenshotUrl) {\n    this.setState({\n      customScreenshotUrl,\n      validationError: false,\n    });\n    this.props.dispatch({type: at.PREVIEW_REQUEST_CANCEL});\n  }\n\n  onCustomScreenshotUrlChange(event) {\n    this._updateCustomScreenshotInput(event.target.value);\n  }\n\n  onClearScreenshotInput() {\n    this._updateCustomScreenshotInput(\"\");\n  }\n\n  onCancelButtonClick(ev) {\n    ev.preventDefault();\n    this.props.onClose();\n  }\n\n  onDoneButtonClick(ev) {\n    ev.preventDefault();\n\n    if (this.validateForm()) {\n      const site = {url: this.cleanUrl(this.state.url)};\n      const {index} = this.props;\n      if (this.state.label !== \"\") {\n        site.label = this.state.label;\n      }\n\n      if (this.state.customScreenshotUrl) {\n        site.customScreenshotURL = this.cleanUrl(this.state.customScreenshotUrl);\n      } else if (this.props.site && this.props.site.customScreenshotURL) {\n        // Used to flag that previously cached screenshot should be removed\n        site.customScreenshotURL = null;\n      }\n      this.props.dispatch(ac.AlsoToMain({\n        type: at.TOP_SITES_PIN,\n        data: {site, index},\n      }));\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"TOP_SITES_EDIT\",\n        action_position: index,\n      }));\n\n      this.props.onClose();\n    }\n  }\n\n  onPreviewButtonClick(event) {\n    event.preventDefault();\n    if (this.validateForm()) {\n      this.props.dispatch(ac.AlsoToMain({\n        type: at.PREVIEW_REQUEST,\n        data: {url: this.cleanUrl(this.state.customScreenshotUrl)},\n      }));\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"PREVIEW_REQUEST\",\n      }));\n    }\n  }\n\n  cleanUrl(url) {\n    // If we are missing a protocol, prepend http://\n    if (!url.startsWith(\"http:\") && !url.startsWith(\"https:\")) {\n      return `http://${url}`;\n    }\n    return url;\n  }\n\n  _tryParseUrl(url) {\n    try {\n      return new URL(url);\n    } catch (e) {\n      return null;\n    }\n  }\n\n  validateUrl(url) {\n    const validProtocols = [\"http:\", \"https:\"];\n    const urlObj = this._tryParseUrl(url) || this._tryParseUrl(this.cleanUrl(url));\n\n    return urlObj && validProtocols.includes(urlObj.protocol);\n  }\n\n  validateCustomScreenshotUrl() {\n    const {customScreenshotUrl} = this.state;\n    return !customScreenshotUrl || this.validateUrl(customScreenshotUrl);\n  }\n\n  validateForm() {\n    const validate = this.validateUrl(this.state.url) && this.validateCustomScreenshotUrl();\n\n    if (!validate) {\n      this.setState({validationError: true});\n    }\n\n    return validate;\n  }\n\n  _renderCustomScreenshotInput() {\n    const {customScreenshotUrl} = this.state;\n    const requestFailed = this.props.previewResponse === \"\";\n    const validationError = (this.state.validationError && !this.validateCustomScreenshotUrl()) || requestFailed;\n    // Set focus on error if the url field is valid or when the input is first rendered and is empty\n    const shouldFocus = (validationError && this.validateUrl(this.state.url)) || !customScreenshotUrl;\n    const isLoading = this.props.previewResponse === null &&\n      customScreenshotUrl && this.props.previewUrl === this.cleanUrl(customScreenshotUrl);\n\n    if (!this.state.showCustomScreenshotForm) {\n      return (<a className=\"enable-custom-image-input\" onClick={this.onEnableScreenshotUrlForm}>\n        <FormattedMessage id=\"topsites_form_use_image_link\" />\n      </a>);\n    }\n    return (<div className=\"custom-image-input-container\">\n      <TopSiteFormInput\n        errorMessageId={requestFailed ? \"topsites_form_image_validation\" : \"topsites_form_url_validation\"}\n        loading={isLoading}\n        onChange={this.onCustomScreenshotUrlChange}\n        onClear={this.onClearScreenshotInput}\n        shouldFocus={shouldFocus}\n        typeUrl={true}\n        value={customScreenshotUrl}\n        validationError={validationError}\n        titleId=\"topsites_form_image_url_label\"\n        placeholderId=\"topsites_form_url_placeholder\"\n        intl={this.props.intl} />\n    </div>);\n  }\n\n  render() {\n    const {customScreenshotUrl} = this.state;\n    const requestFailed = this.props.previewResponse === \"\";\n    // For UI purposes, editing without an existing link is \"add\"\n    const showAsAdd = !this.props.site;\n    const previous = (this.props.site && this.props.site.customScreenshotURL) || \"\";\n    const changed = customScreenshotUrl && this.cleanUrl(customScreenshotUrl) !== previous;\n    // Preview mode if changes were made to the custom screenshot URL and no preview was received yet\n    // or the request failed\n    const previewMode = changed && !this.props.previewResponse;\n    const previewLink = Object.assign({}, this.props.site);\n    if (this.props.previewResponse) {\n      previewLink.screenshot = this.props.previewResponse;\n      previewLink.customScreenshotURL = this.props.previewUrl;\n    }\n    return (\n      <form className=\"topsite-form\">\n        <div className=\"form-input-container\">\n          <h3 className=\"section-title\">\n            <FormattedMessage id={showAsAdd ? \"topsites_form_add_header\" : \"topsites_form_edit_header\"} />\n          </h3>\n          <div className=\"fields-and-preview\">\n            <div className=\"form-wrapper\">\n              <TopSiteFormInput onChange={this.onLabelChange}\n                value={this.state.label}\n                titleId=\"topsites_form_title_label\"\n                placeholderId=\"topsites_form_title_placeholder\"\n                intl={this.props.intl} />\n              <TopSiteFormInput onChange={this.onUrlChange}\n                shouldFocus={this.state.validationError && !this.validateUrl(this.state.url)}\n                value={this.state.url}\n                onClear={this.onClearUrlClick}\n                validationError={this.state.validationError && !this.validateUrl(this.state.url)}\n                titleId=\"topsites_form_url_label\"\n                typeUrl={true}\n                placeholderId=\"topsites_form_url_placeholder\"\n                errorMessageId=\"topsites_form_url_validation\"\n                intl={this.props.intl} />\n              {this._renderCustomScreenshotInput()}\n            </div>\n            <TopSiteLink link={previewLink}\n              defaultStyle={requestFailed}\n              title={this.state.label} />\n          </div>\n        </div>\n        <section className=\"actions\">\n          <button className=\"cancel\" type=\"button\" onClick={this.onCancelButtonClick}>\n            <FormattedMessage id=\"topsites_form_cancel_button\" />\n          </button>\n          {previewMode ?\n            <button className=\"done preview\" type=\"submit\" onClick={this.onPreviewButtonClick}>\n              <FormattedMessage id=\"topsites_form_preview_button\" />\n            </button> :\n            <button className=\"done\" type=\"submit\" onClick={this.onDoneButtonClick}>\n              <FormattedMessage id={showAsAdd ? \"topsites_form_add_button\" : \"topsites_form_save_button\"} />\n            </button>}\n        </section>\n      </form>\n    );\n  }\n}\n\nTopSiteForm.defaultProps = {\n  site: null,\n  index: -1,\n};\n"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./content-src/activity-stream.jsx","webpack:///(webpack)/buildin/global.js","webpack:///./common/Actions.jsm","webpack:///./content-src/lib/snippets.js","webpack:///./content-src/asrouter/asrouter-content.jsx","webpack:///./content-src/lib/init-store.js","webpack:///external \"Redux\"","webpack:///./content-src/asrouter/rich-text-strings.js","webpack:///./content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","webpack:///external \"React\"","webpack:///external \"PropTypes\"","webpack:///external \"ReactDOM\"","webpack:///./content-src/components/Base/Base.jsx","webpack:///external \"ReactIntl\"","webpack:///./content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","webpack:///./content-src/components/ConfirmDialog/ConfirmDialog.jsx","webpack:///external \"ReactRedux\"","webpack:///./content-src/components/ErrorBoundary/ErrorBoundary.jsx","webpack:///./content-src/components/ManualMigration/ManualMigration.jsx","webpack:///./common/PrerenderData.jsm","webpack:///./content-src/components/Search/Search.jsx","webpack:///./content-src/lib/constants.js","webpack:///./content-src/components/Sections/Sections.jsx","webpack:///./content-src/lib/link-menu-options.js","webpack:///./content-src/components/LinkMenu/LinkMenu.jsx","webpack:///./content-src/components/ContextMenu/ContextMenu.jsx","webpack:///./content-src/lib/screenshot-utils.js","webpack:///./content-src/components/CollapsibleSection/CollapsibleSection.jsx","webpack:///./content-src/components/SectionMenu/SectionMenu.jsx","webpack:///./content-src/lib/section-menu-options.js","webpack:///./content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","webpack:///./common/PerfService.jsm","webpack:///./content-src/components/MoreRecommendations/MoreRecommendations.jsx","webpack:///./content-src/components/PocketLoggedInCta/PocketLoggedInCta.jsx","webpack:///./content-src/components/Topics/Topics.jsx","webpack:///./content-src/components/TopSites/TopSites.jsx","webpack:///./content-src/components/TopSites/TopSitesConstants.js","webpack:///./content-src/components/TopSites/SearchShortcutsForm.jsx","webpack:///./content-src/components/TopSites/TopSite.jsx","webpack:///./content-src/components/StartupOverlay/StartupOverlay.jsx","webpack:///./content-src/lib/detect-user-session-start.js","webpack:///./content-src/lib/asroutercontent.js","webpack:///./content-src/asrouter/components/Button/Button.jsx","webpack:///./content-src/asrouter/template-utils.js","webpack:///./content-src/asrouter/components/RichText/RichText.jsx","webpack:///./content-src/asrouter/components/SnippetBase/SnippetBase.jsx","webpack:///./content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","webpack:///./content-src/asrouter/templates/EOYSnippet/EOYSnippet.jsx","webpack:///./content-src/asrouter/templates/SubmitFormSnippet/SubmitFormSnippet.jsx","webpack:///./content-src/asrouter/templates/FXASignupSnippet/FXASignupSnippet.jsx","webpack:///./content-src/asrouter/templates/NewsletterSnippet/NewsletterSnippet.jsx","webpack:///./content-src/asrouter/templates/SendToDeviceSnippet/isEmailOrPhoneNumber.js","webpack:///./content-src/asrouter/templates/SendToDeviceSnippet/SendToDeviceSnippet.jsx","webpack:///./content-src/asrouter/templates/template-manifest.jsx","webpack:///./node_modules/fluent/src/parser.js","webpack:///./node_modules/fluent/src/types.js","webpack:///./node_modules/fluent/src/builtins.js","webpack:///./node_modules/fluent/src/resolver.js","webpack:///./node_modules/fluent/src/context.js","webpack:///./node_modules/fluent/src/cached_iterable.js","webpack:///./node_modules/fluent/src/fallback.js","webpack:///./node_modules/fluent/src/util.js","webpack:///./node_modules/fluent/src/index.js","webpack:///./node_modules/fluent-react/src/localization.js","webpack:///./node_modules/fluent-react/src/provider.js","webpack:///./node_modules/fluent-react/src/with_localization.js","webpack:///./node_modules/fluent-react/src/markup.js","webpack:///./node_modules/fluent-react/vendor/omittedCloseTags.js","webpack:///./node_modules/fluent-react/vendor/voidElementTags.js","webpack:///./node_modules/fluent-react/src/localized.js","webpack:///./node_modules/fluent-react/src/index.js","webpack:///./common/Dedupe.jsm","webpack:///./common/Reducers.jsm","webpack:///./content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx","webpack:///./content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx","webpack:///./content-src/components/Card/types.js","webpack:///./content-src/components/Card/Card.jsx","webpack:///./content-src/components/TopSites/TopSiteFormInput.jsx","webpack:///./content-src/components/TopSites/TopSiteForm.jsx"],"names":["store","initStore","global","gActivityStreamPrerenderedState","asrouterContent","sendEventOrAddListener","dispatch","ac","AlsoToMain","type","at","NEW_TAB_STATE_REQUEST","ReactDOM","hydrate","document","location","href","documentElement","lang","gActivityStreamStrings","getElementById","enableASRouterContent","addSnippetsSubscriber","globalImportContext","Window","BACKGROUND_PROCESS","UI_CODE","actionTypes","ASRouterActions","_RouteMessage","action","options","meta","from","to","Error","forEach","o","fromTarget","skipLocal","CONTENT_MESSAGE_TYPE","MAIN_MESSAGE_TYPE","OnlyToMain","BroadcastToContent","AlsoToOneContent","target","skipMain","toTarget","OnlyToOneContent","AlsoToPreloaded","PRELOAD_MESSAGE_TYPE","UserEvent","data","TELEMETRY_USER_EVENT","ASRouterUserEvent","AS_ROUTER_TELEMETRY_USER_EVENT","UndesiredEvent","importContext","TELEMETRY_UNDESIRED_EVENT","PerfEvent","TELEMETRY_PERFORMANCE_EVENT","ImpressionStats","TELEMETRY_IMPRESSION_STATS","SetPref","name","value","SET_PREF","WebExtEvent","source","isSendToMain","isBroadcastToContent","isSendToOneContent","isSendToPreloaded","isFromMain","getPortIdOfSender","DATABASE_NAME","DATABASE_VERSION","SNIPPETS_OBJECTSTORE_NAME","SNIPPETS_UPDATE_INTERVAL_MS","SNIPPETS_ENABLED_EVENT","SNIPPETS_DISABLED_EVENT","SnippetsMap","Map","constructor","_db","_dispatch","set","key","_dbTransaction","db","put","delete","clear","SNIPPETS_BLOCKLIST_CLEARED","blockList","get","blockSnippetById","id","includes","push","SNIPPETS_BLOCKLIST_UPDATED","disableOnboarding","showFirefoxAccounts","SHOW_FIREFOX_ACCOUNTS","getTotalBookmarksCount","Promise","resolve","TOTAL_BOOKMARKS_REQUEST","RPMAddMessageListener","onMessage","TOTAL_BOOKMARKS_RESPONSE","RPMRemoveMessageListener","getAddonsInfo","ADDONS_INFO_REQUEST","ADDONS_INFO_RESPONSE","connect","_openDB","_restoreFromDb","modifier","reject","transaction","objectStore","onsuccess","event","onerror","error","openRequest","indexedDB","open","deleteDatabase","onupgradeneeded","result","objectStoreNames","contains","createObjectStore","err","console","onversionchange","versionChangeEvent","close","cursorRequest","openCursor","cursor","continue","SnippetsProvider","gSnippetsMap","_onAction","bind","snippetsMap","_refreshSnippets","cachedVersion","appData","version","lastUpdate","needsUpdate","Date","now","snippetsURL","response","fetch","status","payload","text","e","_noSnippetFallback","_showRemoteSnippets","snippetsEl","elementId","innerHTML","scriptEl","getElementsByTagName","relocatedScript","createElement","parentNode","replaceChild","msg","SNIPPET_BLOCKED","concat","style","display","init","Object","assign","keys","window","dispatchEvent","Event","initialized","uninit","snippets","initializing","subscribe","state","getState","Prefs","values","ASRouter","allowLegacySnippets","disableSnippets","Snippets","hash","log","INCOMING_MESSAGE_NAME","OUTGOING_MESSAGE_NAME","ASR_CONTAINER_ID","ASRouterUtils","addListener","listener","removeListener","sendMessage","RPMSendAsyncMessage","blockById","dismissById","blockBundle","bundle","executeAction","button_action","unblockById","unblockBundle","overrideMessage","sendTelemetry","ping","getPreviewEndpoint","params","URLSearchParams","slice","indexOf","endpoint","URL","url","snippetId","shouldSendImpressionOnUpdate","nextProps","prevProps","message","ASRouterUISurface","React","PureComponent","props","onMessageFromParent","sendClick","sendImpression","sendUserActionTelemetry","extraProps","message_id","eventType","provider","metric","dataset","args","content","do_not_autoblock","onBlockById","onDismissById","clearBundle","setState","componentWillMount","trigger","componentWillUnmount","renderSnippets","SnippetComponent","SnippetsTemplates","template","generateMessages","renderOnboarding","renderPreviewBanner","render","defaultProps","ASRouterContent","containerElement","_mount","zIndex","body","appendChild","_unmount","unmountComponentAtNode","MERGE_STORE_ACTION","EARLY_QUEUED_ACTIONS","SAVE_SESSION_PERF_DATA","PAGE_PRERENDERED","mergeStateReducer","mainReducer","prevState","messageMiddleware","next","au","rehydrationMiddleware","_didRehydrate","isMergeStoreAction","isRehydrationRequest","_didRequestInitialState","INIT","queueEarlyMessageMiddleware","_receivedFromMain","_earlyActionQueue","reducers","initialState","createStore","combineReducers","applyMiddleware","ex","dump","JSON","stringify","stack","RICH_TEXT_CONFIG","RICH_TEXT_KEYS","cx","attrs","attrsToTry","Array","isArray","string","length","attr","pop","addMessages","VISIBLE","VISIBILITY_CHANGE_EVENT","ImpressionsWrapper","sendImpressionOrAddListener","visibilityState","_onVisibilityChange","removeEventListener","addEventListener","componentDidMount","sendOnMount","componentDidUpdate","children","PrefsButton","injectIntl","onClick","intl","formatMessage","addLocaleDataForReactIntl","locale","addLocaleData","parentLocale","debounce","func","wait","timer","wakeUp","setTimeout","apply","_Base","isFirstrun","classList","add","isPrerendered","updateTheme","componentWillUpdate","bodyClassName","filter","v","join","className","App","strings","prefs","BaseContent","openPreferences","onWindowScroll","fixedSearch","SCROLL_THRESHOLD","scrollY","SETTINGS_OPEN","shouldBeFixedToTop","PrerenderData","arePrefsValid","noSectionsEnabled","Sections","section","enabled","outerClassName","showSearch","migrationExpired","Base","ASRouterAdmin","handleEnabledToggle","onChangeMessageFilter","findOtherBundledMessagesOfSameTemplate","messageFilter","messages","bundled","handleBlock","handleUnblock","handleOverride","expireCache","resetPref","renderMessageItem","isCurrent","lastMessageId","isBlocked","messageBlockList","campaign","impressions","messageImpressions","itemClassName","renderMessages","messagesToShow","map","renderMessageFilter","providers","renderTableHead","checked","renderProviders","providersConfig","providerPrefs","providerInfo","i","isTestProvider","info","find","p","label","bucket","whiteSpace","lastUpdated","toLocaleString","_ConfirmDialog","_handleCancelBtn","_handleConfirmBtn","DIALOG_CANCEL","eventSource","onConfirm","_renderModalMessage","message_body","body_string_id","visible","icon","cancel_button_string_id","confirm_button_string_id","ConfirmDialog","Dialog","ErrorBoundaryFallback","windowObj","reload","defaultClass","ErrorBoundary","hasError","componentDidCatch","FallbackComponent","_ManualMigration","onLaunchTour","onCancelTour","MIGRATION_START","MIGRATION_CANCEL","ManualMigration","_PrerenderData","initialPrefs","initialSections","_setValidation","validation","_validation","invalidatingPrefs","_invalidatingPrefs","reduce","oneOf","getPref","indexedDBPrefs","some","anyModifiedPrefs","prefName","pref","order","title","_Search","onInputMount","handleEvent","detail","gContentSearchController","search","input","healthReportKey","IS_NEWTAB","searchSource","ContentSearchUIController","showLogo","Search","documentURI","CARDS_PER_ROW_DEFAULT","CARDS_PER_ROW_COMPACT_WIDE","getFormattedMessage","Section","numRows","rowsPref","maxRows","_dispatchImpressionStats","cardsPerRow","compactCards","matchMedia","matches","maxCards","cards","rows","needsImpressionStats","tiles","link","guid","impressionCardGuids","sendImpressionStatsOrAddListener","shouldSendImpressionStats","collapsed","sendNewTabRehydrated","isCollapsed","wasCollapsed","renderNotified","NEW_TAB_REHYDRATED","Pocket","topics","emptyState","read_more_endpoint","contextMenuOptions","learnMore","privacyNoticeURL","isFirst","isLast","waitingForSpoc","maxCardsPerRow","maxCardsOnNarrow","pocketCta","isUserLoggedIn","useCta","isPocketLoggedInDefined","shouldShowPocketCta","shouldShowTopics","realRows","shouldShowEmptyState","usePlaceholder","isWebExtension","sectionClassName","feed","padding","startsWith","SectionIntl","_Sections","renderSections","sections","enabledSections","sectionOrder","showTopSites","expectedCount","sectionId","split","commonProps","s","_OpenInPrivateWindow","site","OPEN_PRIVATE_WINDOW","referrer","userEvent","GetPlatformString","platform","LinkMenuOptions","Separator","EmptyItem","RemoveBookmark","DELETE_BOOKMARK_BY_ID","bookmarkGuid","AddBookmark","BOOKMARK_URL","OpenInNewWindow","OPEN_NEW_WINDOW","typedBonus","BlockUrl","index","BLOCK_URL","open_url","pocket_id","impression","block","pos","WebExtDismiss","string_id","WEBEXT_DISMISS","action_position","DeleteUrl","isEnabled","siteInfo","DIALOG_OPEN","DELETE_HISTORY_URL","forceBlock","ShowFile","SHOW_DOWNLOAD_FILE","OpenFile","OPEN_DOWNLOAD_FILE","CopyDownloadLink","COPY_DOWNLOAD_LINK","GoToDownloadPage","OPEN_LINK","disabled","RemoveDownload","REMOVE_DOWNLOAD_FILE","PinTopSite","searchTopSite","TOP_SITES_PIN","UnpinTopSite","TOP_SITES_UNPIN","SaveToPocket","SAVE_TO_POCKET","pocket","DeleteFromPocket","DELETE_FROM_POCKET","ArchiveFromPocket","ARCHIVE_FROM_POCKET","EditTopSite","TOP_SITES_EDIT","CheckBookmark","CheckPinTopSite","isPinned","CheckSavedToPocket","CheckBookmarkOrArchive","OpenInPrivateWindow","DEFAULT_SITE_MENU_OPTIONS","_LinkMenu","getOptions","isPrivateBrowsingEnabled","propOptions","isDefault","option","userEventData","first","last","onUpdate","LinkMenu","ContextMenu","hideContext","stopPropagation","ContextMenuItem","onKeyDown","shiftKey","ScreenshotUtils","isBlob","isLocal","image","path","createLocalImageObject","remoteImage","createObjectURL","maybeRevokeBlobObjectURL","localImage","revokeObjectURL","isRemoteImageLocal","_CollapsibleSection","onBodyMount","onHeaderClick","onTransitionEnd","enableOrDisableAnimation","onMenuButtonClick","onMenuButtonMouseEnter","onMenuButtonMouseLeave","onMenuUpdate","enableAnimation","isAnimating","menuButtonHover","showContextMenu","sectionBody","scrollHeight","node","undefined","maxHeight","_getSectionBodyHeight","SectionMenuOptions","CheckCollapsed","div","currentTarget","renderIcon","backgroundImage","preventDefault","isCollapsible","extraMenuOptions","showPrefName","active","bodyStyle","CollapsibleSection","DEFAULT_SECTION_MENU_OPTIONS","WEBEXT_SECTION_MENU_OPTIONS","_SectionMenu","extraOptions","splice","SectionMenu","MoveUp","SECTION_MOVE","direction","MoveDown","RemoveSection","CollapseSection","UPDATE_SECTION_PREFS","ExpandSection","ManageSection","ManageWebExtension","OPEN_WEBEXT_SETTINGS","AddTopSite","AddSearchShortcut","TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL","PrivacyNotice","RECORDED_SECTIONS","ComponentPerfTimer","Component","perfSvc","_sendBadStateEvent","_sendPaintedEvent","_reportMissingData","_timestampHandled","_recordedFirstRender","_maybeSendPaintedEvent","_afterFramePaint","callback","requestAnimationFrame","_maybeSendBadStateEvent","_ensureFirstRenderTsRecorded","mark","dataReadyKey","firstRenderKey","parseInt","getMostRecentAbsMarkStartByName","ChromeUtils","import","usablePerfObj","Services","appShell","hiddenDOMWindow","performance","_PerfService","performanceObj","_perf","prototype","str","getEntriesByName","timeOrigin","absNow","entries","mostRecentEntry","startTime","MoreRecommendations","_PocketLoggedInCta","ctaUrl","ctaButton","ctaText","PocketLoggedInCta","Topic","Topics","t","topSiteIconType","customScreenshotURL","tippyTopIcon","faviconRef","faviconSize","screenshot","countTopSitesIconsTypes","topSites","countTopSitesTypes","acc","_TopSites","onEditFormClose","onSearchShortcutsFormClose","_dispatchTopSitesStats","_getVisibleTopSites","topSitesIconsStats","topSitesPinned","searchShortcuts","topsites_icon_stats","topsites_pinned","topsites_search_shortcuts","sitesPerRow","TopSites","TopSitesRows","TOP_SITES_CANCEL_EDIT","TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL","editForm","showSearchShortcutsForm","topSitesRows","TOP_SITES_SOURCE","TOP_SITES_CONTEXT_MENU_OPTIONS","TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS","MIN_RICH_FAVICON_SIZE","MIN_CORNER_FAVICON_SIZE","SelectableSearchShortcut","shortcut","selected","imageStyle","keyword","onChange","SearchShortcutsForm","handleChange","onCancelButtonClick","onSaveButtonClick","shortcuts","isSelected","row","ev","onClose","pinQueue","unpinQueue","alreadyPinned","_searchTopSite","searchVendor","shortURL","UPDATE_PINNED_SEARCH_SHORTCUTS","addedShortcuts","deletedShortcuts","search_vendor","TopSiteLink","screenshotImage","onDragEvent","onKeyPress","_allowDrop","dataTransfer","types","dragged","effectAllowed","setData","blur","button","getNextStateFromProps","imageInState","nextState","componentWillReceiveProps","defaultStyle","isDraggable","topSiteOuterClassName","isDragged","letterFallback","imageClassName","showSmallFavicon","smallFaviconStyle","smallFaviconFallback","hasScreenshotImage","backgroundColor","favicon","draggableProps","onDragEnd","onDragStart","onMouseDown","TopSite","onLinkClick","_getTelemetryInfo","icon_type","iconType","card_type","hostname","altKey","ctrlKey","metaKey","FILL_SEARCH_TERM","onActivate","isContextMenuOpen","activeIndex","TopSitePlaceholder","onEditButtonClick","_TopSiteList","DEFAULT_STATE","draggedIndex","draggedSite","draggedTitle","topSitesPreview","prevTopSites","newTopSites","dropped","_makeTopSitesPreview","TOP_SITES_INSERT","draggedFromIndex","_getTopSites","pinnedOnly","unpinned","siteToInsert","holeIndex","indexStep","shiftingStep","nextIndex","preview","shift","topSitesUI","maxNarrowVisibleIndex","l","slotProps","TopSiteList","_StartupOverlay","onInputChange","onSubmit","clickSkip","initScene","removeOverlay","onInputInvalid","emailInput","overlayRemoved","flowId","flowBeginTime","didFetch","fxa_endpoint","fxaParams","json","show","remove","previousSibling","_getFormInfo","has_flow_params","focus","termsLink","privacyLink","terms","privacy","StartupOverlay","DetectUserSessionStart","_store","_perfService","perfService","_sendEvent","visibility_event_rcvd_ts","ALLOWED_STYLE_TAGS","Button","tag","border","safeURI","protocol","isAllowed","warn","ALLOWED_TAGS","b","u","strong","em","br","convertLinks","links","doNotAutoBlock","linkTag","RichText","localization_id","customElements","onBlockClicked","UISurface","onBlock","renderDismissButton","footerDismiss","onDismiss","scene2_dismiss_button_text","block_button_text","containerClassName","textStyle","DEFAULT_ICON_PATH","onButtonClick","button_url","onAction","button_action_args","renderTitle","renderTitleIcon","titleIcon","title_icon","renderButton","button_color","button_background_color","button_label","renderText","tall","extraContent","handleSubmit","setFrequencyValue","frequencyCheckbox","refs","form","querySelector","submit","renderDonations","fieldNames","numberFormat","Intl","NumberFormat","navigator","language","currency","currency_code","minimumFractionDigits","selected_button","btnStyle","color","donation_form_url","form_method","field","idx","button_name","amount","format","monthly_checkbox_label_text","text_color","background_color","customElement","highlight_color","test","EOYSnippet","extendedContent","expandSnippet","expanded","signupSubmitted","signupSuccess","disableForm","toUpperCase","formData","processFormData","mainInput","FormData","fetchRequest","Request","method","preventDismiss","renderHiddenFormInputs","hidden_inputs","renderDisclaimer","scene2_disclaimer_html","renderFormPrivacyNotice","scene2_privacy_html","renderSignupSubmitted","isSuccess","successTitle","success_title","bodyText","success_text","error_text","retryButtonText","scene1_button_label","validateInput","setCustomValidity","renderInput","placholder","scene2_email_placeholder_text","scene2_input_placeholder","inputType","renderSignupView","containerClass","scene2_icon","scene2_text","form_action","scene2_button_label","getFirstSceneContent","substr","FXASignupSnippet","userAgent","match","firefox_version","context","entrypoint","service","utm_source","utm_content","utm_campaign","utm_term","NewsletterSnippet","newsletters","scene2_newsletter","fmt","source_url","isEmailOrPhoneNumber","val","email_re","check_email","check_phone","isNaN","include_sms","append","message_id_sms","country","message_id_email","encodeURIComponent","SendToDeviceSnippet","simple_snippet","newsletter_snippet","fxa_signup_snippet","send_to_device_snippet","eoy_snippet","MAX_PLACEABLES","entryIdentifierRe","identifierRe","functionIdentifierRe","RuntimeParser","getResource","_source","_index","_length","errors","skipWS","getEntry","SyntaxError","skipToNextEntryStart","ch","skipComment","skipSection","getMessage","skipInlineWS","getVariantName","getEntryIdentifier","getPattern","lineStart","getAttributes","skipBlankLines","ptr","getIdentifier","re","lastIndex","exec","toString","start","cc","charCodeAt","getString","substring","eol","firstLineContent","getComplexPattern","buffer","placeables","blankLinesStart","blankLinesEnd","ch2","getPlaceable","variants","getVariants","exp","vars","def","selector","getSelectorExpression","literal","getLiteral","getVariantKey","getCallArgs","fun","lastIndexOf","getNumber","num","defaultIndex","cc0","cc1","parse","parser","FluentType","opts","valueOf","FluentNone","FluentNumber","parseFloat","ctx","nf","_memoizeIntlObject","other","FluentDateTime","dtf","DateTimeFormat","FluentSymbol","pr","PluralRules","select","arg","merge","argopts","unwrapped","opt","MAX_PLACEABLE_LENGTH","FSI","PDI","DefaultMember","env","members","RangeError","MessageReference","_terms","_messages","ReferenceError","VariantExpression","Type","isVariantList","variant","variantKey","AttributeExpression","attrName","SelectExpression","keyCanMatch","expr","Pattern","ExternalArgument","FunctionReference","CallExpression","member","hasOwnProperty","TypeError","_functions","builtins","callee","posargs","keyargs","ptn","dirty","has","useIsolating","_useIsolating","elem","part","WeakSet","locales","functions","_intls","WeakMap","Symbol","iterator","hasMessage","ctor","cache","CachedIterable","iterable","asyncIterator","seen","cur","touchNext","done","mapContextSync","ids","getContextForId","remainingCount","foundContexts","fill","mapContextAsync","nonBlank","line","countIndent","indent","ftl","code","lines","indents","common","Math","min","RegExp","replace","contexts","subs","Set","comp","unsubscribe","setMessages","relocalize","getMessageContext","formatCompound","mcx","fallback","isReactLocalization","propName","prop","l10n","getChildContext","Children","only","LocalizationProvider","childContextTypes","propTypes","PropTypes","element","isRequired","isIterable","componentName","withLocalization","Inner","WithLocalization","forceUpdate","displayName","contextTypes","component","TEMPLATE","parseMarkup","omittedCloseTags","area","base","col","embed","hr","img","keygen","param","track","wbr","voidElementTags","menuitem","reMarkup","toArguments","elems","propname","propval","isValidElement","toLowerCase","messageValue","messageAttrs","localizedProps","cloneElement","translationNodes","childNodes","translatedChildren","childNode","nodeType","TEXT_NODE","textContent","localName","sourceChild","Localized","Dedupe","createKey","defaultCreateKey","item","group","groups","globalKeys","valueMap","m","TOP_SITES_DEFAULT_ROWS","TOP_SITES_MAX_SITES_PER_ROW","dedupe","INITIAL_STATE","AS_ROUTER_INITIALIZED","AS_ROUTER_PREF_CHANGED","insertPinned","pinned","pinnedUrls","newLinks","pinIndex","hasMatch","newRows","TOP_SITES_UPDATED","TOP_SITES_PREFS_UPDATED","previewResponse","PREVIEW_RESPONSE","previewUrl","PREVIEW_REQUEST","PREVIEW_REQUEST_CANCEL","SCREENSHOT_UPDATED","PLACES_BOOKMARK_ADDED","bookmarkTitle","dateAdded","bookmarkDateCreated","PLACES_BOOKMARK_REMOVED","newSite","PLACES_LINK_DELETED","UPDATE_SEARCH_SHORTCUTS","SNIPPETS_PREVIEW_MODE","newValues","PREFS_INITIAL_VALUES","PREF_CHANGED","newState","SECTION_DEREGISTER","SECTION_REGISTER","SECTION_UPDATE","card","dedupeConfigurations","dedupeConf","dedupedRows","dedupeFrom","dedupeSectionId","dedupeSection","SECTION_UPDATE_CARD","PLACES_SAVED_TO_POCKET","PLACES_LINK_BLOCKED","SNIPPETS_DATA","SNIPPETS_RESET","POCKET_WAITING_FOR_SPOC","POCKET_LOGGED_IN","POCKET_CTA","cta_button","cta_text","cta_url","use_cta","onDoneButton","header","extraTemplateStrings","cardContextTypes","history","intlID","bookmark","trending","download","gImageLoading","activeCard","imageLoaded","cardImage","maybeLoadImage","imageUrl","loaderPromise","loader","Image","src","catch","then","WEBEXT_CLICK","click","_Card","hasImage","placeholder","description","Card","PlaceholderCard","validationError","onMount","shouldFocus","showClearButton","onClear","typeUrl","titleId","loading","placeholderId","errorMessageId","TopSiteFormInput","customScreenshotUrl","showCustomScreenshotForm","onClearScreenshotInput","onLabelChange","onUrlChange","onClearUrlClick","onDoneButtonClick","onCustomScreenshotUrlChange","onPreviewButtonClick","onEnableScreenshotUrlForm","validateUrl","_updateCustomScreenshotInput","validateForm","cleanUrl","_tryParseUrl","validProtocols","urlObj","validateCustomScreenshotUrl","validate","_renderCustomScreenshotInput","requestFailed","isLoading","showAsAdd","previous","changed","previewMode","previewLink","TopSiteForm"],"mappings":"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","file":"activity-stream.bundle.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 = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addSnippetsSubscriber} from \"content-src/lib/snippets\";\nimport {ASRouterContent} from \"content-src/asrouter/asrouter-content\";\nimport {Base} from \"content-src/components/Base/Base\";\nimport {DetectUserSessionStart} from \"content-src/lib/detect-user-session-start\";\nimport {enableASRouterContent} from \"content-src/lib/asroutercontent\";\nimport {initStore} from \"content-src/lib/init-store\";\nimport {Provider} from \"react-redux\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {reducers} from \"common/Reducers.jsm\";\n\nconst store = initStore(reducers, global.gActivityStreamPrerenderedState);\nconst asrouterContent = new ASRouterContent();\n\nnew DetectUserSessionStart(store).sendEventOrAddListener();\n\n// If we are starting in a prerendered state, we must wait until the first render\n// to request state rehydration (see Base.jsx). If we are NOT in a prerendered state,\n// we can request it immedately.\nif (!global.gActivityStreamPrerenderedState) {\n  store.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n}\n\nReactDOM.hydrate(<Provider store={store}>\n  <Base\n    isFirstrun={global.document.location.href === \"about:welcome\"}\n    isPrerendered={!!global.gActivityStreamPrerenderedState}\n    locale={global.document.documentElement.lang}\n    strings={global.gActivityStreamStrings} />\n</Provider>, document.getElementById(\"root\"));\n\nenableASRouterContent(store, asrouterContent);\naddSnippetsSubscriber(store);\n","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nthis.MAIN_MESSAGE_TYPE = \"ActivityStream:Main\";\nthis.CONTENT_MESSAGE_TYPE = \"ActivityStream:Content\";\nthis.PRELOAD_MESSAGE_TYPE = \"ActivityStream:PreloadedBrowser\";\nthis.UI_CODE = 1;\nthis.BACKGROUND_PROCESS = 2;\n\n/**\n * globalImportContext - Are we in UI code (i.e. react, a dom) or some kind of background process?\n *                       Use this in action creators if you need different logic\n *                       for ui/background processes.\n */\nconst globalImportContext = typeof Window === \"undefined\" ? BACKGROUND_PROCESS : UI_CODE;\n// Export for tests\nthis.globalImportContext = globalImportContext;\n\n// Create an object that avoids accidental differing key/value pairs:\n// {\n//   INIT: \"INIT\",\n//   UNINIT: \"UNINIT\"\n// }\nconst actionTypes = {};\nfor (const type of [\n  \"ADDONS_INFO_REQUEST\",\n  \"ADDONS_INFO_RESPONSE\",\n  \"ARCHIVE_FROM_POCKET\",\n  \"AS_ROUTER_INITIALIZED\",\n  \"AS_ROUTER_PREF_CHANGED\",\n  \"AS_ROUTER_TELEMETRY_USER_EVENT\",\n  \"BLOCK_URL\",\n  \"BOOKMARK_URL\",\n  \"COPY_DOWNLOAD_LINK\",\n  \"DELETE_BOOKMARK_BY_ID\",\n  \"DELETE_FROM_POCKET\",\n  \"DELETE_HISTORY_URL\",\n  \"DIALOG_CANCEL\",\n  \"DIALOG_OPEN\",\n  \"DOWNLOAD_CHANGED\",\n  \"FILL_SEARCH_TERM\",\n  \"INIT\",\n  \"MIGRATION_CANCEL\",\n  \"MIGRATION_COMPLETED\",\n  \"MIGRATION_START\",\n  \"NEW_TAB_INIT\",\n  \"NEW_TAB_INITIAL_STATE\",\n  \"NEW_TAB_LOAD\",\n  \"NEW_TAB_REHYDRATED\",\n  \"NEW_TAB_STATE_REQUEST\",\n  \"NEW_TAB_UNLOAD\",\n  \"OPEN_DOWNLOAD_FILE\",\n  \"OPEN_LINK\",\n  \"OPEN_NEW_WINDOW\",\n  \"OPEN_PRIVATE_WINDOW\",\n  \"OPEN_WEBEXT_SETTINGS\",\n  \"PAGE_PRERENDERED\",\n  \"PLACES_BOOKMARK_ADDED\",\n  \"PLACES_BOOKMARK_REMOVED\",\n  \"PLACES_HISTORY_CLEARED\",\n  \"PLACES_LINKS_CHANGED\",\n  \"PLACES_LINK_BLOCKED\",\n  \"PLACES_LINK_DELETED\",\n  \"PLACES_SAVED_TO_POCKET\",\n  \"POCKET_CTA\",\n  \"POCKET_LOGGED_IN\",\n  \"POCKET_WAITING_FOR_SPOC\",\n  \"PREFS_INITIAL_VALUES\",\n  \"PREF_CHANGED\",\n  \"PREVIEW_REQUEST\",\n  \"PREVIEW_REQUEST_CANCEL\",\n  \"PREVIEW_RESPONSE\",\n  \"REMOVE_DOWNLOAD_FILE\",\n  \"RICH_ICON_MISSING\",\n  \"SAVE_SESSION_PERF_DATA\",\n  \"SAVE_TO_POCKET\",\n  \"SCREENSHOT_UPDATED\",\n  \"SECTION_DEREGISTER\",\n  \"SECTION_DISABLE\",\n  \"SECTION_ENABLE\",\n  \"SECTION_MOVE\",\n  \"SECTION_OPTIONS_CHANGED\",\n  \"SECTION_REGISTER\",\n  \"SECTION_UPDATE\",\n  \"SECTION_UPDATE_CARD\",\n  \"SETTINGS_CLOSE\",\n  \"SETTINGS_OPEN\",\n  \"SET_PREF\",\n  \"SHOW_DOWNLOAD_FILE\",\n  \"SHOW_FIREFOX_ACCOUNTS\",\n  \"SKIPPED_SIGNIN\",\n  \"SNIPPETS_BLOCKLIST_CLEARED\",\n  \"SNIPPETS_BLOCKLIST_UPDATED\",\n  \"SNIPPETS_DATA\",\n  \"SNIPPETS_PREVIEW_MODE\",\n  \"SNIPPETS_RESET\",\n  \"SNIPPET_BLOCKED\",\n  \"SUBMIT_EMAIL\",\n  \"SYSTEM_TICK\",\n  \"TELEMETRY_IMPRESSION_STATS\",\n  \"TELEMETRY_PERFORMANCE_EVENT\",\n  \"TELEMETRY_UNDESIRED_EVENT\",\n  \"TELEMETRY_USER_EVENT\",\n  \"TOP_SITES_CANCEL_EDIT\",\n  \"TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL\",\n  \"TOP_SITES_EDIT\",\n  \"TOP_SITES_INSERT\",\n  \"TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL\",\n  \"TOP_SITES_PIN\",\n  \"TOP_SITES_PREFS_UPDATED\",\n  \"TOP_SITES_UNPIN\",\n  \"TOP_SITES_UPDATED\",\n  \"TOTAL_BOOKMARKS_REQUEST\",\n  \"TOTAL_BOOKMARKS_RESPONSE\",\n  \"UNINIT\",\n  \"UPDATE_PINNED_SEARCH_SHORTCUTS\",\n  \"UPDATE_SEARCH_SHORTCUTS\",\n  \"UPDATE_SECTION_PREFS\",\n  \"WEBEXT_CLICK\",\n  \"WEBEXT_DISMISS\",\n]) {\n  actionTypes[type] = type;\n}\n\n// These are acceptable actions for AS Router messages to have. They can show up\n// as call-to-action buttons in snippets, onboarding tour, etc.\nconst ASRouterActions = {};\nfor (const type of [\n  \"INSTALL_ADDON_FROM_URL\",\n  \"OPEN_APPLICATIONS_MENU\",\n  \"OPEN_PRIVATE_BROWSER_WINDOW\",\n  \"OPEN_URL\",\n  \"OPEN_ABOUT_PAGE\",\n  \"OPEN_PREFERENCES_PAGE\",\n  \"SHOW_FIREFOX_ACCOUNTS\",\n]) {\n  ASRouterActions[type] = type;\n}\n\n// Helper function for creating routed actions between content and main\n// Not intended to be used by consumers\nfunction _RouteMessage(action, options) {\n  const meta = action.meta ? {...action.meta} : {};\n  if (!options || !options.from || !options.to) {\n    throw new Error(\"Routed Messages must have options as the second parameter, and must at least include a .from and .to property.\");\n  }\n  // For each of these fields, if they are passed as an option,\n  // add them to the action. If they are not defined, remove them.\n  [\"from\", \"to\", \"toTarget\", \"fromTarget\", \"skipMain\", \"skipLocal\"].forEach(o => {\n    if (typeof options[o] !== \"undefined\") {\n      meta[o] = options[o];\n    } else if (meta[o]) {\n      delete meta[o];\n    }\n  });\n  return {...action, meta};\n}\n\n/**\n * AlsoToMain - Creates a message that will be dispatched locally and also sent to the Main process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {bool}   skipLocal Used by OnlyToMain to skip the main reducer\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToMain(action, fromTarget, skipLocal) {\n  return _RouteMessage(action, {\n    from: CONTENT_MESSAGE_TYPE,\n    to: MAIN_MESSAGE_TYPE,\n    fromTarget,\n    skipLocal,\n  });\n}\n\n/**\n * OnlyToMain - Creates a message that will be sent to the Main process and skip the local reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToMain(action, fromTarget) {\n  return AlsoToMain(action, fromTarget, true);\n}\n\n/**\n * BroadcastToContent - Creates a message that will be dispatched to main and sent to ALL content processes.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction BroadcastToContent(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE,\n  });\n}\n\n/**\n * AlsoToOneContent - Creates a message that will be will be dispatched to the main store\n *                    and also sent to a particular Content process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @param  {bool} skipMain Used by OnlyToOneContent to skip the main process\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToOneContent(action, target, skipMain) {\n  if (!target) {\n    throw new Error(\"You must provide a target ID as the second parameter of AlsoToOneContent. If you want to send to all content processes, use BroadcastToContent\");\n  }\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE,\n    toTarget: target,\n    skipMain,\n  });\n}\n\n/**\n * OnlyToOneContent - Creates a message that will be sent to a particular Content process\n *                    and skip the main reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToOneContent(action, target) {\n  return AlsoToOneContent(action, target, true);\n}\n\n/**\n * AlsoToPreloaded - Creates a message that dispatched to the main reducer and also sent to the preloaded tab.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToPreloaded(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: PRELOAD_MESSAGE_TYPE,\n  });\n}\n\n/**\n * UserEvent - A telemetry ping indicating a user action. This should only\n *                   be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction UserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.TELEMETRY_USER_EVENT,\n    data,\n  });\n}\n\n/**\n * ASRouterUserEvent - A telemetry ping indicating a user action from AS router. This should only\n *                     be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction ASRouterUserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.AS_ROUTER_TELEMETRY_USER_EVENT,\n    data,\n  });\n}\n\n/**\n * UndesiredEvent - A telemetry ping indicating an undesired state.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction UndesiredEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_UNDESIRED_EVENT,\n    data,\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * PerfEvent - A telemetry ping indicating a performance-related event.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction PerfEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_PERFORMANCE_EVENT,\n    data,\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * ImpressionStats - A telemetry ping indicating an impression stats.\n *\n * @param  {object} data Fields to include in the ping\n * @param  {int} importContext (For testing) Override the import context for testing.\n * #return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction ImpressionStats(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_IMPRESSION_STATS,\n    data,\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction SetPref(name, value, importContext = globalImportContext) {\n  const action = {type: actionTypes.SET_PREF, data: {name, value}};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction WebExtEvent(type, data, importContext = globalImportContext) {\n  if (!data || !data.source) {\n    throw new Error(\"WebExtEvent actions should include a property \\\"source\\\", the id of the webextension that should receive the event.\");\n  }\n  const action = {type, data};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nthis.actionTypes = actionTypes;\nthis.ASRouterActions = ASRouterActions;\n\nthis.actionCreators = {\n  BroadcastToContent,\n  UserEvent,\n  ASRouterUserEvent,\n  UndesiredEvent,\n  PerfEvent,\n  ImpressionStats,\n  AlsoToOneContent,\n  OnlyToOneContent,\n  AlsoToMain,\n  OnlyToMain,\n  AlsoToPreloaded,\n  SetPref,\n  WebExtEvent,\n};\n\n// These are helpers to test for certain kinds of actions\nthis.actionUtils = {\n  isSendToMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === MAIN_MESSAGE_TYPE && action.meta.from === CONTENT_MESSAGE_TYPE;\n  },\n  isBroadcastToContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && !action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToOneContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToPreloaded(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === PRELOAD_MESSAGE_TYPE &&\n      action.meta.from === MAIN_MESSAGE_TYPE;\n  },\n  isFromMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.from === MAIN_MESSAGE_TYPE &&\n      action.meta.to === CONTENT_MESSAGE_TYPE;\n  },\n  getPortIdOfSender(action) {\n    return (action.meta && action.meta.fromTarget) || null;\n  },\n  _RouteMessage,\n};\n\nconst EXPORTED_SYMBOLS = [\n  \"actionTypes\",\n  \"actionCreators\",\n  \"actionUtils\",\n  \"ASRouterActions\",\n  \"globalImportContext\",\n  \"UI_CODE\",\n  \"BACKGROUND_PROCESS\",\n  \"MAIN_MESSAGE_TYPE\",\n  \"CONTENT_MESSAGE_TYPE\",\n  \"PRELOAD_MESSAGE_TYPE\",\n];\n","const DATABASE_NAME = \"snippets_db\";\nconst DATABASE_VERSION = 1;\nconst SNIPPETS_OBJECTSTORE_NAME = \"snippets\";\nexport const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.\n\nconst SNIPPETS_ENABLED_EVENT = \"Snippets:Enabled\";\nconst SNIPPETS_DISABLED_EVENT = \"Snippets:Disabled\";\n\nimport {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * SnippetsMap - A utility for cacheing values related to the snippet. It has\n *               the same interface as a Map, but is optionally backed by\n *               indexedDB for persistent storage.\n *               Call .connect() to open a database connection and restore any\n *               previously cached data, if necessary.\n *\n */\nexport class SnippetsMap extends Map {\n  constructor(dispatch) {\n    super();\n    this._db = null;\n    this._dispatch = dispatch;\n  }\n\n  set(key, value) {\n    super.set(key, value);\n    return this._dbTransaction(db => db.put(value, key));\n  }\n\n  delete(key) {\n    super.delete(key);\n    return this._dbTransaction(db => db.delete(key));\n  }\n\n  clear() {\n    super.clear();\n    this._dispatch(ac.OnlyToMain({type: at.SNIPPETS_BLOCKLIST_CLEARED}));\n    return this._dbTransaction(db => db.clear());\n  }\n\n  get blockList() {\n    return this.get(\"blockList\") || [];\n  }\n\n  /**\n   * blockSnippetById - Blocks a snippet given an id\n   *\n   * @param  {str|int} id   The id of the snippet\n   * @return {Promise}      Resolves when the id has been written to indexedDB,\n   *                        or immediately if the snippetMap is not connected\n   */\n  async blockSnippetById(id) {\n    if (!id) {\n      return;\n    }\n    const {blockList} = this;\n    if (!blockList.includes(id)) {\n      blockList.push(id);\n      this._dispatch(ac.AlsoToMain({type: at.SNIPPETS_BLOCKLIST_UPDATED, data: id}));\n      await this.set(\"blockList\", blockList);\n    }\n  }\n\n  disableOnboarding() {}\n\n  showFirefoxAccounts() {\n    this._dispatch(ac.AlsoToMain({type: at.SHOW_FIREFOX_ACCOUNTS}));\n  }\n\n  getTotalBookmarksCount() {\n    return new Promise(resolve => {\n      this._dispatch(ac.OnlyToMain({type: at.TOTAL_BOOKMARKS_REQUEST}));\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n        if (action.type === at.TOTAL_BOOKMARKS_RESPONSE) {\n          resolve(action.data);\n          global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n        }\n      });\n    });\n  }\n\n  getAddonsInfo() {\n    return new Promise(resolve => {\n      this._dispatch(ac.OnlyToMain({type: at.ADDONS_INFO_REQUEST}));\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n        if (action.type === at.ADDONS_INFO_RESPONSE) {\n          resolve(action.data);\n          global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n        }\n      });\n    });\n  }\n\n  /**\n   * connect - Attaches an indexedDB back-end to the Map so that any set values\n   *           are also cached in a store. It also restores any existing values\n   *           that are already stored in the indexedDB store.\n   *\n   * @return {type}  description\n   */\n  async connect() {\n    // Open the connection\n    const db = await this._openDB();\n\n    // Restore any existing values\n    await this._restoreFromDb(db);\n\n    // Attach a reference to the db\n    this._db = db;\n  }\n\n  /**\n   * _dbTransaction - Returns a db transaction wrapped with the given modifier\n   *                  function as a Promise. If the db has not been connected,\n   *                  it resolves immediately.\n   *\n   * @param  {func} modifier A function to call with the transaction\n   * @return {obj}           A Promise that resolves when the transaction has\n   *                         completed or errored\n   */\n  _dbTransaction(modifier) {\n    if (!this._db) {\n      return Promise.resolve();\n    }\n    return new Promise((resolve, reject) => {\n      const transaction = modifier(\n        this._db\n          .transaction(SNIPPETS_OBJECTSTORE_NAME, \"readwrite\")\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME)\n      );\n      transaction.onsuccess = event => resolve();\n\n      /* istanbul ignore next */\n      transaction.onerror = event => reject(transaction.error);\n    });\n  }\n\n  _openDB() {\n    return new Promise((resolve, reject) => {\n      const openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n\n      /* istanbul ignore next */\n      openRequest.onerror = event => {\n        // Try to delete the old database so that we can start this process over\n        // next time.\n        indexedDB.deleteDatabase(DATABASE_NAME);\n        reject(event);\n      };\n\n      openRequest.onupgradeneeded = event => {\n        const db = event.target.result;\n        if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {\n          db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);\n        }\n      };\n\n      openRequest.onsuccess = event => {\n        let db = event.target.result;\n\n        /* istanbul ignore next */\n        db.onerror = err => console.error(err); // eslint-disable-line no-console\n        /* istanbul ignore next */\n        db.onversionchange = versionChangeEvent => versionChangeEvent.target.close();\n\n        resolve(db);\n      };\n    });\n  }\n\n  _restoreFromDb(db) {\n    return new Promise((resolve, reject) => {\n      let cursorRequest;\n      try {\n        cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();\n      } catch (err) {\n        // istanbul ignore next\n        reject(err);\n        // istanbul ignore next\n        return;\n      }\n\n      /* istanbul ignore next */\n      cursorRequest.onerror = event => reject(event);\n\n      cursorRequest.onsuccess = event => {\n        let cursor = event.target.result;\n        // Populate the cache from the persistent storage.\n        if (cursor) {\n          if (cursor.value !== \"blockList\") {\n            this.set(cursor.key, cursor.value);\n          }\n          cursor.continue();\n        } else {\n          // We are done.\n          resolve();\n        }\n      };\n    });\n  }\n}\n\n/**\n * SnippetsProvider - Initializes a SnippetsMap and loads snippets from a\n *                    remote location, or else default snippets if the remote\n *                    snippets cannot be retrieved.\n */\nexport class SnippetsProvider {\n  constructor(dispatch) {\n    // Initialize the Snippets Map and attaches it to a global so that\n    // the snippet payload can interact with it.\n    global.gSnippetsMap = new SnippetsMap(dispatch);\n    this._onAction = this._onAction.bind(this);\n  }\n\n  get snippetsMap() {\n    return global.gSnippetsMap;\n  }\n\n  async _refreshSnippets() {\n    // Check if the cached version of of the snippets in snippetsMap. If it's too\n    // old, blow away the entire snippetsMap.\n    const cachedVersion = this.snippetsMap.get(\"snippets-cached-version\");\n\n    if (cachedVersion !== this.appData.version) {\n      this.snippetsMap.clear();\n    }\n\n    // Has enough time passed for us to require an update?\n    const lastUpdate = this.snippetsMap.get(\"snippets-last-update\");\n    const needsUpdate = !(lastUpdate >= 0) || Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;\n\n    if (needsUpdate && this.appData.snippetsURL) {\n      this.snippetsMap.set(\"snippets-last-update\", Date.now());\n      try {\n        const response = await fetch(this.appData.snippetsURL);\n        if (response.status === 200) {\n          const payload = await response.text();\n\n          this.snippetsMap.set(\"snippets\", payload);\n          this.snippetsMap.set(\"snippets-cached-version\", this.appData.version);\n        }\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n  }\n\n  _noSnippetFallback() {\n    // TODO\n  }\n\n  _showRemoteSnippets() {\n    const snippetsEl = document.getElementById(this.elementId);\n    const payload = this.snippetsMap.get(\"snippets\");\n\n    if (!snippetsEl) {\n      throw new Error(`No element was found with id '${this.elementId}'.`);\n    }\n\n    // This could happen if fetching failed\n    if (!payload) {\n      throw new Error(\"No remote snippets were found in gSnippetsMap.\");\n    }\n\n    if (typeof payload !== \"string\") {\n      throw new Error(\"Snippet payload was incorrectly formatted\");\n    }\n\n    // Note that injecting snippets can throw if they're invalid XML.\n    // eslint-disable-next-line no-unsanitized/property\n    snippetsEl.innerHTML = payload;\n\n    // Scripts injected by innerHTML are inactive, so we have to relocate them\n    // through DOM manipulation to activate their contents.\n    for (const scriptEl of snippetsEl.getElementsByTagName(\"script\")) {\n      const relocatedScript = document.createElement(\"script\");\n      relocatedScript.text = scriptEl.text;\n      scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);\n    }\n  }\n\n  _onAction(msg) {\n    if (msg.data.type === at.SNIPPET_BLOCKED) {\n      if (!this.snippetsMap.blockList.includes(msg.data.data)) {\n        this.snippetsMap.set(\"blockList\", this.snippetsMap.blockList.concat(msg.data.data));\n        document.getElementById(\"snippets-container\").style.display = \"none\";\n      }\n    }\n  }\n\n  /**\n   * init - Fetch the snippet payload and show snippets\n   *\n   * @param  {obj} options\n   * @param  {str} options.appData.snippetsURL  The URL from which we fetch snippets\n   * @param  {int} options.appData.version  The current snippets version\n   * @param  {str} options.elementId  The id of the element in which to inject snippets\n   * @param  {bool} options.connect  Should gSnippetsMap connect to indexedDB?\n   */\n  async init(options) {\n    Object.assign(this, {\n      appData: {},\n      elementId: \"snippets\",\n      connect: true,\n    }, options);\n\n    // Add listener so we know when snippets are blocked on other pages\n    if (global.RPMAddMessageListener) {\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n\n    // TODO: Requires enabling indexedDB on newtab\n    // Restore the snippets map from indexedDB\n    if (this.connect) {\n      try {\n        await this.snippetsMap.connect();\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n\n    // Cache app data values so they can be accessible from gSnippetsMap\n    for (const key of Object.keys(this.appData)) {\n      if (key === \"blockList\") {\n        this.snippetsMap.set(\"blockList\", this.appData[key]);\n      } else {\n        this.snippetsMap.set(`appData.${key}`, this.appData[key]);\n      }\n    }\n\n    // Refresh snippets, if enough time has passed.\n    await this._refreshSnippets();\n\n    // Try showing remote snippets, falling back to defaults if necessary.\n    try {\n      this._showRemoteSnippets();\n    } catch (e) {\n      this._noSnippetFallback(e);\n    }\n\n    window.dispatchEvent(new Event(SNIPPETS_ENABLED_EVENT));\n\n    this.initialized = true;\n  }\n\n  uninit() {\n    window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));\n    if (global.RPMRemoveMessageListener) {\n      global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n    this.initialized = false;\n  }\n}\n\n/**\n * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes\n *                         when the store has received the appropriate\n *                         Snippet data.\n *\n * @param  {obj} store   The redux store\n * @return {obj}         Returns the snippets instance, asrouterContent instance and unsubscribe function\n */\nexport function addSnippetsSubscriber(store) {\n  const snippets = new SnippetsProvider(store.dispatch);\n\n  let initializing = false;\n\n  store.subscribe(async () => {\n    const state = store.getState();\n\n    /**\n     * Sorry this code is so complicated. It will be removed soon.\n     * This is what the different values actually mean:\n     *\n     * ASRouter.initialized                   Is ASRouter.jsm initialised?\n     * ASRouter.allowLegacySnippets           Are ASRouter snippets turned OFF (i.e. legacy snippets are allowed)\n     * state.Prefs.values[\"feeds.snippets\"]   User preference for snippets\n     * state.Snippets.initialized             Is SnippetsFeed.jsm initialised?\n     * snippets.initialized                   Is in-content snippets currently initialised?\n     * state.Prefs.values.disableSnippets     This pref is used to disable legacy snippets in an emergency\n     *                                        in a way that is not user-editable (true = disabled)\n     */\n\n    /** If we should initialize snippets... */\n    if (\n      state.Prefs.values[\"feeds.snippets\"] &&\n      state.ASRouter.initialized &&\n      state.ASRouter.allowLegacySnippets &&\n      !state.Prefs.values.disableSnippets &&\n      state.Snippets.initialized &&\n      !snippets.initialized &&\n      // Don't call init multiple times\n      !initializing &&\n      location.href !== \"about:welcome\" &&\n      location.hash !== \"#asrouter\"\n    ) {\n      initializing = true;\n      await snippets.init({appData: state.Snippets});\n      // istanbul ignore if\n      if (state.Prefs.values[\"asrouter.devtoolsEnabled\"]) {\n        console.log(\"Legacy snippets initialized\"); // eslint-disable-line no-console\n      }\n      initializing = false;\n\n    /** If we should remove snippets... */\n    } else if (\n      (\n        state.Prefs.values[\"feeds.snippets\"] === false ||\n        state.Prefs.values.disableSnippets === true ||\n        (state.ASRouter.initialized && !state.ASRouter.allowLegacySnippets)\n      ) &&\n      snippets.initialized\n    ) {\n      // Remove snippets\n      snippets.uninit();\n      // istanbul ignore if\n      if (state.Prefs.values[\"asrouter.devtoolsEnabled\"]) {\n        console.log(\"Legacy snippets removed\"); // eslint-disable-line no-console\n      }\n    }\n  });\n\n  // Returned for testing purposes\n  return {snippets};\n}\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {OUTGOING_MESSAGE_NAME as AS_GENERAL_OUTGOING_MESSAGE_NAME} from \"content-src/lib/init-store\";\nimport {generateMessages} from \"./rich-text-strings\";\nimport {ImpressionsWrapper} from \"./components/ImpressionsWrapper/ImpressionsWrapper\";\nimport {LocalizationProvider} from \"fluent-react\";\nimport {OnboardingMessage} from \"./templates/OnboardingMessage/OnboardingMessage\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {SnippetsTemplates} from \"./templates/template-manifest\";\n\nconst INCOMING_MESSAGE_NAME = \"ASRouter:parent-to-child\";\nconst OUTGOING_MESSAGE_NAME = \"ASRouter:child-to-parent\";\nconst ASR_CONTAINER_ID = \"asr-newtab-container\";\n\nexport const ASRouterUtils = {\n  addListener(listener) {\n    global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  removeListener(listener) {\n    global.RPMRemoveMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  sendMessage(action) {\n    global.RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  },\n  blockById(id, options) {\n    ASRouterUtils.sendMessage({type: \"BLOCK_MESSAGE_BY_ID\", data: {id, ...options}});\n  },\n  dismissById(id) {\n    ASRouterUtils.sendMessage({type: \"DISMISS_MESSAGE_BY_ID\", data: {id}});\n  },\n  blockBundle(bundle) {\n    ASRouterUtils.sendMessage({type: \"BLOCK_BUNDLE\", data: {bundle}});\n  },\n  executeAction(button_action) {\n    ASRouterUtils.sendMessage({\n      type: \"USER_ACTION\",\n      data: button_action,\n    });\n  },\n  unblockById(id) {\n    ASRouterUtils.sendMessage({type: \"UNBLOCK_MESSAGE_BY_ID\", data: {id}});\n  },\n  unblockBundle(bundle) {\n    ASRouterUtils.sendMessage({type: \"UNBLOCK_BUNDLE\", data: {bundle}});\n  },\n  overrideMessage(id) {\n    ASRouterUtils.sendMessage({type: \"OVERRIDE_MESSAGE\", data: {id}});\n  },\n  sendTelemetry(ping) {\n    const payload = ac.ASRouterUserEvent(ping);\n    global.RPMSendAsyncMessage(AS_GENERAL_OUTGOING_MESSAGE_NAME, payload);\n  },\n  getPreviewEndpoint() {\n    if (window.location.href.includes(\"endpoint\")) {\n      const params = new URLSearchParams(window.location.href.slice(window.location.href.indexOf(\"endpoint\")));\n      try {\n        const endpoint = new URL(params.get(\"endpoint\"));\n        return {\n          url: endpoint.href,\n          snippetId: params.get(\"snippetId\"),\n        };\n      } catch (e) {}\n    }\n\n    return null;\n  },\n};\n\n// Note: nextProps/prevProps refer to props passed to <ImpressionsWrapper />, not <ASRouterUISurface />\nfunction shouldSendImpressionOnUpdate(nextProps, prevProps) {\n  return (nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id));\n}\n\nexport class ASRouterUISurface extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessageFromParent = this.onMessageFromParent.bind(this);\n    this.sendClick = this.sendClick.bind(this);\n    this.sendImpression = this.sendImpression.bind(this);\n    this.sendUserActionTelemetry = this.sendUserActionTelemetry.bind(this);\n    this.state = {message: {}, bundle: {}};\n  }\n\n  sendUserActionTelemetry(extraProps = {}) {\n    const {message, bundle} = this.state;\n    if (!message && !extraProps.message_id) {\n      throw new Error(`You must provide a message_id for bundled messages`);\n    }\n    const eventType = `${message.provider || bundle.provider}_user_event`;\n    ASRouterUtils.sendTelemetry({\n      message_id: message.id || extraProps.message_id,\n      source: extraProps.id,\n      action: eventType,\n      ...extraProps,\n    });\n  }\n\n  sendImpression(extraProps) {\n    if (this.state.message.provider === \"preview\") {\n      return;\n    }\n\n    ASRouterUtils.sendMessage({type: \"IMPRESSION\", data: this.state.message});\n    this.sendUserActionTelemetry({event: \"IMPRESSION\", ...extraProps});\n  }\n\n  // If link has a `metric` data attribute send it as part of the `value`\n  // telemetry field which can have arbitrary values.\n  // Used for router messages with links as part of the content.\n  sendClick(event) {\n    const metric = {\n      value: event.target.dataset.metric,\n      // Used for the `source` of the event. Needed to differentiate\n      // from other snippet or onboarding events that may occur.\n      id: \"NEWTAB_FOOTER_BAR_CONTENT\",\n    };\n    const action = {\n      type: event.target.dataset.action,\n      data: {args: event.target.dataset.args},\n    };\n    if (action.type) {\n      ASRouterUtils.executeAction(action);\n    }\n    if (!this.state.message.content.do_not_autoblock && !event.target.dataset.do_not_autoblock) {\n      ASRouterUtils.blockById(this.state.message.id);\n    }\n    if (this.state.message.provider !== \"preview\") {\n      this.sendUserActionTelemetry({event: \"CLICK_BUTTON\", ...metric});\n    }\n  }\n\n  onBlockById(id) {\n    return options => ASRouterUtils.blockById(id, options);\n  }\n\n  onDismissById(id) {\n    return () => ASRouterUtils.dismissById(id);\n  }\n\n  clearBundle(bundle) {\n    return () => ASRouterUtils.blockBundle(bundle);\n  }\n\n  onMessageFromParent({data: action}) {\n    switch (action.type) {\n      case \"SET_MESSAGE\":\n        this.setState({message: action.data});\n        break;\n      case \"SET_BUNDLED_MESSAGES\":\n        this.setState({bundle: action.data});\n        break;\n      case \"CLEAR_MESSAGE\":\n        if (action.data.id === this.state.message.id) {\n          this.setState({message: {}});\n        }\n        break;\n      case \"CLEAR_PROVIDER\":\n        if (action.data.id === this.state.message.provider) {\n          this.setState({message: {}});\n        }\n        break;\n      case \"CLEAR_BUNDLE\":\n        if (this.state.bundle.bundle) {\n          this.setState({bundle: {}});\n        }\n        break;\n      case \"CLEAR_ALL\":\n        this.setState({message: {}, bundle: {}});\n    }\n  }\n\n  componentWillMount() {\n    const endpoint = ASRouterUtils.getPreviewEndpoint();\n    ASRouterUtils.addListener(this.onMessageFromParent);\n\n    // If we are loading about:welcome we want to trigger the onboarding messages\n    if (this.props.document.location.href === \"about:welcome\") {\n      ASRouterUtils.sendMessage({type: \"TRIGGER\", data: {trigger: {id: \"firstRun\"}}});\n    } else {\n      ASRouterUtils.sendMessage({type: \"SNIPPETS_REQUEST\", data: {endpoint}});\n    }\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessageFromParent);\n  }\n\n  renderSnippets() {\n    const SnippetComponent = SnippetsTemplates[this.state.message.template];\n    const {content} = this.state.message;\n\n    return (\n      <ImpressionsWrapper\n        id=\"NEWTAB_FOOTER_BAR\"\n        message={this.state.message}\n        sendImpression={this.sendImpression}\n        shouldSendImpressionOnUpdate={shouldSendImpressionOnUpdate}\n        // This helps with testing\n        document={this.props.document}>\n          <LocalizationProvider messages={generateMessages(content)}>\n            <SnippetComponent\n              {...this.state.message}\n              UISurface=\"NEWTAB_FOOTER_BAR\"\n              onBlock={this.onBlockById(this.state.message.id)}\n              onDismiss={this.onDismissById(this.state.message.id)}\n              onAction={ASRouterUtils.executeAction}\n              sendClick={this.sendClick}\n              sendUserActionTelemetry={this.sendUserActionTelemetry} />\n          </LocalizationProvider>\n      </ImpressionsWrapper>);\n  }\n\n  renderOnboarding() {\n    return (\n      <OnboardingMessage\n        {...this.state.bundle}\n        UISurface=\"NEWTAB_OVERLAY\"\n        onAction={ASRouterUtils.executeAction}\n        onDoneButton={this.clearBundle(this.state.bundle.bundle)}\n        sendUserActionTelemetry={this.sendUserActionTelemetry} />);\n  }\n\n  renderPreviewBanner() {\n    if (this.state.message.provider !== \"preview\") {\n      return null;\n    }\n\n    return (\n      <div className=\"snippets-preview-banner\">\n        <span className=\"icon icon-small-spacer icon-info\" />\n        <span>Preview Purposes Only</span>\n      </div>\n    );\n  }\n\n  render() {\n    const {message, bundle} = this.state;\n    if (!message.id && !bundle.template) { return null; }\n    return (\n      <React.Fragment>\n        {this.renderPreviewBanner()}\n        {bundle.template === \"onboarding\" ? this.renderOnboarding() : this.renderSnippets()}\n      </React.Fragment>\n    );\n  }\n}\n\nASRouterUISurface.defaultProps = {document: global.document};\n\nexport class ASRouterContent {\n  constructor() {\n    this.initialized = false;\n    this.containerElement = null;\n  }\n\n  _mount() {\n    this.containerElement = global.document.getElementById(ASR_CONTAINER_ID);\n    if (!this.containerElement) {\n      this.containerElement = global.document.createElement(\"div\");\n      this.containerElement.id = ASR_CONTAINER_ID;\n      this.containerElement.style.zIndex = 1;\n      global.document.body.appendChild(this.containerElement);\n    }\n\n    ReactDOM.render(<ASRouterUISurface />, this.containerElement);\n  }\n\n  _unmount() {\n    ReactDOM.unmountComponentAtNode(this.containerElement);\n  }\n\n  init() {\n    this._mount();\n    this.initialized = true;\n  }\n\n  uninit() {\n    if (this.initialized) {\n      this._unmount();\n      this.initialized = false;\n    }\n  }\n}\n","/* eslint-env mozilla/frame-script */\n\nimport {actionCreators as ac, actionTypes as at, actionUtils as au} from \"common/Actions.jsm\";\nimport {applyMiddleware, combineReducers, createStore} from \"redux\";\n\nexport const MERGE_STORE_ACTION = \"NEW_TAB_INITIAL_STATE\";\nexport const OUTGOING_MESSAGE_NAME = \"ActivityStream:ContentToMain\";\nexport const INCOMING_MESSAGE_NAME = \"ActivityStream:MainToContent\";\nexport const EARLY_QUEUED_ACTIONS = [at.SAVE_SESSION_PERF_DATA, at.PAGE_PRERENDERED];\n\n/**\n * A higher-order function which returns a reducer that, on MERGE_STORE action,\n * will return the action.data object merged into the previous state.\n *\n * For all other actions, it merely calls mainReducer.\n *\n * Because we want this to merge the entire state object, it's written as a\n * higher order function which takes the main reducer (itself often a call to\n * combineReducers) as a parameter.\n *\n * @param  {function} mainReducer reducer to call if action != MERGE_STORE_ACTION\n * @return {function}             a reducer that, on MERGE_STORE_ACTION action,\n *                                will return the action.data object merged\n *                                into the previous state, and the result\n *                                of calling mainReducer otherwise.\n */\nfunction mergeStateReducer(mainReducer) {\n  return (prevState, action) => {\n    if (action.type === MERGE_STORE_ACTION) {\n      return {...prevState, ...action.data};\n    }\n\n    return mainReducer(prevState, action);\n  };\n}\n\n/**\n * messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary\n */\nconst messageMiddleware = store => next => action => {\n  const skipLocal = action.meta && action.meta.skipLocal;\n  if (au.isSendToMain(action)) {\n    RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  }\n  if (!skipLocal) {\n    next(action);\n  }\n};\n\nexport const rehydrationMiddleware = store => next => action => {\n  if (store._didRehydrate) {\n    return next(action);\n  }\n\n  const isMergeStoreAction = action.type === MERGE_STORE_ACTION;\n  const isRehydrationRequest = action.type === at.NEW_TAB_STATE_REQUEST;\n\n  if (isRehydrationRequest) {\n    store._didRequestInitialState = true;\n    return next(action);\n  }\n\n  if (isMergeStoreAction) {\n    store._didRehydrate = true;\n    return next(action);\n  }\n\n  // If init happened after our request was made, we need to re-request\n  if (store._didRequestInitialState && action.type === at.INIT) {\n    return next(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n  }\n\n  if (au.isBroadcastToContent(action) || au.isSendToOneContent(action) || au.isSendToPreloaded(action)) {\n    // Note that actions received before didRehydrate will not be dispatched\n    // because this could negatively affect preloading and the the state\n    // will be replaced by rehydration anyway.\n    return null;\n  }\n\n  return next(action);\n};\n\n/**\n * This middleware queues up all the EARLY_QUEUED_ACTIONS until it receives\n * the first action from main. This is useful for those actions for main which\n * require higher reliability, i.e. the action will not be lost in the case\n * that it gets sent before the main is ready to receive it. Conversely, any\n * actions allowed early are accepted to be ignorable or re-sendable.\n */\nexport const queueEarlyMessageMiddleware = store => next => action => {\n  if (store._receivedFromMain) {\n    next(action);\n  } else if (au.isFromMain(action)) {\n    next(action);\n    store._receivedFromMain = true;\n    // Sending out all the early actions as main is ready now\n    if (store._earlyActionQueue) {\n      store._earlyActionQueue.forEach(next);\n      store._earlyActionQueue = [];\n    }\n  } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {\n    store._earlyActionQueue = store._earlyActionQueue || [];\n    store._earlyActionQueue.push(action);\n  } else {\n    // Let any other type of action go through\n    next(action);\n  }\n};\n\n/**\n * initStore - Create a store and listen for incoming actions\n *\n * @param  {object} reducers An object containing Redux reducers\n * @param  {object} intialState (optional) The initial state of the store, if desired\n * @return {object}          A redux store\n */\nexport function initStore(reducers, initialState) {\n  const store = createStore(\n    mergeStateReducer(combineReducers(reducers)),\n    initialState,\n    global.RPMAddMessageListener && applyMiddleware(rehydrationMiddleware, queueEarlyMessageMiddleware, messageMiddleware)\n  );\n\n  store._didRehydrate = false;\n  store._didRequestInitialState = false;\n\n  if (global.RPMAddMessageListener) {\n    global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, msg => {\n      try {\n        store.dispatch(msg.data);\n      } catch (ex) {\n        console.error(\"Content msg:\", msg, \"Dispatch error: \", ex); // eslint-disable-line no-console\n        dump(`Content msg: ${JSON.stringify(msg)}\\nDispatch error: ${ex}\\n${ex.stack}`);\n      }\n    });\n  }\n\n  return store;\n}\n","module.exports = Redux;","import {MessageContext} from \"fluent\";\n\n/**\n * Properties that allow rich text MUST be added to this list.\n *   key: the localization_id that should be used\n *   value: a property or array of properties on the message.content object\n */\nconst RICH_TEXT_CONFIG = {\n  \"text\": [\"text\", \"scene1_text\"],\n  \"privacy_html\": \"scene2_privacy_html\",\n  \"disclaimer_html\": \"scene2_disclaimer_html\",\n};\n\nexport const RICH_TEXT_KEYS = Object.keys(RICH_TEXT_CONFIG);\n\n/**\n * Generates an array of messages suitable for fluent's localization provider\n * including all needed strings for rich text.\n * @param {object} content A .content object from an ASR message (i.e. message.content)\n * @returns {MessageContext[]} A array containing the fluent message context\n */\nexport function generateMessages(content) {\n  const cx = new MessageContext(\"en-US\");\n\n  RICH_TEXT_KEYS.forEach(key => {\n    const attrs = RICH_TEXT_CONFIG[key];\n    const attrsToTry = Array.isArray(attrs) ? [...attrs] : [attrs];\n    let string = \"\";\n    while (!string && attrsToTry.length) {\n      const attr = attrsToTry.pop();\n      string = content[attr];\n    }\n    cx.addMessages(`${key} = ${string}`);\n  });\n  return [cx];\n}\n","import React from \"react\";\n\nexport const VISIBLE = \"visible\";\nexport const VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\n/**\n * Component wrapper used to send telemetry pings on every impression.\n */\nexport class ImpressionsWrapper extends React.PureComponent {\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionOrAddListener() {\n    if (this.props.document.visibilityState === VISIBLE) {\n      this.props.sendImpression({id: this.props.id});\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (this.props.document.visibilityState === VISIBLE) {\n          this.props.sendImpression({id: this.props.id});\n          this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentDidMount() {\n    if (this.props.sendOnMount) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  render() {\n    return this.props.children;\n  }\n}\n\nImpressionsWrapper.defaultProps = {\n  document: global.document,\n  sendOnMount: true,\n};\n","module.exports = React;","module.exports = PropTypes;","module.exports = ReactDOM;","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addLocaleData, injectIntl, IntlProvider} from \"react-intl\";\nimport {ASRouterAdmin} from \"content-src/components/ASRouterAdmin/ASRouterAdmin\";\nimport {ConfirmDialog} from \"content-src/components/ConfirmDialog/ConfirmDialog\";\nimport {connect} from \"react-redux\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport {ManualMigration} from \"content-src/components/ManualMigration/ManualMigration\";\nimport {PrerenderData} from \"common/PrerenderData.jsm\";\nimport React from \"react\";\nimport {Search} from \"content-src/components/Search/Search\";\nimport {Sections} from \"content-src/components/Sections/Sections\";\nimport {StartupOverlay} from \"content-src/components/StartupOverlay/StartupOverlay\";\n\nconst PrefsButton = injectIntl(props => (\n  <div className=\"prefs-button\">\n    <button className=\"icon icon-settings\" onClick={props.onClick} title={props.intl.formatMessage({id: \"settings_pane_button_label\"})} />\n  </div>\n));\n\n// Add the locale data for pluralization and relative-time formatting for now,\n// this just uses english locale data. We can make this more sophisticated if\n// more features are needed.\nfunction addLocaleDataForReactIntl(locale) {\n  addLocaleData([{locale, parentLocale: \"en\"}]);\n}\n\n// Returns a function will not be continuously triggered when called. The\n// function will be triggered if called again after `wait` milliseconds.\nfunction debounce(func, wait) {\n  let timer;\n  return (...args) => {\n    if (timer) { return; }\n\n    let wakeUp = () => { timer = null; };\n\n    timer = setTimeout(wakeUp, wait);\n    func.apply(this, args);\n  };\n}\n\nexport class _Base extends React.PureComponent {\n  componentWillMount() {\n    const {locale} = this.props;\n    addLocaleDataForReactIntl(locale);\n    if (this.props.isFirstrun) {\n      global.document.body.classList.add(\"welcome\", \"hide-main\");\n    }\n  }\n\n  componentDidMount() {\n    // Request state AFTER the first render to ensure we don't cause the\n    // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is\n    // dispatched right after the store is ready.\n    if (this.props.isPrerendered) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n      this.props.dispatch(ac.AlsoToMain({type: at.PAGE_PRERENDERED}));\n    }\n  }\n\n  componentWillUnmount() {\n    this.updateTheme();\n  }\n\n  componentWillUpdate() {\n    this.updateTheme();\n  }\n\n  updateTheme() {\n    const bodyClassName = [\n      \"activity-stream\",\n      // If we skipped the about:welcome overlay and removed the CSS classes\n      // we don't want to add them back to the Activity Stream view\n      document.body.classList.contains(\"welcome\") ? \"welcome\" : \"\",\n      document.body.classList.contains(\"hide-main\") ? \"hide-main\" : \"\",\n    ].filter(v => v).join(\" \");\n    global.document.body.className = bodyClassName;\n  }\n\n  render() {\n    const {props} = this;\n    const {App, locale, strings} = props;\n    const {initialized} = App;\n\n    const prefs = props.Prefs.values;\n    if (prefs[\"asrouter.devtoolsEnabled\"]) {\n      if (window.location.hash === \"#asrouter\") {\n        return (<ASRouterAdmin />);\n      }\n      console.log(\"ASRouter devtools enabled. To access visit %cabout:newtab#asrouter\", \"font-weight: bold\"); // eslint-disable-line no-console\n    }\n\n    if (!props.isPrerendered && !initialized) {\n      return null;\n    }\n\n    return (<IntlProvider locale={locale} messages={strings}>\n        <ErrorBoundary className=\"base-content-fallback\">\n          <BaseContent {...this.props} />\n        </ErrorBoundary>\n      </IntlProvider>);\n  }\n}\n\nexport class BaseContent extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.openPreferences = this.openPreferences.bind(this);\n    this.onWindowScroll = debounce(this.onWindowScroll.bind(this), 5);\n    this.state = {fixedSearch: false};\n  }\n\n  componentDidMount() {\n    global.addEventListener(\"scroll\", this.onWindowScroll);\n  }\n\n  componentWillUnmount() {\n    global.removeEventListener(\"scroll\", this.onWindowScroll);\n  }\n\n  onWindowScroll() {\n    const SCROLL_THRESHOLD = 34;\n    if (global.scrollY > SCROLL_THRESHOLD && !this.state.fixedSearch) {\n      this.setState({fixedSearch: true});\n    } else if (global.scrollY <= SCROLL_THRESHOLD && this.state.fixedSearch) {\n      this.setState({fixedSearch: false});\n    }\n  }\n\n  openPreferences() {\n    this.props.dispatch(ac.OnlyToMain({type: at.SETTINGS_OPEN}));\n    this.props.dispatch(ac.UserEvent({event: \"OPEN_NEWTAB_PREFS\"}));\n  }\n\n  render() {\n    const {props} = this;\n    const {App} = props;\n    const {initialized} = App;\n    const prefs = props.Prefs.values;\n\n    const shouldBeFixedToTop = PrerenderData.arePrefsValid(name => prefs[name]);\n    const noSectionsEnabled = !prefs[\"feeds.topsites\"] && props.Sections.filter(section => section.enabled).length === 0;\n\n    const outerClassName = [\n      \"outer-wrapper\",\n      shouldBeFixedToTop && \"fixed-to-top\",\n      prefs.showSearch && this.state.fixedSearch && !noSectionsEnabled && \"fixed-search\",\n      prefs.showSearch && noSectionsEnabled && \"only-search\",\n    ].filter(v => v).join(\" \");\n\n    return (\n      <div>\n        <div className={outerClassName}>\n          <main>\n            {prefs.showSearch &&\n              <div className=\"non-collapsible-section\">\n                <ErrorBoundary>\n                  <Search showLogo={noSectionsEnabled} />\n                </ErrorBoundary>\n              </div>\n            }\n            <div className={`body-wrapper${(initialized ? \" on\" : \"\")}`}>\n              {!prefs.migrationExpired &&\n                <div className=\"non-collapsible-section\">\n                  <ManualMigration />\n                </div>\n                }\n              <Sections />\n              <PrefsButton onClick={this.openPreferences} />\n            </div>\n            <ConfirmDialog />\n          </main>\n        </div>\n        {this.props.isFirstrun && <StartupOverlay />}\n      </div>);\n  }\n}\n\nexport const Base = connect(state => ({App: state.App, Prefs: state.Prefs, Sections: state.Sections}))(_Base);\n","module.exports = ReactIntl;","import {ASRouterUtils} from \"../../asrouter/asrouter-content\";\nimport React from \"react\";\n\nexport class ASRouterAdmin extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessage = this.onMessage.bind(this);\n    this.handleEnabledToggle = this.handleEnabledToggle.bind(this);\n    this.onChangeMessageFilter = this.onChangeMessageFilter.bind(this);\n    this.findOtherBundledMessagesOfSameTemplate = this.findOtherBundledMessagesOfSameTemplate.bind(this);\n    this.state = {messageFilter: \"all\"};\n  }\n\n  onMessage({data: action}) {\n    if (action.type === \"ADMIN_SET_STATE\") {\n      this.setState(action.data);\n    }\n  }\n\n  componentWillMount() {\n    const endpoint = ASRouterUtils.getPreviewEndpoint();\n    ASRouterUtils.sendMessage({type: \"ADMIN_CONNECT_STATE\", data: {endpoint}});\n    ASRouterUtils.addListener(this.onMessage);\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessage);\n  }\n\n  findOtherBundledMessagesOfSameTemplate(template) {\n    return this.state.messages.filter(msg => msg.template === template && msg.bundled);\n  }\n\n  handleBlock(msg) {\n    if (msg.bundled) {\n      // If we are blocking a message that belongs to a bundle, block all other messages that are bundled of that same template\n      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n      return () => ASRouterUtils.blockBundle(bundle);\n    }\n    return () => ASRouterUtils.blockById(msg.id);\n  }\n\n  handleUnblock(msg) {\n    if (msg.bundled) {\n      // If we are unblocking a message that belongs to a bundle, unblock all other messages that are bundled of that same template\n      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n      return () => ASRouterUtils.unblockBundle(bundle);\n    }\n    return () => ASRouterUtils.unblockById(msg.id);\n  }\n\n  handleOverride(id) {\n    return () => ASRouterUtils.overrideMessage(id);\n  }\n\n  expireCache() {\n    ASRouterUtils.sendMessage({type: \"EXPIRE_QUERY_CACHE\"});\n  }\n\n  resetPref() {\n    ASRouterUtils.sendMessage({type: \"RESET_PROVIDER_PREF\"});\n  }\n\n  renderMessageItem(msg) {\n    const isCurrent = msg.id === this.state.lastMessageId;\n    const isBlocked = this.state.messageBlockList.includes(msg.id) || this.state.messageBlockList.includes(msg.campaign);\n    const impressions = this.state.messageImpressions[msg.id] ? this.state.messageImpressions[msg.id].length : 0;\n\n    let itemClassName = \"message-item\";\n    if (isCurrent) { itemClassName += \" current\"; }\n    if (isBlocked) { itemClassName += \" blocked\"; }\n\n    return (<tr className={itemClassName} key={msg.id}>\n      <td className=\"message-id\"><span>{msg.id} <br /></span></td>\n      <td>\n        <button className={`button ${(isBlocked ? \"\" : \" primary\")}`} onClick={isBlocked ? this.handleUnblock(msg) : this.handleBlock(msg)}>{isBlocked ? \"Unblock\" : \"Block\"}</button>\n       {isBlocked ? null : <button className=\"button\" onClick={this.handleOverride(msg.id)}>Show</button>}\n       <br />({impressions} impressions)\n      </td>\n      <td className=\"message-summary\">\n        <pre>{JSON.stringify(msg, null, 2)}</pre>\n      </td>\n    </tr>);\n  }\n\n  renderMessages() {\n    if (!this.state.messages) {\n      return null;\n    }\n    const messagesToShow = this.state.messageFilter === \"all\" ? this.state.messages : this.state.messages.filter(message => message.provider === this.state.messageFilter);\n    return (<table><tbody>\n      {messagesToShow.map(msg => this.renderMessageItem(msg))}\n    </tbody></table>);\n  }\n\n  onChangeMessageFilter(event) {\n    this.setState({messageFilter: event.target.value});\n  }\n\n  renderMessageFilter() {\n    if (!this.state.providers) {\n      return null;\n    }\n    return (<p>Show messages from <select value={this.state.messageFilter} onChange={this.onChangeMessageFilter}>\n      <option value=\"all\">all providers</option>\n      {this.state.providers.map(provider => (<option key={provider.id} value={provider.id}>{provider.id}</option>))}\n    </select></p>);\n  }\n\n  renderTableHead() {\n    return (<thead>\n      <tr className=\"message-item\">\n        <td>id</td>\n        <td>enabled</td>\n        <td>source</td>\n        <td>last updated</td>\n      </tr>\n    </thead>);\n  }\n\n  handleEnabledToggle(event) {\n    const action = {type: event.target.checked ? \"ENABLE_PROVIDER\" : \"DISABLE_PROVIDER\", data: event.target.name};\n    ASRouterUtils.sendMessage(action);\n    this.setState({messageFilter: \"all\"});\n  }\n\n  renderProviders() {\n    const providersConfig = this.state.providerPrefs;\n    const providerInfo = this.state.providers;\n    return (<table>{this.renderTableHead()}<tbody>\n      {providersConfig.map((provider, i) => {\n        const isTestProvider = provider.id === \"snippets_local_testing\";\n        const info = providerInfo.find(p => p.id === provider.id) || {};\n        let label = \"(local)\";\n        if (provider.type === \"remote\") {\n          label = <a target=\"_blank\" href={info.url}>{info.url}</a>;\n        } else if (provider.type === \"remote-settings\") {\n          label = `${provider.bucket} (Remote Settings)`;\n        }\n        return (<tr className=\"message-item\" key={i}>\n          <td>{provider.id}</td>\n          <td>{isTestProvider ? null : <input type=\"checkbox\" name={provider.id} checked={provider.enabled} onChange={this.handleEnabledToggle} />}</td>\n          <td>{label}</td>\n          <td style={{whiteSpace: \"nowrap\"}}>{info.lastUpdated ? new Date(info.lastUpdated).toLocaleString() : \"\"}</td>\n        </tr>);\n      })}\n    </tbody></table>);\n  }\n\n  render() {\n    return (<div className=\"asrouter-admin outer-wrapper\">\n      <h1>AS Router Admin</h1>\n      <h2>Targeting Utilities</h2>\n      <button className=\"button\" onClick={this.expireCache}>Expire Cache</button> (This expires the cache in ASR Targeting for bookmarks and top sites)\n      <h2>Message Providers</h2>\n      <button className=\"button\" onClick={this.resetPref}>Restore defaults</button>\n      {this.state.providers ? this.renderProviders() : null}\n      <h2>Messages</h2>\n      {this.renderMessageFilter()}\n      {this.renderMessages()}\n    </div>);\n  }\n}\n","import {actionCreators as ac, actionTypes} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * ConfirmDialog component.\n * One primary action button, one cancel button.\n *\n * Content displayed is controlled by `data` prop the component receives.\n * Example:\n * data: {\n *   // Any sort of data needed to be passed around by actions.\n *   payload: site.url,\n *   // Primary button AlsoToMain action.\n *   action: \"DELETE_HISTORY_URL\",\n *   // Primary button USerEvent action.\n *   userEvent: \"DELETE\",\n *   // Array of locale ids to display.\n *   message_body: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n *   // Text for primary button.\n *   confirm_button_string_id: \"menu_action_delete\"\n * },\n */\nexport class _ConfirmDialog extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this._handleCancelBtn = this._handleCancelBtn.bind(this);\n    this._handleConfirmBtn = this._handleConfirmBtn.bind(this);\n  }\n\n  _handleCancelBtn() {\n    this.props.dispatch({type: actionTypes.DIALOG_CANCEL});\n    this.props.dispatch(ac.UserEvent({event: actionTypes.DIALOG_CANCEL, source: this.props.data.eventSource}));\n  }\n\n  _handleConfirmBtn() {\n    this.props.data.onConfirm.forEach(this.props.dispatch);\n  }\n\n  _renderModalMessage() {\n    const message_body = this.props.data.body_string_id;\n\n    if (!message_body) {\n      return null;\n    }\n\n    return (<span>\n      {message_body.map(msg => <p key={msg}><FormattedMessage id={msg} /></p>)}\n    </span>);\n  }\n\n  render() {\n    if (!this.props.visible) {\n      return null;\n    }\n\n    return (<div className=\"confirmation-dialog\">\n      <div className=\"modal-overlay\" onClick={this._handleCancelBtn} />\n      <div className=\"modal\">\n        <section className=\"modal-message\">\n          {this.props.data.icon && <span className={`icon icon-spacer icon-${this.props.data.icon}`} />}\n          {this._renderModalMessage()}\n        </section>\n        <section className=\"actions\">\n          <button onClick={this._handleCancelBtn}>\n            <FormattedMessage id={this.props.data.cancel_button_string_id} />\n          </button>\n          <button className=\"done\" onClick={this._handleConfirmBtn}>\n            <FormattedMessage id={this.props.data.confirm_button_string_id} />\n          </button>\n        </section>\n      </div>\n    </div>);\n  }\n}\n\nexport const ConfirmDialog = connect(state => state.Dialog)(_ConfirmDialog);\n","module.exports = ReactRedux;","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class ErrorBoundaryFallback extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.windowObj = this.props.windowObj || window;\n    this.onClick = this.onClick.bind(this);\n  }\n\n  /**\n   * Since we only get here if part of the page has crashed, do a\n   * forced reload to give us the best chance at recovering.\n   */\n  onClick() {\n    this.windowObj.location.reload(true);\n  }\n\n  render() {\n    const defaultClass = \"as-error-fallback\";\n    let className;\n    if (\"className\" in this.props) {\n      className = `${this.props.className} ${defaultClass}`;\n    } else {\n      className = defaultClass;\n    }\n\n    // href=\"#\" to force normal link styling stuff (eg cursor on hover)\n    return (\n      <div className={className}>\n        <div>\n          <FormattedMessage\n            defaultMessage=\"Oops, something went wrong loading this content.\"\n            id=\"error_fallback_default_info\" />\n        </div>\n        <span>\n          <a href=\"#\" className=\"reload-button\" onClick={this.onClick}>\n            <FormattedMessage\n              defaultMessage=\"Refresh page to try again.\"\n              id=\"error_fallback_default_refresh_suggestion\" />\n          </a>\n        </span>\n      </div>\n    );\n  }\n}\nErrorBoundaryFallback.defaultProps = {className: \"as-error-fallback\"};\n\nexport class ErrorBoundary extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {hasError: false};\n  }\n\n  componentDidCatch(error, info) {\n    this.setState({hasError: true});\n  }\n\n  render() {\n    if (!this.state.hasError) {\n      return (this.props.children);\n    }\n\n    return <this.props.FallbackComponent className={this.props.className} />;\n  }\n}\n\nErrorBoundary.defaultProps = {FallbackComponent: ErrorBoundaryFallback};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * Manual migration component used to start the profile import wizard.\n * Message is presented temporarily and will go away if:\n * 1.  User clicks \"No Thanks\"\n * 2.  User completed the data import\n * 3.  After 3 active days\n * 4.  User clicks \"Cancel\" on the import wizard (currently not implemented).\n */\nexport class _ManualMigration extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onLaunchTour = this.onLaunchTour.bind(this);\n    this.onCancelTour = this.onCancelTour.bind(this);\n  }\n\n  onLaunchTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_START}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_START}));\n  }\n\n  onCancelTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_CANCEL}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_CANCEL}));\n  }\n\n  render() {\n    return (<div className=\"manual-migration-container\">\n        <p>\n          <span className=\"icon icon-import\" />\n          <FormattedMessage id=\"manual_migration_explanation2\" />\n        </p>\n        <div className=\"manual-migration-actions actions\">\n          <button className=\"dismiss\" onClick={this.onCancelTour}>\n            <FormattedMessage id=\"manual_migration_cancel_button\" />\n          </button>\n          <button onClick={this.onLaunchTour}>\n            <FormattedMessage id=\"manual_migration_import_button\" />\n          </button>\n        </div>\n    </div>);\n  }\n}\n\nexport const ManualMigration = connect()(_ManualMigration);\n","class _PrerenderData {\n  constructor(options) {\n    this.initialPrefs = options.initialPrefs;\n    this.initialSections = options.initialSections;\n    this._setValidation(options.validation);\n  }\n\n  get validation() {\n    return this._validation;\n  }\n\n  set validation(value) {\n    this._setValidation(value);\n  }\n\n  get invalidatingPrefs() {\n    return this._invalidatingPrefs;\n  }\n\n    // This is needed so we can use it in the constructor\n  _setValidation(value = []) {\n    this._validation = value;\n    this._invalidatingPrefs = value.reduce((result, next) => {\n      if (typeof next === \"string\") {\n        result.push(next);\n        return result;\n      } else if (next && next.oneOf) {\n        return result.concat(next.oneOf);\n      } else if (next && next.indexedDB) {\n        return result.concat(next.indexedDB);\n      }\n      throw new Error(\"Your validation configuration is not properly configured\");\n    }, []);\n  }\n\n  arePrefsValid(getPref, indexedDBPrefs) {\n    for (const prefs of this.validation) {\n      // {oneOf: [\"foo\", \"bar\"]}\n      if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {\n        return false;\n\n        // {indexedDB: [\"foo\", \"bar\"]}\n      } else if (indexedDBPrefs && prefs && prefs.indexedDB) {\n        const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));\n        if (anyModifiedPrefs) {\n          return false;\n        }\n        // \"foo\"\n      } else if (getPref(prefs) !== this.initialPrefs[prefs]) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nthis.PrerenderData = new _PrerenderData({\n  initialPrefs: {\n    \"migrationExpired\": true,\n    \"feeds.topsites\": true,\n    \"showSearch\": true,\n    \"topSitesRows\": 1,\n    \"feeds.section.topstories\": true,\n    \"feeds.section.highlights\": true,\n    \"sectionOrder\": \"topsites,topstories,highlights\",\n    \"collapsed\": false,\n  },\n  // Prefs listed as invalidating will prevent the prerendered version\n  // of AS from being used if their value is something other than what is listed\n  // here. This is required because some preferences cause the page layout to be\n  // too different for the prerendered version to be used. Unfortunately, this\n  // will result in users who have modified some of their preferences not being\n  // able to get the benefits of prerendering.\n  validation: [\n    \"feeds.topsites\",\n    \"showSearch\",\n    \"topSitesRows\",\n    \"sectionOrder\",\n    // This means if either of these are set to their default values,\n    // prerendering can be used.\n    {oneOf: [\"feeds.section.topstories\", \"feeds.section.highlights\"]},\n    // If any component has the following preference set to `true` it will\n    // invalidate the prerendered version.\n    {indexedDB: [\"collapsed\"]},\n  ],\n  initialSections: [\n    {\n      enabled: true,\n      icon: \"pocket\",\n      id: \"topstories\",\n      order: 1,\n      title: {id: \"header_recommended_by\", values: {provider: \"Pocket\"}},\n    },\n    {\n      enabled: true,\n      id: \"highlights\",\n      icon: \"highlights\",\n      order: 2,\n      title: {id: \"header_highlights\"},\n    },\n  ],\n});\n\nthis._PrerenderData = _PrerenderData;\nconst EXPORTED_SYMBOLS = [\"PrerenderData\", \"_PrerenderData\"];\n","/* globals ContentSearchUIController */\n\"use strict\";\n\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {IS_NEWTAB} from \"content-src/lib/constants\";\nimport React from \"react\";\n\nexport class _Search extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onInputMount = this.onInputMount.bind(this);\n  }\n\n  handleEvent(event) {\n    // Also track search events with our own telemetry\n    if (event.detail.type === \"Search\") {\n      this.props.dispatch(ac.UserEvent({event: \"SEARCH\"}));\n    }\n  }\n\n  onClick(event) {\n    window.gContentSearchController.search(event);\n  }\n\n  componentWillUnmount() {\n    delete window.gContentSearchController;\n  }\n\n  onInputMount(input) {\n    if (input) {\n      // The \"healthReportKey\" and needs to be \"newtab\" or \"abouthome\" so that\n      // BrowserUsageTelemetry.jsm knows to handle events with this name, and\n      // can add the appropriate telemetry probes for search. Without the correct\n      // name, certain tests like browser_UsageTelemetry_content.js will fail\n      // (See github ticket #2348 for more details)\n      const healthReportKey = IS_NEWTAB ? \"newtab\" : \"abouthome\";\n\n      // The \"searchSource\" needs to be \"newtab\" or \"homepage\" and is sent with\n      // the search data and acts as context for the search request (See\n      // nsISearchEngine.getSubmission). It is necessary so that search engine\n      // plugins can correctly atribute referrals. (See github ticket #3321 for\n      // more details)\n      const searchSource = IS_NEWTAB ? \"newtab\" : \"homepage\";\n\n      // gContentSearchController needs to exist as a global so that tests for\n      // the existing about:home can find it; and so it allows these tests to pass.\n      // In the future, when activity stream is default about:home, this can be renamed\n      window.gContentSearchController = new ContentSearchUIController(input, input.parentNode,\n        healthReportKey, searchSource);\n      addEventListener(\"ContentSearchClient\", this);\n    } else {\n      window.gContentSearchController = null;\n      removeEventListener(\"ContentSearchClient\", this);\n    }\n  }\n\n  /*\n   * Do not change the ID on the input field, as legacy newtab code\n   * specifically looks for the id 'newtab-search-text' on input fields\n   * in order to execute searches in various tests\n   */\n  render() {\n    return (<div className=\"search-wrapper\">\n      {this.props.showLogo &&\n        <div className=\"logo-and-wordmark\">\n          <div className=\"logo\" />\n          <div className=\"wordmark\" />\n        </div>\n      }\n      <div className=\"search-inner-wrapper\">\n        <label htmlFor=\"newtab-search-text\" className=\"search-label\">\n          <span className=\"sr-only\"><FormattedMessage id=\"search_web_placeholder\" /></span>\n        </label>\n        <input\n          id=\"newtab-search-text\"\n          maxLength=\"256\"\n          placeholder={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n          ref={this.onInputMount}\n          title={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n          type=\"search\" />\n        <button\n          id=\"searchSubmit\"\n          className=\"search-button\"\n          onClick={this.onClick}\n          title={this.props.intl.formatMessage({id: \"search_button\"})}>\n          <span className=\"sr-only\"><FormattedMessage id=\"search_button\" /></span>\n        </button>\n      </div>\n    </div>);\n  }\n}\n\nexport const Search = connect()(injectIntl(_Search));\n","export const IS_NEWTAB = global.document && global.document.documentURI === \"about:newtab\";\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {Card, PlaceholderCard} from \"content-src/components/Card/Card\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {MoreRecommendations} from \"content-src/components/MoreRecommendations/MoreRecommendations\";\nimport {PocketLoggedInCta} from \"content-src/components/PocketLoggedInCta/PocketLoggedInCta\";\nimport React from \"react\";\nimport {Topics} from \"content-src/components/Topics/Topics\";\nimport {TopSites} from \"content-src/components/TopSites/TopSites\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\nconst CARDS_PER_ROW_DEFAULT = 3;\nconst CARDS_PER_ROW_COMPACT_WIDE = 4;\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class Section extends React.PureComponent {\n  get numRows() {\n    const {rowsPref, maxRows, Prefs} = this.props;\n    return rowsPref ? Prefs.values[rowsPref] : maxRows;\n  }\n\n  _dispatchImpressionStats() {\n    const {props} = this;\n    let cardsPerRow = CARDS_PER_ROW_DEFAULT;\n    if (props.compactCards && global.matchMedia(`(min-width: 1072px)`).matches) {\n      // If the section has compact cards and the viewport is wide enough, we show\n      // 4 columns instead of 3.\n      // $break-point-widest = 1072px (from _variables.scss)\n      cardsPerRow = CARDS_PER_ROW_COMPACT_WIDE;\n    }\n    const maxCards = cardsPerRow * this.numRows;\n    const cards = props.rows.slice(0, maxCards);\n\n    if (this.needsImpressionStats(cards)) {\n      props.dispatch(ac.ImpressionStats({\n        source: props.eventSource,\n        tiles: cards.map(link => ({id: link.guid})),\n      }));\n      this.impressionCardGuids = cards.map(link => link.guid);\n    }\n  }\n\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionStatsOrAddListener() {\n    const {props} = this;\n\n    if (!props.shouldSendImpressionStats || !props.dispatch) {\n      return;\n    }\n\n    if (props.document.visibilityState === VISIBLE) {\n      this._dispatchImpressionStats();\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (props.document.visibilityState === VISIBLE) {\n          if (!this.props.pref.collapsed) {\n            this._dispatchImpressionStats();\n          }\n          props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentWillMount() {\n    this.sendNewTabRehydrated(this.props.initialized);\n  }\n\n  componentDidMount() {\n    if (this.props.rows.length && !this.props.pref.collapsed) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    const {props} = this;\n    const isCollapsed = props.pref.collapsed;\n    const wasCollapsed = prevProps.pref.collapsed;\n    if (\n      // Don't send impression stats for the empty state\n      props.rows.length &&\n      (\n        // We only want to send impression stats if the content of the cards has changed\n        // and the section is not collapsed...\n        (props.rows !== prevProps.rows && !isCollapsed) ||\n        // or if we are expanding a section that was collapsed.\n        (wasCollapsed && !isCollapsed)\n      )\n    ) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentWillUpdate(nextProps) {\n    this.sendNewTabRehydrated(nextProps.initialized);\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  needsImpressionStats(cards) {\n    if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {\n      return true;\n    }\n\n    for (let i = 0; i < cards.length; i++) {\n      if (cards[i].guid !== this.impressionCardGuids[i]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  // The NEW_TAB_REHYDRATED event is used to inform feeds that their\n  // data has been consumed e.g. for counting the number of tabs that\n  // have rendered that data.\n  sendNewTabRehydrated(initialized) {\n    if (initialized && !this.renderNotified) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_REHYDRATED, data: {}}));\n      this.renderNotified = true;\n    }\n  }\n\n  render() {\n    const {\n      id, eventSource, title, icon, rows, Pocket, topics,\n      emptyState, dispatch, compactCards, read_more_endpoint,\n      contextMenuOptions, initialized, learnMore,\n      pref, privacyNoticeURL, isFirst, isLast,\n    } = this.props;\n\n    const waitingForSpoc = id === \"topstories\" && this.props.Pocket.waitingForSpoc;\n    const maxCardsPerRow = compactCards ? CARDS_PER_ROW_COMPACT_WIDE : CARDS_PER_ROW_DEFAULT;\n    const {numRows} = this;\n    const maxCards = maxCardsPerRow * numRows;\n    const maxCardsOnNarrow = CARDS_PER_ROW_DEFAULT * numRows;\n\n    const {pocketCta, isUserLoggedIn} = Pocket || {};\n    const {useCta} = pocketCta || {};\n\n    // Don't display anything until we have a definitve result from Pocket,\n    // to avoid a flash of logged out state while we render.\n    const isPocketLoggedInDefined = (isUserLoggedIn === true || isUserLoggedIn === false);\n\n    const shouldShowPocketCta = (id === \"topstories\" &&\n      useCta && isUserLoggedIn === false);\n\n    // Show topics only for top stories and if it has loaded with topics.\n    // The classs .top-stories-bottom-container ensures content doesn't shift as things load.\n    const shouldShowTopics = (id === \"topstories\" &&\n      (topics && topics.length > 0) &&\n      ((useCta && isUserLoggedIn === true) || (!useCta && isPocketLoggedInDefined)));\n\n    const realRows = rows.slice(0, maxCards);\n\n    // The empty state should only be shown after we have initialized and there is no content.\n    // Otherwise, we should show placeholders.\n    const shouldShowEmptyState = initialized && !rows.length;\n\n    const cards = [];\n    if (!shouldShowEmptyState) {\n      for (let i = 0; i < maxCards; i++) {\n        const link = realRows[i];\n        // On narrow viewports, we only show 3 cards per row. We'll mark the rest as\n        // .hide-for-narrow to hide in CSS via @media query.\n        const className = (i >= maxCardsOnNarrow) ? \"hide-for-narrow\" : \"\";\n        let usePlaceholder = !link;\n        // If we are in the third card and waiting for spoc,\n        // use the placeholder.\n        if (!usePlaceholder && i === 2 && waitingForSpoc) {\n          usePlaceholder = true;\n        }\n        cards.push(!usePlaceholder ? (\n          <Card key={i}\n            index={i}\n            className={className}\n            dispatch={dispatch}\n            link={link}\n            contextMenuOptions={contextMenuOptions}\n            eventSource={eventSource}\n            shouldSendImpressionStats={this.props.shouldSendImpressionStats}\n            isWebExtension={this.props.isWebExtension} />\n        ) : (\n          <PlaceholderCard key={i} className={className} />\n        ));\n      }\n    }\n\n    const sectionClassName = [\n      \"section\",\n      compactCards ? \"compact-cards\" : \"normal-cards\",\n    ].join(\" \");\n\n    // <Section> <-- React component\n    // <section> <-- HTML5 element\n    return (<ComponentPerfTimer {...this.props}>\n      <CollapsibleSection className={sectionClassName} icon={icon}\n        title={title}\n        id={id}\n        eventSource={eventSource}\n        collapsed={this.props.pref.collapsed}\n        showPrefName={(pref && pref.feed) || id}\n        privacyNoticeURL={privacyNoticeURL}\n        Prefs={this.props.Prefs}\n        isFirst={isFirst}\n        isLast={isLast}\n        learnMore={learnMore}\n        dispatch={this.props.dispatch}\n        isWebExtension={this.props.isWebExtension}>\n\n        {!shouldShowEmptyState && (<ul className=\"section-list\" style={{padding: 0}}>\n          {cards}\n        </ul>)}\n        {shouldShowEmptyState &&\n          <div className=\"section-empty-state\">\n            <div className=\"empty-state\">\n              {emptyState.icon && emptyState.icon.startsWith(\"moz-extension://\") ?\n                <img className=\"empty-state-icon icon\" style={{\"background-image\": `url('${emptyState.icon}')`}} /> :\n                <img className={`empty-state-icon icon icon-${emptyState.icon}`} />}\n              <p className=\"empty-state-message\">\n                {getFormattedMessage(emptyState.message)}\n              </p>\n            </div>\n          </div>}\n        {id === \"topstories\" &&\n          <div className=\"top-stories-bottom-container\">\n            {shouldShowTopics && <Topics topics={this.props.topics} />}\n            {shouldShowPocketCta && <PocketLoggedInCta />}\n            {read_more_endpoint &&\n              <MoreRecommendations read_more_endpoint={read_more_endpoint} />}\n          </div>}\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nSection.defaultProps = {\n  document: global.document,\n  rows: [],\n  emptyState: {},\n  pref: {},\n  title: \"\",\n};\n\nexport const SectionIntl = connect(state => ({Prefs: state.Prefs, Pocket: state.Pocket}))(injectIntl(Section));\n\nexport class _Sections extends React.PureComponent {\n  renderSections() {\n    const sections = [];\n    const enabledSections = this.props.Sections.filter(section => section.enabled);\n    const {sectionOrder, \"feeds.topsites\": showTopSites} = this.props.Prefs.values;\n    // Enabled sections doesn't include Top Sites, so we add it if enabled.\n    const expectedCount = enabledSections.length + ~~showTopSites;\n\n    for (const sectionId of sectionOrder.split(\",\")) {\n      const commonProps = {\n        key: sectionId,\n        isFirst: sections.length === 0,\n        isLast: sections.length === expectedCount - 1,\n      };\n      if (sectionId === \"topsites\" && showTopSites) {\n        sections.push(<TopSites {...commonProps} />);\n      } else {\n        const section = enabledSections.find(s => s.id === sectionId);\n        if (section) {\n          sections.push(<SectionIntl {...section} {...commonProps} />);\n        }\n      }\n    }\n    return sections;\n  }\n\n  render() {\n    return (\n      <div className=\"sections-list\">\n        {this.renderSections()}\n      </div>\n    );\n  }\n}\n\nexport const Sections = connect(state => ({Sections: state.Sections, Prefs: state.Prefs}))(_Sections);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\nconst _OpenInPrivateWindow = site => ({\n  id: \"menu_action_open_private_window\",\n  icon: \"new-window-private\",\n  action: ac.OnlyToMain({\n    type: at.OPEN_PRIVATE_WINDOW,\n    data: {url: site.url, referrer: site.referrer},\n  }),\n  userEvent: \"OPEN_PRIVATE_WINDOW\",\n});\n\nexport const GetPlatformString = platform => {\n  switch (platform) {\n    case \"win\":\n      return \"menu_action_show_file_windows\";\n    case \"macosx\":\n      return \"menu_action_show_file_mac_os\";\n    case \"linux\":\n      return \"menu_action_show_file_linux\";\n    default:\n      return \"menu_action_show_file_default\";\n  }\n};\n\n/**\n * List of functions that return items that can be included as menu options in a\n * LinkMenu. All functions take the site as the first parameter, and optionally\n * the index of the site.\n */\nexport const LinkMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  EmptyItem: () => ({type: \"empty\"}),\n  RemoveBookmark: site => ({\n    id: \"menu_action_remove_bookmark\",\n    icon: \"bookmark-added\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_BOOKMARK_BY_ID,\n      data: site.bookmarkGuid,\n    }),\n    userEvent: \"BOOKMARK_DELETE\",\n  }),\n  AddBookmark: site => ({\n    id: \"menu_action_bookmark\",\n    icon: \"bookmark-hollow\",\n    action: ac.AlsoToMain({\n      type: at.BOOKMARK_URL,\n      data: {url: site.url, title: site.title, type: site.type},\n    }),\n    userEvent: \"BOOKMARK_ADD\",\n  }),\n  OpenInNewWindow: site => ({\n    id: \"menu_action_open_new_window\",\n    icon: \"new-window\",\n    action: ac.AlsoToMain({\n      type: at.OPEN_NEW_WINDOW,\n      data: {\n        referrer: site.referrer,\n        typedBonus: site.typedBonus,\n        url: site.url,\n      },\n    }),\n    userEvent: \"OPEN_NEW_WINDOW\",\n  }),\n  BlockUrl: (site, index, eventSource) => ({\n    id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.AlsoToMain({\n      type: at.BLOCK_URL,\n      data: {url: site.open_url || site.url, pocket_id: site.pocket_id},\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      block: 0,\n      tiles: [{id: site.guid, pos: index}],\n    }),\n    userEvent: \"BLOCK\",\n  }),\n\n  // This is an option for web extentions which will result in remove items from\n  // memory and notify the web extenion, rather than using the built-in block list.\n  WebExtDismiss: (site, index, eventSource) => ({\n    id: \"menu_action_webext_dismiss\",\n    string_id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.WebExtEvent(at.WEBEXT_DISMISS, {\n      source: eventSource,\n      url: site.url,\n      action_position: index,\n    }),\n  }),\n  DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({\n    id: \"menu_action_delete\",\n    icon: \"delete\",\n    action: {\n      type: at.DIALOG_OPEN,\n      data: {\n        onConfirm: [\n          ac.AlsoToMain({type: at.DELETE_HISTORY_URL, data: {url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid}}),\n          ac.UserEvent(Object.assign({event: \"DELETE\", source: eventSource, action_position: index}, siteInfo)),\n        ],\n        eventSource,\n        body_string_id: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n        confirm_button_string_id: \"menu_action_delete\",\n        cancel_button_string_id: \"topsites_form_cancel_button\",\n        icon: \"modal-delete\",\n      },\n    },\n    userEvent: \"DIALOG_OPEN\",\n  }),\n  ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({\n    id: GetPlatformString(platform),\n    icon: \"search\",\n    action: ac.OnlyToMain({\n      type: at.SHOW_DOWNLOAD_FILE,\n      data: {url: site.url},\n    }),\n  }),\n  OpenFile: site => ({\n    id: \"menu_action_open_file\",\n    icon: \"open-file\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_DOWNLOAD_FILE,\n      data: {url: site.url},\n    }),\n  }),\n  CopyDownloadLink: site => ({\n    id: \"menu_action_copy_download_link\",\n    icon: \"copy\",\n    action: ac.OnlyToMain({\n      type: at.COPY_DOWNLOAD_LINK,\n      data: {url: site.url},\n    }),\n  }),\n  GoToDownloadPage: site => ({\n    id: \"menu_action_go_to_download_page\",\n    icon: \"download\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: site.referrer},\n    }),\n    disabled: !site.referrer,\n  }),\n  RemoveDownload: site => ({\n    id: \"menu_action_remove_download\",\n    icon: \"delete\",\n    action: ac.OnlyToMain({\n      type: at.REMOVE_DOWNLOAD_FILE,\n      data: {url: site.url},\n    }),\n  }),\n  PinTopSite: ({url, searchTopSite, label}, index) => ({\n    id: \"menu_action_pin\",\n    icon: \"pin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_PIN,\n      data: {\n        site: {\n          url,\n          ...(searchTopSite && {searchTopSite, label}),\n        },\n        index,\n      },\n    }),\n    userEvent: \"PIN\",\n  }),\n  UnpinTopSite: site => ({\n    id: \"menu_action_unpin\",\n    icon: \"unpin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_UNPIN,\n      data: {site: {url: site.url}},\n    }),\n    userEvent: \"UNPIN\",\n  }),\n  SaveToPocket: (site, index, eventSource) => ({\n    id: \"menu_action_save_to_pocket\",\n    icon: \"pocket-save\",\n    action: ac.AlsoToMain({\n      type: at.SAVE_TO_POCKET,\n      data: {site: {url: site.url, title: site.title}},\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      pocket: 0,\n      tiles: [{id: site.guid, pos: index}],\n    }),\n    userEvent: \"SAVE_TO_POCKET\",\n  }),\n  DeleteFromPocket: site => ({\n    id: \"menu_action_delete_pocket\",\n    icon: \"delete\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id},\n    }),\n    userEvent: \"DELETE_FROM_POCKET\",\n  }),\n  ArchiveFromPocket: site => ({\n    id: \"menu_action_archive_pocket\",\n    icon: \"check\",\n    action: ac.AlsoToMain({\n      type: at.ARCHIVE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id},\n    }),\n    userEvent: \"ARCHIVE_FROM_POCKET\",\n  }),\n  EditTopSite: (site, index) => ({\n    id: \"edit_topsites_button_text\",\n    icon: \"edit\",\n    action: {\n      type: at.TOP_SITES_EDIT,\n      data: {index},\n    },\n  }),\n  CheckBookmark: site => (site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site)),\n  CheckPinTopSite: (site, index) => (site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index)),\n  CheckSavedToPocket: (site, index) => (site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index)),\n  CheckBookmarkOrArchive: site => (site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site)),\n  OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem()),\n};\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport {LinkMenuOptions} from \"content-src/lib/link-menu-options\";\nimport React from \"react\";\n\nconst DEFAULT_SITE_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\", \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\"];\n\nexport class _LinkMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n    const {site, index, source, isPrivateBrowsingEnabled, siteInfo, platform} = props;\n\n    // Handle special case of default site\n    const propOptions = (!site.isDefault || site.searchTopSite) ? props.options : DEFAULT_SITE_MENU_OPTIONS;\n\n    const options = propOptions.map(o => LinkMenuOptions[o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {\n      const {action, impression, id, string_id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id: string_id || id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            const userEventData = Object.assign({\n              event: userEvent,\n              source,\n              action_position: index,\n            }, siteInfo);\n            props.dispatch(ac.UserEvent(userEventData));\n          }\n          if (impression && props.shouldSendImpressionStats) {\n            props.dispatch(impression);\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nconst getState = state => ({isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled, platform: state.Prefs.values.platform});\nexport const LinkMenu = connect(getState)(injectIntl(_LinkMenu));\n","import React from \"react\";\n\nexport class ContextMenu extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.hideContext = this.hideContext.bind(this);\n    this.onClick = this.onClick.bind(this);\n  }\n\n  hideContext() {\n    this.props.onUpdate(false);\n  }\n\n  componentDidMount() {\n    setTimeout(() => {\n      global.addEventListener(\"click\", this.hideContext);\n    }, 0);\n  }\n\n  componentWillUnmount() {\n    global.removeEventListener(\"click\", this.hideContext);\n  }\n\n  onClick(event) {\n    // Eat all clicks on the context menu so they don't bubble up to window.\n    // This prevents the context menu from closing when clicking disabled items\n    // or the separators.\n    event.stopPropagation();\n  }\n\n  render() {\n    return (<span className=\"context-menu\" onClick={this.onClick}>\n      <ul role=\"menu\" className=\"context-menu-list\">\n        {this.props.options.map((option, i) => (option.type === \"separator\" ?\n          (<li key={i} className=\"separator\" />) :\n          (option.type !== \"empty\" && <ContextMenuItem key={i} option={option} hideContext={this.hideContext} />)\n        ))}\n      </ul>\n    </span>);\n  }\n}\n\nexport class ContextMenuItem extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onKeyDown = this.onKeyDown.bind(this);\n  }\n\n  onClick() {\n    this.props.hideContext();\n    this.props.option.onClick();\n  }\n\n  onKeyDown(event) {\n    const {option} = this.props;\n    switch (event.key) {\n      case \"Tab\":\n        // tab goes down in context menu, shift + tab goes up in context menu\n        // if we're on the last item, one more tab will close the context menu\n        // similarly, if we're on the first item, one more shift + tab will close it\n        if ((event.shiftKey && option.first) || (!event.shiftKey && option.last)) {\n          this.props.hideContext();\n        }\n        break;\n      case \"Enter\":\n        this.props.hideContext();\n        option.onClick();\n        break;\n    }\n  }\n\n  render() {\n    const {option} = this.props;\n    return (\n      <li role=\"menuitem\" className=\"context-menu-item\">\n        <a onClick={this.onClick} onKeyDown={this.onKeyDown} tabIndex=\"0\" className={option.disabled ? \"disabled\" : \"\"}>\n          {option.icon && <span className={`icon icon-spacer icon-${option.icon}`} />}\n          {option.label}\n        </a>\n      </li>);\n  }\n}\n","/**\n * List of helper functions for screenshot-based images.\n *\n * There are two kinds of images:\n * 1. Remote Image: This is the image from the main process and it refers to\n *    the image in the React props. This can either be an object with the `data`\n *    and `path` properties, if it is a blob, or a string, if it is a normal image.\n * 2. Local Image: This is the image object in the content process and it refers\n *    to the image *object* in the React component's state. All local image\n *    objects have the `url` property, and an additional property `path`, if they\n *    are blobs.\n */\nexport const ScreenshotUtils = {\n  isBlob(isLocal, image) {\n    return !!(image && image.path && ((!isLocal && image.data) || (isLocal && image.url)));\n  },\n\n  // This should always be called with a remote image and not a local image.\n  createLocalImageObject(remoteImage) {\n    if (!remoteImage) {\n      return null;\n    }\n    if (this.isBlob(false, remoteImage)) {\n      return {url: global.URL.createObjectURL(remoteImage.data), path: remoteImage.path};\n    }\n    return {url: remoteImage};\n  },\n\n  // Revokes the object URL of the image if the local image is a blob.\n  // This should always be called with a local image and not a remote image.\n  maybeRevokeBlobObjectURL(localImage) {\n    if (this.isBlob(true, localImage)) {\n      global.URL.revokeObjectURL(localImage.url);\n    }\n  },\n\n  // Checks if remoteImage and localImage are the same.\n  isRemoteImageLocal(localImage, remoteImage) {\n    // Both remoteImage and localImage are present.\n    if (remoteImage && localImage) {\n      return this.isBlob(false, remoteImage) ?\n             localImage.path === remoteImage.path :\n             localImage.url === remoteImage;\n    }\n\n    // This will only handle the remaining three possible outcomes.\n    // (i.e. everything except when both image and localImage are present)\n    return !remoteImage && !localImage;\n  },\n};\n","import {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport React from \"react\";\nimport {SectionMenu} from \"content-src/components/SectionMenu/SectionMenu\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class _CollapsibleSection extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBodyMount = this.onBodyMount.bind(this);\n    this.onHeaderClick = this.onHeaderClick.bind(this);\n    this.onTransitionEnd = this.onTransitionEnd.bind(this);\n    this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);\n    this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n    this.state = {enableAnimation: true, isAnimating: false, menuButtonHover: false, showContextMenu: false};\n  }\n\n  componentWillMount() {\n    this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  componentWillUpdate(nextProps) {\n    // Check if we're about to go from expanded to collapsed\n    if (!this.props.collapsed && nextProps.collapsed) {\n      // This next line forces a layout flush of the section body, which has a\n      // max-height style set, so that the upcoming collapse animation can\n      // animate from that height to the collapsed height. Without this, the\n      // update is coalesced and there's no animation from no-max-height to 0.\n      this.sectionBody.scrollHeight; // eslint-disable-line no-unused-expressions\n    }\n  }\n\n  componentWillUnmount() {\n    this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  enableOrDisableAnimation() {\n    // Only animate the collapse/expand for visible tabs.\n    const visible = this.props.document.visibilityState === VISIBLE;\n    if (this.state.enableAnimation !== visible) {\n      this.setState({enableAnimation: visible});\n    }\n  }\n\n  onBodyMount(node) {\n    this.sectionBody = node;\n  }\n\n  onHeaderClick() {\n    // If this.sectionBody is unset, it means that we're in some sort of error\n    // state, probably displaying the error fallback, so we won't be able to\n    // compute the height, and we don't want to persist the preference.\n    // If props.collapsed is undefined handler shouldn't do anything.\n    if (!this.sectionBody || this.props.collapsed === undefined) {\n      return;\n    }\n\n    // Get the current height of the body so max-height transitions can work\n    this.setState({\n      isAnimating: true,\n      maxHeight: `${this._getSectionBodyHeight()}px`,\n    });\n    const {action, userEvent} = SectionMenuOptions.CheckCollapsed(this.props);\n    this.props.dispatch(action);\n    this.props.dispatch(ac.UserEvent({\n      event: userEvent,\n      source: this.props.source,\n    }));\n  }\n\n  _getSectionBodyHeight() {\n    const div = this.sectionBody;\n    if (div.style.display === \"none\") {\n      // If the div isn't displayed, we can't get it's height. So we display it\n      // to get the height (it doesn't show up because max-height is set to 0px\n      // in CSS). We don't undo this because we are about to expand the section.\n      div.style.display = \"block\";\n    }\n    return div.scrollHeight;\n  }\n\n  onTransitionEnd(event) {\n    // Only update the animating state for our own transition (not a child's)\n    if (event.target === event.currentTarget) {\n      this.setState({isAnimating: false});\n    }\n  }\n\n  renderIcon() {\n    const {icon} = this.props;\n    if (icon && icon.startsWith(\"moz-extension://\")) {\n      return <span className=\"icon icon-small-spacer\" style={{backgroundImage: `url('${icon}')`}} />;\n    }\n    return <span className={`icon icon-small-spacer icon-${icon || \"webextension\"}`} />;\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuButtonMouseEnter() {\n    this.setState({menuButtonHover: true});\n  }\n\n  onMenuButtonMouseLeave() {\n    this.setState({menuButtonHover: false});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const isCollapsible = this.props.collapsed !== undefined;\n    const {enableAnimation, isAnimating, maxHeight, menuButtonHover, showContextMenu} = this.state;\n    const {id, eventSource, collapsed, learnMore, title, extraMenuOptions, showPrefName, privacyNoticeURL, dispatch, isFirst, isLast, isWebExtension} = this.props;\n    const active = menuButtonHover || showContextMenu;\n    let bodyStyle;\n    if (isAnimating && !collapsed) {\n      bodyStyle = {maxHeight};\n    } else if (!isAnimating && collapsed) {\n      bodyStyle = {display: \"none\"};\n    }\n    return (\n      <section\n        className={`collapsible-section ${this.props.className}${enableAnimation ? \" animation-enabled\" : \"\"}${collapsed ? \" collapsed\" : \"\"}${active ? \" active\" : \"\"}`}\n        // Note: data-section-id is used for web extension api tests in mozilla central\n        data-section-id={id}>\n        <div className=\"section-top-bar\">\n          <h3 className=\"section-title\">\n            <span className=\"click-target-container\">\n              <span className=\"click-target\" onClick={this.onHeaderClick}>\n                {this.renderIcon()}\n                {getFormattedMessage(title)}\n              </span>\n              <span className=\"click-target\" onClick={this.onHeaderClick}>\n                {isCollapsible && <span className={`collapsible-arrow icon ${collapsed ? \"icon-arrowhead-forward-small\" : \"icon-arrowhead-down-small\"}`} />}\n              </span>\n              <span>\n                {learnMore &&\n                  <span className=\"learn-more-link\">\n                    <a href={learnMore.link.href}>\n                      <FormattedMessage id={learnMore.link.id} />\n                    </a>\n                  </span>\n                }\n              </span>\n            </span>\n          </h3>\n          <div>\n            <button\n              className=\"context-menu-button icon\"\n              title={this.props.intl.formatMessage({id: \"context_menu_title\"})}\n              onClick={this.onMenuButtonClick}\n              onMouseEnter={this.onMenuButtonMouseEnter}\n              onMouseLeave={this.onMenuButtonMouseLeave}>\n              <span className=\"sr-only\">\n                <FormattedMessage id=\"section_context_menu_button_sr\" />\n              </span>\n            </button>\n            {showContextMenu &&\n              <SectionMenu\n                id={id}\n                extraOptions={extraMenuOptions}\n                eventSource={eventSource}\n                showPrefName={showPrefName}\n                privacyNoticeURL={privacyNoticeURL}\n                collapsed={collapsed}\n                onUpdate={this.onMenuUpdate}\n                isFirst={isFirst}\n                isLast={isLast}\n                dispatch={dispatch}\n                isWebExtension={isWebExtension} />\n            }\n          </div>\n        </div>\n        <ErrorBoundary className=\"section-body-fallback\">\n          <div\n            className={`section-body${isAnimating ? \" animating\" : \"\"}`}\n            onTransitionEnd={this.onTransitionEnd}\n            ref={this.onBodyMount}\n            style={bodyStyle}>\n            {this.props.children}\n          </div>\n        </ErrorBoundary>\n      </section>\n    );\n  }\n}\n\n_CollapsibleSection.defaultProps = {\n  document: global.document || {\n    addEventListener: () => {},\n    removeEventListener: () => {},\n    visibilityState: \"hidden\",\n  },\n  Prefs: {values: {}},\n};\n\nexport const CollapsibleSection = injectIntl(_CollapsibleSection);\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst DEFAULT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"RemoveSection\", \"CheckCollapsed\", \"Separator\", \"ManageSection\"];\nconst WEBEXT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"CheckCollapsed\", \"Separator\", \"ManageWebExtension\"];\n\nexport class _SectionMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n\n    const propOptions = props.isWebExtension ? [...WEBEXT_SECTION_MENU_OPTIONS] : [...DEFAULT_SECTION_MENU_OPTIONS];\n    // Prepend custom options and a separator\n    if (props.extraOptions) {\n      propOptions.splice(0, 0, ...props.extraOptions, \"Separator\");\n    }\n    // Insert privacy notice before the last option (\"ManageSection\")\n    if (props.privacyNoticeURL) {\n      propOptions.splice(-1, 0, \"PrivacyNotice\");\n    }\n\n    const options = propOptions.map(o => SectionMenuOptions[o](props)).map(option => {\n      const {action, id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            props.dispatch(ac.UserEvent({\n              event: userEvent,\n              source: props.source,\n            }));\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nexport const SectionMenu = injectIntl(_SectionMenu);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * List of functions that return items that can be included as menu options in a\n * SectionMenu. All functions take the section as the only parameter.\n */\nexport const SectionMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  MoveUp: section => ({\n    id: \"section_menu_action_move_up\",\n    icon: \"arrowhead-up\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: -1},\n    }),\n    userEvent: \"MENU_MOVE_UP\",\n    disabled: !!section.isFirst,\n  }),\n  MoveDown: section => ({\n    id: \"section_menu_action_move_down\",\n    icon: \"arrowhead-down\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: +1},\n    }),\n    userEvent: \"MENU_MOVE_DOWN\",\n    disabled: !!section.isLast,\n  }),\n  RemoveSection: section => ({\n    id: \"section_menu_action_remove_section\",\n    icon: \"dismiss\",\n    action: ac.SetPref(section.showPrefName, false),\n    userEvent: \"MENU_REMOVE\",\n  }),\n  CollapseSection: section => ({\n    id: \"section_menu_action_collapse_section\",\n    icon: \"minimize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: true}}}),\n    userEvent: \"MENU_COLLAPSE\",\n  }),\n  ExpandSection: section => ({\n    id: \"section_menu_action_expand_section\",\n    icon: \"maximize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: false}}}),\n    userEvent: \"MENU_EXPAND\",\n  }),\n  ManageSection: section => ({\n    id: \"section_menu_action_manage_section\",\n    icon: \"settings\",\n    action: ac.OnlyToMain({type: at.SETTINGS_OPEN}),\n    userEvent: \"MENU_MANAGE\",\n  }),\n  ManageWebExtension: section => ({\n    id: \"section_menu_action_manage_webext\",\n    icon: \"settings\",\n    action: ac.OnlyToMain({type: at.OPEN_WEBEXT_SETTINGS, data: section.id}),\n  }),\n  AddTopSite: section => ({\n    id: \"section_menu_action_add_topsite\",\n    icon: \"add\",\n    action: {type: at.TOP_SITES_EDIT, data: {index: -1}},\n    userEvent: \"MENU_ADD_TOPSITE\",\n  }),\n  AddSearchShortcut: section => ({\n    id: \"section_menu_action_add_search_engine\",\n    icon: \"search\",\n    action: {type: at.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL},\n    userEvent: \"MENU_ADD_SEARCH\",\n  }),\n  PrivacyNotice: section => ({\n    id: \"section_menu_action_privacy_notice\",\n    icon: \"info\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: section.privacyNoticeURL},\n    }),\n    userEvent: \"MENU_PRIVACY_NOTICE\",\n  }),\n  CheckCollapsed: section => (section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section)),\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\nimport React from \"react\";\n\n// Currently record only a fixed set of sections. This will prevent data\n// from custom sections from showing up or from topstories.\nconst RECORDED_SECTIONS = [\"highlights\", \"topsites\"];\n\nexport class ComponentPerfTimer extends React.Component {\n  constructor(props) {\n    super(props);\n    // Just for test dependency injection:\n    this.perfSvc = this.props.perfSvc || perfSvc;\n\n    this._sendBadStateEvent = this._sendBadStateEvent.bind(this);\n    this._sendPaintedEvent = this._sendPaintedEvent.bind(this);\n    this._reportMissingData = false;\n    this._timestampHandled = false;\n    this._recordedFirstRender = false;\n  }\n\n  componentDidMount() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  componentDidUpdate() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  /**\n   * Call the given callback after the upcoming frame paints.\n   *\n   * @note Both setTimeout and requestAnimationFrame are throttled when the page\n   * is hidden, so this callback may get called up to a second or so after the\n   * requestAnimationFrame \"paint\" for hidden tabs.\n   *\n   * Newtabs hidden while loading will presumably be fairly rare (other than\n   * preloaded tabs, which we will be filtering out on the server side), so such\n   * cases should get lost in the noise.\n   *\n   * If we decide that it's important to find out when something that's hidden\n   * has \"painted\", however, another option is to post a message to this window.\n   * That should happen even faster than setTimeout, and, at least as of this\n   * writing, it's not throttled in hidden windows in Firefox.\n   *\n   * @param {Function} callback\n   *\n   * @returns void\n   */\n  _afterFramePaint(callback) {\n    requestAnimationFrame(() => setTimeout(callback, 0));\n  }\n\n  _maybeSendBadStateEvent() {\n    // Follow up bugs:\n    // https://github.com/mozilla/activity-stream/issues/3691\n    if (!this.props.initialized) {\n      // Remember to report back when data is available.\n      this._reportMissingData = true;\n    } else if (this._reportMissingData) {\n      this._reportMissingData = false;\n      // Report how long it took for component to become initialized.\n      this._sendBadStateEvent();\n    }\n  }\n\n  _maybeSendPaintedEvent() {\n    // If we've already handled a timestamp, don't do it again.\n    if (this._timestampHandled || !this.props.initialized) {\n      return;\n    }\n\n    // And if we haven't, we're doing so now, so remember that. Even if\n    // something goes wrong in the callback, we can't try again, as we'd be\n    // sending back the wrong data, and we have to do it here, so that other\n    // calls to this method while waiting for the next frame won't also try to\n    // handle it.\n    this._timestampHandled = true;\n    this._afterFramePaint(this._sendPaintedEvent);\n  }\n\n  /**\n   * Triggered by call to render. Only first call goes through due to\n   * `_recordedFirstRender`.\n   */\n  _ensureFirstRenderTsRecorded() {\n    // Used as t0 for recording how long component took to initialize.\n    if (!this._recordedFirstRender) {\n      this._recordedFirstRender = true;\n      // topsites_first_render_ts, highlights_first_render_ts.\n      const key = `${this.props.id}_first_render_ts`;\n      this.perfSvc.mark(key);\n    }\n  }\n\n  /**\n   * Creates `TELEMETRY_UNDESIRED_EVENT` with timestamp in ms\n   * of how much longer the data took to be ready for display than it would\n   * have been the ideal case.\n   * https://github.com/mozilla/ping-centre/issues/98\n   */\n  _sendBadStateEvent() {\n    // highlights_data_ready_ts, topsites_data_ready_ts.\n    const dataReadyKey = `${this.props.id}_data_ready_ts`;\n    this.perfSvc.mark(dataReadyKey);\n\n    try {\n      const firstRenderKey = `${this.props.id}_first_render_ts`;\n      // value has to be Int32.\n      const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) -\n                             this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        // highlights_data_late_by_ms, topsites_data_late_by_ms.\n        data: {[`${this.props.id}_data_late_by_ms`]: value},\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.\n    }\n  }\n\n  _sendPaintedEvent() {\n    // Record first_painted event but only send if topsites.\n    if (this.props.id !== \"topsites\") {\n      return;\n    }\n\n    // topsites_first_painted_ts.\n    const key = `${this.props.id}_first_painted_ts`;\n    this.perfSvc.mark(key);\n\n    try {\n      const data = {};\n      data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);\n\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data,\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up, and should continue\n      // to set this._timestampHandled to avoid going through this again.\n    }\n  }\n\n  render() {\n    if (RECORDED_SECTIONS.includes(this.props.id)) {\n      this._ensureFirstRenderTsRecorded();\n      this._maybeSendBadStateEvent();\n    }\n    return this.props.children;\n  }\n}\n","/* globals Services */\n\"use strict\";\n\n/* istanbul ignore if */\nif (typeof ChromeUtils !== \"undefined\") {\n  ChromeUtils.import(\"resource://gre/modules/Services.jsm\");\n}\n\nlet usablePerfObj;\n\n/* istanbul ignore if */\n/* istanbul ignore else */\nif (typeof Services !== \"undefined\") {\n  // Borrow the high-resolution timer from the hidden window....\n  usablePerfObj = Services.appShell.hiddenDOMWindow.performance;\n} else if (typeof performance !== \"undefined\") {\n  // we must be running in content space\n  // eslint-disable-next-line no-undef\n  usablePerfObj = performance;\n} else {\n  // This is a dummy object so this file doesn't crash in the node prerendering\n  // task.\n  usablePerfObj = {\n    now() {},\n    mark() {},\n  };\n}\n\nfunction _PerfService(options) {\n  // For testing, so that we can use a fake Window.performance object with\n  // known state.\n  if (options && options.performanceObj) {\n    this._perf = options.performanceObj;\n  } else {\n    this._perf = usablePerfObj;\n  }\n}\n\n_PerfService.prototype = {\n  /**\n   * Calls the underlying mark() method on the appropriate Window.performance\n   * object to add a mark with the given name to the appropriate performance\n   * timeline.\n   *\n   * @param  {String} name  the name to give the current mark\n   * @return {void}\n   */\n  mark: function mark(str) {\n    this._perf.mark(str);\n  },\n\n  /**\n   * Calls the underlying getEntriesByName on the appropriate Window.performance\n   * object.\n   *\n   * @param  {String} name\n   * @param  {String} type eg \"mark\"\n   * @return {Array}       Performance* objects\n   */\n  getEntriesByName: function getEntriesByName(name, type) {\n    return this._perf.getEntriesByName(name, type);\n  },\n\n  /**\n   * The timeOrigin property from the appropriate performance object.\n   * Used to ensure that timestamps from the add-on code and the content code\n   * are comparable.\n   *\n   * @note If this is called from a context without a window\n   * (eg a JSM in chrome), it will return the timeOrigin of the XUL hidden\n   * window, which appears to be the first created window (and thus\n   * timeOrigin) in the browser.  Note also, however, there is also a private\n   * hidden window, presumably for private browsing, which appears to be\n   * created dynamically later.  Exactly how/when that shows up needs to be\n   * investigated.\n   *\n   * @return {Number} A double of milliseconds with a precision of 0.5us.\n   */\n  get timeOrigin() {\n    return this._perf.timeOrigin;\n  },\n\n  /**\n   * Returns the \"absolute\" version of performance.now(), i.e. one that\n   * should ([bug 1401406](https://bugzilla.mozilla.org/show_bug.cgi?id=1401406)\n   * be comparable across both chrome and content.\n   *\n   * @return {Number}\n   */\n  absNow: function absNow() {\n    return this.timeOrigin + this._perf.now();\n  },\n\n  /**\n   * This returns the absolute startTime from the most recent performance.mark()\n   * with the given name.\n   *\n   * @param  {String} name  the name to lookup the start time for\n   *\n   * @return {Number}       the returned start time, as a DOMHighResTimeStamp\n   *\n   * @throws {Error}        \"No Marks with the name ...\" if none are available\n   *\n   * @note Always surround calls to this by try/catch.  Otherwise your code\n   * may fail when the `privacy.resistFingerprinting` pref is true.  When\n   * this pref is set, all attempts to get marks will likely fail, which will\n   * cause this method to throw.\n   *\n   * See [bug 1369303](https://bugzilla.mozilla.org/show_bug.cgi?id=1369303)\n   * for more info.\n   */\n  getMostRecentAbsMarkStartByName(name) {\n    let entries = this.getEntriesByName(name, \"mark\");\n\n    if (!entries.length) {\n      throw new Error(`No marks with the name ${name}`);\n    }\n\n    let mostRecentEntry = entries[entries.length - 1];\n    return this._perf.timeOrigin + mostRecentEntry.startTime;\n  },\n};\n\nthis.perfService = new _PerfService();\nconst EXPORTED_SYMBOLS = [\"_PerfService\", \"perfService\"];\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class MoreRecommendations extends React.PureComponent {\n  render() {\n    const {read_more_endpoint} = this.props;\n    if (read_more_endpoint) {\n      return (\n        <a className=\"more-recommendations\" href={read_more_endpoint}>\n          <FormattedMessage id=\"pocket_more_reccommendations\" />\n        </a>\n      );\n    }\n    return null;\n  }\n}\n","import {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class _PocketLoggedInCta extends React.PureComponent {\n  render() {\n    const {pocketCta} = this.props.Pocket;\n    return (\n      <span className=\"pocket-logged-in-cta\">\n        <a className=\"pocket-cta-button\" href={pocketCta.ctaUrl ? pocketCta.ctaUrl : \"https://getpocket.com/\"}>\n         {pocketCta.ctaButton ? pocketCta.ctaButton : <FormattedMessage id=\"pocket_cta_button\" />}\n        </a>\n\n        <a href={pocketCta.ctaUrl ? pocketCta.ctaUrl : \"https://getpocket.com/\"}>\n          <span className=\"cta-text\">\n           {pocketCta.ctaText ? pocketCta.ctaText : <FormattedMessage id=\"pocket_cta_text\" />}\n          </span>\n        </a>\n      </span>\n    );\n  }\n}\n\nexport const PocketLoggedInCta = connect(state => ({Pocket: state.Pocket}))(_PocketLoggedInCta);\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class Topic extends React.PureComponent {\n  render() {\n    const {url, name} = this.props;\n    return (<li><a key={name} href={url}>{name}</a></li>);\n  }\n}\n\nexport class Topics extends React.PureComponent {\n  render() {\n    const {topics} = this.props;\n    return (\n      <span className=\"topics\">\n        <span><FormattedMessage id=\"pocket_read_more\" /></span>\n        <ul>{topics && topics.map(t => <Topic key={t.name} url={t.url} name={t.name} />)}</ul>\n      </span>\n    );\n  }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {MIN_CORNER_FAVICON_SIZE, MIN_RICH_FAVICON_SIZE, TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SearchShortcutsForm} from \"./SearchShortcutsForm\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\nimport {TopSiteForm} from \"./TopSiteForm\";\nimport {TopSiteList} from \"./TopSite\";\n\nfunction topSiteIconType(link) {\n  if (link.customScreenshotURL) {\n    return \"custom_screenshot\";\n  }\n  if (link.tippyTopIcon || link.faviconRef === \"tippytop\") {\n    return \"tippytop\";\n  }\n  if (link.faviconSize >= MIN_RICH_FAVICON_SIZE) {\n    return \"rich_icon\";\n  }\n  if (link.screenshot && link.faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n    return \"screenshot_with_icon\";\n  }\n  if (link.screenshot) {\n    return \"screenshot\";\n  }\n  return \"no_image\";\n}\n\n/**\n * Iterates through TopSites and counts types of images.\n * @param acc Accumulator for reducer.\n * @param topsite Entry in TopSites.\n */\nfunction countTopSitesIconsTypes(topSites) {\n  const countTopSitesTypes = (acc, link) => {\n    acc[topSiteIconType(link)]++;\n    return acc;\n  };\n\n  return topSites.reduce(countTopSitesTypes, {\n    \"custom_screenshot\": 0,\n    \"screenshot_with_icon\": 0,\n    \"screenshot\": 0,\n    \"tippytop\": 0,\n    \"rich_icon\": 0,\n    \"no_image\": 0,\n  });\n}\n\nexport class _TopSites extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onEditFormClose = this.onEditFormClose.bind(this);\n    this.onSearchShortcutsFormClose = this.onSearchShortcutsFormClose.bind(this);\n  }\n\n  /**\n   * Dispatch session statistics about the quality of TopSites icons and pinned count.\n   */\n  _dispatchTopSitesStats() {\n    const topSites = this._getVisibleTopSites();\n    const topSitesIconsStats = countTopSitesIconsTypes(topSites);\n    const topSitesPinned = topSites.filter(site => !!site.isPinned).length;\n    const searchShortcuts = topSites.filter(site => !!site.searchTopSite).length;\n    // Dispatch telemetry event with the count of TopSites images types.\n    this.props.dispatch(ac.AlsoToMain({\n      type: at.SAVE_SESSION_PERF_DATA,\n      data: {\n        topsites_icon_stats: topSitesIconsStats,\n        topsites_pinned: topSitesPinned,\n        topsites_search_shortcuts: searchShortcuts,\n      },\n    }));\n  }\n\n  /**\n   * Return the TopSites that are visible based on prefs and window width.\n   */\n  _getVisibleTopSites() {\n    // We hide 2 sites per row when not in the wide layout.\n    let sitesPerRow = TOP_SITES_MAX_SITES_PER_ROW;\n    // $break-point-widest = 1072px (from _variables.scss)\n    if (!global.matchMedia(`(min-width: 1072px)`).matches) {\n      sitesPerRow -= 2;\n    }\n    return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);\n  }\n\n  componentDidUpdate() {\n    this._dispatchTopSitesStats();\n  }\n\n  componentDidMount() {\n    this._dispatchTopSitesStats();\n  }\n\n  onEditFormClose() {\n    this.props.dispatch(ac.UserEvent({\n      source: TOP_SITES_SOURCE,\n      event: \"TOP_SITES_EDIT_CLOSE\",\n    }));\n    this.props.dispatch({type: at.TOP_SITES_CANCEL_EDIT});\n  }\n\n  onSearchShortcutsFormClose() {\n    this.props.dispatch(ac.UserEvent({\n      source: TOP_SITES_SOURCE,\n      event: \"SEARCH_EDIT_CLOSE\",\n    }));\n    this.props.dispatch({type: at.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL});\n  }\n\n  render() {\n    const {props} = this;\n    const {editForm, showSearchShortcutsForm} = props.TopSites;\n    const extraMenuOptions = [\"AddTopSite\"];\n    if (props.Prefs.values[\"improvesearch.topSiteSearchShortcuts\"]) {\n      extraMenuOptions.push(\"AddSearchShortcut\");\n    }\n\n    return (<ComponentPerfTimer id=\"topsites\" initialized={props.TopSites.initialized} dispatch={props.dispatch}>\n      <CollapsibleSection\n        className=\"top-sites\"\n        icon=\"topsites\"\n        id=\"topsites\"\n        title={{id: \"header_top_sites\"}}\n        extraMenuOptions={extraMenuOptions}\n        showPrefName=\"feeds.topsites\"\n        eventSource={TOP_SITES_SOURCE}\n        collapsed={props.TopSites.pref ? props.TopSites.pref.collapsed : undefined}\n        isFirst={props.isFirst}\n        isLast={props.isLast}\n        dispatch={props.dispatch}>\n        <TopSiteList TopSites={props.TopSites} TopSitesRows={props.TopSitesRows} dispatch={props.dispatch} intl={props.intl} topSiteIconType={topSiteIconType} />\n        <div className=\"edit-topsites-wrapper\">\n          {editForm &&\n            <div className=\"edit-topsites\">\n              <div className=\"modal-overlay\" onClick={this.onEditFormClose} />\n              <div className=\"modal\">\n                <TopSiteForm\n                  site={props.TopSites.rows[editForm.index]}\n                  onClose={this.onEditFormClose}\n                  dispatch={this.props.dispatch}\n                  intl={this.props.intl}\n                  {...editForm} />\n              </div>\n            </div>\n          }\n          {showSearchShortcutsForm &&\n            <div className=\"edit-search-shortcuts\">\n              <div className=\"modal-overlay\" onClick={this.onSearchShortcutsFormClose} />\n              <div className=\"modal\">\n                <SearchShortcutsForm\n                  TopSites={props.TopSites}\n                  onClose={this.onSearchShortcutsFormClose}\n                  dispatch={this.props.dispatch} />\n              </div>\n            </div>\n          }\n        </div>\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nexport const TopSites = connect(state => ({\n  TopSites: state.TopSites,\n  Prefs: state.Prefs,\n  TopSitesRows: state.Prefs.values.topSitesRows,\n}))(injectIntl(_TopSites));\n","export const TOP_SITES_SOURCE = \"TOP_SITES\";\nexport const TOP_SITES_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\",\n  \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\", \"DeleteUrl\"];\n// the special top site for search shortcut experiment can only have the option to unpin (which removes) the topsite\nexport const TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"Separator\", \"BlockUrl\"];\n// minimum size necessary to show a rich icon instead of a screenshot\nexport const MIN_RICH_FAVICON_SIZE = 96;\n// minimum size necessary to show any icon in the top left corner with a screenshot\nexport const MIN_CORNER_FAVICON_SIZE = 16;\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_SOURCE} from \"./TopSitesConstants\";\n\nclass SelectableSearchShortcut extends React.PureComponent {\n  render() {\n    const {shortcut, selected} = this.props;\n    const imageStyle = {backgroundImage: `url(\"${shortcut.tippyTopIcon}\")`};\n    return (\n      <div className=\"top-site-outer search-shortcut\">\n        <input type=\"checkbox\" id={shortcut.keyword} name={shortcut.keyword} checked={selected} onChange={this.props.onChange} />\n        <label htmlFor={shortcut.keyword}>\n          <div className=\"top-site-inner\">\n            <span>\n              <div className=\"tile\">\n                <div className=\"top-site-icon rich-icon\" style={imageStyle} data-fallback=\"@\" />\n                <div className=\"top-site-icon search-topsite\" />\n              </div>\n              <div className=\"title\">\n                <span dir=\"auto\">{shortcut.keyword}</span>\n              </div>\n            </span>\n          </div>\n        </label>\n      </div>\n    );\n  }\n}\n\nexport class SearchShortcutsForm extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.handleChange = this.handleChange.bind(this);\n    this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n    this.onSaveButtonClick = this.onSaveButtonClick.bind(this);\n\n    // clone the shortcuts and add them to the state so we can add isSelected property\n    const shortcuts = [];\n    const {rows, searchShortcuts} = props.TopSites;\n    searchShortcuts.forEach(shortcut => {\n      shortcuts.push({\n        ...shortcut,\n        isSelected: !!rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword),\n      });\n    });\n    this.state = {shortcuts};\n  }\n\n  handleChange(event) {\n    const {target} = event;\n    const {name, checked} = target;\n    this.setState(prevState => {\n      const shortcuts = prevState.shortcuts.slice();\n      let shortcut = shortcuts.find(({keyword}) => keyword === name);\n      shortcut.isSelected = checked;\n      return {shortcuts};\n    });\n  }\n\n  onCancelButtonClick(ev) {\n    ev.preventDefault();\n    this.props.onClose();\n  }\n\n  onSaveButtonClick(ev) {\n    ev.preventDefault();\n\n    // Check if there were any changes and act accordingly\n    const {rows} = this.props.TopSites;\n    const pinQueue = [];\n    const unpinQueue = [];\n    this.state.shortcuts.forEach(shortcut => {\n      const alreadyPinned = rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword);\n      if (shortcut.isSelected && !alreadyPinned) {\n        pinQueue.push(this._searchTopSite(shortcut));\n      } else if (!shortcut.isSelected && alreadyPinned) {\n        unpinQueue.push({url: alreadyPinned.url, searchVendor: shortcut.shortURL});\n      }\n    });\n\n    // Tell the feed to do the work.\n    this.props.dispatch(ac.OnlyToMain({\n      type: at.UPDATE_PINNED_SEARCH_SHORTCUTS,\n      data: {\n        addedShortcuts: pinQueue,\n        deletedShortcuts: unpinQueue,\n      },\n    }));\n\n    // Send the Telemetry pings.\n    pinQueue.forEach(shortcut => {\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"SEARCH_EDIT_ADD\",\n        value: {search_vendor: shortcut.searchVendor},\n      }));\n    });\n    unpinQueue.forEach(shortcut => {\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"SEARCH_EDIT_DELETE\",\n        value: {search_vendor: shortcut.searchVendor},\n      }));\n    });\n\n    this.props.onClose();\n  }\n\n  _searchTopSite(shortcut) {\n    return {\n      url: shortcut.url,\n      searchTopSite: true,\n      label: shortcut.keyword,\n      searchVendor: shortcut.shortURL,\n    };\n  }\n\n  render() {\n    return (\n      <form className=\"topsite-form\">\n        <div className=\"search-shortcuts-container\">\n          <h3 className=\"section-title\">\n            <FormattedMessage id=\"section_menu_action_add_search_engine\" />\n          </h3>\n          <div>\n            {this.state.shortcuts.map(shortcut => <SelectableSearchShortcut key={shortcut.keyword} shortcut={shortcut} selected={shortcut.isSelected} onChange={this.handleChange} />)}\n          </div>\n        </div>\n        <section className=\"actions\">\n          <button className=\"cancel\" type=\"button\" onClick={this.onCancelButtonClick}>\n            <FormattedMessage id=\"topsites_form_cancel_button\" />\n          </button>\n          <button className=\"done\" type=\"submit\" onClick={this.onSaveButtonClick}>\n            <FormattedMessage id=\"topsites_form_save_button\" />\n          </button>\n        </section>\n      </form>\n    );\n  }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {\n  MIN_CORNER_FAVICON_SIZE,\n  MIN_RICH_FAVICON_SIZE,\n  TOP_SITES_CONTEXT_MENU_OPTIONS,\n  TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS,\n  TOP_SITES_SOURCE,\n} from \"./TopSitesConstants\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\n\nexport class TopSiteLink extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {screenshotImage: null};\n    this.onDragEvent = this.onDragEvent.bind(this);\n    this.onKeyPress = this.onKeyPress.bind(this);\n  }\n\n  /*\n   * Helper to determine whether the drop zone should allow a drop. We only allow\n   * dropping top sites for now.\n   */\n  _allowDrop(e) {\n    return e.dataTransfer.types.includes(\"text/topsite-index\");\n  }\n\n  onDragEvent(event) {\n    switch (event.type) {\n      case \"click\":\n        // Stop any link clicks if we started any dragging\n        if (this.dragged) {\n          event.preventDefault();\n        }\n        break;\n      case \"dragstart\":\n        this.dragged = true;\n        event.dataTransfer.effectAllowed = \"move\";\n        event.dataTransfer.setData(\"text/topsite-index\", this.props.index);\n        event.target.blur();\n        this.props.onDragEvent(event, this.props.index, this.props.link, this.props.title);\n        break;\n      case \"dragend\":\n        this.props.onDragEvent(event);\n        break;\n      case \"dragenter\":\n      case \"dragover\":\n      case \"drop\":\n        if (this._allowDrop(event)) {\n          event.preventDefault();\n          this.props.onDragEvent(event, this.props.index);\n        }\n        break;\n      case \"mousedown\":\n        // Block the scroll wheel from appearing for middle clicks on search top sites\n        if (event.button === 1 && this.props.link.searchTopSite) {\n          event.preventDefault();\n        }\n        // Reset at the first mouse event of a potential drag\n        this.dragged = false;\n        break;\n    }\n  }\n\n  /**\n   * Helper to obtain the next state based on nextProps and prevState.\n   *\n   * NOTE: Rename this method to getDerivedStateFromProps when we update React\n   *       to >= 16.3. We will need to update tests as well. We cannot rename this\n   *       method to getDerivedStateFromProps now because there is a mismatch in\n   *       the React version that we are using for both testing and production.\n   *       (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n   *\n   * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n   */\n  static getNextStateFromProps(nextProps, prevState) {\n    const {screenshot} = nextProps.link;\n    const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.screenshotImage, screenshot);\n    if (imageInState) {\n      return null;\n    }\n\n    // Since image was updated, attempt to revoke old image blob URL, if it exists.\n    ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.screenshotImage);\n\n    return {screenshotImage: ScreenshotUtils.createLocalImageObject(screenshot)};\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillMount() {\n    const nextState = TopSiteLink.getNextStateFromProps(this.props, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillReceiveProps(nextProps) {\n    const nextState = TopSiteLink.getNextStateFromProps(nextProps, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  componentWillUnmount() {\n    ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.screenshotImage);\n  }\n\n  onKeyPress(event) {\n    // If we have tabbed to a search shortcut top site, and we click 'enter',\n    // we should execute the onClick function. This needs to be added because\n    // search top sites are anchor tags without an href. See bug 1483135\n    if (this.props.link.searchTopSite && event.key === \"Enter\") {\n      this.props.onClick(event);\n    }\n  }\n\n  render() {\n    const {children, className, defaultStyle, isDraggable, link, onClick, title} = this.props;\n    const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : \"\"}${link.isDragged ? \" dragged\" : \"\"}${link.searchTopSite ? \" search-shortcut\" : \"\"}`;\n    const {tippyTopIcon, faviconSize} = link;\n    const [letterFallback] = title;\n    let imageClassName;\n    let imageStyle;\n    let showSmallFavicon = false;\n    let smallFaviconStyle;\n    let smallFaviconFallback;\n    let hasScreenshotImage = this.state.screenshotImage && this.state.screenshotImage.url;\n    if (defaultStyle) { // force no styles (letter fallback) even if the link has imagery\n      smallFaviconFallback = false;\n    } else if (link.searchTopSite) {\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: `url(${tippyTopIcon})`,\n      };\n      smallFaviconStyle = {backgroundImage:  `url(${tippyTopIcon})`};\n    } else if (link.customScreenshotURL) {\n      // assume high quality custom screenshot and use rich icon styles and class names\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\",\n      };\n    } else if (tippyTopIcon || faviconSize >= MIN_RICH_FAVICON_SIZE) {\n      // styles and class names for top sites with rich icons\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: `url(${tippyTopIcon || link.favicon})`,\n      };\n    } else {\n      // styles and class names for top sites with screenshot + small icon in top left corner\n      imageClassName = `screenshot${hasScreenshotImage ? \" active\" : \"\"}`;\n      imageStyle = {backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\"};\n\n      // only show a favicon in top left if it's greater than 16x16\n      if (faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n        showSmallFavicon = true;\n        smallFaviconStyle = {backgroundImage:  `url(${link.favicon})`};\n      } else if (hasScreenshotImage) {\n        // Don't show a small favicon if there is no screenshot, because that\n        // would result in two fallback icons\n        showSmallFavicon = true;\n        smallFaviconFallback = true;\n      }\n    }\n    let draggableProps = {};\n    if (isDraggable) {\n      draggableProps = {\n        onClick: this.onDragEvent,\n        onDragEnd: this.onDragEvent,\n        onDragStart: this.onDragEvent,\n        onMouseDown: this.onDragEvent,\n      };\n    }\n    return (<li className={topSiteOuterClassName} onDrop={this.onDragEvent} onDragOver={this.onDragEvent} onDragEnter={this.onDragEvent} onDragLeave={this.onDragEvent} {...draggableProps}>\n      <div className=\"top-site-inner\">\n         <a href={!link.searchTopSite && link.url} tabIndex=\"0\" onKeyPress={this.onKeyPress} onClick={onClick} draggable={true}>\n            <div className=\"tile\" aria-hidden={true} data-fallback={letterFallback}>\n              <div className={imageClassName} style={imageStyle} />\n              {link.searchTopSite && <div className=\"top-site-icon search-topsite\" />}\n              {showSmallFavicon && <div\n                className=\"top-site-icon default-icon\"\n                data-fallback={smallFaviconFallback && letterFallback}\n                style={smallFaviconStyle} />}\n           </div>\n           <div className={`title ${link.isPinned ? \"pinned\" : \"\"}`}>\n             {link.isPinned && <div className=\"icon icon-pin-small\" />}\n              <span dir=\"auto\">{title}</span>\n           </div>\n         </a>\n         {children}\n      </div>\n    </li>);\n  }\n}\nTopSiteLink.defaultProps = {\n  title: \"\",\n  link: {},\n  isDraggable: true,\n};\n\nexport class TopSite extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {showContextMenu: false};\n    this.onLinkClick = this.onLinkClick.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n  }\n\n  /**\n   * Report to telemetry additional information about the item.\n   */\n  _getTelemetryInfo() {\n    const value = {icon_type: this.props.link.iconType};\n    // Filter out \"not_pinned\" type for being the default\n    if (this.props.link.isPinned) {\n      value.card_type = \"pinned\";\n    }\n    if (this.props.link.searchTopSite) {\n      // Set the card_type as \"search\" regardless of its pinning status\n      value.card_type = \"search\";\n      value.search_vendor = this.props.link.hostname;\n    }\n    return {value};\n  }\n\n  userEvent(event) {\n    this.props.dispatch(ac.UserEvent(Object.assign({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: this.props.index,\n    }, this._getTelemetryInfo())));\n  }\n\n  onLinkClick(event) {\n    this.userEvent(\"CLICK\");\n\n    // Specially handle a top site link click for \"typed\" frecency bonus as\n    // specified as a property on the link.\n    event.preventDefault();\n    const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n    if (!this.props.link.searchTopSite) {\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.OPEN_LINK,\n        data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}}),\n      }));\n    } else {\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.FILL_SEARCH_TERM,\n        data: {label: this.props.link.label},\n      }));\n    }\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.props.onActivate(this.props.index);\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const {props} = this;\n    const {link} = props;\n    const isContextMenuOpen = this.state.showContextMenu && props.activeIndex === props.index;\n    const title = link.label || link.hostname;\n    return (<TopSiteLink {...props} onClick={this.onLinkClick} onDragEvent={this.props.onDragEvent} className={`${props.className || \"\"}${isContextMenuOpen ? \" active\" : \"\"}`} title={title}>\n        <div>\n          <button className=\"context-menu-button icon\" title={this.props.intl.formatMessage({id: \"context_menu_title\"})} onClick={this.onMenuButtonClick}>\n            <span className=\"sr-only\">\n              <FormattedMessage id=\"context_menu_button_sr\" values={{title}} />\n            </span>\n          </button>\n          {isContextMenuOpen &&\n            <LinkMenu\n              dispatch={props.dispatch}\n              index={props.index}\n              onUpdate={this.onMenuUpdate}\n              options={link.searchTopSite ? TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS : TOP_SITES_CONTEXT_MENU_OPTIONS}\n              site={link}\n              siteInfo={this._getTelemetryInfo()}\n              source={TOP_SITES_SOURCE} />\n          }\n        </div>\n    </TopSiteLink>);\n  }\n}\nTopSite.defaultProps = {\n  link: {},\n  onActivate() {},\n};\n\nexport class TopSitePlaceholder extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onEditButtonClick = this.onEditButtonClick.bind(this);\n  }\n\n  onEditButtonClick() {\n    this.props.dispatch(\n      {type: at.TOP_SITES_EDIT, data: {index: this.props.index}});\n  }\n\n  render() {\n    return (<TopSiteLink {...this.props} className={`placeholder ${this.props.className || \"\"}`} isDraggable={false}>\n      <button className=\"context-menu-button edit-button icon\"\n       title={this.props.intl.formatMessage({id: \"edit_topsites_edit_button\"})}\n       onClick={this.onEditButtonClick} />\n    </TopSiteLink>);\n  }\n}\n\nexport class _TopSiteList extends React.PureComponent {\n  static get DEFAULT_STATE() {\n    return {\n      activeIndex: null,\n      draggedIndex: null,\n      draggedSite: null,\n      draggedTitle: null,\n      topSitesPreview: null,\n    };\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = _TopSiteList.DEFAULT_STATE;\n    this.onDragEvent = this.onDragEvent.bind(this);\n    this.onActivate = this.onActivate.bind(this);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (this.state.draggedSite) {\n      const prevTopSites = this.props.TopSites && this.props.TopSites.rows;\n      const newTopSites = nextProps.TopSites && nextProps.TopSites.rows;\n      if (prevTopSites && prevTopSites[this.state.draggedIndex] &&\n        prevTopSites[this.state.draggedIndex].url === this.state.draggedSite.url &&\n        (!newTopSites[this.state.draggedIndex] || newTopSites[this.state.draggedIndex].url !== this.state.draggedSite.url)) {\n        // We got the new order from the redux store via props. We can clear state now.\n        this.setState(_TopSiteList.DEFAULT_STATE);\n      }\n    }\n  }\n\n  userEvent(event, index) {\n    this.props.dispatch(ac.UserEvent({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: index,\n    }));\n  }\n\n  onDragEvent(event, index, link, title) {\n    switch (event.type) {\n      case \"dragstart\":\n        this.dropped = false;\n        this.setState({\n          draggedIndex: index,\n          draggedSite: link,\n          draggedTitle: title,\n          activeIndex: null,\n        });\n        this.userEvent(\"DRAG\", index);\n        break;\n      case \"dragend\":\n        if (!this.dropped) {\n          // If there was no drop event, reset the state to the default.\n          this.setState(_TopSiteList.DEFAULT_STATE);\n        }\n        break;\n      case \"dragenter\":\n        if (index === this.state.draggedIndex) {\n          this.setState({topSitesPreview: null});\n        } else {\n          this.setState({topSitesPreview: this._makeTopSitesPreview(index)});\n        }\n        break;\n      case \"drop\":\n        if (index !== this.state.draggedIndex) {\n          this.dropped = true;\n          this.props.dispatch(ac.AlsoToMain({\n            type: at.TOP_SITES_INSERT,\n            data: {\n              site: {\n                url: this.state.draggedSite.url,\n                label: this.state.draggedTitle,\n                customScreenshotURL: this.state.draggedSite.customScreenshotURL,\n                // Only if the search topsites experiment is enabled\n                ...(this.state.draggedSite.searchTopSite && {searchTopSite: true}),\n              },\n              index,\n              draggedFromIndex: this.state.draggedIndex,\n            },\n          }));\n          this.userEvent(\"DROP\", index);\n        }\n        break;\n    }\n  }\n\n  _getTopSites() {\n    // Make a copy of the sites to truncate or extend to desired length\n    let topSites = this.props.TopSites.rows.slice();\n    topSites.length = this.props.TopSitesRows * TOP_SITES_MAX_SITES_PER_ROW;\n    return topSites;\n  }\n\n  /**\n   * Make a preview of the topsites that will be the result of dropping the currently\n   * dragged site at the specified index.\n   */\n  _makeTopSitesPreview(index) {\n    const topSites = this._getTopSites();\n    topSites[this.state.draggedIndex] = null;\n    const pinnedOnly = topSites.map(site => ((site && site.isPinned) ? site : null));\n    const unpinned = topSites.filter(site => site && !site.isPinned);\n    const siteToInsert = Object.assign({}, this.state.draggedSite, {isPinned: true, isDragged: true});\n    if (!pinnedOnly[index]) {\n      pinnedOnly[index] = siteToInsert;\n    } else {\n      // Find the hole to shift the pinned site(s) towards. We shift towards the\n      // hole left by the site being dragged.\n      let holeIndex = index;\n      const indexStep = index > this.state.draggedIndex ? -1 : 1;\n      while (pinnedOnly[holeIndex]) {\n        holeIndex += indexStep;\n      }\n\n      // Shift towards the hole.\n      const shiftingStep = index > this.state.draggedIndex ? 1 : -1;\n      while (holeIndex !== index) {\n        const nextIndex = holeIndex + shiftingStep;\n        pinnedOnly[holeIndex] = pinnedOnly[nextIndex];\n        holeIndex = nextIndex;\n      }\n      pinnedOnly[index] = siteToInsert;\n    }\n\n    // Fill in the remaining holes with unpinned sites.\n    const preview = pinnedOnly;\n    for (let i = 0; i < preview.length; i++) {\n      if (!preview[i]) {\n        preview[i] = unpinned.shift() || null;\n      }\n    }\n\n    return preview;\n  }\n\n  onActivate(index) {\n    this.setState({activeIndex: index});\n  }\n\n  render() {\n    const {props} = this;\n    const topSites = this.state.topSitesPreview || this._getTopSites();\n    const topSitesUI = [];\n    const commonProps = {\n      onDragEvent: this.onDragEvent,\n      dispatch: props.dispatch,\n      intl: props.intl,\n    };\n    // We assign a key to each placeholder slot. We need it to be independent\n    // of the slot index (i below) so that the keys used stay the same during\n    // drag and drop reordering and the underlying DOM nodes are reused.\n    // This mostly (only?) affects linux so be sure to test on linux before changing.\n    let holeIndex = 0;\n\n    // On narrow viewports, we only show 6 sites per row. We'll mark the rest as\n    // .hide-for-narrow to hide in CSS via @media query.\n    const maxNarrowVisibleIndex = props.TopSitesRows * 6;\n\n    for (let i = 0, l = topSites.length; i < l; i++) {\n      const link = topSites[i] && Object.assign({}, topSites[i], {iconType: this.props.topSiteIconType(topSites[i])});\n      const slotProps = {\n        key: link ? link.url : holeIndex++,\n        index: i,\n      };\n      if (i >= maxNarrowVisibleIndex) {\n        slotProps.className = \"hide-for-narrow\";\n      }\n      topSitesUI.push(!link ? (\n        <TopSitePlaceholder\n          {...slotProps}\n          {...commonProps} />\n      ) : (\n        <TopSite\n          link={link}\n          activeIndex={this.state.activeIndex}\n          onActivate={this.onActivate}\n          {...slotProps}\n          {...commonProps} />\n      ));\n    }\n    return (<ul className={`top-sites-list${this.state.draggedSite ? \" dnd-active\" : \"\"}`}>\n      {topSitesUI}\n    </ul>);\n  }\n}\n\nexport const TopSiteList = injectIntl(_TopSiteList);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\n\nexport class _StartupOverlay extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onInputChange = this.onInputChange.bind(this);\n    this.onSubmit = this.onSubmit.bind(this);\n    this.clickSkip = this.clickSkip.bind(this);\n    this.initScene = this.initScene.bind(this);\n    this.removeOverlay = this.removeOverlay.bind(this);\n    this.onInputInvalid = this.onInputInvalid.bind(this);\n\n    this.state = {\n      emailInput: \"\",\n      overlayRemoved: false,\n      flowId: \"\",\n      flowBeginTime: 0,\n    };\n    this.didFetch = false;\n  }\n\n  async componentWillUpdate() {\n    if (this.props.fxa_endpoint && !this.didFetch) {\n      try {\n        this.didFetch = true;\n        const fxaParams = \"entrypoint=activity-stream-firstrun&utm_source=activity-stream&utm_campaign=firstrun&form_type=email\";\n        const response = await fetch(`${this.props.fxa_endpoint}/metrics-flow?${fxaParams}`);\n        if (response.status === 200) {\n          const {flowId, flowBeginTime} = await response.json();\n          this.setState({flowId, flowBeginTime});\n        } else {\n          this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: \"FXA_METRICS_FETCH_ERROR\", value: response.status}}));\n        }\n      } catch (error) {\n        this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: \"FXA_METRICS_ERROR\"}}));\n      }\n    }\n  }\n\n  componentDidMount() {\n    this.initScene();\n  }\n\n  initScene() {\n    // Timeout to allow the scene to render once before attaching the attribute\n    // to trigger the animation.\n    setTimeout(() => {\n      this.setState({show: true});\n    }, 10);\n  }\n\n  removeOverlay() {\n    window.removeEventListener(\"visibilitychange\", this.removeOverlay);\n    document.body.classList.remove(\"hide-main\");\n    this.setState({show: false});\n    setTimeout(() => {\n      // Allow scrolling and fully remove overlay after animation finishes.\n      document.body.classList.remove(\"welcome\");\n      this.setState({overlayRemoved: true});\n    }, 400);\n  }\n\n  onInputChange(e) {\n    let error = e.target.previousSibling;\n    this.setState({emailInput: e.target.value});\n    error.classList.remove(\"active\");\n    e.target.classList.remove(\"invalid\");\n  }\n\n  onSubmit() {\n    this.props.dispatch(ac.UserEvent({event: \"SUBMIT_EMAIL\", ...this._getFormInfo()}));\n\n    window.addEventListener(\"visibilitychange\", this.removeOverlay);\n  }\n\n  clickSkip() {\n    this.props.dispatch(ac.UserEvent({event: \"SKIPPED_SIGNIN\", ...this._getFormInfo()}));\n    this.removeOverlay();\n  }\n\n  /**\n   * Report to telemetry additional information about the form submission.\n   */\n  _getFormInfo() {\n    const value = {has_flow_params: this.state.flowId.length > 0};\n    return {value};\n  }\n\n  onInputInvalid(e) {\n    let error = e.target.previousSibling;\n    error.classList.add(\"active\");\n    e.target.classList.add(\"invalid\");\n    e.preventDefault(); // Override built-in form validation popup\n    e.target.focus();\n  }\n\n  render() {\n    // When skipping the onboarding tour we show AS but we are still on\n    // about:welcome, prop.isFirstrun is true and StartupOverlay is rendered\n    if (this.state.overlayRemoved) {\n      return null;\n    }\n\n    let termsLink = (<a href={`${this.props.fxa_endpoint}/legal/terms`} target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_terms_of_service\" /></a>);\n    let privacyLink = (<a href={`${this.props.fxa_endpoint}/legal/privacy`} target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_privacy_notice\" /></a>);\n\n    return (\n      <div className={`overlay-wrapper ${this.state.show ? \"show\" : \"\"}`}>\n        <div className=\"background\" />\n        <div className=\"firstrun-scene\">\n          <div className=\"fxaccounts-container\">\n            <div className=\"firstrun-left-divider\">\n              <h1 className=\"firstrun-title\"><FormattedMessage id=\"firstrun_title\" /></h1>\n              <p className=\"firstrun-content\"><FormattedMessage id=\"firstrun_content\" /></p>\n              <a className=\"firstrun-link\" href=\"https://www.mozilla.org/firefox/features/sync/\" target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_learn_more_link\" /></a>\n            </div>\n            <div className=\"firstrun-sign-in\">\n              <p className=\"form-header\"><FormattedMessage id=\"firstrun_form_header\" /><span className=\"sub-header\"><FormattedMessage id=\"firstrun_form_sub_header\" /></span></p>\n              <form method=\"get\" action={this.props.fxa_endpoint} target=\"_blank\" rel=\"noopener noreferrer\" onSubmit={this.onSubmit}>\n                <input name=\"service\" type=\"hidden\" value=\"sync\" />\n                <input name=\"action\" type=\"hidden\" value=\"email\" />\n                <input name=\"context\" type=\"hidden\" value=\"fx_desktop_v3\" />\n                <input name=\"entrypoint\" type=\"hidden\" value=\"activity-stream-firstrun\" />\n                <input name=\"utm_source\" type=\"hidden\" value=\"activity-stream\" />\n                <input name=\"utm_campaign\" type=\"hidden\" value=\"firstrun\" />\n                <input name=\"flow_id\" type=\"hidden\" value={this.state.flowId} />\n                <input name=\"flow_begin_time\" type=\"hidden\" value={this.state.flowBeginTime} />\n                <span className=\"error\">{this.props.intl.formatMessage({id: \"firstrun_invalid_input\"})}</span>\n                <input className=\"email-input\" name=\"email\" type=\"email\" required=\"true\" onInvalid={this.onInputInvalid} placeholder={this.props.intl.formatMessage({id: \"firstrun_email_input_placeholder\"})} onChange={this.onInputChange} />\n                <div className=\"extra-links\">\n                  <FormattedMessage\n                    id=\"firstrun_extra_legal_links\"\n                    values={{\n                      terms: termsLink,\n                      privacy: privacyLink,\n                    }} />\n                </div>\n                <button className=\"continue-button\" type=\"submit\"><FormattedMessage id=\"firstrun_continue_to_login\" /></button>\n              </form>\n              <button className=\"skip-button\" disabled={!!this.state.emailInput} onClick={this.clickSkip}><FormattedMessage id=\"firstrun_skip_login\" /></button>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nconst getState = state => ({fxa_endpoint: state.Prefs.values.fxa_endpoint});\nexport const StartupOverlay = connect(getState)(injectIntl(_StartupOverlay));\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nexport class DetectUserSessionStart {\n  constructor(store, options = {}) {\n    this._store = store;\n    // Overrides for testing\n    this.document = options.document || global.document;\n    this._perfService = options.perfService || perfSvc;\n    this._onVisibilityChange = this._onVisibilityChange.bind(this);\n  }\n\n  /**\n   * sendEventOrAddListener - Notify immediately if the page is already visible,\n   *                    or else set up a listener for when visibility changes.\n   *                    This is needed for accurate session tracking for telemetry,\n   *                    because tabs are pre-loaded.\n   */\n  sendEventOrAddListener() {\n    if (this.document.visibilityState === VISIBLE) {\n      // If the document is already visible, to the user, send a notification\n      // immediately that a session has started.\n      this._sendEvent();\n    } else {\n      // If the document is not visible, listen for when it does become visible.\n      this.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  /**\n   * _sendEvent - Sends a message to the main process to indicate the current\n   *              tab is now visible to the user, includes the\n   *              visibility_event_rcvd_ts time in ms from the UNIX epoch.\n   */\n  _sendEvent() {\n    this._perfService.mark(\"visibility_event_rcvd_ts\");\n\n    try {\n      let visibility_event_rcvd_ts = this._perfService\n        .getMostRecentAbsMarkStartByName(\"visibility_event_rcvd_ts\");\n\n      this._store.dispatch(ac.AlsoToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data: {visibility_event_rcvd_ts},\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up.\n    }\n  }\n\n  /**\n   * _onVisibilityChange - If the visibility has changed to visible, sends a notification\n   *                      and removes the event listener. This should only be called once per tab.\n   */\n  _onVisibilityChange() {\n    if (this.document.visibilityState === VISIBLE) {\n      this._sendEvent();\n      this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n}\n","export function enableASRouterContent(store, asrouterContent) {\n  // Enable asrouter content\n  store.subscribe(() => {\n    const state = store.getState();\n    if (!state.ASRouter.initialized) {\n      return;\n    }\n\n    if (!asrouterContent.initialized) {\n      asrouterContent.init();\n    }\n  });\n  // Return this for testing purposes\n  return {asrouterContent};\n}\n","import React from \"react\";\n\nconst ALLOWED_STYLE_TAGS = [\"color\", \"backgroundColor\"];\n\nexport const Button = props => {\n  const style = {};\n\n  // Add allowed style tags from props, e.g. props.color becomes style={color: props.color}\n  for (const tag of ALLOWED_STYLE_TAGS) {\n    if (typeof props[tag] !== \"undefined\") {\n      style[tag] = props[tag];\n    }\n  }\n  // remove border if bg is set to something custom\n  if (style.backgroundColor) {\n    style.border = \"0\";\n  }\n\n  return (<button onClick={props.onClick}\n    className={props.className || \"ASRouterButton\"}\n    style={style}>\n    {props.children}\n  </button>);\n};\n","export function safeURI(url) {\n  if (!url) {\n    return \"\";\n  }\n  const {protocol} = new URL(url);\n  const isAllowed = [\n    \"http:\",\n    \"https:\",\n    \"data:\",\n    \"resource:\",\n    \"chrome:\",\n  ].includes(protocol);\n  if (!isAllowed) {\n    console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console\n  }\n  return isAllowed ? url : \"\";\n}\n","import {Localized} from \"fluent-react\";\nimport React from \"react\";\nimport {RICH_TEXT_KEYS} from \"../../rich-text-strings\";\nimport {safeURI} from \"../../template-utils\";\n\n// Elements allowed in snippet content\nconst ALLOWED_TAGS = {\n  b: <b />,\n  i: <i />,\n  u: <u />,\n  strong: <strong />,\n  em: <em />,\n  br: <br />,\n};\n\n/**\n * Transform an object (tag name: {url}) into (tag name: anchor) where the url\n * is used as href, in order to render links inside a Fluent.Localized component.\n */\nexport function convertLinks(links, sendClick, doNotAutoBlock) {\n  if (links) {\n    return Object.keys(links).reduce((acc, linkTag) => {\n      const {action} = links[linkTag];\n      // Setting the value to false will not include the attribute in the anchor\n      const url = action ? false : safeURI(links[linkTag].url);\n\n      acc[linkTag] = (<a href={url}\n        target={doNotAutoBlock ? \"_blank\" : \"\"}\n        data-metric={links[linkTag].metric}\n        data-action={action}\n        data-args={links[linkTag].args}\n        data-do_not_autoblock={doNotAutoBlock}\n        onClick={sendClick} />);\n      return acc;\n    }, {});\n  }\n\n  return null;\n}\n\n/**\n * Message wrapper used to sanitize markup and render HTML.\n */\nexport function RichText(props) {\n  if (!RICH_TEXT_KEYS.includes(props.localization_id)) {\n    throw new Error(`ASRouter: ${props.localization_id} is not a valid rich text property. If you want it to be processed, you need to add it to asrouter/rich-text-strings.js`);\n  }\n  return (\n    <Localized id={props.localization_id} {...ALLOWED_TAGS} {...props.customElements} {...convertLinks(props.links, props.sendClick, props.doNotAutoBlock)}>\n      <span>{props.text}</span>\n    </Localized>\n  );\n}\n","import React from \"react\";\n\nexport class SnippetBase extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBlockClicked = this.onBlockClicked.bind(this);\n  }\n\n  onBlockClicked() {\n    if (this.props.provider !== \"preview\") {\n      this.props.sendUserActionTelemetry({event: \"BLOCK\", id: this.props.UISurface});\n    }\n\n    this.props.onBlock();\n  }\n\n  renderDismissButton() {\n    if (this.props.footerDismiss) {\n      return (\n        <div className=\"footer\">\n          <div className=\"footer-content\">\n            <button\n              className=\"ASRouterButton secondary\"\n              onClick={this.props.onDismiss}>\n              {this.props.content.scene2_dismiss_button_text}\n            </button>\n          </div>\n        </div>\n      );\n    }\n\n    return (\n      <button className=\"blockButton\" title={this.props.content.block_button_text || \"Remove this\"} onClick={this.onBlockClicked} />\n    );\n  }\n\n  render() {\n    const {props} = this;\n\n    const containerClassName = `SnippetBaseContainer${props.className ? ` ${props.className}` : \"\"}`;\n\n    return (<div className={containerClassName} style={this.props.textStyle}>\n      <div className=\"innerWrapper\">\n        {props.children}\n      </div>\n      {this.renderDismissButton()}\n    </div>);\n  }\n}\n","import {Button} from \"../../components/Button/Button\";\nimport React from \"react\";\nimport {RichText} from \"../../components/RichText/RichText\";\nimport {safeURI} from \"../../template-utils\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nconst DEFAULT_ICON_PATH = \"chrome://branding/content/icon64.png\";\n\nexport class SimpleSnippet extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onButtonClick = this.onButtonClick.bind(this);\n  }\n\n  onButtonClick() {\n    if (this.props.provider !== \"preview\") {\n      this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", id: this.props.UISurface});\n    }\n    const {button_url} = this.props.content;\n    // If button_url is defined handle it as OPEN_URL action\n    const type = this.props.content.button_action || (button_url && \"OPEN_URL\");\n    this.props.onAction({\n      type,\n      data: {args: this.props.content.button_action_args || button_url},\n    });\n    if (!this.props.content.do_not_autoblock) {\n      this.props.onBlock();\n    }\n  }\n\n  renderTitle() {\n    const {title} = this.props.content;\n    return title ? <h3 className=\"title\">{title}</h3> : null;\n  }\n\n  renderTitleIcon() {\n    const titleIcon = safeURI(this.props.content.title_icon);\n    return titleIcon ? <span className=\"titleIcon\" style={{backgroundImage: `url(\"${titleIcon}\")`}} /> : null;\n  }\n\n  renderButton() {\n    const {props} = this;\n    if (!props.content.button_action && !props.onButtonClick && !props.content.button_url) {\n      return null;\n    }\n\n    return (<Button\n      onClick={props.onButtonClick || this.onButtonClick}\n      color={props.content.button_color}\n      backgroundColor={props.content.button_background_color}>\n      {props.content.button_label}\n    </Button>);\n  }\n\n  renderText() {\n    const {props} = this;\n    return (<RichText text={props.content.text}\n      customElements={this.props.customElements}\n      localization_id=\"text\"\n      links={props.content.links}\n      sendClick={props.sendClick} />);\n  }\n\n  render() {\n    const {props} = this;\n    let className = \"SimpleSnippet\";\n    if (props.className) {\n      className += ` ${props.className}`;\n    }\n    if (props.content.tall) {\n      className += \" tall\";\n    }\n    return (<SnippetBase {...props} className={className} textStyle={this.props.textStyle}>\n      <img src={safeURI(props.content.icon) || DEFAULT_ICON_PATH} className=\"icon\" />\n      <div>\n        {this.renderTitleIcon()} {this.renderTitle()} <p className=\"body\">{this.renderText()}</p>\n        {this.props.extraContent}\n      </div>\n      {<div>{this.renderButton()}</div>}\n    </SnippetBase>);\n  }\n}\n","import React from \"react\";\nimport {SimpleSnippet} from \"../SimpleSnippet/SimpleSnippet\";\n\nclass EOYSnippetBase extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  /**\n   * setFrequencyValue - `frequency` form parameter value should be `monthly`\n   *                     if `monthly-checkbox` is selected or `single` otherwise\n   */\n  setFrequencyValue() {\n    const frequencyCheckbox = this.refs.form.querySelector(\"#monthly-checkbox\");\n    if (frequencyCheckbox.checked) {\n      this.refs.form.querySelector(\"[name='frequency']\").value = \"monthly\";\n    }\n  }\n\n  handleSubmit(event) {\n    event.preventDefault();\n    this.setFrequencyValue();\n    this.refs.form.submit();\n    if (!this.props.content.do_not_autoblock) {\n      this.props.onBlock();\n    }\n  }\n\n  renderDonations() {\n    const fieldNames = [\"first\", \"second\", \"third\", \"fourth\"];\n    const numberFormat = new Intl.NumberFormat(this.props.content.locale || navigator.language, {\n      style: \"currency\",\n      currency: this.props.content.currency_code,\n      minimumFractionDigits: 0,\n    });\n    // Default to `second` button\n    const {selected_button} = this.props.content;\n    const btnStyle = {\n      color: this.props.content.button_color,\n      backgroundColor: this.props.content.button_background_color,\n    };\n\n    return (<form className=\"EOYSnippetForm\" action={this.props.content.donation_form_url} method={this.props.form_method} onSubmit={this.handleSubmit} ref=\"form\">\n      {fieldNames.map((field, idx) => {\n        const button_name = `donation_amount_${field}`;\n        const amount = this.props.content[button_name];\n        return (<React.Fragment key={idx}>\n            <input type=\"radio\" name=\"amount\" value={amount} id={field} defaultChecked={button_name === selected_button} />\n            <label htmlFor={field} className=\"donation-amount\">\n              {numberFormat.format(amount)}\n            </label>\n          </React.Fragment>);\n      })}\n\n      <div className=\"monthly-checkbox-container\">\n        <input id=\"monthly-checkbox\" type=\"checkbox\" />\n        <label htmlFor=\"monthly-checkbox\">\n          {this.props.content.monthly_checkbox_label_text}\n        </label>\n      </div>\n\n      <input type=\"hidden\" name=\"frequency\" value=\"single\" />\n      <input type=\"hidden\" name=\"currency\" value={this.props.content.currency_code} />\n      <input type=\"hidden\" name=\"presets\" value={fieldNames.map(field => this.props.content[`donation_amount_${field}`])} />\n      <button style={btnStyle} type=\"submit\" className=\"ASRouterButton donation-form-url\">{this.props.content.button_label}</button>\n    </form>);\n  }\n\n  render() {\n    const textStyle = {\n      color: this.props.content.text_color,\n      backgroundColor: this.props.content.background_color,\n    };\n    const customElement = <em style={{backgroundColor: this.props.content.highlight_color}} />;\n    return (<SimpleSnippet {...this.props}\n      className={this.props.content.test}\n      customElements={{em: customElement}}\n      textStyle={textStyle}\n      extraContent={this.renderDonations()} />);\n  }\n}\n\nexport const EOYSnippet = props => {\n  const extendedContent = {\n    monthly_checkbox_label_text: \"Make my donation monthly\",\n    locale: \"en-US\",\n    currency_code: \"usd\",\n    selected_button: \"donation_amount_second\",\n    ...props.content,\n  };\n\n  return (<EOYSnippetBase\n    {...props}\n    content={extendedContent}\n    form_method=\"GET\" />);\n};\n","import {Button} from \"../../components/Button/Button\";\nimport React from \"react\";\nimport {RichText} from \"../../components/RichText/RichText\";\nimport {SimpleSnippet} from \"../SimpleSnippet/SimpleSnippet\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nexport class SubmitFormSnippet extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.expandSnippet = this.expandSnippet.bind(this);\n    this.handleSubmit = this.handleSubmit.bind(this);\n    this.onInputChange = this.onInputChange.bind(this);\n    this.state = {\n      expanded: false,\n      signupSubmitted: false,\n      signupSuccess: false,\n      disableForm: false,\n    };\n  }\n\n  async handleSubmit(event) {\n    let json;\n\n    if (this.state.disableForm) {\n      return;\n    }\n\n    event.preventDefault();\n    this.setState({disableForm: true});\n    this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"conversion-subscribe-activation\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n\n    if (this.props.form_method.toUpperCase() === \"GET\") {\n      this.refs.form.submit();\n      return;\n    }\n\n    const {url, formData} = this.props.processFormData ?\n      this.props.processFormData(this.refs.mainInput, this.props) :\n      {url: this.refs.form.action, formData: new FormData(this.refs.form)};\n\n    try {\n      const fetchRequest = new Request(url, {body: formData, method: \"POST\"});\n      const response = await fetch(fetchRequest);\n      json = await response.json();\n    } catch (err) {\n      console.log(err); // eslint-disable-line no-console\n    }\n\n    if (json && json.status === \"ok\") {\n      this.setState({signupSuccess: true, signupSubmitted: true});\n      if (!this.props.content.do_not_autoblock) {\n        this.props.onBlock({preventDismiss: true});\n      }\n      this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"subscribe-success\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n    } else {\n      console.error(\"There was a problem submitting the form\", json || \"[No JSON response]\"); // eslint-disable-line no-console\n      this.setState({signupSuccess: false, signupSubmitted: true});\n      this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"subscribe-error\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n    }\n\n    this.setState({disableForm: false});\n  }\n\n  expandSnippet() {\n    this.setState({\n      expanded: true,\n      signupSuccess: false,\n      signupSubmitted: false,\n    });\n  }\n\n  renderHiddenFormInputs() {\n    const {hidden_inputs} = this.props.content;\n\n    if (!hidden_inputs) {\n      return null;\n    }\n\n    return Object.keys(hidden_inputs).map((key, idx) => <input key={idx} type=\"hidden\" name={key} value={hidden_inputs[key]} />);\n  }\n\n  renderDisclaimer() {\n    const {content} = this.props;\n    if (!content.scene2_disclaimer_html) {\n      return null;\n    }\n    return (<p className=\"disclaimerText\">\n      <RichText text={content.scene2_disclaimer_html}\n        localization_id=\"disclaimer_html\"\n        links={content.links}\n        doNotAutoBlock={true}\n        sendClick={this.props.sendClick} />\n    </p>);\n  }\n\n  renderFormPrivacyNotice() {\n    const {content} = this.props;\n    if (!content.scene2_privacy_html) {\n      return null;\n    }\n    return (<label className=\"privacyNotice\" htmlFor=\"id_privacy\">\n        <p>\n          <input type=\"checkbox\" id=\"id_privacy\" name=\"privacy\" required=\"required\" />\n          <span><RichText text={content.scene2_privacy_html}\n            localization_id=\"privacy_html\"\n            links={content.links}\n            doNotAutoBlock={true}\n            sendClick={this.props.sendClick} />\n          </span>\n        </p>\n      </label>);\n  }\n\n  renderSignupSubmitted() {\n    const {content} = this.props;\n    const isSuccess = this.state.signupSuccess;\n    const successTitle = isSuccess && content.success_title;\n    const bodyText = isSuccess ? content.success_text : content.error_text;\n    const retryButtonText = content.scene1_button_label;\n    return (<SnippetBase {...this.props}><div className=\"submissionStatus\">\n      {successTitle ? <h2 className=\"submitStatusTitle\">{successTitle}</h2> : null}\n      <p>{bodyText}{isSuccess ? null : <Button onClick={this.expandSnippet}>{retryButtonText}</Button>}</p>\n    </div></SnippetBase>);\n  }\n\n  onInputChange(event) {\n    if (!this.props.validateInput) {\n      return;\n    }\n    const hasError = this.props.validateInput(event.target.value, this.props.content);\n    event.target.setCustomValidity(hasError);\n  }\n\n  renderInput() {\n    const placholder = this.props.content.scene2_email_placeholder_text || this.props.content.scene2_input_placeholder;\n    return (<input\n      ref=\"mainInput\"\n      type={this.props.inputType || \"email\"}\n      className=\"mainInput\"\n      name=\"email\"\n      required={true}\n      placeholder={placholder}\n      onChange={this.props.validateInput ? this.onInputChange : null}\n      autoFocus={true} />);\n  }\n\n  renderSignupView() {\n    const {content} = this.props;\n    const containerClass = `SubmitFormSnippet ${this.props.className}`;\n    return (<SnippetBase {...this.props} className={containerClass} footerDismiss={true}>\n        {content.scene2_icon ? <div className=\"scene2Icon\"><img src={content.scene2_icon} /></div> : null}\n        <div className=\"message\">\n          <p>{content.scene2_text}</p>\n        </div>\n        <form action={content.form_action} method={this.props.form_method} onSubmit={this.handleSubmit} ref=\"form\">\n          {this.renderHiddenFormInputs()}\n          <div>\n            {this.renderInput()}\n            <button type=\"submit\" className=\"ASRouterButton primary\" ref=\"formSubmitBtn\">{content.scene2_button_label}</button>\n          </div>\n          {this.renderFormPrivacyNotice() || this.renderDisclaimer()}\n        </form>\n      </SnippetBase>);\n  }\n\n  getFirstSceneContent() {\n    return Object.keys(this.props.content).filter(key => key.includes(\"scene1\")).reduce((acc, key) => {\n      acc[key.substr(7)] = this.props.content[key];\n      return acc;\n    }, {});\n  }\n\n  render() {\n    const content = {...this.props.content, ...this.getFirstSceneContent()};\n\n    if (this.state.signupSubmitted) {\n      return this.renderSignupSubmitted();\n    }\n    if (this.state.expanded) {\n      return this.renderSignupView();\n    }\n    return <SimpleSnippet {...this.props} content={content} onButtonClick={this.expandSnippet} />;\n  }\n}\n","import React from \"react\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nexport const FXASignupSnippet = props => {\n  const userAgent = window.navigator.userAgent.match(/Firefox\\/([0-9]+)\\./);\n  const firefox_version = userAgent ? parseInt(userAgent[1], 10) : 0;\n  const extendedContent = {\n    form_action: \"https://accounts.firefox.com/\",\n    ...props.content,\n    hidden_inputs: {\n      action: \"email\",\n      context: \"fx_desktop_v3\",\n      entrypoint: \"snippets\",\n      service: \"sync\",\n      utm_source: \"snippet\",\n      utm_content: firefox_version,\n      utm_campaign: props.content.utm_campaign,\n      utm_term: props.content.utm_term,\n      ...props.content.hidden_inputs,\n    },\n  };\n\n  return (<SubmitFormSnippet\n    {...props}\n    content={extendedContent}\n    form_method=\"GET\" />);\n};\n","import React from \"react\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nexport const NewsletterSnippet = props => {\n  const extendedContent = {\n    form_action: \"https://basket.mozilla.org/subscribe.json\",\n    ...props.content,\n    hidden_inputs: {\n      newsletters: props.content.scene2_newsletter || \"mozilla-foundation\",\n      fmt: \"H\",\n      lang: \"en-US\",\n      source_url: `https://snippets.mozilla.com/show/${props.id}`,\n      ...props.content.hidden_inputs,\n    },\n  };\n\n  return (<SubmitFormSnippet\n    {...props}\n    content={extendedContent}\n    form_method=\"POST\" />);\n};\n","/**\n * Checks if a given string is an email or phone number or neither\n * @param {string} val The user input\n * @param {ASRMessageContent} content .content property on ASR message\n * @returns {\"email\"|\"phone\"|\"\"} The type of the input\n */\nexport function isEmailOrPhoneNumber(val, content) {\n  const {locale} = content;\n  // http://emailregex.com/\n  const email_re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n  const check_email = email_re.test(val);\n  let check_phone; // depends on locale\n  switch (locale) {\n    case \"en-US\":\n    case \"en-CA\":\n      // allow 10-11 digits in case user wants to enter country code\n      check_phone = val.length >= 10 && val.length <= 11 && !isNaN(val);\n      break;\n    case \"de\":\n      // allow between 2 and 12 digits for german phone numbers\n      check_phone = val.length >= 2 && val.length <= 12 && !isNaN(val);\n      break;\n    // this case should never be hit, but good to have a fallback just in case\n    default:\n      check_phone = !isNaN(val);\n      break;\n  }\n  if (check_email) {\n    return \"email\";\n  } else if (check_phone) {\n    return \"phone\";\n  }\n  return \"\";\n}\n","import {isEmailOrPhoneNumber} from \"./isEmailOrPhoneNumber\";\nimport React from \"react\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nfunction validateInput(value, content) {\n  const type = isEmailOrPhoneNumber(value, content);\n  return type ? \"\" : \"Must be an email or a phone number.\";\n}\n\nfunction processFormData(input, message) {\n  const {content} = message;\n  const type = content.include_sms ? isEmailOrPhoneNumber(input.value, content) : \"email\";\n  const formData = new FormData();\n  let url;\n  if (type === \"phone\") {\n    url = \"https://basket.mozilla.org/news/subscribe_sms/\";\n    formData.append(\"mobile_number\", input.value);\n    formData.append(\"msg_name\", content.message_id_sms);\n    formData.append(\"country\", content.country);\n  } else if (type === \"email\") {\n    url = \"https://basket.mozilla.org/news/subscribe/\";\n    formData.append(\"email\", input.value);\n    formData.append(\"newsletters\", content.message_id_email);\n    formData.append(\"source_url\", encodeURIComponent(`https://snippets.mozilla.com/show/${message.id}`));\n  }\n  formData.append(\"lang\", content.locale);\n  return {formData, url};\n}\n\nexport const SendToDeviceSnippet = props => (\n  <SubmitFormSnippet {...props}\n    form_method=\"POST\"\n    className=\"send_to_device_snippet\"\n    inputType={props.content.include_sms ? \"text\" : \"email\"}\n    validateInput={props.content.include_sms ? validateInput : null}\n    processFormData={processFormData} />\n);\n","import {EOYSnippet} from \"./EOYSnippet/EOYSnippet\";\nimport {FXASignupSnippet} from \"./FXASignupSnippet/FXASignupSnippet\";\nimport {NewsletterSnippet} from \"./NewsletterSnippet/NewsletterSnippet\";\nimport {SendToDeviceSnippet} from \"./SendToDeviceSnippet/SendToDeviceSnippet\";\nimport {SimpleSnippet} from \"./SimpleSnippet/SimpleSnippet\";\n\n// Key names matching schema name of templates\nexport const SnippetsTemplates = {\n  simple_snippet: SimpleSnippet,\n  newsletter_snippet: NewsletterSnippet,\n  fxa_signup_snippet: FXASignupSnippet,\n  send_to_device_snippet: SendToDeviceSnippet,\n  eoy_snippet: EOYSnippet,\n};\n","/*  eslint no-magic-numbers: [0]  */\n\nconst MAX_PLACEABLES = 100;\n\nconst entryIdentifierRe = /-?[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst identifierRe = /[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst functionIdentifierRe = /^[A-Z][A-Z_?-]*$/;\n\n/**\n * The `Parser` class is responsible for parsing FTL resources.\n *\n * It's only public method is `getResource(source)` which takes an FTL string\n * and returns a two element Array with an Object of entries generated from the\n * source as the first element and an array of SyntaxError objects as the\n * second.\n *\n * This parser is optimized for runtime performance.\n *\n * There is an equivalent of this parser in syntax/parser which is\n * generating full AST which is useful for FTL tools.\n */\nclass RuntimeParser {\n  /**\n   * Parse FTL code into entries formattable by the MessageContext.\n   *\n   * Given a string of FTL syntax, return a map of entries that can be passed\n   * to MessageContext.format and a list of errors encountered during parsing.\n   *\n   * @param {String} string\n   * @returns {Array<Object, Array>}\n   */\n  getResource(string) {\n    this._source = string;\n    this._index = 0;\n    this._length = string.length;\n    this.entries = {};\n\n    const errors = [];\n\n    this.skipWS();\n    while (this._index < this._length) {\n      try {\n        this.getEntry();\n      } catch (e) {\n        if (e instanceof SyntaxError) {\n          errors.push(e);\n\n          this.skipToNextEntryStart();\n        } else {\n          throw e;\n        }\n      }\n      this.skipWS();\n    }\n\n    return [this.entries, errors];\n  }\n\n  /**\n   * Parse the source string from the current index as an FTL entry\n   * and add it to object's entries property.\n   *\n   * @private\n   */\n  getEntry() {\n    // The index here should either be at the beginning of the file\n    // or right after new line.\n    if (this._index !== 0 &&\n        this._source[this._index - 1] !== \"\\n\") {\n      throw this.error(`Expected an entry to start\n        at the beginning of the file or on a new line.`);\n    }\n\n    const ch = this._source[this._index];\n\n    // We don't care about comments or sections at runtime\n    if (ch === \"/\" ||\n      (ch === \"#\" &&\n        [\" \", \"#\", \"\\n\"].includes(this._source[this._index + 1]))) {\n      this.skipComment();\n      return;\n    }\n\n    if (ch === \"[\") {\n      this.skipSection();\n      return;\n    }\n\n    this.getMessage();\n  }\n\n  /**\n   * Skip the section entry from the current index.\n   *\n   * @private\n   */\n  skipSection() {\n    this._index += 1;\n    if (this._source[this._index] !== \"[\") {\n      throw this.error('Expected \"[[\" to open a section');\n    }\n\n    this._index += 1;\n\n    this.skipInlineWS();\n    this.getVariantName();\n    this.skipInlineWS();\n\n    if (this._source[this._index] !== \"]\" ||\n        this._source[this._index + 1] !== \"]\") {\n      throw this.error('Expected \"]]\" to close a section');\n    }\n\n    this._index += 2;\n  }\n\n  /**\n   * Parse the source string from the current index as an FTL message\n   * and add it to the entries property on the Parser.\n   *\n   * @private\n   */\n  getMessage() {\n    const id = this.getEntryIdentifier();\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] === \"=\") {\n      this._index++;\n    }\n\n    this.skipInlineWS();\n\n    const val = this.getPattern();\n\n    if (id.startsWith(\"-\") && val === null) {\n      throw this.error(\"Expected term to have a value\");\n    }\n\n    let attrs = null;\n\n    if (this._source[this._index] === \" \") {\n      const lineStart = this._index;\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \".\") {\n        this._index = lineStart;\n        attrs = this.getAttributes();\n      }\n    }\n\n    if (attrs === null && typeof val === \"string\") {\n      this.entries[id] = val;\n    } else {\n      if (val === null && attrs === null) {\n        throw this.error(\"Expected message to have a value or attributes\");\n      }\n\n      this.entries[id] = {};\n\n      if (val !== null) {\n        this.entries[id].val = val;\n      }\n\n      if (attrs !== null) {\n        this.entries[id].attrs = attrs;\n      }\n    }\n  }\n\n  /**\n   * Skip whitespace.\n   *\n   * @private\n   */\n  skipWS() {\n    let ch = this._source[this._index];\n    while (ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\") {\n      ch = this._source[++this._index];\n    }\n  }\n\n  /**\n   * Skip inline whitespace (space and \\t).\n   *\n   * @private\n   */\n  skipInlineWS() {\n    let ch = this._source[this._index];\n    while (ch === \" \" || ch === \"\\t\") {\n      ch = this._source[++this._index];\n    }\n  }\n\n  /**\n   * Skip blank lines.\n   *\n   * @private\n   */\n  skipBlankLines() {\n    while (true) {\n      const ptr = this._index;\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \"\\n\") {\n        this._index += 1;\n      } else {\n        this._index = ptr;\n        break;\n      }\n    }\n  }\n\n  /**\n   * Get identifier using the provided regex.\n   *\n   * By default this will get identifiers of public messages, attributes and\n   * external arguments (without the $).\n   *\n   * @returns {String}\n   * @private\n   */\n  getIdentifier(re = identifierRe) {\n    re.lastIndex = this._index;\n    const result = re.exec(this._source);\n\n    if (result === null) {\n      this._index += 1;\n      throw this.error(`Expected an identifier [${re.toString()}]`);\n    }\n\n    this._index = re.lastIndex;\n    return result[0];\n  }\n\n  /**\n   * Get identifier of a Message or a Term (staring with a dash).\n   *\n   * @returns {String}\n   * @private\n   */\n  getEntryIdentifier() {\n    return this.getIdentifier(entryIdentifierRe);\n  }\n\n  /**\n   * Get Variant name.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getVariantName() {\n    let name = \"\";\n\n    const start = this._index;\n    let cc = this._source.charCodeAt(this._index);\n\n    if ((cc >= 97 && cc <= 122) || // a-z\n        (cc >= 65 && cc <= 90) || // A-Z\n        cc === 95 || cc === 32) { // _ <space>\n      cc = this._source.charCodeAt(++this._index);\n    } else {\n      throw this.error(\"Expected a keyword (starting with [a-zA-Z_])\");\n    }\n\n    while ((cc >= 97 && cc <= 122) || // a-z\n           (cc >= 65 && cc <= 90) || // A-Z\n           (cc >= 48 && cc <= 57) || // 0-9\n           cc === 95 || cc === 45 || cc === 32) { // _- <space>\n      cc = this._source.charCodeAt(++this._index);\n    }\n\n    // If we encountered the end of name, we want to test if the last\n    // collected character is a space.\n    // If it is, we will backtrack to the last non-space character because\n    // the keyword cannot end with a space character.\n    while (this._source.charCodeAt(this._index - 1) === 32) {\n      this._index--;\n    }\n\n    name += this._source.slice(start, this._index);\n\n    return { type: \"varname\", name };\n  }\n\n  /**\n   * Get simple string argument enclosed in `\"`.\n   *\n   * @returns {String}\n   * @private\n   */\n  getString() {\n    const start = this._index + 1;\n\n    while (++this._index < this._length) {\n      const ch = this._source[this._index];\n\n      if (ch === '\"') {\n        break;\n      }\n\n      if (ch === \"\\n\") {\n        throw this.error(\"Unterminated string expression\");\n      }\n    }\n\n    return this._source.substring(start, this._index++);\n  }\n\n  /**\n   * Parses a Message pattern.\n   * Message Pattern may be a simple string or an array of strings\n   * and placeable expressions.\n   *\n   * @returns {String|Array}\n   * @private\n   */\n  getPattern() {\n    // We're going to first try to see if the pattern is simple.\n    // If it is we can just look for the end of the line and read the string.\n    //\n    // Then, if either the line contains a placeable opening `{` or the\n    // next line starts an indentation, we switch to complex pattern.\n    const start = this._index;\n    let eol = this._source.indexOf(\"\\n\", this._index);\n\n    if (eol === -1) {\n      eol = this._length;\n    }\n\n    const firstLineContent = start !== eol ?\n      this._source.slice(start, eol) : null;\n\n    if (firstLineContent && firstLineContent.includes(\"{\")) {\n      return this.getComplexPattern();\n    }\n\n    this._index = eol + 1;\n\n    this.skipBlankLines();\n\n    if (this._source[this._index] !== \" \") {\n      // No indentation means we're done with this message. Callers should check\n      // if the return value here is null. It may be OK for messages, but not OK\n      // for terms, attributes and variants.\n      return firstLineContent;\n    }\n\n    const lineStart = this._index;\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] === \".\") {\n      // The pattern is followed by an attribute. Rewind _index to the first\n      // column of the current line as expected by getAttributes.\n      this._index = lineStart;\n      return firstLineContent;\n    }\n\n    if (firstLineContent) {\n      // It's a multiline pattern which started on the same line as the\n      // identifier. Reparse the whole pattern to make sure we get all of it.\n      this._index = start;\n    }\n\n    return this.getComplexPattern();\n  }\n\n  /**\n   * Parses a complex Message pattern.\n   * This function is called by getPattern when the message is multiline,\n   * or contains escape chars or placeables.\n   * It does full parsing of complex patterns.\n   *\n   * @returns {Array}\n   * @private\n   */\n  /* eslint-disable complexity */\n  getComplexPattern() {\n    let buffer = \"\";\n    const content = [];\n    let placeables = 0;\n\n    let ch = this._source[this._index];\n\n    while (this._index < this._length) {\n      // This block handles multi-line strings combining strings separated\n      // by new line.\n      if (ch === \"\\n\") {\n        this._index++;\n\n        // We want to capture the start and end pointers\n        // around blank lines and add them to the buffer\n        // but only if the blank lines are in the middle\n        // of the string.\n        const blankLinesStart = this._index;\n        this.skipBlankLines();\n        const blankLinesEnd = this._index;\n\n\n        if (this._source[this._index] !== \" \") {\n          break;\n        }\n        this.skipInlineWS();\n\n        if (this._source[this._index] === \"}\" ||\n            this._source[this._index] === \"[\" ||\n            this._source[this._index] === \"*\" ||\n            this._source[this._index] === \".\") {\n          this._index = blankLinesEnd;\n          break;\n        }\n\n        buffer += this._source.substring(blankLinesStart, blankLinesEnd);\n\n        if (buffer.length || content.length) {\n          buffer += \"\\n\";\n        }\n        ch = this._source[this._index];\n        continue;\n      } else if (ch === \"\\\\\") {\n        const ch2 = this._source[this._index + 1];\n        if (ch2 === '\"' || ch2 === \"{\" || ch2 === \"\\\\\") {\n          ch = ch2;\n          this._index++;\n        }\n      } else if (ch === \"{\") {\n        // Push the buffer to content array right before placeable\n        if (buffer.length) {\n          content.push(buffer);\n        }\n        if (placeables > MAX_PLACEABLES - 1) {\n          throw this.error(\n            `Too many placeables, maximum allowed is ${MAX_PLACEABLES}`);\n        }\n        buffer = \"\";\n        content.push(this.getPlaceable());\n\n        this._index++;\n\n        ch = this._source[this._index];\n        placeables++;\n        continue;\n      }\n\n      if (ch) {\n        buffer += ch;\n      }\n      this._index++;\n      ch = this._source[this._index];\n    }\n\n    if (content.length === 0) {\n      return buffer.length ? buffer : null;\n    }\n\n    if (buffer.length) {\n      content.push(buffer);\n    }\n\n    return content;\n  }\n  /* eslint-enable complexity */\n\n  /**\n   * Parses a single placeable in a Message pattern and returns its\n   * expression.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getPlaceable() {\n    const start = ++this._index;\n\n    this.skipWS();\n\n    if (this._source[this._index] === \"*\" ||\n       (this._source[this._index] === \"[\" &&\n        this._source[this._index + 1] !== \"]\")) {\n      const variants = this.getVariants();\n\n      return {\n        type: \"sel\",\n        exp: null,\n        vars: variants[0],\n        def: variants[1]\n      };\n    }\n\n    // Rewind the index and only support in-line white-space now.\n    this._index = start;\n    this.skipInlineWS();\n\n    const selector = this.getSelectorExpression();\n\n    this.skipWS();\n\n    const ch = this._source[this._index];\n\n    if (ch === \"}\") {\n      if (selector.type === \"attr\" && selector.id.name.startsWith(\"-\")) {\n        throw this.error(\n          \"Attributes of private messages cannot be interpolated.\"\n        );\n      }\n\n      return selector;\n    }\n\n    if (ch !== \"-\" || this._source[this._index + 1] !== \">\") {\n      throw this.error('Expected \"}\" or \"->\"');\n    }\n\n    if (selector.type === \"ref\") {\n      throw this.error(\"Message references cannot be used as selectors.\");\n    }\n\n    if (selector.type === \"var\") {\n      throw this.error(\"Variants cannot be used as selectors.\");\n    }\n\n    if (selector.type === \"attr\" && !selector.id.name.startsWith(\"-\")) {\n      throw this.error(\n        \"Attributes of public messages cannot be used as selectors.\"\n      );\n    }\n\n\n    this._index += 2; // ->\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] !== \"\\n\") {\n      throw this.error(\"Variants should be listed in a new line\");\n    }\n\n    this.skipWS();\n\n    const variants = this.getVariants();\n\n    if (variants[0].length === 0) {\n      throw this.error(\"Expected members for the select expression\");\n    }\n\n    return {\n      type: \"sel\",\n      exp: selector,\n      vars: variants[0],\n      def: variants[1]\n    };\n  }\n\n  /**\n   * Parses a selector expression.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getSelectorExpression() {\n    const literal = this.getLiteral();\n\n    if (literal.type !== \"ref\") {\n      return literal;\n    }\n\n    if (this._source[this._index] === \".\") {\n      this._index++;\n\n      const name = this.getIdentifier();\n      this._index++;\n      return {\n        type: \"attr\",\n        id: literal,\n        name\n      };\n    }\n\n    if (this._source[this._index] === \"[\") {\n      this._index++;\n\n      const key = this.getVariantKey();\n      this._index++;\n      return {\n        type: \"var\",\n        id: literal,\n        key\n      };\n    }\n\n    if (this._source[this._index] === \"(\") {\n      this._index++;\n      const args = this.getCallArgs();\n\n      if (!functionIdentifierRe.test(literal.name)) {\n        throw this.error(\"Function names must be all upper-case\");\n      }\n\n      this._index++;\n\n      literal.type = \"fun\";\n\n      return {\n        type: \"call\",\n        fun: literal,\n        args\n      };\n    }\n\n    return literal;\n  }\n\n  /**\n   * Parses call arguments for a CallExpression.\n   *\n   * @returns {Array}\n   * @private\n   */\n  getCallArgs() {\n    const args = [];\n\n    while (this._index < this._length) {\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \")\") {\n        return args;\n      }\n\n      const exp = this.getSelectorExpression();\n\n      // MessageReference in this place may be an entity reference, like:\n      // `call(foo)`, or, if it's followed by `:` it will be a key-value pair.\n      if (exp.type !== \"ref\") {\n        args.push(exp);\n      } else {\n        this.skipInlineWS();\n\n        if (this._source[this._index] === \":\") {\n          this._index++;\n          this.skipInlineWS();\n\n          const val = this.getSelectorExpression();\n\n          // If the expression returned as a value of the argument\n          // is not a quote delimited string or number, throw.\n          //\n          // We don't have to check here if the pattern is quote delimited\n          // because that's the only type of string allowed in expressions.\n          if (typeof val === \"string\" ||\n              Array.isArray(val) ||\n              val.type === \"num\") {\n            args.push({\n              type: \"narg\",\n              name: exp.name,\n              val\n            });\n          } else {\n            this._index = this._source.lastIndexOf(\":\", this._index) + 1;\n            throw this.error(\n              \"Expected string in quotes, number.\");\n          }\n\n        } else {\n          args.push(exp);\n        }\n      }\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \")\") {\n        break;\n      } else if (this._source[this._index] === \",\") {\n        this._index++;\n      } else {\n        throw this.error('Expected \",\" or \")\"');\n      }\n    }\n\n    return args;\n  }\n\n  /**\n   * Parses an FTL Number.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getNumber() {\n    let num = \"\";\n    let cc = this._source.charCodeAt(this._index);\n\n    // The number literal may start with negative sign `-`.\n    if (cc === 45) {\n      num += \"-\";\n      cc = this._source.charCodeAt(++this._index);\n    }\n\n    // next, we expect at least one digit\n    if (cc < 48 || cc > 57) {\n      throw this.error(`Unknown literal \"${num}\"`);\n    }\n\n    // followed by potentially more digits\n    while (cc >= 48 && cc <= 57) {\n      num += this._source[this._index++];\n      cc = this._source.charCodeAt(this._index);\n    }\n\n    // followed by an optional decimal separator `.`\n    if (cc === 46) {\n      num += this._source[this._index++];\n      cc = this._source.charCodeAt(this._index);\n\n      // followed by at least one digit\n      if (cc < 48 || cc > 57) {\n        throw this.error(`Unknown literal \"${num}\"`);\n      }\n\n      // and optionally more digits\n      while (cc >= 48 && cc <= 57) {\n        num += this._source[this._index++];\n        cc = this._source.charCodeAt(this._index);\n      }\n    }\n\n    return {\n      type: \"num\",\n      val: num\n    };\n  }\n\n  /**\n   * Parses a list of Message attributes.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getAttributes() {\n    const attrs = {};\n\n    while (this._index < this._length) {\n      if (this._source[this._index] !== \" \") {\n        break;\n      }\n      this.skipInlineWS();\n\n      if (this._source[this._index] !== \".\") {\n        break;\n      }\n      this._index++;\n\n      const key = this.getIdentifier();\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] !== \"=\") {\n        throw this.error('Expected \"=\"');\n      }\n      this._index++;\n\n      this.skipInlineWS();\n\n      const val = this.getPattern();\n\n      if (val === null) {\n        throw this.error(\"Expected attribute to have a value\");\n      }\n\n      if (typeof val === \"string\") {\n        attrs[key] = val;\n      } else {\n        attrs[key] = {\n          val\n        };\n      }\n\n      this.skipBlankLines();\n    }\n\n    return attrs;\n  }\n\n  /**\n   * Parses a list of Selector variants.\n   *\n   * @returns {Array}\n   * @private\n   */\n  getVariants() {\n    const variants = [];\n    let index = 0;\n    let defaultIndex;\n\n    while (this._index < this._length) {\n      const ch = this._source[this._index];\n\n      if ((ch !== \"[\" || this._source[this._index + 1] === \"[\") &&\n          ch !== \"*\") {\n        break;\n      }\n      if (ch === \"*\") {\n        this._index++;\n        defaultIndex = index;\n      }\n\n      if (this._source[this._index] !== \"[\") {\n        throw this.error('Expected \"[\"');\n      }\n\n      this._index++;\n\n      const key = this.getVariantKey();\n\n      this.skipInlineWS();\n\n      const val = this.getPattern();\n\n      if (val === null) {\n        throw this.error(\"Expected variant to have a value\");\n      }\n\n      variants[index++] = {key, val};\n\n      this.skipWS();\n    }\n\n    return [variants, defaultIndex];\n  }\n\n  /**\n   * Parses a Variant key.\n   *\n   * @returns {String}\n   * @private\n   */\n  getVariantKey() {\n    // VariantKey may be a Keyword or Number\n\n    const cc = this._source.charCodeAt(this._index);\n    let literal;\n\n    if ((cc >= 48 && cc <= 57) || cc === 45) {\n      literal = this.getNumber();\n    } else {\n      literal = this.getVariantName();\n    }\n\n    if (this._source[this._index] !== \"]\") {\n      throw this.error('Expected \"]\"');\n    }\n\n    this._index++;\n    return literal;\n  }\n\n  /**\n   * Parses an FTL literal.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getLiteral() {\n    const cc0 = this._source.charCodeAt(this._index);\n\n    if (cc0 === 36) { // $\n      this._index++;\n      return {\n        type: \"ext\",\n        name: this.getIdentifier()\n      };\n    }\n\n    const cc1 = cc0 === 45 // -\n      // Peek at the next character after the dash.\n      ? this._source.charCodeAt(this._index + 1)\n      // Or keep using the character at the current index.\n      : cc0;\n\n    if ((cc1 >= 97 && cc1 <= 122) || // a-z\n        (cc1 >= 65 && cc1 <= 90)) { // A-Z\n      return {\n        type: \"ref\",\n        name: this.getEntryIdentifier()\n      };\n    }\n\n    if ((cc1 >= 48 && cc1 <= 57)) { // 0-9\n      return this.getNumber();\n    }\n\n    if (cc0 === 34) { // \"\n      return this.getString();\n    }\n\n    throw this.error(\"Expected literal\");\n  }\n\n  /**\n   * Skips an FTL comment.\n   *\n   * @private\n   */\n  skipComment() {\n    // At runtime, we don't care about comments so we just have\n    // to parse them properly and skip their content.\n    let eol = this._source.indexOf(\"\\n\", this._index);\n\n    while (eol !== -1 &&\n      ((this._source[eol + 1] === \"/\" && this._source[eol + 2] === \"/\") ||\n       (this._source[eol + 1] === \"#\" &&\n         [\" \", \"#\"].includes(this._source[eol + 2])))) {\n      this._index = eol + 3;\n\n      eol = this._source.indexOf(\"\\n\", this._index);\n\n      if (eol === -1) {\n        break;\n      }\n    }\n\n    if (eol === -1) {\n      this._index = this._length;\n    } else {\n      this._index = eol + 1;\n    }\n  }\n\n  /**\n   * Creates a new SyntaxError object with a given message.\n   *\n   * @param {String} message\n   * @returns {Object}\n   * @private\n   */\n  error(message) {\n    return new SyntaxError(message);\n  }\n\n  /**\n   * Skips to the beginning of a next entry after the current position.\n   * This is used to mark the boundary of junk entry in case of error,\n   * and recover from the returned position.\n   *\n   * @private\n   */\n  skipToNextEntryStart() {\n    let start = this._index;\n\n    while (true) {\n      if (start === 0 || this._source[start - 1] === \"\\n\") {\n        const cc = this._source.charCodeAt(start);\n\n        if ((cc >= 97 && cc <= 122) || // a-z\n            (cc >= 65 && cc <= 90) || // A-Z\n             cc === 47 || cc === 91) { // /[\n          this._index = start;\n          return;\n        }\n      }\n\n      start = this._source.indexOf(\"\\n\", start);\n\n      if (start === -1) {\n        this._index = this._length;\n        return;\n      }\n      start++;\n    }\n