(function() { function bxBootstrap() { var re = /bot|crawl|slurp|spider|mediapartners|headlesschrome|snap-prefetch|remotasks|woorank|uptime\.com|facebookexternalhit|facebookcatalog/i; if (re.test(navigator.userAgent) || navigator.userAgent == '') { return; } if (!(window.bouncex&&bouncex.website)) { var pushedData = []; if(window.bouncex && bouncex.push && bouncex.length){ pushedData = bouncex; } window.bouncex = {}; bouncex.pushedData = pushedData; bouncex.website = {"id":2056,"name":"Tribune | The Baltimore Sun","cookie_name":"bounceClientVisit2056","domain":"baltimoresun.com","ct":"fp_local_storage","ally":0,"ei":1,"tcjs":"","cjs":"window.bouncex.report_ga = function(action, label, bypass) {\n var eventName;\n if (action === 'impression') eventName = 'bxImpression';\n else if (action === 'click') eventName = 'bxClick';\n else if (action === 'loginClick') eventName = 'bxLoginClick';\n else if (action === 'submission') eventName = 'bxSubmit';\n else if (action === 'newsletterClick') eventName = 'bxNewsletterClick';\n \n var event = document.createEvent('Event');\n event.data = {};\n event.data.campaignName = label;\n \n event.initEvent(eventName, true, true);\n document.dispatchEvent(event);\n};\n\n// MW: loads the FB sdk if not loaded already - https://www.wrike.com/open.htm?id=244810442\nbouncex.fbSdk = {\n load: function() {\n // load fb sdk\n (function(d, s, id){\n var js, fjs = d.getElementsByTagName(s)[0];\n if (d.getElementById(id)) {return;}\n js = d.createElement(s); js.id = id;\n js.src = \"https://connect.facebook.net/en_US/sdk.js\";\n fjs.parentNode.insertBefore(js, fjs);\n }(document, 'script', 'facebook-jssdk'));\n },\n init: function() {\n if (typeof window.FB === 'undefined') {\n // if no load attempted, load the sdk\n if (!bouncex.fbSdk._loadAttempt) {\n bouncex.fbSdk._loadAttempt = true;\n bouncex.fbSdk.load();\n }\n \n bouncex.log('FB: ...loading');\n bouncex.setTimeout2(bouncex.fbSdk.init, 100);\n } else {\n bouncex.log('FB: ...loaded');\n bouncex.fbSdk._loaded = true;\n \n FB.init({\n appId: '310302989040998',\n autoLogAppEvents: true,\n xfbml: true,\n version: 'v3.0'\n });\n }\n }\n};\n\nif (window.location.href.indexOf('checkout2.baltimoresun.com') > -1 || window.location.href.indexOf('baltimoresun.com/subscriptions/land') > -1) {\n bouncex.cookie.lastCheckoutTimestamp = new Date().getTime();\n bouncex.setBounceCookie();\n}\n\n/* RTV viewed_checkout_past_week */\nvar currDate = Math.round(new Date()/1000),\n \tviewed_checkout_last_week = bouncex.vars.last_viewed_checkout && (currDate - bouncex.vars.last_viewed_checkout)/86400 < 7;\n\nbouncex.setVarAndReload('viewed_checkout_past_week', viewed_checkout_last_week);","force_https":false,"waypoints":false,"content_width":0,"gai":"","swids":"1762&2051&2052&2053&2054&2055&2057&2058","sd":0,"ljq":"auto","campaign_id":0,"is_preview":false,"aco":{"first_party_limit":"3500","local_storage":"1"},"cmp":{"gdpr":0,"gmp":0,"whitelist_check":0},"burls":[{"prop":"contains","val":"http://tribpubads.com/text-to-download/?market=bs&source=index"}],"ple":false,"fbe":false,"mas":3,"map":1,"gar":true,"ete":0,"ettm":true,"etjs":"","dge":true,"bxidLoadFirst":false,"pie":true,"cme":true,"gbi_enabled":1,"bpush":false,"pt":null,"els":{"Masthead":"#content","infeed":"article p:not(:eq(0)) + p:not(:eq(1)), article p + .bxc + p:not(:eq(0))"},"vars":[{"name":"login_modal","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('#reg-overlay .login').length > 0 ? true : (jQuery('#reg-overlay .register').length > 0 ? true : false);","trigger":""},{"name":"client_ad_shown","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"(function () {\n if (window.googletag && googletag.apiReady && googletag.pubadsReady) { \n var visible = false;\n jQuery('[id^=\"checkm8Cont\"]').each(function (index) {\n if (jQuery(this).css('visibility') === 'visible' && jQuery(this).height() > 1 && jQuery(this).width() > 1 ){;\n visible = true;\n return false;\n }\n });\n var adLoaderOopType = jQuery('html').attr('data-adloader-oop-type');\n if (adLoaderOopType && adLoaderOopType == 'reskin') {\n visible = true;\n }\n var interstitialAd = jQuery('#wm_interstitial_header:visible');\n if(interstitialAd.length > 0){\n visible = true;\n }\n if(jQuery('div[draggable=\"false\"]:first:visible div img').attr('src') !== undefined){\n \t\tvisible = true;\n }\n if(jQuery('[id^=\"__kx_overlay\"]').is(':visible')){\n visible = true;\n }\n var ymPhone = jQuery('html.ym-phone');\n if(ymPhone.length > 0){\n visible = true;\n }\n return visible;\n } else {\n return 'not_ready';\n }\n})();","trigger":""},{"name":"video_present","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('meta[property=\"og:type\"]').attr('content') == \"article\" && jQuery('.trb_ar_la iframe[src*=\"video\"], .trb_ar_la [itemprop=\"video\"], .trb_ar_la video').length > 0;","trigger":""},{"name":"paywall_present","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('.reg-dialog.meter-modal:visible').length > 0;","trigger":""},{"name":"logged_in","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('html').attr('data-reg-loggedin') !== undefined","trigger":""},{"name":"article_page","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('meta[property=\"og:type\"]').attr('content') === 'article'","trigger":""},{"name":"number_of_articles_read","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"(function() {\n if (bouncex.vars.article_page) {\n if (bouncex.vars.number_of_articles_read === false) {\n return '1';\n } else {\n return parseInt(bouncex.vars.number_of_articles_read) + 1;\n }\n }\n return null;\n})() ","trigger":""},{"name":"monthly_articles_read","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"0","code":"(function(){\n if(!bouncex.vars.logged_in_paid){\n return JSON.parse(localStorage.getItem('trb.metering.userData')).pages.length;\n }\n \n return false;\n \n})();","trigger":""},{"name":"article_name","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"(function(){\n\tif (jQuery('meta[property=\"og:type\"]').attr('content') === 'article'){\n\t\treturn jQuery('h1[itemprop=\"headline\"]').text();\n\t}\n})();","trigger":""},{"name":"logged_in_free","polling":"all","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"(function() {\n var local = typeof localStorage === 'object' && localStorage,\n json = typeof local['trb.metering.subData'] === 'string' && JSON.parse(local['trb.metering.subData']),\n subscriptionLevels = typeof json['subscriptionLevels'] !== 'undefined' && json['subscriptionLevels'],\n expaySubscriber = typeof json['expaySubscriber'] !== 'undefined' && json['expaySubscriber'],\n loggedOut = jQuery('a[aria-label=\"Log In\"]:visible:contains(\"Log In\")');\n if (loggedOut.length > 0) {\n return false;\n }\n return typeof json === 'object' && subscriptionLevels.length === 0 ? true : null;\n})();","trigger":""},{"name":"logged_in_paid","polling":"all","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"(function() {\n var local = typeof localStorage === 'object' && localStorage,\n json = typeof local['trb.metering.subData'] === 'string' && JSON.parse(local['trb.metering.subData']),\n subscriptionLevels = typeof json['subscriptionLevels'] !== 'undefined' && json['subscriptionLevels'],\n expaySubscriber = typeof json['expaySubscriber'] !== 'undefined' && json['expaySubscriber'],\n loggedOut = jQuery('a[aria-label=\"Log In\"]:visible:contains(\"Log In\")');\n if (loggedOut.length > 0) {\n return false;\n }\n return subscriptionLevels.length > 0 || expaySubscriber === true ? true : null;\n})();","trigger":""},{"name":"payment_confirmed","polling":"all","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"jQuery('.summaryRow__title[data-bind=\"text: options.ConfirmationNumber.Title\"]').is(':visible') || (jQuery('.placeOrder').is(':visible') && jQuery('.step__button:visible.busy').length > 0) || null;","trigger":""},{"name":"subscription_type","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"(function () {\n\tvar currentUrl = window.location.href;\n\tvar offerTitle = jQuery('.LA-offer-title, .offer-header').text().toLowerCase() || jQuery('.offerDetails').find('.black').text().toLowerCase();\n\tvar offerContent = jQuery('.LA-offer-content, .offer-props').children().first().text().toLowerCase() || jQuery('.offerDetails').find('h3:eq(3)').text().toLowerCase();\n\tvar onSubPage = (currentUrl.indexOf('paypanel.latimes') > -1 || currentUrl.indexOf('checkout.latimes.com')) && currentUrl.indexOf('/subscriptionPanel') > -1;\n\tif (onSubPage){\n\t\tif (offerTitle.indexOf('sunday') > -1 && (offerContent.indexOf('4 weeks')>-1 && offerContent.indexOf('99¢')>-1)){\n\t\t\treturn 'sunday';\n\t\t}\n\t\telse if (offerTitle.indexOf('7-day') > -1 && (offerContent.indexOf('4.99') > -1 || offerContent.indexOf('4.49') > -1 || offerContent.indexOf('3.99') > -1 || offerContent.indexOf('2.99') > -1 || offerContent.indexOf('just 99¢ for your first 4 weeks')>-1)){\n\t\t\treturn 'daily';\n\t\t}\n\t\telse if (offerTitle.indexOf('digital access') > -1 && (offerContent.indexOf('4 weeks')>-1 && offerContent.indexOf('99¢')>-1)){\n\t\t\treturn 'digital';\n\t\t}\n\t} \n})();","trigger":""},{"name":"ever_logged_in_paid","polling":"all","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"bouncex.vars.logged_in_paid === true ? true : null;","trigger":""},{"name":"saw_lightbox_visit","polling":"all","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"jQuery('div[draggable=\"false\"]:first:visible').length > 0 ? true : jQuery('.pronto-platform-1').is(':visible') ? true : jQuery('iframe[src*=interstitial_2]').is(':visible') ? true : null;","trigger":""},{"name":"ever_logged_in","polling":"all","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"(function(){\n\tif(JSON.parse(localStorage.getItem('trb.metering.subData')) !== null){\n\t\treturn true;\n\t}else{\n\t\treturn null;\n\t}\n})()","trigger":""},{"name":"sponsorship_check","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"(function() {\n /* https://www.wrike.com/open.htm?id=137435095 */\n /****** config -- edit here! ******/\n var targetSizes = [\n {'width':970,'height':250},\n {'width':970,'height':90},\n {'width':728,'height':90},\n {'width':300,'height':250},\n {'width':300,'height':600}\n ];\n var suppressAdvertiserIds = [];\n var suppressLineItemIds = [];\n var suppressLabelIds = [];\n var safeAdvertiserIds = ['21455696'];\n var safeLineItemIds = [];\n var safeLabelIds = [];\n /**** end config ****/\n function getSizeOfSlots(slots) {\n var numSlots = slots.length;\n var slotSizes = [];\n for (var i = 0; i < numSlots; i++) {\n var slot = slots[i];\n var width = '';\n var height = '';\n if (slot.ic && typeof slot.ic._width_ !== 'undefined' && typeof slot.ic._height_ !== 'undefined') {\n width = slot.ic._width_;\n height = slot.ic._height_;\n }\n slotSizes.push({'width':width,'height':height});\n }\n return slotSizes;\n }\n function returnSlotIndexesOfTargetSizeMatches(targetSizes,slotSizes) {\n var numTargetSizes = targetSizes.length;\n var numSlotSizes = slotSizes.length;\n var indexesOfMatchingSlots = []; \n for (var i = 0; i < numTargetSizes; i++ ) {\n var targetHeight = targetSizes[i].height;\n var targetWidth = targetSizes[i].width;\n for (var j = 0; j < numSlotSizes; j++) {\n var slotHeight = slotSizes[j].height;\n var slotWidth = slotSizes[j].width;\n if (targetHeight == slotHeight && targetWidth == slotWidth) {\n indexesOfMatchingSlots.push(j);\n }\n }\n }\n return indexesOfMatchingSlots;\n }\n function getResponseInformationFromSlots(slots) {\n var advertiserIds = [],\n lineItemIds = [],\n labelIds = [];\n var allSlotsEmpty = true;\n slots.each(function(i,slot){\n var info = slot.getResponseInformation();\n if(info){\n info.advertiserId?advertiserIds.push(info.advertiserId.toString()):advertiserIds.push('');\n info.lineItemId?lineItemIds.push(info.lineItemId.toString()):lineItemIds.push('');\n info.labelIds?labelIds.push(info.labelIds.toString()):labelIds.push('');\n allSlotsEmpty = false;\n } else {\n advertiserIds.push('');\n lineItemIds.push('');\n labelIds.push('');\n }\n });\n if (allSlotsEmpty) {\n return false;\n } else {\n return {'advertiserIds':advertiserIds,'lineItemIds':lineItemIds,'labelIds':labelIds};\n }\n }\n function checkListInclusion(definedList, slotList) {\n var definedListLength = definedList.length;\n var slotListLength = slotList.length;\n for (var i = 0; i < definedListLength; i++ ) {\n for (var j = 0; j < slotList.length; j++) {\n if (definedList[i] == slotList[j]) {\n return true;\n }\n }\n }\n return false;\n }\n if (window.googletag && googletag.apiReady && googletag.pubadsReady && typeof window.jQuery == 'function') {\n if (window.bouncex.apiChecked) {\n return bouncex.vars.sponsorship_present;\n } else {\n var adSlots = jQuery(googletag.pubads().getSlots());\n var responseInformation = getResponseInformationFromSlots(adSlots);\n if (!responseInformation) {\n if (!bouncex.website.gbi_enabled) {\n window.bouncex.apiChecked = true;\n return 'disabled';\n }\n return 'not_ready';\n }\n window.bouncex.apiChecked = true;\n var suppressionAdvertiserId = checkListInclusion(suppressAdvertiserIds, responseInformation.advertiserIds);\n var suppressionLineItemId = checkListInclusion(suppressLineItemIds, responseInformation.lineItemIds);\n var suppressionLabelId = checkListInclusion(suppressLabelIds, responseInformation.labelIds);\n if (suppressionAdvertiserId || suppressionLineItemId || suppressionLabelId) {\n return true;\n }\n var safeAdvertiserId = checkListInclusion(safeAdvertiserIds, responseInformation.advertiserIds);\n var safeLineItemId = checkListInclusion(safeLineItemIds, responseInformation.lineItemIds);\n var safeLabelId = checkListInclusion(safeLabelIds, responseInformation.labelIds);\n if (safeAdvertiserId || safeLineItemId || safeLabelId) {\n return false;\n }\n var adSlotSizes = getSizeOfSlots(adSlots);\n var slotsOfTargetSize = returnSlotIndexesOfTargetSizeMatches(targetSizes, adSlotSizes);\n if (slotsOfTargetSize.length < 2) {\n return false;\n } else {\n var firstSlotAdvertiserId = responseInformation.advertiserIds[slotsOfTargetSize[0]];\n var secondSlotAdvertiserId = responseInformation.advertiserIds[slotsOfTargetSize[1]];\n return (firstSlotAdvertiserId == secondSlotAdvertiserId);\n }\n }\n } else {\n return 'not_ready';\n }\n})()","trigger":""},{"name":"ibx_test","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"location.href.indexOf('ibx_test') >= 0 || null;","trigger":""},{"name":"client_ad_did_show","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"overlay_suppression","polling":"vars","persist":"no","page_types":[],"testmode":false,"default":"true","code":"(function() {\n\t\tif (window.googletag && googletag.apiReady && googletag.pubadsReady) {\n\t\t\tif (window.bouncex.apiChecks >= 10) {\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\tif (window.bouncex.apiChecks === undefined) {\n\t\t\t\t\twindow.bouncex.apiChecks = 1;\n\t\t\t\t} else {\n\t\t\t\t\twindow.bouncex.apiChecks++;\n\t\t\t\t}\n\n\t\t\t\tvar apiSlots = googletag.pubads().getSlots();\n\t\t\t\tvar numSlots = apiSlots.length;\n\t\t\t\tfor (var i = 0; i < numSlots; i++ ){\n\t\t\t\t\t\tvar slot = apiSlots[i];\n\t\t\t\t\t\tvar width = slot.ic._width_;\n\t\t\t\t\t\tvar height = slot.ic._height_;\n\t\t\t\t\t\tvar empty = slot.ic._empty_;\n\t\t\t\t\t\tif (width == 1 && height == 1 && empty === false) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n})();","trigger":""},{"name":"can_show_overlay","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"(function () {\n\t\tif (bouncex.vars.overlay_suppression === true) { \n if (window.bouncex.overlayCheck === undefined) {\n\t\t\t\twindow.bouncex.overlayCheck = 1;\n\t\t\t} else {\n\t\t\t\twindow.bouncex.overlayCheck++;\n\t\t\t}\n\t\t\tif (window.bouncex.overlayCheck >= 10 && bouncex.vars.client_ad_did_show === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t\n\t\t\tvar interstitialAd = jQuery('#wm_interstitial_header:visible');\n\t\t\tif(interstitialAd.length > 0){\n\t\t\t\tbouncex.setv('client_ad_did_show', true);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(jQuery('img[src^=\"http://clipcentric-a\"]').first().is(':visible')){\n\t\t\t\tbouncex.setv('client_ad_did_show', true);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(jQuery('[id^=\"__kx_overlay\"]').is(':visible')){\n\t\t\t\tbouncex.setv('client_ad_did_show', true);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(jQuery('#pronto-clipping-1-1').length && jQuery('#pronto-clipping-1-1').is(':visible')){\n\t\t\t\tbouncex.setv('client_ad_did_show', true);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tif(bouncex.vars.can_show_overlay === false && bouncex.vars.client_ad_did_show === false)\n\t\t\t\treturn false;\n\t\t\telse if(bouncex.vars.can_show_overlay === undefined && bouncex.vars.client_ad_did_show === false)\n\t\t\t\treturn false;\n\t\t\telse if(bouncex.vars.client_ad_did_show === true)\n\t\t\t\treturn true;\n\t\t\t\n\t\t}else{\n\t\t\treturn true;\n\t\t}\n})();","trigger":""},{"name":"ad_light_on","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"(function(){\n if(window !== undefined && window.trb !== undefined && window.trb.adl !== undefined){\n return window.trb.adl;\n }\n return false;\n})()","trigger":""},{"name":"ecap_seen_visit","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_evergreen","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_orioles","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_ravens","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_policy","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_dish","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_health","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_aegis","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_howard","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_darkroom","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_travel","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_home","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_crime","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_business","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"ecap_submitted_roughlyspeaking","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":""},{"name":"hardwall_present","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('#zephr-overlay').length > 0 && jQuery('#zephr-overlay .da-progress').text().toUpperCase().indexOf('RESERVED FOR OUR SUBSCRIBERS') > -1 || jQuery('#zephr-overlay') ? jQuery('#zephr-overlay').text().toLocaleUpperCase().indexOf(\"RESERVED FOR OUR SUBSCRIBERS\") > -1 : false;","trigger":""},{"name":"dfp_roadblock","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"(function() {\n function check() {\n bouncex.dfp_loaded = false || bouncex.dfp_loaded;\n var slots = window.googletag && typeof googletag.pubads == 'function' && typeof googletag.pubads().getSlots == 'function'? googletag.pubads().getSlots() : [];\n var numSlots = slots.length;\n for (var i = 0; i < numSlots; i++) {\n var slotInfo = slots[i] && typeof slots[i].getResponseInformation == 'function'? slots[i].getResponseInformation() : false;\n if (slotInfo && slotInfo.lineItemId) {\n bouncex.dfp_loaded = true;\n if (bouncex.website.gbi.rblocks && bouncex.website.gbi.rblocks.indexOf(slotInfo.lineItemId) > -1) {\n return 'sponsor';\n }\n }\n }\n if (bouncex.dfp_loaded) {\n return 'allow';\n }\n return 'not_ready';\n }\n if (!bouncex.website.gbi_enabled) {\n return 'disabled';\n } else if (bouncex.dfp_loaded) {\n return null;\n } else if (window.googletag && googletag.apiReady && googletag.pubadsReady) {\n return check();\n }\n return 'fallback';\n})()","trigger":""},{"name":"article_title","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('meta[property=\"og:type\"]').attr('content') === 'article' ? encodeURIComponent(jQuery('meta[property=\"og:title\"]').attr('content')) : false;","trigger":""},{"name":"editorial_whisper_present","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('.trb_bnn:not([data-state=bnn_closed])').length > 0;","trigger":""},{"name":"toaster_present","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('.met-flyout .met-toast-varB').is(':visible');","trigger":""},{"name":"tronc_ecap","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('.met-promo-content').length > 0;","trigger":""},{"name":"pbb_response","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":"pageload"},{"name":"incognito_block_present","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('.da-progress').text().toLowerCase().indexOf('incognito mode') > -1 || jQuery('.da-progress').text().toLowerCase().indexOf('private mode') > -1;","trigger":"pageload"},{"name":"backfill_deployment","polling":"all","persist":"no","page_types":[],"testmode":false,"default":0,"code":"bouncex.gbi2 ? bouncex.gbi2.getFailedDeployments().join(',') : '';","trigger":"pageload"},{"name":"vertical_gallery_page","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"bouncex.utils.getNestedProp('trb.data.page.metrics.subtype') === 'vertical';","trigger":"pageload"},{"name":"paywall_present2","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"(function() {\n var paywall = jQuery('#reg-overlay').find(':contains(article limit)');\n return paywall.length > 0 || paywall.is(':visible');\n})()","trigger":"pageload"},{"name":"soft_wall_present","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery('#zephr-overlay').length > 0 && jQuery('#zephr-overlay .da-progress').text().toUpperCase().indexOf('FREE ARTICLE LIMIT') > -1 || jQuery('#zephr-overlay') ? jQuery('#zephr-overlay').text().toLocaleUpperCase().indexOf(\"FREE ARTICLE LIMIT\") > -1 : false;","trigger":"pageload"},{"name":"articles_viewed_meter_window","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"(function(){\n let count = 0;\n const track = bouncex.utils.getNestedProp('window.trb.metering.manager.user.track');\n const getFormattedDate = bouncex.utils.getNestedProp('window.registration.utils.getFormattedDate');\n\n if (typeof track != 'function' || typeof getFormattedDate != 'function'){\n return false;\n }\n \n track(function(meterData){\n const resetDays = window.registration.config.get('meterResetDays');\n const cuD = new Date();\n \n \tlet lowerBoundaryDate = new Date(cuD.getFullYear(), cuD.getMonth(), 1);\n \tif (resetDays > '0') {\n \t\tif (!meterData.meterStartDate || (cuD.getTime() - parseInt(resetDays)*86400000) > new Date(meterData.meterStartDate)) {\n \t\t\tlowerBoundaryDate = cuD;\n }\n \t} else if (resetDays < '0') {\n \t\tlowerBoundaryDate = new Date(cuD.getTime() - Math.abs(resetDays) * 86400000);\n \t}\n \t\n \tconst fldb = getFormattedDate(lowerBoundaryDate);\n \n \tfor (const a_url in meterData.pageHistory) {\n \t\tif (fldb <= meterData.pageHistory[a_url]) {\n \t\t\tcount++;\n \t\t}\n \t}\n });\n return count;\n})();","trigger":"pageload"},{"name":"ecap_toaster_present","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"!!document.querySelector('.met-flyout .met-newsletter-toaster');","trigger":"pageload"},{"name":"ecap_toaster_standardsize_present","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"!!document.querySelector('.met-flyout .reg-form');","trigger":"pageload"},{"name":"viewed_checkout_past_week","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"null;","trigger":"pageload"},{"name":"last_viewed_checkout","polling":"none","persist":"permanent","page_types":[],"testmode":false,"default":"false","code":"(function(){\n\tvar currDate = Math.round(new Date()/1000);\n\n\tif (window.location.href.indexOf('/subscription.') > -1) {\n\t\treturn currDate;\n\t}\n\n\treturn null; \n})();","trigger":"pageload"},{"name":"ccd_list","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"(function() {\n var isCCDUser = false,\n ccdSubData = JSON.parse(window.localStorage.getItem(\"trb.metering.ccd.subData\")),\n subData = JSON.parse(window.localStorage.getItem(\"trb.metering.subData\"));\n if (subData && ccdSubData && subData.subscriptionLevels.length) {\n isCCDUser = ccdSubData.declined;\n }\n return isCCDUser;\n})();","trigger":"pageload"},{"name":"regiwall_present","polling":"all","persist":"no","page_types":[],"testmode":false,"default":"false","code":"jQuery(\"#regiwall-overlay .regiwall\").is(\":visible\");\n","trigger":"pageload"},{"name":"regiwall_eligible_user","polling":"none","persist":"no","page_types":[],"testmode":false,"default":"false","code":"bouncex.utils.getNestedProp('Zephr.accessDetails.testGroups') ? bouncex.utils.getNestedProp('Zephr.accessDetails.testGroups')['e758edf2-b8c0-403f-9284-ec65122c16a0'] === 'A' : false;","trigger":"pageload"},{"name":"signed_in_users_meter_window","polling":"none","persist":"visit","page_types":[],"testmode":false,"default":"false","code":"bouncex.utils.getNestedProp('window.Zephr.accessDetails.meters.bNVt0I.remainingCredits') !== undefined \n ? bouncex.utils.getNestedProp('window.Zephr.accessDetails.meters.bNVt0I.remainingCredits') === 0 \n : false;","trigger":"pageload"}],"dgu":"pixel.cdnwidget.com","dgp":false,"ba":{"enabled":0,"fbte":0},"biu":"assets.bounceexchange.com","bau":"api.bounceexchange.com","beu":"events.bouncex.net","ibx":{"tjs":"bouncex.util = {\n\n addNamespace: function(obj, name) {\n var namespacedObj = {};\n for (var k in obj) {\n if (obj.hasOwnProperty(k)) {\n var namespacedKey = k;\n if (k.indexOf(':') === -1) {\n namespacedKey = name + ':' + k;\n }\n namespacedObj[namespacedKey] = obj[k];\n }\n }\n return namespacedObj;\n },\n\n //copied from bouncex.ibx\n getParam: function(name, qstring) {\n var param_string = qstring ? ('?' + qstring) : window.location.href;\n name = name.replace(/[\\[]/,\"\\\\\\[\").replace(/[\\]]/,\"\\\\\\]\");\n var regexS = \"[\\\\?&#]\"+name+\"=([^&#]*)\";\n var regex = new RegExp( regexS );\n var results = regex.exec( param_string );\n if( results == null ) return \"\";\n else return decodeURIComponent(results[1]);\n },\n\n getTimeMs: function() {\n return (new Date().getTime());\n },\n\n isValidInteger: function(val) {\n // returns true for 0, '0', 1, '1'. False for '', undefined\n return !isNaN(parseInt(val));\n },\n\n //copied from bouncex.ibx\n isValidEmail: function(email) {\n var regex = /^(([^<>()[\\]\\\\.,;:\\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 return regex.test(email);\n },\n\n isValidUrl: function(url, type) {\n //JKMD: type could differentiate between absolute/relative, allow mailto links, etc\n var regex = /^(http|https):\\/\\/(([a-zA-Z0-9$\\-_.+!*'(),;:&=]|%[0-9a-fA-F]{2})+@)?(((25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|[1-9][0-9]|[0-9])(\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|[1-9][0-9]|[0-9])) {3})|localhost|([a-zA-Z0-9\\-\\u00C0-\\u017F]+\\.)+([a-zA-Z]{2,}))(:[0-9]+)?(\\/(([a-zA-Z0-9$\\-_.+!*'(),;:@&=]|%[0-9a-fA-F]{2})*(\\/([a-zA-Z0-9$\\-_.+!*'(),;:@&=]|%[0-9a-fA-F]{2})*)*)?(\\?([a-zA-Z0-9$\\-_.+!*'(),;:@&=\\/?]|%[0-9a-fA-F]{2})*)?(\\#([a-zA-Z0-9$\\-_.+!*'(),;:@&=\\/?]|%[0-9a-fA-F]{2})*)?)?$/;\n return regex.test(url);\n },\n\n makeQuerystring: function(o) {\n var a=[],s='';\n for(var k in o) {\n if(!o.hasOwnProperty(k)) continue;\n a.push(k+'='+encodeURIComponent(o[k]));\n }\n return a.join('&');\n },\n\n mergeObject: function () {\n var o = {};\n for (var k in arguments) {\n var a = arguments[k];\n if (typeof a == 'object') {\n for (var k in a) {\n if (a.hasOwnProperty(k)) o[k] = a[k];\n }\n }\n }\n return o;\n }\n};\n\nbouncex.util.cookies = {\n\n domain: window.bouncex.cookie_domain,\n\n create: function(obj){\n defaults = {\n name : '',\n value : '',\n domain : false,\n days : 14\n };\n obj = bouncex.util.mergeObject(defaults, obj);\n\n if (!obj.name || !obj.value) { return false; }\n\n var date = new Date();\n date.setTime(date.getTime() + obj.days * 24 * 60 * 60 * 1e3);\n var exp = '; expires=' + date.toGMTString();\n\n var cookieString = obj.name + '=' + obj.value + exp + '; path=/;';\n if (obj.domain){\n cookieString += 'domain=' + obj.domain + ';';\n }\n document.cookie = cookieString;\n },\n\n destroy: function (name) {\n this.create({\n name : name,\n days : -1,\n });\n },\n\n read: function (name) {\n //return this.multi.get(name);\n var t = name + \"=\", vars = document.cookie.split(\";\");\n for (var r = 0; r < vars.length; r++) {\n var i = vars[r];\n while (i.charAt(0) == \" \")i = i.substring(1, i.length);\n if (i.indexOf(t) == 0)return i.substring(t.length, i.length);\n }\n return null;\n }\n};\n\n// if utk is already defined persist whatever listeners it has before wipe\nvar previousListeners = bouncex.utk && bouncex.utk.listeners;\n\nbouncex.utk = {\n\n listeners: previousListeners || {},\n\n addMetadata: function(obj) {\n var m = this.getMetadata();\n return bouncex.util.mergeObject(obj, m);\n },\n\n getMetadata: function() {\n return {\n 'page:type': this.getPageType(),\n 'customer:hasconverted': (bouncex.cookie.lc?1:0)\n };\n },\n\n getPageType: function() {\n return \"\";\n },\n\n hoverItem: function(obj) {\n var defaults = {\n eventName: 'hover item',\n itemTracking: false,\n selector: '',\n maxItems: 5,\n timeoutMs: 1000,\n getItemData: function(el) { return null; },\n };\n\n obj = bouncex.util.mergeObject(defaults, obj);\n\n //validation here\n if (!obj.selector) { return null; }\n\n //register the tracker\n obj.stop = removeHoverTracking;\n var trackerId = bouncex.utk.register(obj);\n var timeout;\n var ids = [];\n\n function onMouseenter() {\n clearTimeout(timeout);\n var el = this;\n timeout = setTimeout(function() {\n var item = obj.getItemData(el);\n if (!item.id) { return; }\n //if not already tracked\n if (ids.indexOf(item.id) === -1) {\n //add id to list of tracked items\n ids.push(item.id);\n //track the event\n var itemEventData = { eventName: obj.eventName, item: item };\n bouncex.utk.trackItemInteraction(itemEventData);\n //track the item\n if (obj.itemTracking) {\n bouncex.utk.trackItem(item);\n }\n //check limits\n if (ids.length >= obj.maxItems) {\n removeHoverTracking();\n }\n }\n }, obj.timeoutMs);\n }\n\n function onMouseleave() {\n clearTimeout(timeout);\n }\n\n function addHoverTracking() {\n jQuery(document).on('mouseenter.bx-tracking-hover.' + trackerId, obj.selector, onMouseenter);\n jQuery(document).on('mouseleave.bx-tracking-hover.' + trackerId, obj.selector, onMouseleave);\n }\n\n function removeHoverTracking() {\n jQuery(document).off('mouseenter.bx-tracking-hover.' + trackerId);\n jQuery(document).off('mouseleave.bx-tracking-hover.' + trackerId);\n clearTimeout(timeout);\n }\n\n addHoverTracking();\n return trackerId;\n },\n\n isIdentified: function(){\n return !!(bouncex.cookie.uid || bouncex.getBounceCookie('__ibxu'));\n },\n\n quickviewItem: function(obj) {\n var defaults = {\n eventName: 'view item',\n itemTracking: false,\n selector: '',\n getItemData: function(el) { return null; }\n };\n\n obj = bouncex.util.mergeObject(defaults, obj);\n //validation here\n if (!obj.selector) { return null; }\n\n var prevVisible = false,\n visible;\n\n return bouncex.utk.setInterval({\n callback: function() {\n visible = jQuery(obj.selector).is(':visible');\n if (visible && !prevVisible) {\n var item = obj.getItemData(obj.selector);\n\n var itemEventData = { eventName: obj.eventName, item: item };\n bouncex.utk.trackItemInteraction(itemEventData);\n //track the item\n if (obj.itemTracking) {\n bouncex.utk.trackItem(item);\n }\n }\n prevVisible = visible;\n }\n });\n },\n\n requestEmail: function(obj) {\n //JKMD: bouncex.push right now automatically adds namespacing, which would mess up \"campaignid\"\n params = {};\n for (var k in obj) {\n if (obj.hasOwnProperty(k)){\n params[k.toLowerCase()] = obj[k];\n }\n }\n event_stream_report('requestemail', params);\n },\n\n //JKMD: long-term plan is to put all of our polling into a single setInterval\n setInterval: function(obj) {\n var defaults = {\n milliseconds: 1000,\n callback: function() { return null; }\n };\n obj = bouncex.util.mergeObject(defaults, obj);\n var intervalId = setInterval(obj.callback, obj.milliseconds);\n\n obj.stop = removeInterval;\n var trackerId = bouncex.utk.register(obj);\n function removeInterval() {\n clearInterval(intervalId);\n }\n return trackerId;\n },\n\n trackItem: function(item) {\n if (typeof(item.id) === 'string'){\n item.id = item.id.trim().toLowerCase();\n }\n if (!this.validateItem(item)) {\n //bouncex.log('item failed validation', item);\n return false;\n }\n item = bouncex.util.addNamespace(item, 'item');\n bouncex.push(['item', item]);\n },\n\n trackItemInteraction: function(obj) {\n var id = obj.item.id;\n if (typeof(id) === 'string'){\n id = id.trim().toLowerCase();\n }\n var o = { 'item:id': id };\n o = this.addMetadata(o);\n bouncex.push([obj.eventName, o]);\n },\n\n trackListPage: function(obj){\n var defaults = {\n eventName: 'view ' + this.getPageType(),\n maxItems: 6,\n selector: '',\n title: '',\n url: jQuery('link[rel=canonical]').attr('href') || window.location.href.split('?')[0],\n itemTracking : false,\n getItemData: function(el) { return null;},\n extraEventData: {}\n };\n\n obj = bouncex.util.mergeObject(defaults, obj);\n\n var items = jQuery(obj.selector);\n if (!items || !items.length){\n return false;\n }\n var itemsTracked = 0;\n var itemIds = [];\n for (var i = 0; i < items.length && itemsTracked < obj.maxItems; i++) {\n var item = obj.getItemData(items[i]);\n if (item.id){\n if (typeof(item.id) === 'string'){\n item.id = item.id.trim().toLowerCase();\n }\n // add id to list\n itemIds.push(item.id);\n if (obj.itemTracking){\n //track full item\n this.trackItem(item);\n }\n itemsTracked++;\n }\n }\n\n var o = {'items:ids' : itemIds.join(','), 'page:url' : obj.url};\n if (obj.title){\n o['page:title'] = obj.title;\n }\n o = this.addMetadata(o);\n o = bouncex.util.mergeObject(o, obj.extraEventData);\n bouncex.push([obj.eventName, o]);\n },\n\n trackUser: function(user) {\n if (!user.email && !user.emailHash) {\n return false;\n }\n if (user.email && !bouncex.util.isValidEmail(user.email)){\n return false;\n }\n var params = bouncex.util.addNamespace(user, 'user');\n if (user.email) {\n params['user:email'] = user.email;\n }\n if (user.emailHash) {\n params['user:emailhash'] = user.emailHash;\n }\n if (user.campaignId) {\n params['campaignid'] = user.campaignId;\n }\n params['user:gcr'] = (bouncex && bouncex.cookie) ? bouncex.cookie.gcr : 99;\n params['agent'] = 'js';\n params['eq'] = 1;\n\n event_stream_report('user', params);\n\n bouncex.cookie.uid = 1;\n setBounceCookie();\n //legacy support\n bouncex.util.cookies.create({\n name: '__ibxu',\n value : '1',\n domain : '.' + bouncex.util.cookies.domain,\n days : 365,\n });\n\n },\n\n validateItem: function(item) {\n if (!item) { return false; }\n if (!item.id) { return false; }\n if (!item.copy) { return false; }\n if (!item.imageurl || !bouncex.util.isValidUrl(item.imageurl)) { return false; }\n if (!item.url || !bouncex.util.isValidUrl(item.url)) { return false; }\n return true;\n },\n\n viewItem: function(obj) {\n var defaults = {\n eventName: 'view item',\n itemTracking: true,\n getItemData: function() { return null; }\n };\n\n obj = bouncex.util.mergeObject(defaults, obj);\n\n var item = obj.getItemData();\n\n if (obj.itemTracking) {\n this.trackItem(item);\n }\n\n if (item.id) {\n var itemEventData = { eventName: obj.eventName, item: item };\n bouncex.utk.trackItemInteraction(itemEventData);\n } else {\n //bouncex.log('no item id', obj.eventName, item);\n }\n },\n\n //keeping track of the listeners inside tracking\n register: function(obj) {\n var id = bouncex.util.getTimeMs() + Math.random();\n bouncex.utk.listeners[id] = obj;\n return id;\n },\n\n //remove single tracker\n stop: function(id) {\n if (bouncex.utk.listeners.hasOwnProperty(id)) {\n bouncex.utk.listeners[id].stop();\n delete bouncex.utk.listeners[id];\n }\n },\n\n //remove all listeners\n stopAll: function() {\n for (var id in bouncex.utk.listeners) {\n bouncex.utk.stop(id);\n }\n }\n};\n\nbouncex.utk.cart = {\n\n getCart: function() {\n if (this.state) {\n //cached here once we look it up or save\n return this.state;\n }else if (this.config.storeCartVariable && bouncex.vars[this.config.storeCartVariable]) {\n //look up from cvar if it exists\n this.state = JSON.parse(bouncex.vars[this.config.storeCartVariable]);\n return this.state;\n }else {\n return {};\n }\n },\n\n getCount: function(){\n return bouncex.vars[this.config.cartCountVariable];\n },\n\n inferCount: function(cart) {\n // return cart.count if specified and valid\n if (bouncex.util.isValidInteger(cart.count)) {\n return parseInt(cart.count);\n } else if (cart.items) {\n // deduce from items length (using qty property if specified)\n var count = 0;\n for (var i = 0; i < cart.items.length; i++) {\n var qty = parseInt(cart.items[i].qty) || 1;\n count += qty;\n }\n return count;\n }else if (bouncex.util.isValidInteger(this.getCount())){\n return parseInt(this.getCount());\n }else{\n return 0;\n }\n },\n\n init: function(obj) {\n var defaults = {\n // lastReplenishment: false,\n storeCartVariable: 'cart',\n cartCountVariable: 'cart_qty',\n maxVariableSize: 400,\n storeValues: ['count', 'items'],\n maxItems: 10\n };\n obj = bouncex.util.mergeObject(defaults, obj);\n this.config = obj;\n\n //JKMD: should we do this via init, or just override explicitly...?\n this.replenish = obj.replenish || this.replenish;\n this.validateReplenishment = obj.validateReplenishment || this.validateReplenishment;\n this.reportReplenishment = obj.reportReplenishment || this.reportReplenishment;\n\n this.initFromQuerystring();\n this.reportReplenishment();\n },\n\n initFromQuerystring: function() {\n var bx_cart = bouncex.util.getParam('bx_cart');\n var ibx_cart = bouncex.util.getParam('ibx_cart');\n var legacy = false;\n var cart = {};\n\n if (bx_cart) {\n //JKMD: support base64\n if (bx_cart.charAt(0) !== '{') {\n bx_cart = atob(bx_cart);\n }\n cart = JSON.parse(bx_cart);\n } else if (ibx_cart) {\n cart = { value: ibx_cart };\n } else {\n return false;\n }\n\n if (!this.validateReplenishment(cart)) {\n return false;\n }\n\n this.save(cart);\n return this.replenish(cart);\n },\n\n replenish: function(cart) {\n return null;\n },\n\n save: function(cart) {\n if (!cart) { return false; }\n this.state = cart;\n if (this.config.storeCartVariable) {\n var storedCart = {};\n if (cart.count === 0) {\n // if count is 0, don't store any other info\n storedCart = { count: 0 };\n }else{\n //store values specified in settings\n for (var i = 0; i < this.config.storeValues.length; i++) {\n var k = this.config.storeValues[i];\n if (cart.hasOwnProperty(k)) {\n storedCart[k] = cart[k];\n }\n }\n }\n this.checkAndSetVar(storedCart);\n }\n },\n\n checkAndSetVar: function(storedCart) {\n var cartString = JSON.stringify(storedCart);\n if (cartString.length <= this.config.maxVariableSize) {\n bouncex.setv(this.config.storeCartVariable, cartString);\n setBounceCookie();\n } else if (storedCart.items && storedCart.items.length) {\n var lastItemLength = JSON.stringify(storedCart.items[storedCart.items.length-1]).length;\n if ( lastItemLength >= this.config.maxVariableSize) {\n storedCart.items.pop();\n } else {\n storedCart.items.shift();\n }\n this.checkAndSetVar(storedCart);\n }\n },\n\n track: function(cart) {\n var trackCart = bouncex.util.mergeObject(cart);\n if (trackCart.items) trackCart.items = JSON.stringify(trackCart.items);\n if (trackCart.ids) trackCart.ids = trackCart.ids.join(',');\n trackCart = bouncex.util.addNamespace(trackCart, 'cart');\n bouncex.push(['cart', trackCart]);\n },\n\n update: function (obj) {\n var cart = {};\n\n if (obj.newItem) {\n //if partial, merge new item with stored items\n var oldCart = this.getCart();\n var allItems = oldCart.items || [];\n allItems.push(obj.newItem);\n obj.items = allItems;\n }\n\n // pass relevant properties to cart\n cart.count = obj.count;\n if (obj.items && obj.items.length) { cart.items = obj.items; }\n if (obj.ids && obj.ids.length) { cart.ids = obj.ids; }\n if (obj.token) { cart.token = obj.token; }\n if (obj.value) { cart.value = obj.value; }\n\n\n //set count\n cart.count = this.inferCount(cart);\n\n // remove items from beginning of items array if over limit\n if (this.config.maxItems && cart.items && cart.items.length > this.config.maxItems) {\n cart.items = cart.items.slice(cart.items.length - this.config.maxItems);\n }\n\n //auto parse ids from items variable if no ids specified\n if (!cart.ids && cart.items) {\n cart.ids = [];\n for (var i = 0; i < cart.items.length; i++) {\n if (cart.items[i].id) {\n cart.ids.push(cart.items[i].id);\n }\n }\n }\n\n // save in cart.state, and in cvar if specified\n this.save(cart);\n //track cart\n this.track(cart);\n //fire add to cart event if new item or addToCart flag\n if (obj.newItem || obj.addToCart){\n bouncex.push(['add to cart', bouncex.utk.getMetadata()]);\n }\n },\n\n validateReplenishment: function(cart) {\n var cartCount = bouncex.utk.cart.getCount();\n if (bouncex.util.isValidInteger(cartCount) && cartCount > 0) {\n return false;\n }\n\n if (!cart) {\n return false;\n }\n\n if (!cart.value && !cart.token && !cart.items) {\n return false;\n }\n\n return true;\n },\n\n reportReplenishment: function() {\n var bx_replen = bouncex.util.getParam('bx_replen');\n if (bx_replen) {\n setTimeout(function(){\n var cartCount = bouncex.utk.cart.getCount();\n bouncex.push(['cart replenish', {'cart:count': cartCount, 'cart:success': cartCount > 0}]);\n }, 1100);\n }\n }\n};\n\nbouncex.utk.miw = function(obj) {\n// Custom input monitor\n var defaults = {\n selector: 'input:not(input[type=button], :input[type=submit], :input[type=reset], :input[type=hidden], :input[type=radio], :input[type=checkbox], :input[type=image], :input[type=password])',\n getUserData: function(el) {\n return {\n email : jQuery(el).val(),\n source : el.id,\n };\n }\n };\n\n obj = bouncex.util.mergeObject(defaults, obj);\n\n //validation here\n if (!obj.selector) { return null; }\n\n //register the tracker\n obj.stop = removeUserTracking;\n var trackerId = bouncex.utk.register(obj);\n\n function onBlur() {\n var user = obj.getUserData(this);\n bouncex.utk.trackUser(user);\n }\n\n function removeUserTracking() {\n jQuery(document).off('blur.miw.' + trackerId);\n }\n\n jQuery(document).on('blur.miw.' + trackerId, obj.selector, onBlur);\n\n return trackerId;\n};\n\nbouncex.utk.getPageType = function() {\n if(window.location.pathname.indexOf('land-subscribe') > -1 || jQuery('.landingTabbed').length > 0){\n return 'options'\n }\n\n if(window.location.pathname.indexOf('subscriptionPanel') > -1){\n return 'panel';\n };\n\n if(window.location.pathname.indexOf('dsssubscribe') > -1){\n return 'alt-subscribe';\n }\n\n if (window.location.hostname.indexOf('subscription.') > -1) {\n return 'subscription_checkout';\n }\n\n return 'article';\n};\n\nbouncex.utk.viewPage = function(obj) {\n var o = {'customer:isreturning': bouncex.vars.ever_logged_in_paid ? 1 : 0}\n o = this.addMetadata(o);\n bouncex.push(['view '+obj.type, o]);\n}\n\nbouncex.utk.init = function() {\n bouncex.utk.stopAll();\n\n bouncex.utk.miw({});\n\n var pageType = bouncex.utk.getPageType();\n\n if(pageType === 'options'){\n bouncex.utk.viewPage({\n type: 'uda subscription',\n });\n\n if(jQuery('.landingTabbed').length > 0){\n bouncex.utk.setInterval({\n callback: function(){\n if(jQuery('#offer-selector').length){\n //re-init if we detect the offers elements after landing on options page (no reload on transition)\n bouncex.utk.init();\n }\n }\n })\n }\n }\n\n if(pageType === 'panel'){\n var offerType,\n offerText = jQuery('.offer-header h3').text(),\n offerContent = jQuery('.offer-props span').text().toLowerCase();\n if(offerText.indexOf(\"7-Day\") > -1 && offerText.indexOf(\"Unlimited Digital Access\") > -1){\n if(offerContent.indexOf('4.49') > -1 && offerContent.indexOf('week') > -1){\n offerType = '7-day subscription';\n }\n }else if(offerText.indexOf(\"Sunday + Unlimited Digital Access\") > -1){\n if(offerContent.indexOf('4 weeks') > -1 && offerContent.indexOf('99¢') > -1){\n offerType = 'sunday subscription';\n }\n }else if(offerText.indexOf(\"Unlimited Digital Access\") > -1 || offerText.indexOf(\"outside of our Home Delivery Area.\") > -1){\n if(offerContent.indexOf('4 weeks') > -1 && offerContent.indexOf('99¢') > -1){\n offerType = 'uda subscription';\n }\n }\n if(offerType){\n bouncex.utk.viewPage({\n type: offerType,\n });\n }\n }\n\n if(pageType == 'alt-subscribe'){\n if(jQuery('#main-wrap:visible').length > 0){\n bouncex.utk.viewPage({\n type: 'uda subscription',\n });\n }\n\n var hasOffers = jQuery('#offers_view');\n if(hasOffers.length > 0){\n jQuery('.offersLi').find('.dssSubscribeOfferButton').on('click.bx-ibx', function(){\n var offerType = false,\n offerInfo = jQuery(this).parent().find('.offerTitle').text();\n if(offerInfo.indexOf('Unlimited Digital Access') > -1 && offerInfo.indexOf('7-Day') > -1){\n offerType = '7-day subscription';\n }else if(offerInfo.indexOf('Unlimited Digital Access') > -1 && offerInfo.indexOf('Sunday') > -1){\n offerType = 'sunday subscription';\n }else if(offerInfo.indexOf('Unlimited Digital Access') > -1 && offerInfo.indexOf('Annual') === -1){\n offerType = 'uda subscription';\n }\n if(offerType){\n bouncex.utk.viewPage({\n type: offerType,\n });\n }\n });\n }\n }\n\n if (pageType === 'subscription_checkout') {\n bouncex.push(['view subscription', {\n 'customer:hasconverted': (bouncex.cookie.lc?1:0)\n }]);\n }\n\n bouncex.utk.paywallIntId = bouncex.utk.setInterval({\n callback: function() {\n if(bouncex.vars.paywall_present){\n var salePage = false;\n if(jQuery('.da-details').length > 0 && jQuery('.da-details b').text().toLowerCase().indexOf('8 weeks free') > -1){\n salePage = true\n }\n\n if(!salePage){\n bouncex.utk.viewPage({\n type: 'uda subscription',\n });\n }\n bouncex.utk.stop(bouncex.utk.paywallIntId);\n }\n }\n });\n \n bouncex.et.onTrue(function(){\n return jQuery('.reg-dialog.meter-modal').length > 0;\n }, function(){\n bouncex.push(['view_paywall', {}]);\n }, 10) \n\n\n};\n\nbouncex.utk.init();\n","cjs":"","miw":1,"mibcx":1,"te":1,"cart_rep":{"get":"","set":""},"ulpj":null,"cus":"","miw_exclude":"","enabled":1},"etjson":null,"osre":true,"osru":"osr.bounceexchange.com/v1/osr/items","checkDfp":true,"gamNetwork":"4011","spa":0,"spatm":1,"preinit_cjs":"","crs":{"integrations":null,"pageCount":null},"mat":0,"math":0,"cpnu":"coupons.bounceexchange.com","dfpcms":0,"sms":{"optm":"","eventSharing":false,"shqId":"","enabled":1},"pde":true,"fmc":["US","CA"],"fme":true,"fmx":"","sdk":{"android":{"enabled":false,"enabledVersions":[],"eventModifications":null},"ios":{"enabled":false,"enabledVersions":[],"eventModifications":null}},"onsite":{"enabled":1},"ads":{"enabled":1},"pubs":{"enabled":1},"websdk":{"enabled":0},"ga4_property_id":"","ga4_measurement_id":""} ; bouncex.tag = 'tag3'; bouncex.$ = window.jQuery; bouncex.env = 'production'; bouncex.restrictedTlds = {"casl":{"ca":1},"gdpr":{"ad":1,"al":1,"at":1,"ax":1,"ba":1,"be":1,"bg":1,"by":1,"xn--90ais":1,"ch":1,"cy":1,"cz":1,"de":1,"dk":1,"ee":1,"es":1,"eu":1,"fi":1,"fo":1,"fr":1,"uk":1,"gb":1,"gg":1,"gi":1,"gr":1,"hr":1,"hu":1,"ie":1,"im":1,"is":1,"it":1,"je":1,"li":1,"lt":1,"lu":1,"lv":1,"mc":1,"md":1,"me":1,"mk":1,"xn--d1al":1,"mt":1,"nl":1,"no":1,"pl":1,"pt":1,"ro":1,"rs":1,"xn--90a3ac":1,"ru":1,"su":1,"xn--p1ai":1,"se":1,"si":1,"sj":1,"sk":1,"sm":1,"ua":1,"xn--j1amh":1,"va":1,"tr":1}}; bouncex.client = { supportsBrotli: 0 }; bouncex.assets = {"ads":"0109586821763416266dd874f087ef69","creativesBaseStyles":"a53944a2","gam_4011":"//assets.bounceexchange.com/assets/gam/4011/bd57b7f86b7a8d2375576a5fc3cfaf0f.json","inbox":"749c9ccd613f1a40075d1e7b59caea42","onsite":"0e56ab6ba004ee080ce3deb3edae35e9","sms":"e39203556bab2366e56296ce42e974a7","websdk":"0704dae1eb637cbeb4a847506058402d"}; bouncex.push = function(pushData) { bouncex.pushedData.push(pushData); } var runtime = document.createElement('script'); runtime.setAttribute('src', '//assets.bounceexchange.com/assets/smart-tag/versioned/runtime_6459738026535cda4232dc813c61447d.js'); runtime.setAttribute('async', 'async'); runtime.setAttribute('onload', 'bouncex.initializeTag()'); bouncex.initializeTag = function() { var script = document.createElement('script'); script.setAttribute('src', '//assets.bounceexchange.com/assets/smart-tag/versioned/main-v2_f63930b37a25405c0fe14c50976210bb.js'); script.setAttribute('async', 'async'); document.body.appendChild(script); var deviceGraphScript = document.createElement('script'); deviceGraphScript.setAttribute('src', '//assets.bounceexchange.com/assets/smart-tag/versioned/cjs_min_3a843477d8e318f67237a66d0a58c542.js'); deviceGraphScript.setAttribute('async', 'async'); var dgAttrs = [{"Key":"id","Value":"c.js"},{"Key":"async","Value":"true"},{"Key":"data-apikey","Value":"2^HIykD"},{"Key":"data-cb","Value":"bouncex.dg.initPostDeviceGraph"},{"Key":"data-bx","Value":"1"},{"Key":"data-gm","Value":"1"},{"Key":"data-fire","Value":"1"},{"Key":"data-adcb","Value":"bouncex.dg.getAdsOptStatus"}]; if (dgAttrs) { for (var i = 0; i < dgAttrs.length; i++) { deviceGraphScript.setAttribute(dgAttrs[i].Key, dgAttrs[i].Value); } } document.body.appendChild(deviceGraphScript); bouncex.initializeTag = function() {}; }; document.body.appendChild(runtime); } } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", bxBootstrap); } else { bxBootstrap(); }})();