Saved copy of
Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says
The Washington Times · 2025-08-27
<!DOCTYPE html><!--[if IE]><![endif]-->
<!--[if lt IE 7]><html class="ie ie6 ielegacy no-js" lang="en-US"><![endif]-->
<!--[if IE 7]><html class="ie ie7 ielegacy no-js" lang="en-US"><![endif]-->
<!--[if IE 8]><html class="ie ie8 ielegacy no-js" lang="en-US"><![endif]-->
<!--[if IE 9]><html class="ie ie9 no-js" lang="en-US"><![endif]-->
<!--[if (gt IE 9)|!(IE)]><!-->
<html class="no-js" lang="en-US">
<!--<![endif]-->
<head>
<title>Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says</title>
<meta name="description" content="A top White House official said Wednesday that mortgage-fraud accusations against Fed Governor Lisa Cook are "serious" and she should vacate her position instead of waiting for a court decision on President Trump's attempt to fire her." />
<meta charset="UTF-8" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="bitly-verification" content="d180fd45f70d" />
<meta property="fb:app_id" content="877559545760875" />
<meta name="msvalidate.01" content="5B44585918D69318CA2120B5FA20D85C" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
<meta http-equiv="x-rim-auto-match" content="none" />
<meta id="viewport" name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes, viewport-fit=cover" />
<meta name="format-detection" content="telephone=no" />
<meta name="serverf" content="web03" />
<meta property="article:section" content="Politics"/>
<link rel="canonical" href="https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/"/>
<meta name="Author" content="Tom Howell Jr."/>
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@washtimes" />
<meta name="twitter:title" content="Lisa Cook should take leave from Fed during legal fight over firing, K" />
<meta name="twitter:description" content="A top White House official said Wednesday that mortgage-fraud accusations against Fed Governor Lisa Cook are "serious" and she should vacate her position instead of waiting for a court decis" />
<meta name="twitter:image" content="https://twt-thumbs.washtimes.com/media/image/2025/08/27/Federal_Reserve_Cook_Black_Leaders_36616_c0-238-5693-3557_s1770x1032.jpg?5f66788141d11d48975fb0718b069f47109f4bb9" />
<meta name="twitter:creator" content="@TomHowellJr" />
<meta property="og:title" content="Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says"/>
<meta property="og:type" content="article"/>
<meta property="og:url" content="https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/"/>
<meta property="og:image" content="https://twt-thumbs.washtimes.com/media/image/2025/08/27/Federal_Reserve_Cook_Black_Leaders_36616_c0-237-5693-3557_s1200x700.jpg?773ffb97393f395f1628c53ed683d53572154df6"/>
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="700" />
<meta property="og:image:alt" content="Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says" />
<meta property="article:author" content="https://www.washingtontimes.com/staff/tom-howell-jr/"/>
<meta property="article:published_time" content="2025-08-27T10:14:00-04:00" />
<meta property="article:opinion" content="false"/>
<meta property="article:content_tier" content="metered"/>
<meta property="og:site_name" content="The Washington Times"/>
<meta property="og:description" content="A top White House official said Wednesday that mortgage-fraud accusations against Fed Governor Lisa Cook are “serious” and she should vacate her position instead of waiting for a court decision on President Trump’s attempt to fire her."/>
<meta name="news_keywords" content="Politics, U S Federal Reserve, Business Finance, Donald Trump, Kevin Hassett"/>
<meta property="article:modified_time" content="2025-08-27T14:47:31-0400">
<meta name="cXenseParse:publishtime" content="2025-08-27T10:14:00-0400">
<meta name="cXenseParse:recs:publishtime" content="2025-08-27T10:14:00-0400">
<meta name="cXenseParse:url" content="https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/"/>
<meta name="cXenseParse:pageclass" content="article"/>
<meta name="cXenseParse:title" content="Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says"/>
<meta name="cXenseParse:articleid" content="5403016-fc9c7a6"/>
<meta property="mrf:tags" content="primary-section:Politics" />
<meta property="mrf:tags" content="premium:no" />
<meta property="mrf:tags" content="paywall:metered" />
<meta property="mrf:tags" content="opinion:no" />
<meta property="mrf:tags" content="has-video:no" />
<meta property="mrf:tags" content="sponsored:no" />
<meta property="mrf:tags" content="origin:SaxoTech Editorial" />
<meta name="cXenseParse:author_1" content="Tom Howell Jr."/>
<meta name="cXenseParse:author_url_1" content="https://www.washingtontimes.com/staff/tom-howell-jr/"/>
<script type='text/javascript' data-cfasync='false' src='//dsms0mj1bbhn4.cloudfront.net/assets/pub/shareaholic.js'
data-shr-siteid='1b4cd6dea80b282c132df03b8b3fd9ac' async='async'></script>
<script type="application/ld+json" >
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"mainEntityOfPage": "https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/",
"headline": "Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says",
"image": [{
"@type": "ImageObject",
"url": "https://twt-thumbs.washtimes.com/media/image/2025/08/27/Federal_Reserve_Cook_Black_Leaders_36616_c0-237-5693-3557_s1200x700.jpg?773ffb97393f395f1628c53ed683d53572154df6",
"width": 1200,
"height": 700
}],
"dateModified": "2025-08-27T14:47:31.779845-04:00",
"datePublished": "2025-08-27T10:14:00-04:00",
"author": [{
"@type": "Person",
"name": "Tom Howell Jr.",
"url": "https://www.washingtontimes.com/staff/tom-howell-jr/",
"image": "https://twt-thumbs.washtimes.com/media/img/staff/2013/Howell_Jr_Tom-350_s220x308.jpg?302ab533f75f17d8b5f7b3ebcf774a8e5a91c32f"
}],
"publisher": {
"@type": "Organization",
"name": "The Washington Times",
"logo": {
"@type": "ImageObject",
"url": "https://www.washingtontimes.com/static/v4/images/logo-black-text-600x60.png",
"width": 600,
"height": 60
}
},
"description": "A top White House official said Wednesday that mortgage\u002Dfraud accusations against Fed Governor Lisa Cook are \u0022serious\u0022 and she should vacate her position instead of waiting for a court decision on President Trump\u0027s attempt to fire her.",
"keywords": "Politics, U S Federal Reserve, Business Finance, Donald Trump, Kevin Hassett",
"isAccessibleForFree": false,
"isPartOf": {
"@type": ["CreativeWork", "Product"],
"name": "The Washington Times",
"productID": "washingtontimes.com:showcase"
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://www.washingtontimes.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "News",
"item": "https://www.washingtontimes.com/news/"
},
{
"@type": "ListItem",
"position": 3,
"name": "Politics",
"item": "https://www.washingtontimes.com/news/politics/"
}
]
}
</script>
<script>
// These are needed for Piano to update CLTC score.
// Ensure this string includes a timezone upstream if possible; this just outputs what the model provides.
window.cltc_score_update_cutofftime = '2025-08-27T10:14:00-04:00';
window.cltc_score = '3';
</script>
<script>
window.IS_ADS_DISPLAY_ENABLED = true;
window.IS_ADS_HEADER_BIDDING_ENABLED = true;
</script>
<link rel="apple-touch-icon" sizes="180x180" href="/static/icons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/icons/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/static/icons/safari-pinned-tab.svg" color="#a9091f">
<link rel="shortcut icon" href="/static/icons/favicon.ico">
<meta name="msapplication-TileColor" content="#a9091f">
<meta name="theme-color" content="#a9091f">
<meta name="robots" content="index, follow, max-image-preview:large" />
<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin />
<link rel="preconnect" href="https://twt-thumbs.washtimes.com" crossorigin />
<link rel="preconnect" href="https://cdn.cxense.com" crossorigin />
<link rel="dns-prefetch" href="//www.googletagmanager.com" />
<link rel="dns-prefetch" href="//twt-thumbs.washtimes.com" />
<link rel="dns-prefetch" href="//cdn.cxense.com" />
<link rel="dns-prefetch" href="//netdna.bootstrapcdn.com" />
<link href="/static/sass/twtmain-2-v33e.css" rel="stylesheet" type="text/css" />
<link id="css-font-awesome" rel="stylesheet" type="text/css" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" media="all" />
<meta property="og:locale" content="en_US" />
<!-- Facebook Link Ownership -->
<meta property="fb:pages" content="35994014410" />
<!-- END Facebook Link Ownership -->
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer', 'GTM-TRFBMGL');</script>
<!-- End Google Tag Manager -->
<script src="https://cdn.cxense.com/ari-ci.js"></script>
<!-- Piano / VX Composer -->
<script>
document.cookie = "__adblocker=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
var setNptTechAdblockerCookie = function (adblocker) {
var d = new Date();
d.setTime(d.getTime() + 60 * 60 * 24 * 2 * 1000);
document.cookie = "__adblocker=" + (adblocker ? "true" : "false") + "; expires=" + d.toUTCString() + "; path=/";
}
var script = document.createElement("script");
script.setAttribute("async", true);
script.setAttribute("src", "//www.npttech.com/advertising.js");
script.setAttribute("onerror", "setNptTechAdblockerCookie(true);");
document.getElementsByTagName("head")[0].appendChild(script);
</script>
<script src="https://cdn.p-n.io/pushly-sdk.min.js?domain_key=gBtyMmS7OT8QOa8yn1NmkJvQvR9TfvNCMu8J" async></script>
<script>
window.PushlySDK = window.PushlySDK || [];
function pushly() { window.PushlySDK.push(arguments) }
function wtGetInitialPushlyExternalId() {
try {
if (
window.tp &&
tp.pianoId &&
typeof tp.pianoId.isUserValid === 'function' &&
tp.pianoId.isUserValid() &&
typeof tp.pianoId.getUser === 'function'
) {
var user = tp.pianoId.getUser();
var pianoUid = user && user.uid ? String(user.uid).trim() : '';
if (pianoUid) {
return pianoUid;
}
}
} catch (error) {}
return '';
}
var pushlyLoadConfig = {
domainKey: 'gBtyMmS7OT8QOa8yn1NmkJvQvR9TfvNCMu8J',
sw: '/pushly-sdk-worker.js',
};
var initialPushlyExternalId = wtGetInitialPushlyExternalId();
if (initialPushlyExternalId) {
pushlyLoadConfig.externalId = initialPushlyExternalId;
window.__WT_PUSHLY_LAST_EXTERNAL_ID__ = initialPushlyExternalId;
}
pushly('load', pushlyLoadConfig);
</script>
<script
src="https://code.jquery.com/jquery-3.5.1.min.js"
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
crossorigin="anonymous"></script>
<!-- CSRF Token Management -->
<script src="/static/js/csrf-setup.js"></script>
<script>
window.__adsforpage = [];
</script>
<!-- Admiral: Visitor Relationship Management -->
<!-- California Consumer Protection Act (CCPA) tag for washingtontimes.com -->
<script type="text/javascript">!(function(o,_name){o[_name]=o[_name]||function $(){($.q=$.q||[]).push(arguments)},o[_name].v=o[_name].v||2;!(function(o,t,n,f,e,i){function c(f,e){(f=(function(t,n){try{if(n=(t=o.localStorage).getItem("_aQS01OTVGQTgyMUE0NDc2Nzc5MEJDRjExMkMtMQ"))return JSON.parse(n).lgk||[];if((t.getItem("v4ac1eiZr0")||"").split(",")[4]>0)return[[_name+"-engaged","true"]]}catch(f){}})())&&typeof f.forEach===n&&(e=o[t].pubads())&&f.forEach((function(o){o&&o[0]&&e.setTargeting(o[0],o[1]||"")}))}(i=o[t]=o[t]||{}).cmd=i.cmd||[],typeof i.pubads===n?c():typeof i.cmd.unshift===n?i.cmd.unshift(c):i.cmd.push(c)})(window,"googletag","function");;!(function(n,t){n.__admiral_getConsentForGTM=function(t){function a(n,a){t((function(n,t){const a=n&&n.purpose&&n.purpose.consents||{};return{adConsentGranted:t||!!a[1],adUserData:t||!!a[7],adPersonalization:t||!!a[3],analyticsConsentGranted:t||!!a[1],personalizationConsentGranted:t||!!a[5],functionalityConsentGranted:t||!1,securityConsentGranted:t||!0}})(n,!a))}n[_name]("after","cmp.loaded",(function(t){t&&t.tcData&&t.tcData.gdprApplies?(t.consentKnown&&a(t.tcData,!0),n[_name]("after","cmp.updated",(function(n){a(n.tcData,!0)}))):a({},!1)}))}})(window);})(window,decodeURI('%61dm%69%72a%6c'));!(function(t,c,i){i=t.createElement(c),t=t.getElementsByTagName(c)[0],i.async=1,i.src="https://absorbingband.com/public/a8a084cb03100cac9e44c5e69dd87fd1686ea33cd4-prod.js",t.parentNode.insertBefore(i,t)})(document,"script");;;!(function(t,n,e,i,a){function c(){for(var t=[],e=0;e<arguments.length;e++)t.push(arguments[e]);if(!t.length)return a;"ping"===t[0]?t[2]({gdprAppliesGlobally:!!n.__cmpGdprAppliesGlobally,cmpLoaded:!1,cmpStatus:"stub"}):t.length>0&&a.push(t)}function f(t){if(t&&t.data&&t.source){var i,a=t.source,c="string"==typeof t.data&&t.data.indexOf("__tcfapiCall")>=0;(i=c?((function(t){try{return JSON.parse(t)}catch(n){}})(t.data)||{}).__tcfapiCall:(t.data||{}).__tcfapiCall)&&n[e](i.command,i.version,(function(t,n){var e={__tcfapiReturn:{returnValue:t,success:n,callId:i.callId}};a&&a.postMessage(c?JSON.stringify(e):e,"*")}),i.parameter)}}!(function o(){if(!n.frames[i]){var e=t.body;if(e){var a=t.createElement("iframe");a.style.display="none",a.name=i,e.appendChild(a)}else setTimeout(o,5)}})(),c.v=1,"function"!=typeof n[e]&&(n[e]=n[e]||c,n.addEventListener?n.addEventListener("message",f,!1):n.attachEvent&&n.attachEvent("onmessage",f))})(document,window,"__tcfapi","__tcfapiLocator",[]);;;!(function(e,t,n,r,a,i,s,c,u,o,p){function d(){for(var e=[],t=arguments.length,n=0;n<t;n++)e.push(arguments[n]);var r,a=e[1],i=typeof a===s,c=e[2],d={gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["7:usnat"].reduce((function(e,t){return t&&e.push(t),e}),[]),cmpId:9,sectionList:[],applicableSections:[0],gppString:"",parsedSections:{}};function f(e){i&&a(e,!0)}switch(e[0]){case"ping":return f(d);case"queue":return u;case"events":return o;case"addEventListener":return i&&(r=++p,o.push({id:r,callback:a,parameter:c})),f({eventName:"listenerRegistered",listenerId:r,data:!0,pingData:d});case"removeEventListener":for(r=!1,n=0;n<o.length;n++)if(o[n].id===c){o.splice(n,1),r=!0;break}return f(r);case"hasSection":case"getSection":case"getField":return f(null);default:return void u.push(e)}}d.v=2,typeof t.__gpp!==s&&(t.__gpp=t.__gpp||d,t.addEventListener&&t.addEventListener("message",(function(e,n){var r="string"==typeof e.data;(n=r?((function(e){try{return JSON.parse(e)}catch(t){}})(e.data)||{}).__gppCall:(e.data||{}).__gppCall)&&t.__gpp(n.command,(function(t,a){var i={__gppReturn:{returnValue:t,success:a,callId:n.callId}};e.source.postMessage(r?JSON.stringify(i):i,"*")}),"parameter"in n?n.parameter:null,n.version||1)}),!1),(function f(){if(!t.frames[r]){var n=e.body;if(n){var a=e.createElement("iframe");a.style.display="none",a.name=r,n.appendChild(a)}else setTimeout(f,5)}})())})(document,window,0,"__gppLocator",0,0,"function",0,[],[],0);</script> <!-- END Admiral -->
<script>
$(document).ready(function () {
$("#sponsored_block").click(function () {
$("#sponsored_content_block").slideToggle("slow", function () {
// Animation complete.
});
});
});
</script>
<!-- Begin Insticator Commenting-->
<link rel="preload" as="script" href="https://securepubads.g.doubleclick.net/tag/js/gpt.js">
<link rel="preload" as="script" href="https://d3lcz8vpax4lo2.cloudfront.net/ads-code/dff2a308-b1e2-451c-a49a-adadd8636788.js">
<script data-cfasync="false" type="text/javascript">(function (a, c, s, u) { 'Insticator' in a || (a.Insticator = { ad: { loadAd: function (b) { Insticator.ad.q.push(b) }, q: [] }, helper: {}, embed: {}, version: "4.0", q: [], load: function (t, o) { Insticator.q.push({ t: t, o: o }) } }); var b = c.createElement(s); b.src = u; b.async = !0; var d = c.getElementsByTagName(s)[0]; d.parentNode.insertBefore(b, d) })(window, document, 'script', 'https://d3lcz8vpax4lo2.cloudfront.net/ads-code/dff2a308-b1e2-451c-a49a-adadd8636788.js')</script><script async type="text/javascript" src="https://product.instiengage.com/product-loader-code/dff2a308-b1e2-451c-a49a-adadd8636788.js"></script><script>Insticator.load('load-page', { pageId: '5403016-fc9c7a6', })</script>
<!-- End Insticator Commenting-->
<style>
/*
* Piano paywall: hide gateable surfaces until Piano Composer evaluates.
*
* Why: gating is decided client-side by propensity models (CLTC + LTS).
* Server can't know in advance whether to render the ads/commenting, so
* we render them and pre-hide them with `visibility: hidden` (preserves
* layout, no reflow on reveal). Piano then either:
* - fires `showOffer` (paywall path) -> our handler removes them outright
* - fires `experienceExecute` (no offer / metered path) -> we add
* `body.piano-evaluated` and the CSS reveal kicks in
*
* The 5s safety timeout below is the failsafe if Piano never resolves
* (network failure, ad blocker, Composer misconfig). Tune as needed.
*/
body:not(.piano-evaluated) .inline-article-ad,
body:not(.piano-evaluated) .outbrain-unit-desktop,
body:not(.piano-evaluated) .insticator-product-group,
body:not(.piano-evaluated) .piano-end-article-reco,
body:not(.piano-evaluated) #article-btf-ad-container {
visibility: hidden;
}
/*
* Extended Access keeps the article DOM intact until Google decides
* whether to grant a read. The GAA callbacks mark the locked portion
* with this class rather than deleting it, so a later entitlement can
* safely restore the article. Without this rule, denied readers can
* still read the paragraphs underneath the paywall.
*/
.bigtext .ea-hidden {
display: none !important;
}
/*
* Desktop only: stick the inline paywall to the viewport so it stays
* visible as the reader scrolls down through the empty space the right
* sidebar (recommended, ads, podcasts, cartoon, sticky ads) creates in
* the article column. On mobile there's no sidebar so we let the
* paywall sit naturally.
*
* Gating selector: we use `.template-shown` (added by our JS handler)
* as the active signal instead of `body.articlepaywall`, because that
* body class depends on a Composer "Apply CSS" card which isn't in
* every experience or sandbox.
*
* We also override `.bigtext { overflow: hidden }` from typography.scss
* — that rule turns .bigtext into a non-scrolling clip context, which
* silently breaks `position: sticky` on any descendant. With overflow
* cleared and min-height set in JS (showOffer handler) to match the
* right sidebar height, the sticky has the full column to scroll within.
*
* The 167px top offset = sticky nav height (~157px) + a small gap.
*/
@media (min-width: 800px) {
.bigtext:has(.piano-content-lock-upper.template-shown),
.bigtext:has(.piano-content-lock.template-shown) {
overflow: visible;
}
/*
* Sticky is gated on `.is-sticky`, which the JS handler only adds
* when the paywall iframe actually fits in the available viewport
* (viewport height − sticky nav offset − bottom breathing room).
*
* If the iframe is taller than fits — short laptops, half-height
* windows, scaled-up font sizes — sticky would clip the bottom of
* the iframe and the user would have no way to scroll to reveal it,
* because sticky elements follow the viewport top instead of
* participating in normal page scroll. So we just don't stick in
* that case and let it scroll naturally.
*/
.bigtext .piano-content-lock-upper.template-shown.is-sticky,
.bigtext .piano-content-lock.template-shown.is-sticky {
position: sticky;
top: 167px;
}
}
/*
* Story-text fade-out, scoped to our reparented + sticky paywall.
*
* The default fade in `_piano.scss` uses `::before { bottom: 100%; }` on
* the paywall container, so the gradient is positioned relative to the
* sticky paywall. As the paywall sticks while the reader scrolls, that
* gradient travels with it and paints over arbitrary content in the
* viewport — which reads as "the bottom of the iframe is fading" even
* though it's the area above the paywall.
*
* Disable the sticky-bound fade and use a `.piano-content-fade` divider
* element (inserted by the showOffer handler) that lives *before* the
* paywall in .bigtext. It's anchored to the article body, so it stays
* put when the paywall sticks, fading the last visible paragraph into
* white right where the paywall begins.
*
* We use `.template-shown` (set by our JS) instead of the Composer-set
* `--active` class so the override always wins regardless of which
* Composer experience configured the page.
*/
.piano-content-lock-upper.template-shown::before,
.piano-content-lock.template-shown::before {
display: none !important;
}
.piano-content-fade {
height: 120px;
margin-top: -120px;
margin-bottom: 0;
background-image: linear-gradient(
to bottom,
rgba(255, 255, 255, 0) 0%,
rgba(255, 255, 255, 0.9) 70%,
#ffffff 100%
);
position: relative;
z-index: 1;
pointer-events: none;
}
</style>
<script>
tp = window.tp || [];
/*
* Content locking handlers.
*
* Architecture: we always render the full page (ads, Insticator commenting,
* outbrain, MyTimes recos, paywall containers). Piano Composer evaluates
* propensity scores client-side and either (a) shows a paywall via the
* `showOffer` handler below — in which case we remove gateable surfaces
* from the DOM and reparent the paywall iframe into `.bigtext` — or
* (b) lets the reader through, in which case `experienceExecute` fires
* and we flip `body.piano-evaluated` so the CSS pre-hide releases.
*/
tp.push(["addHandler", "showOffer", function (offerParams) {
console.log("__PEXP offer", offerParams);
// Mark the body as evaluated so the CSS pre-hide releases anything we
// don't explicitly remove below (e.g. if a future block is added but
// forgotten in the removal list, it'll at least become visible again).
document.body.classList.add('piano-evaluated');
// Only do DOM surgery for the inline content-lock containers.
if (offerParams.containerSelector !== '.piano-content-lock' &&
offerParams.containerSelector !== '.piano-content-lock-upper') {
return;
}
var $btext = $('.bigtext');
var $container = $(offerParams.containerSelector);
// How many body paragraphs to leave visible above the paywall.
var paragraphsToKeep = (offerParams.containerSelector === '.piano-content-lock-upper') ? 3 : 6;
// Find the last paragraph the reader should see. We exclude the
// `.article-category` <p> (the "OPINION:" eyebrow) so it doesn't count
// toward the visible-paragraph budget.
var $bodyParagraphs = $btext.children('p').filter(function () {
return !$(this).hasClass('article-category');
});
var $lastVisible = $bodyParagraphs.eq(paragraphsToKeep - 1);
if ($lastVisible.length) {
// Preserve the JAMX player after paragraph three for every visitor,
// including readers who are shown an offer. Remove everything else
// after the last visible paragraph — ads, Outbrain, embeds, Insticator,
// and any other interleaved content.
$lastVisible.nextAll().not('.jamx-inline-player').remove();
}
// Reparent the paywall container into .bigtext so Piano injects the
// offer iframe directly beneath the visible body, not at the bottom of
// the page below the (now-removed) commenting widget.
$container.appendTo($btext).addClass('template-shown');
// Insert a story-text fade divider just above the paywall. This is
// anchored to the article body so it stays put when the paywall is
// sticky on desktop, instead of riding along with the iframe (which is
// what the default `::before` gradient in _piano.scss does). Idempotent:
// remove any prior fade first so re-firing showOffer doesn't stack them.
$btext.find('.piano-content-fade').remove();
$('<div class="piano-content-fade" aria-hidden="true"></div>').insertBefore($container);
// Clean up gateable nodes. Order matters here: wrapper selectors must
// come BEFORE their contents so we don't leave behind an orphan div with
// just the decorative <hr> elements (which is what was happening with
// the Outbrain block — the .twt-content-only-hide wrapper survived
// after we removed the inner .outbrain-unit-desktop).
var selectorsToRemove = [
// Outbrain: remove the entire .twt-content-only-hide wrapper that
// contains the unit (the wrapper has decorative <hr>s above and below)
// before falling back to the inner unit and its content.
'.twt-content-only-hide:has(.outbrain-unit-desktop)',
'.outbrain-unit-desktop',
'.OUTBRAIN',
// Inline ad slots — also wrapped in .twt-content-only-hide, also
// removed via wrapper-first to avoid orphan striped blocks. We use
// the more specific `.inline-article-ad` selector here instead of
// the generic `.ad-slot` so we don't accidentally remove the top
// leaderboard banner (which also lives in a `.twt-content-only-hide`
// wrapper containing a generic `.ad-slot`).
'.twt-content-only-hide:has(.inline-article-ad)',
'.inline-article-ad',
// Editorial recirculation surfaces and bottom-of-article ad.
'.piano-end-article-reco', // MyTimes recommendations block
'.piano-end-article-sale',
'#article-btf-ad-container',
// Insticator commenting + trending. Class-based selectors only —
// we used to have a duplicate `id="insticator-commenting"` on the
// page <h1> that collided with the widget's id, which an ID-based
// query would have removed alongside the widget. The H1 id has
// since been removed (see also: <h1 class="page-headline">), but
// class selectors remain the safer pattern.
'.insticator-product-group',
'.instiengage-core-commenting',
'.instiengage-trending-now',
// Legacy targets — kept defensively in case any older surface lingers.
'.piano-in-article-reco',
'.connatixcontainer',
'.twitter-tweet',
'#comment-policy',
'#comment-block'
];
selectorsToRemove.forEach(function (sel) {
document.querySelectorAll(sel).forEach(function (el) {
el.remove();
});
});
// Post-pass: any .twt-content-only-hide wrapper that's left with only
// ornamental content (<hr> elements, whitespace, or nothing) is an
// orphan from removed ad/recirc content. Sweep them up so we don't show
// empty striped blocks between paragraphs.
document.querySelectorAll('.twt-content-only-hide').forEach(function (el) {
var hasMeaningfulContent = Array.prototype.some.call(el.children, function (child) {
return child.tagName !== 'HR' && child.tagName !== 'SCRIPT';
});
if (!hasMeaningfulContent) {
el.remove();
}
});
// Drop any height that prior code may have set on .bigtext so it grows
// to fit the visible body + paywall iframe naturally. Also clear the
// base `overflow: hidden` from typography.scss — `overflow: hidden`
// on .bigtext would silently break `position: sticky` on the paywall
// by turning .bigtext into a non-scrolling clip context.
$btext.css({ 'height': 'auto', 'overflow': 'visible' });
// If EA already unlocked the article, skip locking entirely
if (window.__gnewsUnlocked) return;
var urlParams = new URLSearchParams(window.location.search);
var isEA = urlParams.has('gaa_at');
document.querySelector(offerParams.containerSelector).classList.add("template-shown");
var $btext = $('.bigtext');
var threshold = (offerParams.containerSelector == ".piano-content-lock-upper") ? 3 : 6;
if (isEA) {
// EA flow: use CSS-only hiding (reversible by unlockArticle)
$btext.find("p").slice(threshold).addClass('ea-hidden');
document.body.classList.add('piano-paywall-applied');
} else {
// Non-EA flow: existing destructive behavior
$btext.find("p").slice(threshold).remove();
var elemsToRemove = [];
elemsToRemove.push(document.querySelector(".piano-in-article-reco"));
elemsToRemove.push(document.querySelector(".connatixcontainer"));
elemsToRemove.push(document.querySelector(".twitter-tweet"));
elemsToRemove.push(document.querySelector('#comment-policy'));
elemsToRemove.push(document.querySelector('#comment-block'));
elemsToRemove.push(document.querySelectorAll('.OUTBRAIN'));
elemsToRemove.forEach(function(item){
if (item) {
item.remove();
}
});
}
var newHeight = 0;
var visibleContent = $btext.find('p:visible');
for (var i=0; i<visibleContent.length; i++) {
newHeight += visibleContent.eq(i).outerHeight();
}
// Sync the sticky context now and ensure the resize/observe handlers
// are registered exactly once (re-firing showOffer won't stack them).
syncStickyContext();
ensureStickyHandlersRegistered();
}]);
/*
* Sticky context helpers, hoisted out of the showOffer handler so they
* register exactly once and don't leak observers/listeners on re-fire.
*
* `syncStickyContext` looks up the active paywall container fresh each
* call (whichever element currently carries `.template-shown`) so it
* works regardless of which content-lock variant Composer fired.
*/
var STICKY_BOTTOM_BUFFER = 24; // breathing room below iframe
var STICKY_TOP_OFFSET_FALLBACK = 167; // when sticky nav not yet present
function getStickyTopOffset() {
// Compute from the actual sticky nav so the paywall lines up correctly
// even if the nav height changes (responsive break, banner above it,
// future redesign). Add a small visual gap below the nav.
var stickyNav = document.querySelector('.header-container.sticky');
var navHeight = (stickyNav && stickyNav.offsetHeight) || 0;
return (navHeight > 0 ? navHeight : STICKY_TOP_OFFSET_FALLBACK - 10) + 10;
}
function syncStickyContext() {
var $btext = $('.bigtext');
var $container = $(
'.piano-content-lock-upper.template-shown, .piano-content-lock.template-shown'
).first();
if (!$btext.length || !$container.length) return;
if (window.innerWidth < 800) {
// Mobile: sticky off, no min-height stretch (no sidebar pressure).
$btext.css('min-height', '');
$container.removeClass('is-sticky');
return;
}
// Stretch .bigtext to match the right sidebar so the sticky has the
// full column to scroll within. Has no effect when sticky is off.
//
// Critical: we set min-height ONCE per article and never react to
// sidebar size changes from a ResizeObserver. The CSS Grid equal-heights
// layout creates a feedback loop — our write grows the column, which
// stretches the sidebar, which fires the observer, which triggers a
// bigger write, and so on. Late-loading ads are caught by a one-shot
// setTimeout in ensureStickyHandlersRegistered, not by observation.
if (!$btext.data('paywall-min-height-set')) {
var sidebar = document.querySelector('#secondary');
if (sidebar) {
$btext.css('min-height', sidebar.offsetHeight + 'px');
$btext.data('paywall-min-height-set', true);
}
}
// Engage sticky only if the iframe + offsets fit in the viewport.
var topOffset = getStickyTopOffset();
var iframeHeight = $container.outerHeight();
var availableHeight = window.innerHeight - topOffset - STICKY_BOTTOM_BUFFER;
if (iframeHeight > 0 && iframeHeight <= availableHeight) {
$container.addClass('is-sticky');
} else {
$container.removeClass('is-sticky');
}
}
// requestAnimationFrame-throttled wrapper so resize/observer storms don't
// run sync logic dozens of times per second during a window drag.
var syncStickyRafId = null;
function syncStickyContextThrottled() {
if (syncStickyRafId !== null) return;
syncStickyRafId = requestAnimationFrame(function () {
syncStickyRafId = null;
syncStickyContext();
});
}
// One-shot registration: keep observers and listeners at module scope so
// showOffer firing more than once never stacks them.
var stickyHandlersRegistered = false;
function ensureStickyHandlersRegistered() {
if (stickyHandlersRegistered) return;
stickyHandlersRegistered = true;
// We deliberately do NOT observe the sidebar (#secondary). The CSS Grid
// equal-heights layout creates a feedback loop with our .bigtext
// min-height write that runs away into millions of px. Instead, we
// capture the sidebar height once and re-measure on a single delayed
// timer to catch late-loading ads/recos.
if (window.ResizeObserver) {
var ro = new ResizeObserver(syncStickyContextThrottled);
// Watch the paywall container itself — Piano can resize the iframe
// after init when content like login/checkout flows swap in. This is
// safe: the paywall's size doesn't depend on .bigtext min-height.
var container = document.querySelector(
'.piano-content-lock-upper.template-shown, .piano-content-lock.template-shown'
);
if (container) ro.observe(container);
// Watch the sticky nav so the top-offset stays accurate when it
// appears/disappears on scroll. Also safe.
var stickyNav = document.querySelector('.header-container');
if (stickyNav) ro.observe(stickyNav);
}
window.addEventListener('resize', syncStickyContextThrottled);
// One-shot delayed re-measure: invalidate the "min-height already set"
// flag and re-sync so late-loading sidebar ads/recos get reflected
// exactly once. No continuous observation, no feedback loop.
setTimeout(function () {
$('.bigtext').removeData('paywall-min-height-set');
syncStickyContextThrottled();
}, 3000);
}
// Fires after Composer finishes evaluating an experience, regardless of
// whether an offer was shown. Use it to release the CSS pre-hide for
// visitors who were not paywalled.
tp.push(["addHandler", "experienceExecute", function (event) {
document.body.classList.add('piano-evaluated');
}]);
// Safety timeout: if Piano never reports back (network failure, ad
// blocker, Composer misconfig), make sure ads aren't hidden forever.
setTimeout(function () {
document.body.classList.add('piano-evaluated');
}, 5000);
</script>
<link rel="preload" as="script" href="https://www.googletagservices.com/tag/js/gpt.js" />
<script async src="https://dn0qt3r0xannq.cloudfront.net/washingtontimes-EIEMcy7goF/washingtontimes-longform/prebid-load.js"></script>
<script>
window.GPT = {
SITE: 'production',
ACCOUNT: '/5856/wash.times',
IS_ADITUDE_ENABLED: true
};
</script>
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
tude.setPageTargeting({
path: '/5856/wash.times/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says',
cats: JSON.parse('["politics"]'),
slug: 'lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says',
contenttype: 'story',
referred: (document.referrer || '').split('/')[2] || '',
});
});
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
tude.setPageTargeting({
tag: JSON.parse('["politics","us federal reserve","business finance","donald trump"]'),
});
});
</script>
<script src="/static/js/twt_app.js"></script>
<script>!function(n){if(!window.cnxel){window.cnxel={},window.cnxel.cmd=[];var t=n.createElement('iframe');t.src='javascript:false'; t.display='none',t.onload=function(){var n=t.contentWindow.document,c=n.createElement('script');c.src='//cd.elements.video/player.js?cid=1ffe7fff-eb53-11e9-b4d2-06948452ae1a',c.setAttribute('async','1'),c.setAttribute('type','text/javascript'),n.body.appendChild(c)},n.head.appendChild(t)}}(document);</script>
</head>
<body class="
">
<!-- Google Tag Manager (noscript) -->
<noscript>
<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TRFBMGL"
height="0" width="0" style="display:none;visibility:hidden"></iframe>
</noscript>
<!-- End Google Tag Manager (noscript) -->
<!-- Begin #wrapper -->
<div id="wrapper">
<div class="ad-slot twt-content-only-hide hide-on-mobile"
id="div-gpt-ad-oop">
</div>
<div class="sr-only"><a href="#content" title="Skip to content">Skip to content</a></div>
<div class="globalheader_container">
<div class="header-container">
<button class="mobile-menu-button" id="mobileMenuButton">
<svg class="hamburger" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 44.6571 36.4159">
<line x1="2.5553" y1="2.5" x2="42.1571" y2="2.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="5"/>
<line x1="2.5553" y1="33.9159" x2="42.1571" y2="33.9159" fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="5"/>
<line x1="2.5" y1="18.3739" x2="42.1018" y2="18.3739" fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="5"/>
</svg>
<svg class="close" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 33.0028 33.0028">
<line x1="2.5" y1="30.5027" x2="30.5027" y2="2.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="5"/>
<line x1="2.5" y1="2.5" x2="30.5028" y2="30.5028" fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="5"/>
</svg>
</button>
<button id="mobileMenuBackdrop" class="backdrop-button">Close</button>
<div class="wrapcontainer">
<header class="mainnav" id="mainnav">
<nav class="navbar">
<button class="back-button" onclick="conditionalBack()">
Back
</button>
<div class="main-logo">
<a data-track-event="NavBar,home-logo,positionhome"
href="/" title="The Washington Times | Home">
<img
src="/static/img/twt-logo.svg" alt="Logo: The Washington Times"
class="blacklogo" />
<img loading="lazy" src="/static/img/twt-logo-white.svg"
alt="Logo: The Washington Times"
class="whitelogo" />
<img loading="lazy" src="/static/img/twt-logo-w.svg"
alt="Logo: The Washington Times W"
class="mobile-scroll-logo" />
<em>America's Newspaper</em>
</a>
</div>
<div class="small-logo">
<div class="signinbox-wrapper">
<div class="newsletter-signup-icon headcol" onclick="">
<a href="/newsletters/manage/">
<svg width="36" height="24" viewBox="0 0 36 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="currentColor" d="M0 22.59C0 23.1423 0.447715 23.59 1 23.59H35C35.5523 23.59 36 23.1423 36 22.59V3.39576C36 2.57999 35.0758 2.10745 34.4145 2.58508L18.5855 14.0171C18.236 14.2696 17.764 14.2696 17.4145 14.0171L1.58549 2.58508C0.924162 2.10745 0 2.57999 0 3.39576V9.404V22.59Z" />
<path fill="currentColor" d="M4.57681 0C3.80606 0 3.48456 0.985469 4.10701 1.44V1.44L17.4101 11.159C17.7615 11.4157 18.2385 11.4157 18.5899 11.159L31.893 1.44V1.44C32.5155 0.98547 32.194 0 31.4232 0H4.57681Z" />
</svg>
<span class="badge" id="newsletter-signup-icon-badge">1</span>
</a>
</div>
<a class="subscribe-button" href="#">
<strong>Subscribe</strong>
</a>
<div class="signin headcol">
<div class="signinbox" style="display: flex">
<div class="rightSignin dropdownmenu">
<button id="userMenuBackdrop" class="backdrop-button">Close</button>
<button class="user-dropdown-button" id="piano-login">
<svg title="sign in" class="user-icon" viewBox="0 0 24 24">
<path fill="currentColor" fill-rule="evenodd" d="M12 0c6.627 0 12 5.373 12 12s-5.373 12-12 12S0 18.627 0 12 5.373 0 12 0zm-1.868 11.875h-.457A3.676 3.676 0 006 15.55v1.137C6 17.413 6.588 18 7.313 18h9.625c.724 0 1.312-.588 1.312-1.313V15.55a3.676 3.676 0 00-3.675-3.675h-.457a4.765 4.765 0 01-3.986 0zM12.125 4a3.5 3.5 0 100 7 3.5 3.5 0 000-7z"></path>
</svg>
<span class="text">Sign in</span>
</button>
<div id="anonUserMenu" class="user-dropdown-drawer">
<button id="close-user-menu" class="close-button">
<svg class="close" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 33.0028 33.0028">
<line x1="2.5" y1="30.5027" x2="30.5027" y2="2.5" fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10" stroke-width="5"/>
<line x1="2.5" y1="2.5" x2="30.5028" y2="30.5028" fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10" stroke-width="5"/>
</svg>
</button>
<div class="dropdown-button-wrap">
<a class="dropdown-button" id="signin-button" href="javascript: showPianoLogin()">Sign in</a>
<script>
if (window.ShareItemHandler) {
document.getElementById('signin-button').remove();
}
</script>
<a class="dropdown-button" href="/subscribe/?subscribe-button-header">Subscribe</a>
</div>
<p class="dropdown-helper-copy">
Register for free to manage your followed authors and newsletters in one place.
</p>
<a class="dropdown-button dropdown-button--light" id="register-button" href="#" onclick="showPianoRegister('header_register'); return false;">Register</a>
<ul class="dropdown-link-list">
<li><a href="/newsletter-signup/?subscribe-button-header">Newsletter signup</a></li>
<li><a href="/gift-subscription/?subscribe-button-header">Gift subscriptions</a></li>
<li><a href="/customer-service/?subscribe-button-header">Customer service</a></li>
</ul>
</div>
<div id="memberMenu" class="user-dropdown-drawer">
<button id="close-user-menu" class="close-button">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 33.0028 33.0028">
<line x1="2.5" y1="30.5027" x2="30.5027" y2="2.5" fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10" stroke-width="5"/>
<line x1="2.5" y1="2.5" x2="30.5028" y2="30.5028" fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10" stroke-width="5"/>
</svg>
</button>
<div class="dropdown-button-wrap">
<a class="dropdown-button" href="javascript: pianoLogout()">Sign Out</a>
<a class="dropdown-button" href="/my-account/?utm_source=twt&utm_medium=link&utm_campaign=my-account-dropdown">My Account</a>
</div>
<ul class="dropdown-link-list">
<li><a href="/newsletter-signup/?subscribe-button-header">Manage newsletters</a></li>
<li><a href="/my-account/following-authors/">Following authors</a></li>
<li><a href="/gift-subscription/?subscribe-button-header">Gift subscriptions</a></li>
<li><a href="https://washingtontimes-dc.newsmemory.com/" rel="nofollow noopener noreferrer">Today's E-Edition</a></li>
<li><a href="/customer-service/?subscribe-button-header">Customer service</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div id="cssmenu" class="main-nav-wrap">
<div class="search">
<form class="search-form" id="frm_search" action="/search/">
<legend class="sr-only">Search</legend>
<label for="search-keyword" class="sr-only" title="Search Keyword">Search Keyword:</label>
<input type="hidden" name="cx" value="015385541671335030271:nfb7f1nj88q" />
<input type="hidden" name="cof" value="FORID:11" />
<input type="hidden" name="ie" value="UTF-8" />
<input class="search-input" id="search-keyword" name="q" placeholder="Search" type="search" value="" />
<button type="submit" name="sa" class="search-button" title="Search">
<svg class="search-icon" viewBox="0 0 22.192 22.183" id="magnifying_glass" xmlns="http://www.w3.org/2000/svg">
<path fill="currentColor" d="M21.644 18.758a213.86 213.86 0 01-4.968-4.444 1.434 1.434 0 01-.379-1.949A8.585 8.585 0 008.642.001L8.585 0a8.587 8.587 0 00-.054 17.172l.056.001a8.523 8.523 0 003.8-.888c.03-.018.061-.032.093-.047.164-.076.346-.121.537-.129.021-.002.042-.002.062-.002a1.427 1.427 0 011.123.539 117.822 117.822 0 014.623 4.991c.742.777 2.029.699 2.793-.075.765-.777.757-2.115.026-2.804zm-8.55-5.633a6.37 6.37 0 01-4.507 1.858h-.043c-3.525-.021-6.377-2.91-6.354-6.437.022-3.504 2.891-6.356 6.395-6.356h.043c1.707.011 3.31.687 4.51 1.902s1.855 2.826 1.845 4.535a6.374 6.374 0 01-1.889 4.498z"/>
</svg>
Search
</button>
</form>
<script type="text/javascript" src="//www.google.com/coop/cse/brand?form=cse-search-box&lang=en"></script>
</div>
<ul class="main-nav-list">
<li class="has-sub active" id="nav_root_news">
<a id="main-nav-drop1" href="javascript:;" title="News">News</a>
<ul>
<li class=""><a href="/news/corrections/" title="Corrections" class="nav_bar_sub corrections">Corrections</a>
</li>
<li class=""><a href="/news/politics/" title="Politics" class="nav_bar_sub politics">Politics</a>
</li>
<li class=""><a href="/news/national/" title="National" class="nav_bar_sub national">National</a>
</li>
<li class=""><a href="/news/world/" title="World" class="nav_bar_sub world">World</a>
</li>
<li class=""><a href="/news/security/" title="Security" class="nav_bar_sub security">Security</a>
</li>
<li class=""><a href="/news/the-advocates/" title="The Advocates" class="nav_bar_sub the-advocates">The Advocates</a>
</li>
<li class=""><a href="/news/seen-heard-and-whispered/" title="Seen, Heard & Whispered" class="nav_bar_sub seen-heard-whispered">Seen, Heard & Whispered</a>
</li>
<li class=""><a href="/news/business-economy/" title="Business & Economy" class="nav_bar_sub business-economy">Business & Economy</a>
</li>
<li class=""><a href="/news/local/" title="D.C. Local" class="nav_bar_sub dc-local">D.C. Local</a>
</li>
<li class=""><a href="/media-spotlight/" title="Media Spotlight" class="nav_bar_sub media-spotlight">Media Spotlight</a>
</li>
<li class=""><a href="/news/newsmakers/" title="Newsmakers" class="nav_bar_sub newsmakers">Newsmakers</a>
</li>
<li class=""><a href="/news/waste-fraud-abuse/" title="Waste, Fraud & Abuse" class="nav_bar_sub waste-fraud-abuse">Waste, Fraud & Abuse</a>
</li>
<li class=""><a href="/news/inside-the-ring/" title="Inside the Ring" class="nav_bar_sub inside-the-ring">Inside the Ring</a>
</li>
<li class=""><a href="/higher-ground/" title="Higher Ground" class="nav_bar_sub higher-ground">Higher Ground</a>
</li>
<li class=""><a href="/culture/" title="Culture" class="nav_bar_sub culture">Culture</a>
</li>
<li class=""><a href="/culture/entertainment/" title="Entertainment" class="nav_bar_sub entertainment">Entertainment</a>
</li>
<li class=""><a href="/culture/technology/" title="Technology" class="nav_bar_sub technology">Technology</a>
</li>
<li class=""><a href="http://www.legacy.com/washingtontimes/" title="Obituaries" class="nav_bar_sub obituaries">Obituaries</a>
</li>
<li class=""><a href="/news/today/" title="Just the Headlines" class="nav_bar_sub just-the-headlines">Just the Headlines</a>
</li>
<li class=""><a href="/news/dive-deeper/" title="Dive Deeper" class="nav_bar_sub dive-deeper">Dive Deeper</a>
</li>
<li class=""><a href="/specials/freedom-family-faith-celebrating-washington-times/" title="Celebrating The Washington Times" class="nav_bar_sub celebrating-the-washington-times">Celebrating The Washington Times</a>
</li>
</ul>
</li>
<li class="has-sub" id="nav_root_policy">
<a id="main-nav-drop2" href="javascript:;" title="Policy">Policy</a>
<ul>
<li class=""><a href="/news/corrections/" title="Corrections" class="nav_bar_sub corrections">Corrections</a>
</li>
<li class=""><a href="/news/threat-status/" title="Threat Status" class="nav_bar_sub threat-status">Threat Status</a>
</li>
<li class=""><a href="/specials/energy-environment-news/" title="Energy & Environment" class="nav_bar_sub energy-environment">Energy & Environment</a>
</li>
<li class=""><a href="/specials/banking-finance/" title="Banking & Finance" class="nav_bar_sub banking-finance">Banking & Finance</a>
</li>
<li class=""><a href="/specials/health-care-reform/" title="Health Care Reform" class="nav_bar_sub health-care-reform">Health Care Reform</a>
</li>
<li class=""><a href="/specials/second-amendment-and-gun-control/" title="Second Amendment" class="nav_bar_sub second-amendment">Second Amendment</a>
</li>
<li class=""><a href="/specials/immigration-reform/" title="Immigration Reform" class="nav_bar_sub immigration-reform">Immigration Reform</a>
</li>
<li class=""><a href="/specials/homeland-cybersecurity/" title="Homeland & Cybersecurity" class="nav_bar_sub homeland-cybersecurity">Homeland & Cybersecurity</a>
</li>
<li class=""><a href="/specials/aerospace-defense/" title="Aerospace & Defense" class="nav_bar_sub aerospace-defense">Aerospace & Defense</a>
</li>
<li class=""><a href="/specials/taxes-budget/" title="Taxes & Budget" class="nav_bar_sub taxes-budget">Taxes & Budget</a>
</li>
<li class=""><a href="/specials/law-enforcement-intelligence/" title="Law Enforcement & Intelligence" class="nav_bar_sub law-enforcement-intelligence">Law Enforcement & Intelligence</a>
</li>
<li class=""><a href="/specials/transportation-infrastructure/" title="Transportation & Infrastructure" class="nav_bar_sub transportation-infrastructure">Transportation & Infrastructure</a>
</li>
</ul>
</li>
<li class="has-sub" id="nav_root_opinion">
<a id="main-nav-drop3" href="/opinion/" title="Commentary">Commentary</a>
<ul>
<li class=""><a href="/opinion/" title="Commentary Main" class="nav_bar_sub commentary-main">Commentary Main</a>
</li>
<li class=""><a href="/news/corrections/" title="Corrections" class="nav_bar_sub corrections">Corrections</a>
</li>
<li class=""><a href="/opinion/editorials/" title="Editorials" class="nav_bar_sub editorials">Editorials</a>
</li>
<li class=""><a href="/opinion/letters/" title="Letters" class="nav_bar_sub letters">Letters</a>
</li>
<li class=""><a href="/staff/cheryl-k-chumley/" title="Cheryl K. Chumley" class="nav_bar_sub cheryl-k-chumley">Cheryl K. Chumley</a>
</li>
<li class=""><a href="/staff/kelly-sadler/" title="Kelly Sadler" class="nav_bar_sub kelly-sadler">Kelly Sadler</a>
</li>
<li class=""><a href="/staff/jed-babbin/" title="Jed Babbin" class="nav_bar_sub jed-babbin">Jed Babbin</a>
</li>
<li class=""><a href="/staff/tom-basile/" title="Tom Basile" class="nav_bar_sub tom-basile">Tom Basile</a>
</li>
<li class=""><a href="/staff/tim-constantine/" title="Tim Constantine" class="nav_bar_sub tim-constantine">Tim Constantine</a>
</li>
<li class=""><a href="/staff/joseph-curl/" title="Joseph Curl" class="nav_bar_sub joseph-curl">Joseph Curl</a>
</li>
<li class=""><a href="/staff/joseph-r-detrani/" title="Joseph R. DeTrani" class="nav_bar_sub joseph-r-detrani">Joseph R. DeTrani</a>
</li>
<li class=""><a href="/staff/don-feder/" title="Don Feder" class="nav_bar_sub don-feder">Don Feder</a>
</li>
<li class=""><a href="/staff/billy-hallowell/" title="Billy Hallowell" class="nav_bar_sub billy-hallowell">Billy Hallowell</a>
</li>
<li class=""><a href="/staff/daniel-n-hoffman/" title="Daniel N. Hoffman" class="nav_bar_sub daniel-n-hoffman">Daniel N. Hoffman</a>
</li>
<li class=""><a href="/staff/david-keene/" title="David Keene" class="nav_bar_sub david-keene">David Keene</a>
</li>
<li class=""><a href="/staff/robert-knight/" title="Robert Knight" class="nav_bar_sub robert-knight">Robert Knight</a>
</li>
<li class=""><a href="/staff/gene-marks/" title="Gene Marks" class="nav_bar_sub gene-marks">Gene Marks</a>
</li>
<li class=""><a href="/staff/clifford-d-may/" title="Clifford D. May" class="nav_bar_sub clifford-d-may">Clifford D. May</a>
</li>
<li class=""><a href="/staff/michael-mckenna/" title="Michael McKenna" class="nav_bar_sub michael-mckenna">Michael McKenna</a>
</li>
<li class=""><a href="/staff/stephen-moore/" title="Stephen Moore" class="nav_bar_sub stephen-moore">Stephen Moore</a>
</li>
<li class=""><a href="/staff/tim-murtaugh/" title="Tim Murtaugh" class="nav_bar_sub tim-murtaugh">Tim Murtaugh</a>
</li>
<li class=""><a href="/staff/peter-navarro/" title="Peter Navarro" class="nav_bar_sub peter-navarro">Peter Navarro</a>
</li>
<li class=""><a href="/staff/everett-piper/" title="Everett Piper" class="nav_bar_sub everett-piper">Everett Piper</a>
</li>
<li class=""><a href="/staff/cal-thomas/" title="Cal Thomas" class="nav_bar_sub cal-thomas">Cal Thomas</a>
</li>
<li class=""><a href="/staff/scott-walker/" title="Scott Walker" class="nav_bar_sub scott-walker">Scott Walker</a>
</li>
<li class=""><a href="/staff/miles-yu/" title="Miles Yu" class="nav_bar_sub miles-yu">Miles Yu</a>
</li>
<li class=""><a href="/opinion/black-voices/" title="Black Voices" class="nav_bar_sub black-voices">Black Voices</a>
</li>
<li class=""><a href="/books/" title="Books" class="nav_bar_sub books">Books</a>
</li>
<li class=""><a href="/cartoons/" title="Cartoons" class="nav_bar_sub cartoons">Cartoons</a>
</li>
<li class=""><a href="/specials/rediscover-constitution/" title="To the Republic" class="nav_bar_sub to-the-republic">To the Republic</a>
</li>
</ul>
</li>
<li class="has-sub" id="nav_root_sports">
<a id="main-nav-drop4" href="/sports/" title="Sports">Sports</a>
<ul>
<li class=""><a href="/sports/" title="Sports Main" class="nav_bar_sub sports-main">Sports Main</a>
</li>
<li class=""><a href="/news/corrections/" title="Corrections" class="nav_bar_sub corrections">Corrections</a>
</li>
<li class=""><a href="/specials/washington-nfl-football-team/" title="Washington Commanders" class="nav_bar_sub washington-commanders">Washington Commanders</a>
</li>
<li class=""><a href="/sports/football/" title="Football" class="nav_bar_sub football">Football</a>
</li>
<li class=""><a href="/sports/baseball/" title="Baseball" class="nav_bar_sub baseball">Baseball</a>
</li>
<li class=""><a href="/sports/basketball/" title="Basketball" class="nav_bar_sub basketball">Basketball</a>
</li>
<li class=""><a href="/sports/ncaa/" title="NCAA" class="nav_bar_sub ncaa">NCAA</a>
</li>
<li class=""><a href="/staff/thom-loverro/" title="Thom Loverro" class="nav_bar_sub thom-loverro">Thom Loverro</a>
</li>
<li class=""><a href="/sports/tennis/" title="Tennis" class="nav_bar_sub tennis">Tennis</a>
</li>
<li class=""><a href="/sports/golf/" title="Golf" class="nav_bar_sub golf">Golf</a>
</li>
<li class=""><a href="/sports/hockey/" title="Hockey" class="nav_bar_sub hockey">Hockey</a>
</li>
<li class=""><a href="/sports/soccer/" title="Soccer" class="nav_bar_sub soccer">Soccer</a>
</li>
<li class=""><a href="/sports/horse-racing/" title="Horse Racing" class="nav_bar_sub horse-racing">Horse Racing</a>
</li>
<li class=""><a href="/sports/racing/" title="NASCAR & Racing" class="nav_bar_sub nascar-racing">NASCAR & Racing</a>
</li>
<li class=""><a href="/specials/district-sports-podcast/" title="District of Sports Podcast" class="nav_bar_sub district-of-sports-podcast">District of Sports Podcast</a>
</li>
<li class=""><a href="/sports/photo-galleries/" title="Sports Photos" class="nav_bar_sub sports-photos">Sports Photos</a>
</li>
</ul>
</li>
<li class="has-sub" id="nav_root_special_reports">
<a id="main-nav-drop5" href="/specials/sponsored/" title="Special Sections">Special Sections</a>
<ul>
<li class=""><a href="/news/corrections/" title="Corrections" class="nav_bar_sub corrections">Corrections</a>
</li>
<li class=""><a href="/specials/americas-energy-edge/" title="America's Energy Edge" class="nav_bar_sub americas-energy-edge">America's Energy Edge</a>
</li>
<li class=""><a href="/specials/gateways-health/" title="Gateways to Health" class="nav_bar_sub gateways-to-health">Gateways to Health</a>
</li>
<li class=""><a href="/specials/ai-hill-2026/" title="AI on The Hill" class="nav_bar_sub ai-on-the-hill">AI on The Hill</a>
</li>
<li class=""><a href="/specials/celebrate-250-fight-political-economic-religious-freedom/" title="Celebrate 250: Freedom" class="nav_bar_sub celebrate-250-freedom">Celebrate 250: Freedom</a>
</li>
<li class=""><a href="/specials/free-iran-2026/" title="Free Iran 2026" class="nav_bar_sub free-iran-2026">Free Iran 2026</a>
</li>
<li class=""><a href="/specials/taiwan-matters-2026/" title="Why Taiwan Matters" class="nav_bar_sub why-taiwan-matters">Why Taiwan Matters</a>
</li>
<li class=""><a href="/specials/investing-rural-america/" title="Investing in Rural America" class="nav_bar_sub investing-in-rural-america">Investing in Rural America</a>
</li>
<li class=""><a href="https://media.washtimes.com/media/misc/2026/06/02/WT-DCBallots-060426.pdf" title="D.C. Board of Elections" class="nav_bar_sub dc-board-of-elections">D.C. Board of Elections</a>
</li>
<li class=""><a href="/specials/transportation-2026/" title="Transportation 2026" class="nav_bar_sub transportation-2026">Transportation 2026</a>
</li>
<li class=""><a href="/specials/american-energy-unleashed/" title="American energy unleashed" class="nav_bar_sub american-energy-unleashed">American energy unleashed</a>
</li>
<li class=""><a href="/specials/infrastructure-2026/" title="Infrastructure 2026" class="nav_bar_sub infrastructure-2026">Infrastructure 2026</a>
</li>
<li class=""><a href="/specials/building-health-care-americans-deserve/" title="Building the health care Americans deserve" class="nav_bar_sub building-the-health-care-americans-deserve">Building the health care Americans deserve</a>
</li>
<li class=""><a href="/specials/faith-work-economic-future/" title="Faith at Work" class="nav_bar_sub faith-at-work">Faith at Work</a>
</li>
<li class=""><a href="/specials/building-healthier-america/" title="Building a healthier America" class="nav_bar_sub building-a-healthier-america">Building a healthier America</a>
</li>
<li class=""><a href="/specials/invest-greece-2025/" title="Invest in Greece 2025" class="nav_bar_sub invest-in-greece-2025">Invest in Greece 2025</a>
</li>
</ul>
</li>
<li class="has-sub" id="nav_root_events">
<a id="main-nav-drop6" href="javascript:;" title="Events">Events</a>
<ul>
<li class=""><a href="/news/corrections/" title="Corrections" class="nav_bar_sub corrections">Corrections</a>
</li>
<li class=""><a href="/specials/sub-only-events/" title="Subscriber Only Events" class="nav_bar_sub subscriber-only-events">Subscriber Only Events</a>
</li>
<li class=""><a href="/specials/indopac-2026-naval-dominance-shipbuilding-autonomy-c2/" title="IndoPac 2026" class="nav_bar_sub indopac-2026">IndoPac 2026</a>
</li>
<li class=""><a href="/specials/reagan-national-defense-forum/" title="Reagan Forum" class="nav_bar_sub reagan-forum">Reagan Forum</a>
</li>
<li class=""><a href="/specials/idex-2025/" title="IDEX 2025" class="nav_bar_sub idex-2025">IDEX 2025</a>
</li>
<li class=""><a href="/video/reinventing-globalization-livestream/" title="Reinventing after Globalization" class="nav_bar_sub reinventing-after-globalization">Reinventing after Globalization</a>
</li>
<li class=""><a href="/video/harm-reduction/" title="Harm Reduction and Public Health" class="nav_bar_sub harm-reduction-and-public-health">Harm Reduction and Public Health</a>
</li>
<li class=""><a href="/news/2025/may/13/event-golden-dome-america/" title="Golden Dome for America" class="nav_bar_sub golden-dome-for-america">Golden Dome for America</a>
</li>
<li class=""><a href="/twt-video/" title="Videos" class="nav_bar_sub videos">Videos</a>
</li>
<li class=""><a href="/washington-dc-events-calendar/" title="Things to do in D.C." class="nav_bar_sub things-to-do-in-dc">Things to do in D.C.</a>
</li>
</ul>
</li>
<li class="has-sub" id="nav_root_videopodcasts">
<a id="main-nav-drop7" href="javascript:;" title="Video/Podcasts">Video/Podcasts</a>
<ul>
<li class=""><a href="/defiant-ones/" title="Defiant Ones" class="nav_bar_sub defiant-ones">Defiant Ones</a>
</li>
<li class=""><a href="/news/corrections/" title="Corrections" class="nav_bar_sub corrections">Corrections</a>
</li>
<li class=""><a href="/twt-video/" title="All Videos" class="nav_bar_sub all-videos">All Videos</a>
</li>
<li class=""><a href="/washington-times-podcasts/" title="All Podcasts" class="nav_bar_sub all-podcasts">All Podcasts</a>
</li>
<li class=""><a href="/specials/front-page-podcast/" title="The Front Page" class="nav_bar_sub the-front-page">The Front Page</a>
</li>
<li class=""><a href="/threat-status-video-podcasts/" title="Threat Status" class="nav_bar_sub threat-status">Threat Status</a>
</li>
<li class=""><a href="/specials/politically-unstable-podcast/" title="Politically Unstable" class="nav_bar_sub politically-unstable">Politically Unstable</a>
</li>
<li class=""><a href="/specials/the-sit-down-with-alex-swoyer/" title="The Sitdown with Alex Swoyer" class="nav_bar_sub the-sitdown-with-alex-swoyer">The Sitdown with Alex Swoyer</a>
</li>
<li class=""><a href="/specials/bold-blunt-podcast/" title="Bold & Blunt" class="nav_bar_sub bold-blunt">Bold & Blunt</a>
</li>
<li class=""><a href="/specials/higher-ground-podcast/" title="The Higher Ground" class="nav_bar_sub the-higher-ground">The Higher Ground</a>
</li>
<li class=""><a href="/specials/court-watch-alex-swoyer/" title="Court Watch" class="nav_bar_sub court-watch">Court Watch</a>
</li>
<li class=""><a href="/specials/victory-communism/" title="Victory Over Communism" class="nav_bar_sub victory-over-communism">Victory Over Communism</a>
</li>
<li class=""><a href="/specials/district-sports-podcast/" title="District of Sports" class="nav_bar_sub district-of-sports">District of Sports</a>
</li>
<li class=""><a href="/specials/capitol-hill-show-podcast/" title="Capitol Hill Show" class="nav_bar_sub capitol-hill-show">Capitol Hill Show</a>
</li>
<li class=""><a href="/specials/unregulated-podcast/" title="The Unregulated Podcast" class="nav_bar_sub the-unregulated-podcast">The Unregulated Podcast</a>
</li>
<li class=""><a href="/specials/washington-times-foramerica/" title="ForAmerica" class="nav_bar_sub foramerica">ForAmerica</a>
</li>
<li class=""><a href="/specials/washington-times-brief-video-series/" title="The Brief" class="nav_bar_sub the-brief">The Brief</a>
</li>
<li class=""><a href="/specials/god-country-and-the-american-story/" title="God, Country & American Story" class="nav_bar_sub god-country-american-story">God, Country & American Story</a>
</li>
</ul>
</li>
<li class="has-sub" id="nav_root_games">
<a id="main-nav-drop8" href="/puzzles/games/" title="Games">Games</a>
<ul>
<li class=""><a href="/puzzles/games/" title="Games Main" class="nav_bar_sub games-main">Games Main</a>
</li>
<li class=""><a href="/news/corrections/" title="Corrections" class="nav_bar_sub corrections">Corrections</a>
</li>
<li class=""><a href="/puzzles/sudoku/" title="Play Sudoku" class="nav_bar_sub play-sudoku">Play Sudoku</a>
</li>
<li class=""><a href="/puzzles/word-search/" title="Word Search" class="nav_bar_sub word-search">Word Search</a>
</li>
<li class=""><a href="/puzzles/crossword/" title="Crossword Puzzle" class="nav_bar_sub crossword-puzzle">Crossword Puzzle</a>
</li>
<li class=""><a href="/puzzles/mahjong/" title="Daily Mahjongg Game" class="nav_bar_sub daily-mahjongg-game">Daily Mahjongg Game</a>
</li>
<li class=""><a href="/puzzles/solitaire/" title="Solitaire" class="nav_bar_sub solitaire">Solitaire</a>
</li>
<li class=""><a href="/games/chess-checkers" title="Chess & Checkers" class="nav_bar_sub chess-checkers">Chess & Checkers</a>
</li>
<li class=""><a href="/puzzles/realtime-crossword-puzzles/" title="Real-Time Crossword Puzzles" class="nav_bar_sub real-time-crossword-puzzles">Real-Time Crossword Puzzles</a>
</li>
<li class=""><a href="/games/mini-crossword-puzzle/" title="Daily Mini Crossword Puzzle" class="nav_bar_sub daily-mini-crossword-puzzle">Daily Mini Crossword Puzzle</a>
</li>
<li class=""><a href="/quiz/" title="Quizzes" class="nav_bar_sub quizzes">Quizzes</a>
</li>
</ul>
</li>
<li id="nav_root_email-sticky-icon">
<a href="/newsletter-signup/?newsletter-scroll">
<img loading="lazy" src="/static/images/white-mail-icon.svg"/>
</a>
</li>
<li id="nav_root_subscribe" style="display: none;">
<a id="main-nav-drop10" href="/subscribe/?subscribe-button-scroll" title="Subscribe">Subscribe</a>
</li>
<li id="nav_root_signin" style="display: none;">
<a id="main-nav-drop11" href="/my-account/" title="Sign In">Sign In</a>
</li>
</ul>
</div>
<div class="piano-top-ribbon"></div>
<div class="piano-newsletter-topnav"></div>
<div class="podcastWrap">
<div class="podcastBanner">
<div class="podcastItem">
<article>
<div class="main-photo">
<a href="/specials/threat-status-podcast/" class="podcast_banner position1"><img src="https://twt-thumbs.washtimes.com/media/specials/1009_TS_900_k65x65.png?25e518aeb5fddef9cfade2c3459a6609d7980e02" width="65" height="65" class="left mr mb" alt="Threat Status Podcast" /></a>
</div>
<h2 class="article-headline">
<a href="/specials/threat-status-podcast/" title="Threat Status Podcast" class="podcast_banner position1">LISTEN: Why military AI data labeling matters</a>
<span class="podcasthed">Peter Kant joins Threat Status</span>
</h2>
</article>
</div>
<div class="podcastItem">
<article>
<div class="main-photo">
<a href="/specials/bold-blunt-podcast/" class="podcast_banner position2"><img src="https://twt-thumbs.washtimes.com/media/specials/1010_BOLD_900_k65x65.png?25e518aeb5fddef9cfade2c3459a6609d7980e02" width="65" height="65" class="left mr mb" alt="Bold &amp; Blunt Podcast" /></a>
</div>
<h2 class="article-headline">
<a href="/specials/bold-blunt-podcast/" title="Bold & Blunt Podcast" class="podcast_banner position2">WATCH: Budgets and political power</a>
<span class="podcasthed">Mark Meckler joins Bold and Blunt</span>
</h2>
</article>
</div>
<div class="podcastItem">
<article>
<div class="main-photo">
<a href="/news/2026/oct/8/dialogue-three-years-october-7-america-keep-arming-israel/" data-track-event="podcast_banner,podcast_banner,position3"><img src="https://twt-thumbs.washtimes.com/media/image/2026/10/08/The_D_ep1_thumb_v2jpg_c365-0-1306-941_s170x170.jpg?c67354e027666bb12533b905d0d09fcf55abb469" width="170" height="170" alt="In the debut episode of &quot;The Dialogue,&quot; Ben Freeman, Director of Democratizing Foreign Policy, and Blaise Misztal, Vice President for Policy at the Jewish Institute for National Security of America, debate whether U.S. support for Israel makes America safer, drains American resources, strengthens the defense industry, or risks pulling the U.S. deeper into conflicts overseas." /></a>
</div>
<h2 class="article-headline">
<a href="/news/2026/oct/8/dialogue-three-years-october-7-america-keep-arming-israel/" title="Should we keep funding Israel? America’s $3.8 billion question" data-track-event="podcast_banner,podcast_banner,position3">
Should we keep funding Israel? America’s $3.8 billion question
</a>
<span class="podcasthed">New episode of The Dialogue</span>
</h2>
</article>
</div>
</div>
</div>
<div class="topics">
<div class="topics">
<div><strong>TRENDING:</strong></div>
<div class="noborder"><a href="/topics/donald-trump/" title="Donald Trump" data-track-event="Hilighted,topics">Donald Trump</a></div>
<div><a href="/topics/russia/" title="Russia" data-track-event="Hilighted,topics">Russia</a></div>
<div><a href="/topics/alabama/" title="Alabama" data-track-event="Hilighted,topics">Alabama</a></div>
<div><a href="/topics/florida/" title="Florida" data-track-event="Hilighted,topics">Florida</a></div>
<div><a href="/topics/volodymyr-zelenskyy/" title="Volodymyr Zelenskyy" data-track-event="Hilighted,topics">Volodymyr Zelenskyy</a></div>
<div><a href="/topics/ukraine/" title="Ukraine" data-track-event="Hilighted,topics">Ukraine</a></div>
<div><a href="/topics/spain/" title="Spain" data-track-event="Hilighted,topics">Spain</a></div>
<div><a href="/topics/hamas/" title="Hamas" data-track-event="Hilighted,topics">Hamas</a></div>
<div><a href="/topics/zaporizhzhia/" title="Zaporizhzhia" data-track-event="Hilighted,topics">Zaporizhzhia</a></div>
<div><a href="/topics/smithsonian-conservation-biology-institute/" title="Smithsonian Conservation Biology Institute" data-track-event="Hilighted,topics">Smithsonian Conservation Biology Institute</a></div>
</div>
</div>
</div>
</div>
</div>
<!-- End #wrapper -->
<div class="container extra-pad-when-sticky">
<div id="ad-lead" data-size="970x90" class="ad">
<div class="advertisement-treatment ">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
style="display: flex !important; align-items: center; justify-content: center; text-align: center; height: 250px;"
id="div-gpt-ad-leaderboard">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
tude.refreshAdsViaDivMappings([{
divId: 'div-gpt-ad-leaderboard',
baseDivId: 'pb-slot-mainpage-1'
}]);
});
</script>
</div>
</div>
</div>
</div>
<!-- START 3-column layout -->
<div class="js-Pjax">
<div id="main" class="container">
<div class="right-border">
<nav id="breadcrumb" role="navigation">
<ul class="menu">
<li><a href="/">Home</a></li>
<li><a
href="/news/">News</a>
</li>
<li class="current"><a
href="/news/politics/">Politics</a></li>
</ul>
</nav>
<div id="page-title-container">
<div
style="margin-bottom: -10px; background: #FFDF55; max-width: fit-content; font-size: 16px; margin-top: 20px; padding: 4px;"
>
This is more than 1 year old.
</div>
<h1 class="page-headline">
Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says
</h1>
</div>
</div>
<div class="two-column-grid">
<style>
.author-follow-widget {
display: inline-flex;
align-items: center;
gap: 10px;
}
.author-follow-widget--stacked {
align-items: flex-start;
flex-direction: column;
gap: 8px;
}
.author-follow-button {
appearance: none;
border: 1px solid #a9091f;
background: #ffffff;
color: #a9091f;
border-radius: 999px;
padding: 8px 14px;
font: 700 13px/1 Arial, Helvetica, sans-serif;
cursor: pointer;
transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}
.author-follow-hint {
color: #6a6a6a;
font: 400 13px/1.5 Arial, Helvetica, sans-serif;
}
.author-follow-inline-manage-link {
color: #a9091f;
font: 700 12px/1.4 Arial, Helvetica, sans-serif;
text-decoration: none;
}
.author-follow-inline-manage-link:hover,
.author-follow-inline-manage-link:focus {
text-decoration: underline;
}
.author-follow-button:hover,
.author-follow-button:focus {
background: #a9091f;
color: #ffffff;
}
.author-follow-button.is-following {
background: #a9091f;
color: #ffffff;
}
.author-follow-button.is-loading,
.author-follow-button:disabled {
opacity: 0.7;
cursor: wait;
}
.author-follow-button.is-auth-required {
border-color: #103865;
color: #103865;
}
.author-follow-button.is-auth-required:hover,
.author-follow-button.is-auth-required:focus {
background: #103865;
color: #ffffff;
}
.author-follow-actions {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 12px;
margin: 18px 0 24px;
}
.author-follow-actions__label {
color: #555555;
font: 700 13px/1.4 Arial, Helvetica, sans-serif;
letter-spacing: 0.02em;
text-transform: uppercase;
}
.author-follow-actions--staff {
margin: 18px 0 0;
}
.author-contact-section {
margin: 28px 0 24px;
}
.author-contact-section__heading {
margin: 0 0 14px;
color: #111111;
font: 700 28px/1.15 Georgia, "Times New Roman", serif;
}
.author-contact-grid {
display: grid;
gap: 16px;
}
.author-contact-card {
display: flex;
flex-direction: column;
gap: 18px;
padding: 20px 22px;
border: 1px solid #d9d9d9;
border-radius: 0;
background: #f8f7f5;
box-shadow: none;
}
.author-contact-card__meta {
min-width: 0;
width: 100%;
}
.author-contact-card__identity {
display: flex;
align-items: center;
gap: 22px;
}
.author-contact-card__image {
flex: 0 0 160px;
max-width: 160px;
}
.author-contact-card__rail {
display: flex;
flex: 0 0 190px;
flex-direction: column;
gap: 14px;
}
.author-contact-card__image img {
display: block;
width: 100%;
height: auto;
border-radius: 0;
}
.author-contact-card__image--story {
flex: 0 0 108px;
max-width: 108px;
}
.author-contact-card__eyebrow {
display: inline-block;
margin-bottom: 10px;
color: #a9091f;
font: 700 12px/1 Arial, Helvetica, sans-serif;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.author-contact-card__name {
margin: 0 0 6px;
color: #111111;
font: 700 30px/1.05 Georgia, "Times New Roman", serif;
}
.author-contact-card__title {
margin: 0 0 10px;
color: #666666;
font: 600 12px/1.35 Arial, Helvetica, sans-serif;
letter-spacing: 0.18em;
text-transform: uppercase;
}
.author-contact-card__contact {
margin: 0;
color: #666666;
font: 400 14px/1.45 Arial, Helvetica, sans-serif;
}
.author-contact-card__contact a {
color: #666666;
font-weight: 400;
text-decoration: none;
}
.author-contact-card__contact a:hover,
.author-contact-card__contact a:focus {
text-decoration: underline;
}
.author-contact-card__bio {
margin-top: 14px;
color: #333333;
font: 400 16px/1.7 Georgia, "Times New Roman", serif;
}
.author-contact-card__links {
margin: 10px 0 0;
}
.author-contact-card__links a {
color: #111111;
font: 700 12px/1.4 Arial, Helvetica, sans-serif;
letter-spacing: 0.12em;
text-transform: uppercase;
text-decoration: none;
}
.author-contact-card__links a:hover,
.author-contact-card__links a:focus {
text-decoration: underline;
}
.author-contact-card__bio > *:first-child {
margin-top: 0;
}
.author-contact-card__bio > *:last-child {
margin-bottom: 0;
}
.author-contact-card__follow {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 8px;
width: 100%;
padding: 14px 16px;
border: 1px solid #dfdfdf;
border-radius: 0;
background: #efefed;
}
.author-contact-card__follow-label {
display: block;
margin: 0;
color: #111111;
text-align: left;
font: 700 12px/1.3 Arial, Helvetica, sans-serif;
letter-spacing: 0.18em;
text-transform: uppercase;
}
.author-contact-card__follow .author-follow-widget {
align-items: flex-start;
flex-direction: column;
justify-content: flex-start;
}
.author-contact-card__follow .author-follow-hint {
max-width: none;
text-align: left;
font-size: 12px;
line-height: 1.45;
}
.author-contact-card__follow .author-follow-inline-manage-link {
margin-top: 2px;
letter-spacing: 0.02em;
}
.author-contact-card__follow .author-follow-button {
min-width: 0;
border-color: #a9091f;
color: #a9091f;
border-radius: 0;
padding: 11px 16px;
font: 700 12px/1 Arial, Helvetica, sans-serif;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.author-contact-card__follow .author-follow-button:hover,
.author-contact-card__follow .author-follow-button:focus,
.author-contact-card__follow .author-follow-button.is-following {
background: #a9091f;
border-color: #a9091f;
color: #ffffff;
}
.author-follow-manage-card {
margin-top: 26px;
padding: 20px 22px;
border: 1px solid #dddddd;
border-radius: 10px;
background: #ffffff;
}
.author-follow-manage-card h2 {
margin: 0 0 10px;
color: #111111;
font: 700 26px/1.2 Georgia, "Times New Roman", serif;
}
.author-follow-manage-card p {
margin: 0;
color: #555555;
font: 400 16px/1.6 Arial, Helvetica, sans-serif;
}
.author-follow-manage-link {
color: #a9091f;
font-weight: 700;
text-decoration: none;
}
.author-follow-manage-list {
margin-top: 26px;
}
.author-follow-manage-preferences {
display: grid;
gap: 14px;
margin-top: 24px;
padding: 20px 22px;
border: 1px solid #e5e5e5;
border-radius: 12px;
background: #faf7f4;
}
.author-follow-manage-preferences__heading {
margin: 0;
color: #111111;
font: 700 22px/1.2 Georgia, "Times New Roman", serif;
}
.author-follow-manage-preferences__copy {
margin: 0;
color: #555555;
font: 400 15px/1.6 Arial, Helvetica, sans-serif;
}
.author-follow-manage-preferences__options {
display: flex;
flex-wrap: wrap;
gap: 12px 24px;
}
.author-follow-manage-preferences__option {
display: inline-flex;
align-items: center;
gap: 10px;
color: #333333;
font: 700 14px/1.4 Arial, Helvetica, sans-serif;
}
.author-follow-manage-preferences__option input {
width: 16px;
height: 16px;
accent-color: #a9091f;
}
.author-follow-manage-list__item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 18px 0;
border-top: 1px solid #e5e5e5;
}
.author-follow-manage-list__item:first-child {
border-top: 0;
padding-top: 0;
}
.author-follow-manage-list__meta {
min-width: 0;
}
.author-follow-manage-list__name {
display: inline-block;
margin-bottom: 6px;
color: #111111;
font: 700 22px/1.25 Georgia, "Times New Roman", serif;
text-decoration: none;
}
.author-follow-manage-list__title {
color: #555555;
font: 400 15px/1.5 Arial, Helvetica, sans-serif;
}
.author-follow-manage-empty,
.author-follow-manage-signin {
margin-top: 18px;
color: #444444;
font: 400 17px/1.6 Arial, Helvetica, sans-serif;
}
.author-follow-manage-signin a {
color: #a9091f;
font-weight: 700;
text-decoration: none;
}
.author-contact-card--story {
display: grid;
grid-template-columns: minmax(0, 1fr) 250px;
align-items: center;
gap: 18px;
}
.author-contact-card--story .author-contact-card__meta {
min-width: 0;
}
.author-contact-card--story .author-contact-card__follow {
align-self: stretch;
justify-content: center;
min-height: 100%;
}
@media (max-width: 767px) {
.author-follow-actions {
align-items: stretch;
flex-direction: column;
}
.author-contact-card {
gap: 22px;
padding: 22px;
}
.author-contact-card--story {
grid-template-columns: 1fr;
}
.author-contact-card__identity {
flex-direction: column;
align-items: flex-start;
}
.author-contact-card__rail {
flex-basis: auto;
width: 100%;
}
.author-contact-card__image {
max-width: 220px;
}
.author-contact-card__follow {
width: 100%;
}
.author-contact-card__follow .author-follow-widget {
justify-content: flex-start;
}
.author-contact-card__follow .author-follow-hint {
max-width: none;
}
.author-contact-card__name {
font-size: 26px;
}
.author-contact-card__title {
font-size: 12px;
letter-spacing: 0.12em;
}
.author-contact-card__image--story {
display: none;
}
.author-follow-manage-list__item {
align-items: flex-start;
flex-direction: column;
}
}
</style>
<script>
(function () {
function escapeHtml(value) {
return String(value || '')
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
if (!window.WTAuthorFollow) {
const apiBaseUrl = '/api/v1/account/me/followed-authors';
const deliveryPreferencesStorageKey = 'wt-author-follow-delivery-preferences';
const FETCH_MIN_INTERVAL_MS = 60000;
let followedAuthorsMap = new Map();
let fetchPromise = null;
let fetchPromiseTokenKey = '';
let lastFetchTimestamp = 0;
let lastFetchTokenKey = '';
let loginPoll = null;
let pianoInitBound = false;
let pianoReadyPoll = null;
let managePreferencesPending = false;
let followDeliveryPreferences = {
push_enabled: true,
email_fallback_enabled: true,
};
function hasFollowWidgets(scope) {
const root = scope || document;
return !!(
root.querySelector('[data-author-follow-widget]') ||
root.querySelector('[data-author-follow-manage-list]') ||
root.querySelector('[data-author-follow-manage-preferences]')
);
}
function currentTokenKey() {
const token = (typeof readCachedToken === 'function' && readCachedToken()) || '';
if (!token) {
return '';
}
// The token can be very long; the tail is enough to detect identity change.
return token.length > 32 ? token.slice(-32) : token;
}
function resetFollowCache() {
followedAuthorsMap = new Map();
lastFetchTimestamp = 0;
lastFetchTokenKey = '';
}
function discardCacheIfTokenChanged() {
// Returns the current token key. If the identity has changed since the
// last successful fetch, the cached map/timestamps are wiped here so
// downstream renderers don't briefly display the previous user's data.
const tokenKey = currentTokenKey();
if (tokenKey !== lastFetchTokenKey) {
resetFollowCache();
}
return tokenKey;
}
function loadStoredFollowDeliveryPreferences() {
try {
const rawValue = window.localStorage.getItem(deliveryPreferencesStorageKey);
if (!rawValue) {
return null;
}
const parsedValue = JSON.parse(rawValue);
if (
parsedValue &&
typeof parsedValue.push_enabled === 'boolean' &&
typeof parsedValue.email_fallback_enabled === 'boolean'
) {
return parsedValue;
}
} catch (error) {
console.warn('Unable to read stored follow delivery preferences.', error);
}
return null;
}
function saveStoredFollowDeliveryPreferences(preferences) {
followDeliveryPreferences = {
push_enabled: !!preferences.push_enabled,
email_fallback_enabled: !!preferences.email_fallback_enabled,
};
try {
window.localStorage.setItem(
deliveryPreferencesStorageKey,
JSON.stringify(followDeliveryPreferences),
);
} catch (error) {
console.warn('Unable to store follow delivery preferences.', error);
}
}
function getPushlyFollowedAuthorIds() {
return Array.from(followedAuthorsMap.values())
.map(function (author) {
return author && author.id !== undefined && author.id !== null
? String(author.id).trim()
: '';
})
.filter(Boolean)
.sort();
}
function runPushlyProfileUpdate(method, payload) {
if (typeof window.pushly !== 'function') {
return;
}
if (!window.tp || !tp.pianoId || typeof tp.pianoId.getUser !== 'function') {
return;
}
const user = tp.pianoId.getUser();
const pianoUid = user && user.uid ? String(user.uid).trim() : '';
if (!pianoUid) {
return;
}
pushly('on_ready', function () {
pushly('external_id', pianoUid);
pushly(method, payload);
});
}
function syncPushlyFollowedAuthorsProfile() {
runPushlyProfileUpdate('profile', {
followed_author_ids: getPushlyFollowedAuthorIds(),
});
}
function appendPushlyFollowedAuthorId(staffId) {
const value = staffId !== undefined && staffId !== null ? String(staffId).trim() : '';
if (!value) {
return;
}
runPushlyProfileUpdate('profile_append', {
followed_author_ids: [value],
});
}
function removePushlyFollowedAuthorId(staffId) {
const value = staffId !== undefined && staffId !== null ? String(staffId).trim() : '';
if (!value) {
return;
}
runPushlyProfileUpdate('profile_remove', {
followed_author_ids: [value],
});
}
function deriveFollowDeliveryPreferences(authors) {
if (!authors.length) {
return loadStoredFollowDeliveryPreferences() || {
push_enabled: true,
email_fallback_enabled: true,
};
}
return {
push_enabled: authors.every(function (author) {
return !!author.push_enabled;
}),
email_fallback_enabled: authors.every(function (author) {
return !!author.email_fallback_enabled;
}),
};
}
function isPianoReady() {
return !!(window.tp && tp.pianoId && typeof tp.pianoId.isUserValid === 'function');
}
function isPianoIdentityReady() {
return isPianoReady();
}
function isLoggedIn() {
return isPianoIdentityReady() && tp.pianoId.isUserValid();
}
function readCachedToken() {
return window.WTPianoUserToken || null;
}
function whenPianoReady(callback) {
if (!window.tp || typeof tp.push !== 'function') {
return false;
}
tp.push(['init', function () {
callback();
}]);
return true;
}
function getBearerToken() {
const cachedToken = readCachedToken();
if (cachedToken) {
return cachedToken;
}
if (!isPianoReady()) {
return null;
}
try {
if (typeof tp.pianoId.getUserToken === 'function') {
const token = tp.pianoId.getUserToken();
if (token) {
window.WTPianoUserToken = token;
return token;
}
}
if (typeof tp.pianoId.getToken === 'function') {
const fallbackToken = tp.pianoId.getToken();
if (fallbackToken) {
window.WTPianoUserToken = fallbackToken;
return fallbackToken;
}
}
const user = typeof tp.pianoId.getUser === 'function' ? tp.pianoId.getUser() : null;
if (user && user.idToken) {
window.WTPianoUserToken = user.idToken;
return user.idToken;
}
} catch (error) {
console.warn('Unable to read Piano user token.', error);
return null;
}
return null;
}
async function apiRequest(url, options) {
const token = getBearerToken();
if (!token) {
const authError = new Error('AUTH_REQUIRED');
authError.code = 'AUTH_REQUIRED';
throw authError;
}
// Capture the identity this request is being issued for; used to
// decide whether a late 401/403 response should clear global state.
const issuedTokenKey = currentTokenKey();
const response = await fetch(url, {
method: 'GET',
credentials: 'same-origin',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
Authorization: 'Bearer ' + token,
},
...options,
});
if (!response.ok) {
const body = await response.text();
const requestError = new Error(body || ('Request failed with status ' + response.status));
requestError.status = response.status;
requestError.issuedTokenKey = issuedTokenKey;
if (response.status === 401 || response.status === 403) {
requestError.code = 'AUTH_REQUIRED';
// Only invalidate global auth state if the identity that issued this
// request is still the active one. Otherwise we'd disrupt a newer
// user's session because of a stale response from the previous user.
if (currentTokenKey() === issuedTokenKey) {
window.WTPianoUserToken = null;
resetFollowCache();
}
}
throw requestError;
}
if (response.status === 204) {
return null;
}
return response.json();
}
async function loadFollowedAuthors(forceRefresh) {
const tokenKey = discardCacheIfTokenChanged();
// Only reuse an in-flight fetch when it was started for the same identity.
// Otherwise the resolving callback below would write user A's data into the
// map after the session has switched to user B.
if (fetchPromise && fetchPromiseTokenKey === tokenKey) {
return fetchPromise;
}
if (
!forceRefresh &&
lastFetchTimestamp &&
tokenKey &&
tokenKey === lastFetchTokenKey &&
Date.now() - lastFetchTimestamp < FETCH_MIN_INTERVAL_MS
) {
return followedAuthorsMap;
}
fetchPromiseTokenKey = tokenKey;
fetchPromise = apiRequest(apiBaseUrl, { method: 'GET' })
.then(function (data) {
// If the identity changed while this request was in flight,
// discard the response — it belongs to a previous user.
if (currentTokenKey() !== tokenKey) {
return followedAuthorsMap;
}
followedAuthorsMap = new Map(
(data || []).map(function (item) {
return [String(item.id), item];
}),
);
lastFetchTimestamp = Date.now();
lastFetchTokenKey = tokenKey;
saveStoredFollowDeliveryPreferences(deriveFollowDeliveryPreferences(data || []));
syncPushlyFollowedAuthorsProfile();
return followedAuthorsMap;
})
.finally(function () {
fetchPromise = null;
fetchPromiseTokenKey = '';
});
return fetchPromise;
}
async function updateFollowPreferences(staffId, payload) {
const author = await apiRequest(apiBaseUrl + '/' + staffId, {
method: 'PUT',
body: JSON.stringify(payload),
});
followedAuthorsMap.set(String(staffId), author);
return author;
}
function renderManagePreferences(container) {
if (!container) {
return;
}
const hasToken = !!getBearerToken();
if (!isPianoIdentityReady() && !hasToken) {
container.innerHTML = '';
return;
}
if (!hasToken) {
container.innerHTML = '';
return;
}
const followedAuthors = Array.from(followedAuthorsMap.values());
if (!followedAuthors.length) {
container.innerHTML = '';
return;
}
container.innerHTML = (
'<div class="author-follow-manage-preferences">' +
'<h3 class="author-follow-manage-preferences__heading">Delivery Preferences</h3>' +
'<p class="author-follow-manage-preferences__copy">These settings apply to every author you follow.</p>' +
'<div class="author-follow-manage-preferences__options">' +
'<label class="author-follow-manage-preferences__option">' +
'<input type="checkbox" data-author-follow-global-pref="push" ' +
(followDeliveryPreferences.push_enabled ? 'checked ' : '') +
(managePreferencesPending ? 'disabled ' : '') +
'/>' +
'<span>Push notification</span>' +
'</label>' +
'<label class="author-follow-manage-preferences__option">' +
'<input type="checkbox" data-author-follow-global-pref="email" ' +
(followDeliveryPreferences.email_fallback_enabled ? 'checked ' : '') +
(managePreferencesPending ? 'disabled ' : '') +
'/>' +
'<span>Email</span>' +
'</label>' +
'</div>' +
'</div>'
);
}
function setButtonState(button, state) {
const hint = button.parentElement && button.parentElement.querySelector('[data-author-follow-hint]');
const followLabel = button.dataset.followLabel || 'Follow';
const followingLabel = button.dataset.followingLabel || 'Following';
const registerLabel = button.dataset.registerLabel || 'Register to follow';
const loadingLabel = button.dataset.loadingLabel || 'Saving...';
const pendingAuthLabel = button.dataset.pendingAuthLabel || 'Loading...';
button.classList.remove('is-following', 'is-loading', 'is-auth-required');
if (state === 'loading') {
button.classList.add('is-loading');
button.disabled = true;
button.textContent = loadingLabel;
if (hint) {
hint.textContent = 'Updating your followed authors...';
}
return;
}
if (state === 'pending-auth') {
button.classList.add('is-loading');
button.disabled = true;
button.textContent = pendingAuthLabel;
if (hint) {
hint.textContent = 'Checking your sign-in status...';
}
return;
}
button.disabled = false;
if (state === 'following') {
button.classList.add('is-following');
button.textContent = followingLabel;
if (hint) {
hint.textContent = followingLabel === 'Unfollow'
? 'Remove this writer from your followed list.'
: 'Click again to unfollow.';
}
return;
}
if (state === 'signin') {
button.classList.add('is-auth-required');
button.textContent = registerLabel;
if (hint) {
hint.textContent = 'Register to follow writers and manage your list.';
}
return;
}
button.textContent = followLabel;
if (hint) {
hint.textContent = 'Click to follow.';
}
}
function renderWidgets(scope) {
const root = scope || document;
root.querySelectorAll('[data-author-follow-widget]').forEach(function (widget) {
const button = widget.querySelector('[data-author-follow-button]');
if (!button) {
return;
}
const staffId = widget.dataset.staffId;
const hasToken = !!getBearerToken();
if (!isPianoIdentityReady() && !hasToken) {
setButtonState(button, 'pending-auth');
return;
}
if (!hasToken) {
setButtonState(button, 'signin');
return;
}
if (followedAuthorsMap.has(String(staffId))) {
setButtonState(button, 'following');
} else {
setButtonState(button, 'follow');
}
});
}
function renderManageList(container) {
if (!container) {
return;
}
const hasToken = !!getBearerToken();
if (!isPianoIdentityReady() && !hasToken) {
container.innerHTML = (
'<p class="author-follow-manage-signin">Checking your account status...</p>'
);
return;
}
if (!hasToken) {
container.innerHTML = (
'<p class="author-follow-manage-signin">Sign in to load the authors you follow. ' +
'<a href="javascript:showPianoLogin()">Sign in</a></p>'
);
return;
}
const followedAuthors = Array.from(followedAuthorsMap.values());
if (!followedAuthors.length) {
container.innerHTML = (
'<p class="author-follow-manage-empty">You are not following any authors yet. ' +
'Use the follow buttons on stories or staff pages to build your list.</p>'
);
return;
}
container.innerHTML = followedAuthors
.map(function (author) {
return (
'<div class="author-follow-manage-list__item">' +
'<div class="author-follow-manage-list__meta">' +
'<a class="author-follow-manage-list__name" href="/staff/' + escapeHtml(author.slug || '') + '/">' +
escapeHtml(author.first_name + ' ' + author.last_name) +
'</a>' +
'</div>' +
'<div class="author-follow-widget author-follow-widget--stacked" data-author-follow-widget data-staff-id="' + escapeHtml(author.id) + '">' +
'<button type="button" class="author-follow-button" data-author-follow-button data-following-label="Unfollow">Unfollow</button>' +
'<span class="author-follow-hint" data-author-follow-hint>Remove this writer from your followed list.</span>' +
'</div>' +
'</div>'
);
})
.join('');
bindEvents(container);
renderWidgets(container);
}
async function refresh(scope, options) {
const forceFetch = !!(options && options.force);
if (!hasFollowWidgets(scope)) {
return;
}
// Wipe the cached map BEFORE the first render so a user-switch can't
// momentarily display the previous user's "Following" state.
discardCacheIfTokenChanged();
renderWidgets(scope);
const manageContainer = document.querySelector('[data-author-follow-manage-list]');
const managePreferencesContainer = document.querySelector('[data-author-follow-manage-preferences]');
const hasToken = !!getBearerToken();
if (!isPianoIdentityReady() && !hasToken) {
renderWidgets(scope);
renderManagePreferences(managePreferencesContainer);
renderManageList(manageContainer);
return;
}
if (!hasToken) {
renderManagePreferences(managePreferencesContainer);
renderManageList(manageContainer);
return;
}
try {
await loadFollowedAuthors(forceFetch);
renderWidgets(scope);
renderManagePreferences(managePreferencesContainer);
renderManageList(manageContainer);
} catch (error) {
console.warn('Unable to load followed authors.', error);
if (error && error.code === 'AUTH_REQUIRED') {
renderWidgets(scope);
renderManagePreferences(managePreferencesContainer);
renderManageList(manageContainer);
}
}
}
function startLoginPoll() {
if (loginPoll) {
clearInterval(loginPoll);
}
let attempts = 0;
loginPoll = setInterval(function () {
attempts += 1;
if (getBearerToken() || isLoggedIn() || attempts > 25) {
clearInterval(loginPoll);
loginPoll = null;
refresh(document, { force: true });
}
}, 1000);
}
function stopPianoReadyPoll() {
if (pianoReadyPoll) {
clearInterval(pianoReadyPoll);
pianoReadyPoll = null;
}
}
function startPianoReadyPoll() {
stopPianoReadyPoll();
let attempts = 0;
pianoReadyPoll = setInterval(function () {
attempts += 1;
if (isPianoIdentityReady() || getBearerToken() || attempts > 40) {
stopPianoReadyPoll();
// Non-forced: if bindPianoInitRefresh already fetched, the TTL
// dedupes this call. If it lost the race, this call wins.
refresh(document);
}
}, 500);
}
function bindPianoInitRefresh() {
if (pianoInitBound) {
return;
}
pianoInitBound = whenPianoReady(function () {
// The Piano init callback is the canonical "identity is ready" signal;
// cancel the fallback poll so it can't issue a redundant second fetch.
stopPianoReadyPoll();
refresh(document, { force: true });
});
}
async function handleWidgetClick(widget, button) {
const staffId = widget.dataset.staffId;
if (!getBearerToken()) {
setButtonState(button, isPianoIdentityReady() ? 'signin' : 'pending-auth');
if (typeof window.showPianoRegister === 'function') {
window.showPianoRegister('author_follow_prompt');
startLoginPoll();
}
return;
}
// If the identity changed since the cache was last filled, drop the stale
// map before the follow/unfollow decision below — otherwise the click
// could issue the wrong action against the previous user's state.
discardCacheIfTokenChanged();
setButtonState(button, 'loading');
try {
if (followedAuthorsMap.has(String(staffId))) {
await apiRequest(apiBaseUrl + '/' + staffId, { method: 'DELETE' });
followedAuthorsMap.delete(String(staffId));
removePushlyFollowedAuthorId(staffId);
} else {
const author = await apiRequest(apiBaseUrl + '/' + staffId, {
method: 'PUT',
body: JSON.stringify({
push_enabled: followDeliveryPreferences.push_enabled,
email_fallback_enabled: followDeliveryPreferences.email_fallback_enabled,
}),
});
followedAuthorsMap.set(String(staffId), author);
appendPushlyFollowedAuthorId(staffId);
}
saveStoredFollowDeliveryPreferences(
deriveFollowDeliveryPreferences(Array.from(followedAuthorsMap.values())),
);
syncPushlyFollowedAuthorsProfile();
renderManagePreferences(document.querySelector('[data-author-follow-manage-preferences]'));
renderWidgets(document);
renderManageList(document.querySelector('[data-author-follow-manage-list]'));
} catch (error) {
console.warn('Unable to update followed author.', error);
if (error && error.code === 'AUTH_REQUIRED') {
setButtonState(button, 'signin');
}
renderWidgets(document);
}
}
function bindEvents(scope) {
const root = scope || document;
root.querySelectorAll('[data-author-follow-widget]').forEach(function (widget) {
if (widget.dataset.followWidgetBound === 'true') {
return;
}
widget.dataset.followWidgetBound = 'true';
const button = widget.querySelector('[data-author-follow-button]');
if (!button) {
return;
}
button.addEventListener('click', function () {
handleWidgetClick(widget, button);
});
});
root.querySelectorAll('[data-author-follow-manage-preferences]').forEach(function (container) {
if (container.dataset.followGlobalPreferencesBound === 'true') {
return;
}
container.dataset.followGlobalPreferencesBound = 'true';
async function handlePreferenceChange() {
const pushInput = container.querySelector('[data-author-follow-global-pref="push"]');
const emailInput = container.querySelector('[data-author-follow-global-pref="email"]');
if (!pushInput || !emailInput) {
return;
}
const previousPreferences = {
push_enabled: followDeliveryPreferences.push_enabled,
email_fallback_enabled: followDeliveryPreferences.email_fallback_enabled,
};
const payload = {
push_enabled: !!pushInput.checked,
email_fallback_enabled: !!emailInput.checked,
};
// Drop a stale map if the identity changed before iterating — we
// don't want to issue follow updates against the previous user's
// authors with the current user's bearer token.
discardCacheIfTokenChanged();
const followedAuthors = Array.from(followedAuthorsMap.values());
saveStoredFollowDeliveryPreferences(payload);
managePreferencesPending = true;
pushInput.disabled = true;
emailInput.disabled = true;
try {
await Promise.all(
followedAuthors.map(function (author) {
return updateFollowPreferences(author.id, payload);
}),
);
renderManagePreferences(container);
renderWidgets(document);
renderManageList(document.querySelector('[data-author-follow-manage-list]'));
} catch (error) {
console.warn('Unable to update author follow preferences.', error);
saveStoredFollowDeliveryPreferences(previousPreferences);
pushInput.checked = previousPreferences.push_enabled;
emailInput.checked = previousPreferences.email_fallback_enabled;
} finally {
managePreferencesPending = false;
pushInput.disabled = false;
emailInput.disabled = false;
}
}
container.addEventListener('change', function (event) {
const target = event.target;
if (!target || !target.matches('[data-author-follow-global-pref]')) {
return;
}
handlePreferenceChange();
});
});
}
function init(scope) {
const root = scope || document;
if (!hasFollowWidgets(root)) {
return;
}
bindEvents(root);
renderWidgets(root);
bindPianoInitRefresh();
startPianoReadyPoll();
refresh(root);
}
window.WTAuthorFollow = {
init: init,
refresh: refresh,
};
document.addEventListener('DOMContentLoaded', function () {
init(document);
});
window.addEventListener('focus', function () {
if (hasFollowWidgets(document)) {
refresh(document);
}
});
document.addEventListener('visibilitychange', function () {
if (!document.hidden && hasFollowWidgets(document)) {
refresh(document);
}
});
} else {
window.WTAuthorFollow.init(document);
}
})();
</script>
<section id="content" class="main-column">
<div class="equal-heights-column-inner">
<div class="content-inner">
<style>
.story-inline-embed {
clear: both;
margin: 28px auto;
width: 100%;
max-width: 100%;
color: #1c1c1c;
}
.story-inline-embed__header {
margin-bottom: 10px;
}
.story-inline-embed__eyebrow {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 5px 10px;
border-radius: 999px;
background: #f3f4f6;
color: #5b6572;
font: 700 11px/1 Arial, Helvetica, sans-serif;
letter-spacing: .08em;
text-transform: uppercase;
}
.story-inline-embed__frame {
overflow: hidden;
border: 1px solid #e2e4e8;
border-radius: 16px;
background: #fafafb;
box-shadow: 0 10px 30px rgba(17, 24, 39, 0.08);
}
.story-inline-embed__footer {
margin-top: 10px;
}
.story-inline-embed__link {
color: #1f4a73;
font: 700 13px/1.4 Arial, Helvetica, sans-serif;
text-decoration: none;
}
.story-inline-embed__link:hover,
.story-inline-embed__link:focus {
text-decoration: underline;
}
.story-inline-embed iframe {
display: block;
width: 100%;
border: 0;
background: #f4f4f4;
}
.story-inline-embed--twitter,
.story-inline-embed--instagram {
max-width: 560px;
}
.story-inline-embed--twitter .twitter-tweet,
.story-inline-embed--instagram .instagram-media {
margin: 0 auto !important;
}
.story-inline-embed--twitter .twitter-tweet {
min-width: 0 !important;
}
.story-inline-embed--instagram .instagram-media {
min-width: 0 !important;
width: 100% !important;
}
.story-inline-embed--youtube {
max-width: 885px;
}
.story-inline-embed--youtube iframe {
aspect-ratio: 16 / 9;
min-height: 315px;
}
.story-inline-embed--tiktok {
max-width: 360px;
}
.story-inline-embed--tiktok iframe {
aspect-ratio: 9 / 16;
min-height: 540px;
}
.story-inline-embed--facebook-reel {
max-width: 560px;
}
/* Legacy embeds created before a height was stored default to the browser's
150px iframe height. Treat only those dimensionless Reels as portrait. */
.story-inline-embed--facebook-reel iframe:not([height]) {
aspect-ratio: 9 / 16;
height: auto;
}
.story-inline-embed--audio .story-inline-embed__frame {
background: linear-gradient(180deg, #fbfbfc 0%, #f3f4f6 100%);
}
.story-inline-embed--libsyn .story-inline-embed__frame {
border-radius: 0;
}
.story-inline-embed--libsyn iframe,
.story-inline-embed--soundcloud iframe {
min-height: 192px;
}
.story-inline-embed--libsyn-episode iframe {
min-height: unset;
}
.story-inline-embed--spotify iframe {
min-height: 352px;
}
.story-inline-embed--spotify-show iframe {
min-height: 232px;
}
@media (max-width: 767px) {
.story-inline-embed {
margin: 20px auto;
}
.story-inline-embed__frame {
border-radius: 12px;
}
.story-inline-embed--libsyn .story-inline-embed__frame {
border-radius: 0;
}
.story-inline-embed--youtube iframe {
min-height: 220px;
}
.story-inline-embed--tiktok {
max-width: 100%;
}
.story-inline-embed--tiktok iframe {
min-height: 420px;
}
.story-inline-embed--spotify iframe {
min-height: 232px;
}
.story-inline-embed--libsyn iframe,
.story-inline-embed--soundcloud iframe {
min-height: 166px;
}
.story-inline-embed--libsyn-episode iframe {
min-height: unset;
}
}
</style>
<!-- //#ad-lead-mobile -->
<section class="full-article">
<article style="margin-bottom: 0;">
<div class="main-photo article-story-photo">
<section class="block more-from-story"
style="padding-bottom: 10px; margin-bottom: 0; border-bottom: 1px solid #ccc;">
<div class="block-content">
<figure class="photo-zoom">
<div class="photo"><a href="/multimedia/image/ap_federal_reserve_cook_black_leaders_36616jpg/"
alt="Board of Governors of the Federal Reserve member Lisa Cook, speaks during conversations with leaders from organizations that include nonprofits, small businesses, manufacturing, supply chain management, the hospitality industry, and the housing and education sectors at the Federal Reserve building, Sept. 23, 2022, in Washington. (AP Photo/Manuel Balce Ceneta) ** FILE **"
title="Board of Governors of the Federal Reserve member Lisa Cook, speaks during conversations with leaders from organizations that include nonprofits, small businesses, manufacturing, supply chain management, the hospitality industry, and the housing and education sectors at the Federal Reserve building, Sept. 23, 2022, in Washington. (AP Photo/Manuel Balce Ceneta) ** FILE **"
target="_blank"><img src="https://twt-thumbs.washtimes.com/media/image/2025/08/27/Federal_Reserve_Cook_Black_Leaders_36616_c0-238-5693-3557_s885x516.jpg?2335504e9ef2c1b5e5b3f91555df2953f12ce438" width="885" height="516" alt="Board of Governors of the Federal Reserve member Lisa Cook, speaks during conversations with leaders from organizations that include nonprofits, small businesses, manufacturing, supply chain management, the hospitality industry, and the housing and education sectors at the Federal Reserve building, Sept. 23, 2022, in Washington. (AP Photo/Manuel Balce Ceneta) ** FILE **" /><i
class="zoom"></i></a></div>
<figcaption class="source">
<span class="hide-on-mobile">
Board of Governors of the Federal Reserve member Lisa Cook, speaks during conversations with leaders from organizations that include nonprofits, small businesses, manufacturing, supply chain management, the hospitality industry, and the housing and education sectors at the Federal Reserve building, …
</span>
<span class="show-mobile-only-not-ad">
Board of Governors of the Federal …
</span>
<a
href="/multimedia/image/ap_federal_reserve_cook_black_leaders_36616jpg/" target="_blank">more ></a>
</figcaption>
</figure>
</div>
</section>
</div>
<script type="text/javascript">
var _informq = _informq || [];
_informq.push(['hook', 'Inform-Washington-Times-Player-1/videoLoad', function (event) {
}]);
</script>
<div class="article-text">
<div class="share-and-comments-wrap">
<div class="share-and-comments" id="share-app">
<div class="shareaholic-canvas" id="shareaholic-canvas-app">
<button class="back-button-dark" onclick="conditionalBack()">Back</button>
<a href="#" class="shareaholic-link is-app" data-deeplink="Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="5 5 40 40"><path d="M30.3 13.7L25 8.4l-5.3 5.3-1.4-1.4L25 5.6l6.7 6.7z"/><path d="M24 7h2v21h-2z"/><path d="M35 40H15c-1.7 0-3-1.3-3-3V19c0-1.7 1.3-3 3-3h7v2h-7c-.6 0-1 .4-1 1v18c0 .6.4 1 1 1h20c.6 0 1-.4 1-1V19c0-.6-.4-1-1-1h-7v-2h7c1.7 0 3 1.3 3 3v18c0 1.7-1.3 3-3 3z"/></svg>
</a>
</div>
</div>
<div class="share-and-comments has-height-on-desktop" id="share-web">
<div class="shareaholic-canvas" id="shareaholic-canvas-web">
<a
href="https://www.shareaholic.com/api/share/?v=1&apitype=1&apikey=1b4cd6dea80b282c132df03b8b3fd9ac&service=facebook&title=Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says&link=https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/%3Futm_campaign%3Dshareaholic%26utm_medium%3Dfacebook%26utm_source%3Dsocialnetwork&source=Shareaholic"
class="shareaholic-link"
id="facebook-share"
data-deeplink="fb://share?text=Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says&url=https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/"
target="_blank">
<svg xmlns="http://www.w3.org/2000/svg"
aria-label="Facebook" role="img"
viewBox="0 0 512 512"><rect
width="512" height="512"
rx="15%" fill="#1877f2"/>
<path d="M355.6 330l11.4-74h-71v-48c0-20.2 9.9-40 41.7-40H370v-63s-29.3-5-57.3-5c-58.5 0-96.7 35.4-96.7 99.6V256h-65v74h65v182h80V330h59.6z" fill="#fff"/>
</svg>
</a>
<a
href="https://www.shareaholic.com/api/share/?v=1&apitype=1&apikey=1b4cd6dea80b282c132df03b8b3fd9ac&service=twitter&title=Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says&link=https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/%3Futm_campaign%3Dshareaholic%26utm_medium%3Dtwitter%26utm_source%3Dsocialnetwork&source=Shareaholic&templates[twitter][body]=${title} - ${short_link} - @washtimes"
class="shareaholic-link"
id="twitter-share"
data-deeplink="https://twitter.com/intent/tweet?text=Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says&url=https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/"
target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 512 509.64">
<rect class="bg-fill-hover" width="512" height="512" rx="15%" fill="#000000"></rect>
<rect class="bg-fill" width="512" height="512" rx="15%"></rect>
<path fill="#fff" fill-rule="nonzero" d="M323.74 148.35h36.12l-78.91 90.2 92.83 122.73h-72.69l-56.93-74.43-65.15 74.43h-36.14l84.4-96.47-89.05-116.46h74.53l51.46 68.04 59.53-68.04zm-12.68 191.31h20.02l-129.2-170.82H180.4l130.66 170.82z"/>
</svg>
</a>
<a
href="https://www.shareaholic.com/api/share/?v=1&apitype=1&apikey=1b4cd6dea80b282c132df03b8b3fd9ac&service=truthsocial&title=Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says&link=https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/%3Futm_campaign%3Dshareaholic%26utm_medium%3Dtruth_link%26utm_source%3Dtruth&source=Shareaholic"
class="shareaholic-link"
id="truthsocial"
target="_blank">
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 144 144" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M140.401 45V13.5H53.1006V129.9H90.6006V45H140.401Z" fill="#5448EE"/>
<path d="M3 13.5H39V45H3V13.5Z" fill="#5448EE"/>
<path d="M104.399 98.3994H140.399V129.899H104.399V98.3994Z" fill="#2FEECC"/>
</svg>
</a>
<a
href="https://www.shareaholic.com/api/share/?v=1&apitype=1&apikey=1b4cd6dea80b282c132df03b8b3fd9ac&service=reddit&title=Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says&link=https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/%3Futm_campaign%3Dshareaholic%26utm_medium%3Dreddit%26utm_source%3Dnews&source=Shareaholic"
class="shareaholic-link"
id="reddit-share"
data-deeplink="reddit://submit?url=https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/"
target="_blank">
<svg xmlns="http://www.w3.org/2000/svg"
aria-label="Reddit" role="img"
viewBox="0 0 512 512"><rect
width="512" height="512"
rx="15%"
fill="#f40"/>
<g fill="#fff">
<ellipse cx="256" cy="307" rx="166" ry="117"/><circle cx="106" cy="256" r="42"/><circle cx="407" cy="256" r="42"/><circle cx="375" cy="114" r="32"/></g><g stroke-linecap="round" stroke-linejoin="round" fill="none"><path d="m256 196 23-101 73 15" stroke="#fff" stroke-width="16"/><path d="m191 359c33 25 97 26 130 0" stroke="#f40" stroke-width="13"/></g><g fill="#f40"><circle cx="191" cy="287" r="31"/><circle cx="321" cy="287" r="31"/></g>
</svg>
</a>
<a
href="https://www.shareaholic.com/api/share/?v=1&apitype=1&apikey=1b4cd6dea80b282c132df03b8b3fd9ac&service=copy_link&title=Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says&link=https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/%3Futm_campaign%3Dshareaholic%26utm_medium%3Dcopy_link%26utm_source%3Dbookmark&source=Shareaholic"
class="shareaholic-link"
id="copy-link"
target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<rect width="512" height="512" rx="76.8" ry="76.8" fill="#9ea7b3"/>
<path d="M293.405 42.618c24.688 0 45.016 18.666 47.642 42.655l37.62.01c25.405 0 46.2 19.738 47.889 44.715l.111 3.286v128c0 8.837-7.164 16-16 16-8.101 0-14.795-6.02-15.854-13.83l-.146-2.17v-128c0-8.1-6.02-14.794-13.829-15.854l-2.171-.146-45.477-.003c-8.607 12.784-23.214 21.194-39.785 21.194h-74.81c-16.571 0-31.178-8.41-39.785-21.194l-45.477.003c-8.1 0-14.794 6.02-15.854 13.829l-.146 2.17v288.099c0 8.1 6.02 14.795 13.829 15.854l4.342.292c7.81 1.06 13.829 7.754 13.829 15.854 0 8.837-7.163 16-16 16-25.405 0-46.2-19.737-47.889-44.713l-.111-3.287V133.284c0-25.405 19.737-46.2 44.714-47.89l3.286-.11 37.62-.011c2.626-23.99 22.954-42.655 47.642-42.655h74.81ZM368 309.284h21.333c44.183 0 80 35.818 80 80 0 42.758-33.543 77.68-75.684 79.889l-4.242.11-21.334.099c-8.836.04-16.032-7.09-16.073-15.926-.037-8.1 5.951-14.822 13.756-15.918l2.171-.156 21.406-.098c26.51 0 48-21.49 48-48 0-25.405-19.736-46.2-44.713-47.89l-3.287-.11H368c-8.837 0-16-7.163-16-16 0-8.1 6.019-14.794 13.829-15.854l2.171-.146Zm-106.667 0h21.334c8.836 0 16 7.164 16 16 0 8.1-6.02 14.795-13.829 15.854l-2.171.146h-21.334c-26.509 0-48 21.49-48 48 0 25.405 19.737 46.2 44.714 47.89l3.286.11h21.334c8.836 0 16 7.164 16 16 0 8.1-6.02 14.795-13.829 15.854l-2.171.146h-21.334c-44.182 0-80-35.817-80-80 0-42.757 33.544-77.68 75.752-79.89l4.248-.11Zm0 64h128c8.837 0 16 7.164 16 16 0 8.1-6.019 14.795-13.829 15.854l-2.171.146h-128c-8.836 0-16-7.163-16-16 0-8.1 6.02-14.794 13.829-15.854l2.171-.146Zm32.072-298.666h-74.81c-8.797 0-15.928 7.13-15.928 15.928s7.131 15.929 15.928 15.929h74.81c8.797 0 15.928-7.132 15.928-15.93s-7.131-15.927-15.928-15.927Z" fill="#fff"/>
</svg>
</a>
<a
href="https://www.shareaholic.com/api/share/?v=1&apitype=1&apikey=1b4cd6dea80b282c132df03b8b3fd9ac&service=mail&title=Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says&link=https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/%3Futm_campaign%3Dshareaholic%26utm_medium%3Demail_link%26utm_source%3Demail&source=Shareaholic"
class="shareaholic-link"
id="email-share">
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg id="Layer_1" style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512" width="512px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g>
<rect width="512" height="512" rx="76.8" ry="76.8" fill="#ededed"/>
<path d="M67,148.7c11,5.8,163.8,89.1,169.5,92.1c5.7,3,11.5,4.4,20.5,4.4c9,0,14.8-1.4,20.5-4.4c5.7-3,158.5-86.3,169.5-92.1 c4.1-2.1,11-5.9,12.5-10.2c2.6-7.6-0.2-10.5-11.3-10.5H257H65.8c-11.1,0-13.9,3-11.3,10.5C56,142.9,62.9,146.6,67,148.7z"/><path d="M455.7,153.2c-8.2,4.2-81.8,56.6-130.5,88.1l82.2,92.5c2,2,2.9,4.4,1.8,5.6c-1.2,1.1-3.8,0.5-5.9-1.4l-98.6-83.2 c-14.9,9.6-25.4,16.2-27.2,17.2c-7.7,3.9-13.1,4.4-20.5,4.4c-7.4,0-12.8-0.5-20.5-4.4c-1.9-1-12.3-7.6-27.2-17.2l-98.6,83.2 c-2,2-4.7,2.6-5.9,1.4c-1.2-1.1-0.3-3.6,1.7-5.6l82.1-92.5c-48.7-31.5-123.1-83.9-131.3-88.1c-8.8-4.5-9.3,0.8-9.3,4.9 c0,4.1,0,205,0,205c0,9.3,13.7,20.9,23.5,20.9H257h185.5c9.8,0,21.5-11.7,21.5-20.9c0,0,0-201,0-205 C464,153.9,464.6,148.7,455.7,153.2z"/></g></svg>
</a>
<a class="print-button desktop-only" href="javascript:window.print();">
<i class="fa fa-print" aria-hidden="true"></i>
Print
</a>
</div>
</div>
</div>
<div>
<a href="https://google.com/preferences/source?q=https://www.washingtontimes.com"
style="
display:inline-flex;
align-items:center;
gap:8px;
padding:2px;
border:1px solid #dadce0;
background-color:#ffffff;
font-family:Arial, Helvetica, sans-serif;
font-size:13px;
color:#3c4043;
text-decoration:none;
box-shadow:0 1px 2px rgba(0,0,0,0.06);
margin-bottom: 2px;
" target="_blank">
<img src="https://www.washingtontimes.com/static/icons/google/g.webp"
alt="Google"
style="width:18px;height:18px;display:block;">
<span>Add us as a preferred source on Google</span>
</a>
</div>
<div class="meta will-stack-on-mobile">
<span class="byline"> By <a href="https://www.washingtontimes.com/staff/tom-howell-jr/">Tom Howell Jr.</a> </span>
<span class="source">
<span class="sometimes-dash">-</span>
The Washington Times
<span class="sometimes-dash">-</span>
<span class="meta-date">
Wednesday, August 27, 2025
</span>
</span>
</div>
<div class="summary" id="font-resizer">
<div class="storyareawrapper">
<div class="bigtext">
<p>A top White House official said Wednesday that mortgage-fraud accusations against Fed Governor <a href="/topics/lisa-cook/">Lisa Cook</a> are “serious” and she should vacate her position instead of waiting for a court decision on President Trump’s attempt to fire her.</p>
<p><a href="/topics/kevin-hassett/">Kevin Hassett</a>, the director of the White House National Economic Council, said Mr. Trump “absolutely” has the authority to fire a Fed governor as Ms. Cook pledges to file suit against the president.</p>
<div class="piano-newsletter-inline-in-article"></div>
<p>“I think the accusations are serious, and I look forward to seeing the outcome,” Mr. Hassett told reporters at the White House.</p>
<div class="jamx-inline-player">
<p class="jamx-inline-player__label">People were interested in these podcasts</p>
<jamx-player seller="5014" subseller="3511"
domain="washingtontimes.com" layout="0"
width="100%" hide_slogan fab_persist></jamx-player>
<script src="https://wgt.podcastswaves.com/jamx.player.js"></script>
</div>
<p>Mr. Trump moved to fire Ms. Cook late Monday, saying he could no longer trust her with monetary policy amid claims she cited separate properties in 2021 as her primary residences.</p>
<p>Mr. Hassett said Ms. Cook lacks an explanation, so she should take leave from the Fed during the looming legal fight over whether Mr. Trump can fire her.</p>
<div>
<script id="de69c2a7bad84911993503dd48b61038">(new Image()).src = 'https://capi.elements.video/tr/si?token=3feb3f71-1406-496c-a547-166f5d76de2e&cid=1ffe7fff-eb53-11e9-b4d2-06948452ae1a'; cnxel.cmd.push(function() { cnxel({ playerId: "3feb3f71-1406-496c-a547-166f5d76de2e" }).render("de69c2a7bad84911993503dd48b61038"); });</script>
</div>
<p>“The fact that she is not doing that suggests that she is partisan and is trying to make a partisan stance, which is contrary to the independence of the Fed,” Mr. Hassett said.</p>
<p>Ms. Cook is the first Black woman to sit on the Fed’s Board of Governors. President Biden nominated her to the board in 2022.</p>
<aside>
<div class="piano-in-article-reco" style="min-height: 170px">
<div class="article-toplinks"></div>
</div>
</aside>
<p>Her removal and replacement, alongside confirmation of a pending governor nominee, would give the White House a Trump-appointed majority on the Fed board as the White House seeks lower interest rates from central bankers.</p>
<div class="twt-content-only-hide inline-article-ad" style="padding-top: 1.6em">
<div class="advertisement-treatment twt-content-only-hide hide-on-mobile">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
id="Desktop_InFeed1_Articles_300x250_1">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
tude.refreshAdsViaDivMappings([{
divId: 'Desktop_InFeed1_Articles_300x250_1',
baseDivId: 'pb-slot-infeed1-articles-1'
}]);
});
</script>
</div>
</div>
<div class="advertisement-treatment twt-content-only-hide show-mobile-only">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
id="mobile-ad-6">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
// Only initialize mobile-only ad slots on mobile devices (viewport < 800px)
const isMobile = (window.innerWidth || document.documentElement.clientWidth) < 800;
if (isMobile) {
tude.refreshAdsViaDivMappings([{
divId: 'mobile-ad-6',
baseDivId: 'pb-slot-mobile-ad-0'
}]);
}
});
</script>
</div>
</div>
</div>
<p>Mr. Trump pointed to laws that say a president can fire a Fed governor “for cause,” though what that means is up to interpretation.</p>
<p>“<a href="/topics/lisa-cook/">Lisa Cook</a> has indicated through her personal attorney that she will promptly challenge this action in court and seek a judicial decision that would confirm her ability to continue to fulfill her responsibilities as a Senate-confirmed member of the Board of Governors of the Federal Reserve System,” the Fed said in a statement. “As always, the Federal Reserve will abide by any court decision.”</p>
<p>The president is firing Ms. Cook over claims that she signed 2021 documents listing a Michigan property as her intended primary residence and then, shortly later, listed a Georgia property as her primary residence.</p>
<p>Trump officials said the maneuver would have let her get favorable loan terms. The Georgia property was later listed for rent.</p>
<p>The Trump administration says the situation appears to be open and shut, so Ms. Cook should explain herself fully.</p>
<div class="twt-content-only-hide inline-article-ad" style="padding-top: 1.6em">
<div class="advertisement-treatment twt-content-only-hide hide-on-mobile">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
id="Desktop_InFeed1_Articles_300x250_2">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
tude.refreshAdsViaDivMappings([{
divId: 'Desktop_InFeed1_Articles_300x250_2',
baseDivId: 'pb-slot-infeed1-articles-2'
}]);
});
</script>
</div>
</div>
<div class="advertisement-treatment twt-content-only-hide show-mobile-only">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
id="mobile-ad-7">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
// Only initialize mobile-only ad slots on mobile devices (viewport < 800px)
const isMobile = (window.innerWidth || document.documentElement.clientWidth) < 800;
if (isMobile) {
tude.refreshAdsViaDivMappings([{
divId: 'mobile-ad-7',
baseDivId: 'pb-slot-mobile-ad-0'
}]);
}
});
</script>
</div>
</div>
</div>
<p>Mr. Hassett on Wednesday said the Justice Department is investigating the matter.</p>
<p>The fight could have wide ramifications. Some economists and investors will get skittish if they think the Fed loses its independence and follows political dictates instead of the economic data.</p>
<p>“Congress, through the Federal Reserve Act, directs that governors serve in long, fixed terms and may be removed by the president only ’for cause,’” the Fed said. “Long tenures and removal protections for governors serve as a vital safeguard, ensuring that monetary policy decisions are based on data, economic analysis, and the long-term interests of the American people.”</p>
<a name="pagebreak"></a>
<p>The central bank added, “The Federal Reserve will continue to carry out its duties as established by law.”</p>
<div class="twt-content-only-hide inline-article-ad" style="padding-top: 1.6em">
<div class="advertisement-treatment twt-content-only-hide hide-on-mobile">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
id="Desktop_InFeed1_Articles_300x250_3">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
tude.refreshAdsViaDivMappings([{
divId: 'Desktop_InFeed1_Articles_300x250_3',
baseDivId: 'pb-slot-infeed1-articles-3'
}]);
});
</script>
</div>
</div>
<div class="advertisement-treatment twt-content-only-hide show-mobile-only">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
id="mobile-ad-8">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
// Only initialize mobile-only ad slots on mobile devices (viewport < 800px)
const isMobile = (window.innerWidth || document.documentElement.clientWidth) < 800;
if (isMobile) {
tude.refreshAdsViaDivMappings([{
divId: 'mobile-ad-8',
baseDivId: 'pb-slot-mobile-ad-0'
}]);
}
});
</script>
</div>
</div>
</div>
<section class="author-contact-section">
<h2 class="author-contact-section__heading">Contact the author</h2>
<div class="author-contact-grid">
<article class="author-contact-card author-contact-card--story">
<div class="author-contact-card__meta author-contact-card__meta--story">
<div class="author-contact-card__identity">
<div class="author-contact-card__image author-contact-card__image--story">
<a href="/staff/tom-howell-jr/"><img src="https://twt-thumbs.washtimes.com/media/img/staff/2013/Howell_Jr_Tom-350_s220x308.jpg?302ab533f75f17d8b5f7b3ebcf774a8e5a91c32f" width="220" height="308" alt="Tom Howell Jr." /></a>
</div>
<div class="author-contact-card__copy">
<h3 class="author-contact-card__name">Tom Howell Jr.</h3>
<p class="author-contact-card__contact">
<a href="mailto:thowell@washingtontimes.com">thowell@washingtontimes.com</a>
</p>
<p class="author-contact-card__links">
<a href="/staff/tom-howell-jr/">View staff page</a>
</p>
</div>
</div>
</div>
<div class="author-contact-card__follow">
<span class="author-contact-card__follow-label">Follow author updates</span>
<div
class="author-follow-widget"
data-author-follow-widget
data-staff-id="689"
>
<button
type="button"
class="author-follow-button"
data-author-follow-button
aria-label="Follow Tom Howell Jr."
data-follow-label="Follow"
data-following-label="Following"
data-register-label="Register to follow"
data-loading-label="Saving..."
data-pending-auth-label="Loading..."
>
Follow
</button>
<span class="author-follow-hint" data-author-follow-hint>
Click to follow.
</span>
<a
class="author-follow-inline-manage-link"
href="/my-account/following-authors/"
>
Manage followed authors
</a>
</div>
</div>
</article>
</div>
</section>
<div class="piano-newsletter-inline"></div>
<div class="permission" style="padding-top: 25px;">
<p>Copyright © 2026 The Washington Times, LLC.
<a href="https://goo.gl/forms/xGjXcUKYsKxMeCUl1" title="Reprint permission" target="_blank">Click
here for reprint permission</a>.</p>
</div>
<div class="show-mobile-only-not-ad">
<section class="block story-topics">
<h2 class="block-title">Story Topics</h2>
<div class="block-content">
<ul class="story-topics__list">
<li class="story-topics__item">
<a class="story-topics__link" href="/topics/politics/" title="Politics" data-track-event="Hilighted,topics">Politics</a>
</li>
<li class="story-topics__item">
<a class="story-topics__link" href="/topics/us-federal-reserve/" title="U.S. Federal Reserve" data-track-event="Hilighted,topics">U.S. Federal Reserve</a>
</li>
<li class="story-topics__item">
<a class="story-topics__link" href="/topics/business_finance/" title="Business Finance" data-track-event="Hilighted,topics">Business Finance</a>
</li>
<li class="story-topics__item">
<a class="story-topics__link" href="/topics/donald-trump/" title="Donald Trump" data-track-event="Hilighted,topics">Donald Trump</a>
</li>
<li class="story-topics__item">
<a class="story-topics__link" href="/topics/kevin-hassett/" title="Kevin Hassett" data-track-event="Hilighted,topics">Kevin Hassett</a>
</li>
</ul>
</div>
</section>
<!-- //.story-topics -->
</div>
<div id="native-inline-comments-root" class="native-inline-comments-root">
<div id="comment-policy" style="color: black; border: 1px solid gray; padding: 5px 5px 5px 5px; background-color: lightgrey"><h4
class="policy-container">Please read
our <a href="https://www.washingtontimes.com/comment-policy/">comment policy</a> before commenting.</h4>
</div>
<div class="insticator-product-group" data-insticator-group-id="7be1997a-b951-46ea-b80f-538dcf60666f"></div><script>Insticator.load("insticator-product-group", { id: "7be1997a-b951-46ea-b80f-538dcf60666f" })</script>
</div>
</div>
</div>
<div class="piano-content-lock"></div>
<div class="piano-content-lock-upper"></div>
<div class="piano-end-article-sale"></div>
<div class="piano-end-article-reco" style="min-height: 960px;"><div class="article-toplinks"></div></div>
<div class="twt-content-only-hide">
<hr>
<div class="outbrain-unit-desktop">
<div class="OUTBRAIN" data-src="https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/" data-widget-id="AR_2"></div> <script type="text/javascript" src="//widgets.outbrain.com/outbrain.js"></script>
</div>
<hr>
</div>
</div>
</div><!--/.summary-->
</article>
<section class="block ed-columns show-mobile-only-not-ad">
<div class="block-content">
<figure class="photo-zoom">
<h3 class="block-title">Latest Video</h3>
<script id="d6242a218c314ebab4708885485089e9">(new Image()).src = 'https://capi.elements.video/tr/si?token=d7fd0c30-fd64-4fed-bc68-315d01e44232&cid=1ffe7fff-eb53-11e9-b4d2-06948452ae1a'; cnxel.cmd.push(function() { cnxel({ playerId: "d7fd0c30-fd64-4fed-bc68-315d01e44232" }).render("d6242a218c314ebab4708885485089e9"); });</script>
</figure>
</div>
</section>
</section>
</div>
</div>
<div class="mrf-newsmax"></div>
</section>
<!-- //#content -->
<aside id="secondary" class="sidebar" style="height:100%">
<div class="equal-heights-column-inner" style="height:100%">
<div class="aside-inner" style="height:100%">
<div class="piano-right-rail-cltc"></div>
<div class="socialbar">
<span class="title">Follow Us</span>
<a class="socialicon facebook" href="https://www.facebook.com/TheWashingtonTimes" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" aria-label="Facebook" role="img" viewBox="0 0 512 512">
<rect class="bg-fill-hover" width="512" height="512" rx="15%" fill="#1877f2"/>
<rect class="bg-fill" width="512" height="512" rx="15%" />
<path d="M355.6 330l11.4-74h-71v-48c0-20.2 9.9-40 41.7-40H370v-63s-29.3-5-57.3-5c-58.5 0-96.7 35.4-96.7 99.6V256h-65v74h65v182h80V330h59.6z" fill="#fff"/></svg>
</a>
<a class="socialicon twitter" href="https://twitter.com/WashTimes" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 512 509.64">
<rect class="bg-fill-hover" width="512" height="512" rx="15%" fill="#000000"></rect>
<rect class="bg-fill" width="512" height="512" rx="15%"></rect>
<path fill="#fff" fill-rule="nonzero" d="M323.74 148.35h36.12l-78.91 90.2 92.83 122.73h-72.69l-56.93-74.43-65.15 74.43h-36.14l84.4-96.47-89.05-116.46h74.53l51.46 68.04 59.53-68.04zm-12.68 191.31h20.02l-129.2-170.82H180.4l130.66 170.82z"/>
</svg>
</a>
<a class="socialicon" href="https://www.instagram.com/washtimes/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-label="Instagram" role="img" viewBox="0 0 512 512">
<rect class="bg-fill-hover" width="512" height="512" rx="15%" id="b" />
<rect class="bg-fill" width="512" height="512" rx="15%" />
<use class="bg-fill-hover" fill="url(#a)" xlink:href="#b"/>
<use class="bg-fill-hover" fill="url(#c)" xlink:href="#b"/>
<radialGradient id="a" cx=".4" cy="1" r="1">
<stop offset=".1" stop-color="#fd5"/>
<stop offset=".5" stop-color="#ff543e"/>
<stop offset="1" stop-color="#c837ab"/>
</radialGradient>
<linearGradient id="c" x2=".2" y2="1"><stop offset=".1" stop-color="#3771c8"/><stop offset=".5" stop-color="#60f" stop-opacity="0"/></linearGradient>
<g fill="none" stroke="#fff" stroke-width="30">
<rect width="308" height="308" x="102" y="102" rx="81"/>
<circle cx="256" cy="256" r="72"/>
<circle cx="347" cy="165" r="6"/>
</g>
</svg>
</a>
<a class="socialicon youtube" href="https://www.youtube.com/@washingtontimes" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" aria-label="YouTube" role="img" viewBox="0 0 512 512">
<rect class="bg-fill-hover" width="512" height="512" rx="15%" fill="#FF0000" />
<rect class="bg-fill" width="512" height="512" rx="15%" />
<path d="M218 336l114-80-114-80z" fill="#fff" />
</svg>
</a>
</svg>
<a class="socialicon rss" href="/feeds/">
<svg xmlns="http://www.w3.org/2000/svg" aria-label="RSS" role="img" viewBox="0 0 512 512">
<rect class="bg-fill-hover" width="512" height="512" rx="15%" fill="#f80"/>
<rect class="bg-fill" width="512" height="512" rx="15%" fill="#f80"/>
<rect class="bg-fill" width="512" height="512" rx="15%" fill="#f80"/>
<circle cx="145" cy="367" r="35" fill="#fff"/>
<path fill="none" stroke="#fff" stroke-width="60" d="M109 241c89 0 162 73 162 162m114 0c0-152-124-276-276-276"/>
</svg>
</a>
</div>
<div class="search">
<form class="search-form" id="frm_search" action="/search/">
<legend class="sr-only">Search</legend>
<label for="search-keyword" class="sr-only" title="Search Keyword">Search Keyword:</label>
<input type="hidden" name="cx" value="015385541671335030271:nfb7f1nj88q" />
<input type="hidden" name="cof" value="FORID:11" />
<input type="hidden" name="ie" value="UTF-8" />
<input class="search-input" id="search-keyword" name="q" placeholder="Search" type="search" value="" />
<button type="submit" name="sa" class="search-button" title="Search">
<svg class="search-icon" viewBox="0 0 22.192 22.183" id="magnifying_glass" xmlns="http://www.w3.org/2000/svg">
<path fill="currentColor" d="M21.644 18.758a213.86 213.86 0 01-4.968-4.444 1.434 1.434 0 01-.379-1.949A8.585 8.585 0 008.642.001L8.585 0a8.587 8.587 0 00-.054 17.172l.056.001a8.523 8.523 0 003.8-.888c.03-.018.061-.032.093-.047.164-.076.346-.121.537-.129.021-.002.042-.002.062-.002a1.427 1.427 0 011.123.539 117.822 117.822 0 014.623 4.991c.742.777 2.029.699 2.793-.075.765-.777.757-2.115.026-2.804zm-8.55-5.633a6.37 6.37 0 01-4.507 1.858h-.043c-3.525-.021-6.377-2.91-6.354-6.437.022-3.504 2.891-6.356 6.395-6.356h.043c1.707.011 3.31.687 4.51 1.902s1.855 2.826 1.845 4.535a6.374 6.374 0 01-1.889 4.498z"/>
</svg>
Search
</button>
</form>
<script type="text/javascript" src="//www.google.com/coop/cse/brand?form=cse-search-box&lang=en"></script>
</div>
<section class="block ed-columns">
<div class="block-content">
<figure class="photo-zoom">
<div class="twt-subscriber-hide">
<script id="24427b8fcfef4c7f8d9925caba56d73e">
function twt_snippets_wrapper_8u0ex8wp820x() {
(new Image()).src = 'https://capi.elements.video/tr/si?token=b2964f72-d551-44a1-9f8a-2a77c029ab39&cid=1ffe7fff-eb53-11e9-b4d2-06948452ae1a'; cnxel.cmd.push(function() { cnxel({ playerId: "b2964f72-d551-44a1-9f8a-2a77c029ab39" }).render("24427b8fcfef4c7f8d9925caba56d73e"); });
}
if( !TWT_IS_SUBSCRIBER ) {
twt_snippets_wrapper_8u0ex8wp820x()
}
</script>
<p style="margin: 0; text-align: right; color: #000; font-size: 13px; padding-top: 5px; padding-bottom: 10px;"><a href="/twt-video/" title="SEE MORE VIDEOS" style="color: #000;" target="_blank">SEE MORE VIDEOS<i class="fa fa-arrow-circle-o-right"></i></a></p>
</div>
</figure>
</div>
</section>
<div id="ad-secondary-SB-1" data-size="300x600" class="ad hidden-xs twt-content-only-hide">
<div class="advertisement-treatment twt-content-only-hide ">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
style="display: flex !important; align-items: center; justify-content: center; text-align: center; height: 600px;"
id="div-gpt-ad-right-sidebar-top">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
tude.refreshAdsViaDivMappings([{
divId: 'div-gpt-ad-right-sidebar-top',
baseDivId: 'pb-slot-mainpage-rr-1'
}]);
});
</script>
</div>
</div>
</div>
<section class="block email-alerts">
<div class="piano-right-rail-newsletter"></div>
</section>
<!-- //.email-alerts -->
<div class="piano-right-rail-reco hide-on-mobile" style="min-height: 617px"></div>
<div class="outbrain-right-rail-ad advertisement-treatment ad hide-on-mobile">
<p class="advertisement-treatment__label">Advertisement</p>
<div class="OUTBRAIN"
data-src="https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/"
data-widget-id="CR_2"></div>
<script async src="//widgets.outbrain.com/outbrain.js"></script>
</div>
<div id="ad-primary-story-2" class="ad hidden-xs twt-content-only-hide">
<div class="advertisement-treatment twt-content-only-hide ">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
style="display: flex !important; align-items: center; justify-content: center; text-align: center; height: 600px;"
id="div-gpt-ad-story-two">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
tude.refreshAdsViaDivMappings([{
divId: 'div-gpt-ad-story-two',
baseDivId: 'pb-slot-rr-articles-2'
}]);
});
</script>
</div>
</div>
</div>
<h2 class="block-title">Front Page Podcast</h2>
<iframe style="border: none" src="//html5-player.libsyn.com/embed/destination/id/1419779/height/90/theme/custom/thumbnail/yes/direction/backward/no-cache/true/render-playlist/yes/custom-color/b5101f/" height="90" width="100%" scrolling="no" allowfullscreen webkitallowfullscreen mozallowfullscreen oallowfullscreen msallowfullscreen></iframe>
<div style="border-bottom: 2px solid #b6b6b5; margin-bottom: 20px;"></div>
<div id="ad-primary-story-2a" class="ad hidden-xs twt-content-only-hide">
<div style="width:300px;height:250px;">
<script id="nrp-170" type="text/javascript" class="" style="">
(function (node) {
var nrp = document.createElement("script");
nrp.type = "text/javascript", nrp.async = true, nrp.src = "//a.ads.rmbl.ws/warp/170?r=" + Math.floor(Math.random() * 99999) + "";
node.appendChild(nrp);
})(document.getElementsByTagName("script")[document.getElementsByTagName("script").length - 1].parentNode)
</script>
</div>
</div>
<section class="block our-voices desktop-only">
<h2 class="block-title">Commentary</h2>
<div class="block-content">
<article class="story-item sm-thumb is-portrait">
<div class="main-photo">
<a href="/staff/billy-hallowell/"><img src="https://twt-thumbs.washtimes.com/media/img/staff/2021/billy-hallowell-350_s170x238.jpg?4b4bbcd7d52068c3c9611573fce381be0c51d1e2" width="170" height="238" alt="Billy Hallowell" /></a>
</div>
<div class="story-details">
<h3 class="article-headline" style="color: #000;"><a href="https://www.washingtontimes.com/staff/billy-hallowell/">Billy Hallowell</a></h3>
<p><a href="/news/2026/oct/9/real-threat-involving-artificial-intelligence-isnt-think/" title="The real threat involving artificial intelligence isn’t what you think">The real threat involving artificial intelligence isn’t what you think</a></p>
</div>
</article>
<article class="story-item sm-thumb is-portrait">
<div class="main-photo">
<a href="/staff/cheryl-k-chumley/"><img src="https://twt-thumbs.washtimes.com/media/img/staff/2023/cheryl-chumley-350-v3_s170x238.jpg?4b4bbcd7d52068c3c9611573fce381be0c51d1e2" width="170" height="238" alt="Cheryl K. Chumley" /></a>
</div>
<div class="story-details">
<h3 class="article-headline" style="color: #000;"><a href="https://www.washingtontimes.com/staff/cheryl-k-chumley/">Cheryl K. Chumley</a></h3>
<p><a href="/news/2026/oct/10/america-great-slaps-icc-right-big-fat-whiny-face/" title="America the great slaps ICC right in its big, fat, whiny face">America the great slaps ICC right in its big, fat, whiny face</a></p>
</div>
</article>
<article class="story-item sm-thumb is-portrait">
<div class="main-photo">
<a href="/staff/kelly-sadler/"><img src="https://twt-thumbs.washtimes.com/media/img/staff/2021/kelly-riddell-350_s170x238.jpg?4b4bbcd7d52068c3c9611573fce381be0c51d1e2" width="170" height="238" alt="Kelly Sadler" /></a>
</div>
<div class="story-details">
<h3 class="article-headline" style="color: #000;"><a href="https://www.washingtontimes.com/staff/kelly-sadler/">Kelly Sadler</a></h3>
<p><a href="/news/2026/oct/8/radical-islamists-eat-mamdani/" title="Radical Islamists eat their own with Mamdani">Radical Islamists eat their own with Mamdani</a></p>
</div>
</article>
<span class="view-all" style="float: right;"><a href="/opinion/" title="View all" data-track-event="CommentaryBlock,CommentaryBlock,position" style="color: #000;">View all <i class="fa fa-arrow-circle-o-right"></i></a></span>
</div>
</section>
<!-- //.our-voices -->
<div id="ad-primary-story-3" data-size="300x250" class="ad hidden-xs twt-content-only-hide">
<div class="advertisement-treatment twt-content-only-hide ">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
style="display: flex !important; align-items: center; justify-content: center; text-align: center; height: 100%;"
id="div-gpt-ad-story-three">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
tude.refreshAdsViaDivMappings([{
divId: 'div-gpt-ad-story-three',
baseDivId: 'pb-slot-rr-articles-3'
}]);
});
</script>
</div>
</div>
</div>
<section class="block our-voices desktop-only">
<h2 class="block-title">Podcasts</h2>
<div class="block-content">
<article class="story-item sm-thumb is-portrait">
<div class="main-photo">
<a href="/specials/threat-status-podcast/" data-track-event="Hilighted,home_podcast_feature,position1"><img src="https://twt-thumbs.washtimes.com/media/specials/1009_TS_900_k170x170.png?bb9cca1a98435f5499d7b8d34dbf9f08a0f51094" width="170" height="170" class="left mr mb" alt="Threat Status Podcast" /></a>
</div>
<div class="story-details">
<h2 class="article-headline"><a href="/specials/threat-status-podcast/" title="Threat Status Podcast">LISTEN: Why military AI data labeling matters</a></h2>
<span class="podcasthed">Peter Kant joins Threat Status</span>
</div>
</article>
<article class="story-item sm-thumb is-portrait">
<div class="main-photo">
<a href="/specials/god-country-and-the-american-story/" data-track-event="Hilighted,home_podcast_feature,position2"><img src="https://twt-thumbs.washtimes.com/media/specials/1007_GCA_900_k170x170.png?bb9cca1a98435f5499d7b8d34dbf9f08a0f51094" width="170" height="170" class="left mr mb" alt="God, Country and the American Story" /></a>
</div>
<div class="story-details">
<h2 class="article-headline"><a href="/specials/god-country-and-the-american-story/" title="God, Country and the American Story">WATCH: God, Country and the American Story</a></h2>
<span class="podcasthed">Did prophets predict Trump?</span>
</div>
</article>
<article class="story-item sm-thumb is-portrait">
<div class="main-photo">
<a href="/specials/front-page-podcast/" data-track-event="Hilighted,home_podcast_feature,position3"><img src="https://twt-thumbs.washtimes.com/media/specials/1009_FRONT_900_k170x170.png?bb9cca1a98435f5499d7b8d34dbf9f08a0f51094" width="170" height="170" class="left mr mb" alt="Front Page Podcast" /></a>
</div>
<div class="story-details">
<h2 class="article-headline"><a href="/specials/front-page-podcast/" title="Front Page Podcast">Get today’s top stories in under five minutes</a></h2>
<span class="podcasthed">Listen to the Front Page Podcast</span>
</div>
</article>
<span class="view-all" style="float: right;"><a href="/podcasts/" title="View all" data-track-event="PodcastBlock,PodcastBlock,position" style="color: #000;">View all <i class="fa fa-arrow-circle-o-right"></i></a></span>
</div>
</section>
<!-- //.podcast_story -->
<div class="piano-right-rail-reco-bottom hide-on-mobile" style="min-height: 617px"></div>
<section class="block story-topics">
<h2 class="block-title">Story Topics</h2>
<div class="block-content">
<ul class="story-topics__list">
<li class="story-topics__item">
<a class="story-topics__link" href="/topics/politics/" title="Politics" data-track-event="Hilighted,topics">Politics</a>
</li>
<li class="story-topics__item">
<a class="story-topics__link" href="/topics/us-federal-reserve/" title="U.S. Federal Reserve" data-track-event="Hilighted,topics">U.S. Federal Reserve</a>
</li>
<li class="story-topics__item">
<a class="story-topics__link" href="/topics/business_finance/" title="Business Finance" data-track-event="Hilighted,topics">Business Finance</a>
</li>
<li class="story-topics__item">
<a class="story-topics__link" href="/topics/donald-trump/" title="Donald Trump" data-track-event="Hilighted,topics">Donald Trump</a>
</li>
<li class="story-topics__item">
<a class="story-topics__link" href="/topics/kevin-hassett/" title="Kevin Hassett" data-track-event="Hilighted,topics">Kevin Hassett</a>
</li>
</ul>
</div>
</section>
<!-- //.story-topics -->
<div id="story-right-sidebar-sticky-ad" class="ad twt-content-only-hide" style="height:1020px; position: sticky; top: 42px">
<div class="advertisement-treatment twt-content-only-hide ">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
style="display: flex !important; align-items: center; justify-content: center; text-align: center; height: 100%;"
id="div-gpt-ad-right-sidebar-sticky">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
tude.refreshAdsViaDivMappings([{
divId: 'div-gpt-ad-right-sidebar-sticky',
baseDivId: 'pb-slot-mainpage-rr-4'
}]);
});
</script>
</div>
</div>
</div>
</div>
</div>
</aside>
<!-- //#secondary -->
</div>
</div>
</div><!-- END 3-column layout -->
<div id="article-btf-ad-container" class="twt-content-only-hide" align="center" style="height: 90px; margin: 25px 0;">
<div class="advertisement-treatment twt-content-only-hide ">
<div class="advertisement-treatment__label">Advertisement</div>
<div class="ad-slot "
style="display: flex !important; align-items: center; justify-content: center; text-align: center; height: 100%;"
id="Desktop_InFeed_Articles_BTF">
<script>
window.tude = window.tude || { cmd: [] };
tude.cmd.push(function() {
tude.refreshAdsViaDivMappings([{
divId: 'Desktop_InFeed_Articles_BTF',
baseDivId: 'pb-slot-infeed1-articles-btf'
}]);
});
</script>
</div>
</div>
</div>
<!-- Begin #footer -->
<footer class="footer" id="footer">
<div class="footer-inner" style="padding-top: 30px;">
<div id="contact-links" class="footer-contact-links container">
<div class="row">
<section class="facebook-links col-sm-15 col-lg-6">
<div class="section-inner">
<h3>Newsletters</h3>
<ul class="links">
<li><a href="/newsletters/manage" title="Manage Newsletters" target="_blank">Manage Newsletters</a></li>
<li><a href="/newsletter-signup/" title="Opinion" target="_blank">Newsletter Signup</a></li>
</ul>
</div>
</section>
<section class="facebook-links col-sm-15 col-lg-7">
<div class="section-inner">
<h3>Find us on Facebook</h3>
<ul class="links">
<li><a href="https://www.facebook.com/TheWashingtonTimes" title="The Washington Times" target="_blank">The Washington Times</a></li>
<li><a href="https://www.facebook.com/WashingtonTimesOpinion/" title="Opinion" target="_blank">Opinion</a></li>
<li><a href="https://www.facebook.com/WashingtonTimesLocal/" title="Local" target="_blank">Local</a></li>
<li><a href="https://www.facebook.com/WashingtonTimesSports/" title="Sports" target="_blank">Sports</a></li>
</ul>
</div>
</section>
<section class="twitter-links col-sm-15 col-lg-6">
<div class="section-inner">
<h3>Find us on X</h3>
<div class="container-fluid">
<div class="row">
<ul class="links">
<li><a href="https://x.com/WashTimes" title="The Washington Times" target="_blank">The Washington Times</a></li>
<li><a href="https://x.com/WashTimesOpEd" title="Opinion" target="_blank">Opinion</a></li>
<li><a href="https://x.com/WashTimesLocal" title="Local" target="_blank">Local</a></li>
<li><a href="https://x.com/WashTimesSports" title="Sports" target="_blank">Sports</a></li>
</ul>
</div>
</div>
</div>
</section>
<section class="youtube-links col-sm-15 col-lg-6">
<div class="section-inner">
<h3>Find us on Youtube</h3>
<ul class="links">
<li><a href="https://www.youtube.com/@washingtontimes" title="The Washington Times" target="_blank">The Washington Times</a></li>
</ul>
</div>
</section>
</div>
</div>
<!-- //#contact-links -->
<nav class="footer-nav" id="footer-nav" role="navigation">
<div class="container">
<ul class="menu">
<li><a href="/subscribe/?subscribe-link-footer" title="Subscribe">Subscribe</a></li>
<li><a href="http://classified.washingtontimes.com" title="Classifieds" target="_blank">Classifieds</a></li>
<li><a href="https://washingtontimes-dc.newsmemory.com/" title="E-edition" target="_blank" rel="nofollow noopener noreferrer">E-edition</a></li>
<li><a href="/customer-service/" title="Customer Service">Customer Service</a></li>
<li><a href="/about/jobs/" title="Careers">Careers</a></li>
<li><a href="/terms-of-use/" title="Terms">Terms</a></li>
<li><a href="/privacy/" title="Privacy">Privacy</a></li>
<li><a href="/feeds/" title="RSS">RSS</a></li>
<li><a href="/advertise/" title="Advertise">Advertise</a></li>
<li><a href="/faq/" title="FAQ">FAQ</a></li>
<li><a href="/about/" title="About">About</a></li>
<li><a href="/contact-us/" title="Contact">Contact</a></li>
</ul>
</div>
</nav>
<section id="colophon">
<div class="container">
<h6 class="vcard"><span class="copyright-info">All site contents <span title="full">©</span> Copyright <span class="YYYY">2026</span> <span class="nowrap fn">The Washington Times, LLC</span> <span class="separator">|</span></span> <span class="address">3600 New York Avenue NE <span class="separator">|</span> Washington, DC 20002 <span class="separator">|</span> <span class="tel" data-vcard-tel="+12026363000">202-636-3000</span></span></h6>
</div>
</section>
</div>
</footer>
<!-- End #footer -->
<script>
MODALOPTIONS = [];
</script>
<div id="next-story-container" style="display: none">
</div>
<div class="piano-fixed-footer-one"></div>
<div class="piano-fixed-footer-two"></div>
<div class="piano-sticky-offer" style="box-shadow: 0px 10px 30px 0px rgba(50, 50, 50, 0.75);"></div>
<script async subscriptions-control="manual" src="https://news.google.com/swg/js/v1/swg.js"></script>
<script async src="https://accounts.google.com/gsi/client"></script>
<script>
function InitGaaMetering() {
function registerGaaAnalytics() {
// Register only after GaaMetering.init() configures the shared SwG
// client. Calling getEventManager() earlier causes swg-gaa to reject
// its own configuration with "already configured".
(self.SWG = self.SWG || []).push(function(subscriptions) {
subscriptions.getEventManager().then(function(manager) {
manager.registerEventListener(function(event) {
var eventType = event.eventType || event.type ||
(typeof event.getEventType === 'function' && event.getEventType());
var eventOriginator = event.eventOriginator || event.originator ||
(typeof event.getEventOriginator === 'function' && event.getEventOriginator());
var analyticsEvent = {
event: 'google_extended_access',
google_extended_access_event: eventType,
google_extended_access_originator: eventOriginator
};
window.dataLayer = window.dataLayer || [];
window.dataLayer.push(analyticsEvent);
if (window.location.hash.indexOf('swg.debug=1') !== -1) {
console.info('[Google Extended Access]', analyticsEvent, event);
}
});
});
});
}
var allowedReferrers = [
'www.washingtontimes.com', 'washingtontimes.com',
'admin.washingtontimes.com', 'canary.washtimes.com',
// Google News and some browser privacy modes can strip document.referrer.
// The signed gaa_* params still gate the flow before this allowlist is used.
''
];
function getAuthorizationUrl() {
var authUrl = new URL('/google-news/google-auth/', window.location.origin);
authUrl.searchParams.set('source', window.location.href);
return authUrl.toString();
}
function lockArticle() {
if (!document.body.classList.contains('piano-paywall-applied')) {
var $btext = $('.bigtext');
$btext.find('p').slice(3).addClass('ea-hidden');
var lockEl = document.querySelector('.piano-content-lock-upper')
|| document.querySelector('.piano-content-lock');
if (lockEl) lockEl.classList.add('template-shown');
document.body.classList.add('piano-paywall-applied');
var newHeight = 0;
var visibleContent = $btext.find('p:visible');
for (var i = 0; i < visibleContent.length; i++) {
newHeight += visibleContent.eq(i).outerHeight();
}
$btext.css('height', newHeight);
}
}
function showPaywall() {
// Preserve the current host so staging remains in its Sandbox Piano
// context instead of redirecting readers into production.
window.location.assign('/subscribe/');
}
function unlockArticle() {
window.__gnewsUnlocked = true;
document.querySelectorAll('.ea-hidden').forEach(function(el) {
el.classList.remove('ea-hidden');
});
var lockEls = document.querySelectorAll('.piano-content-lock, .piano-content-lock-upper');
lockEls.forEach(function(el) {
el.classList.remove('template-shown');
while (el.firstChild) el.removeChild(el.firstChild);
});
document.body.classList.remove('piano-paywall-applied');
$('.bigtext').css('height', 'auto');
}
// Read the CSRF cookie so we can POST to our own entitlements proxy.
function getCsrfToken() {
var match = document.cookie.match(/(?:^|;\s*)csrftoken=([^;]+)/);
return match ? match[1] : '';
}
// Ask our server-side endpoint to:
// 1. Check if this user is a full Piano subscriber (fast-path).
// 2. Return the stable registrationTimestamp Django owns for this reader.
// The server never calls Google here; for non-subscribers we resolve
// granted:false and swg-gaa performs the Showcase entitlements lookup.
// Returns a Promise that resolves to the GaaMetering userState object.
//
// When the page is served from Cloudflare cache Django never runs, so the
// csrftoken cookie may be absent. ensureCsrfToken() falls back to the
// /api/csrf-token/ endpoint (which forces Django to set the cookie) so the
// subsequent POST is never rejected with a 403 HTML response.
function ensureCsrfToken() {
var token = getCsrfToken();
if (token) return Promise.resolve(token);
return fetch('/api/csrf-token/', {
credentials: 'same-origin',
headers: {'X-Requested-With': 'XMLHttpRequest'}
})
.then(function(r) { return r.json(); })
.then(function(data) { return data.csrfToken || getCsrfToken() || ''; })
.catch(function() { return ''; });
}
function fetchGoogleEntitlements(user) {
return ensureCsrfToken().then(function(csrfToken) {
return fetch('/google-news/entitlements/', {
method: 'POST',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': csrfToken
},
body: JSON.stringify({
uid: user.uid,
canonical_url: window.location.origin + window.location.pathname,
iat: user.iat
})
})
.then(function(r) { return r.json(); })
.then(function(data) {
// Django owns the immutable Google EA registration timestamp. A
// Piano session token's iat is refreshed and cannot be used to
// meter this reader consistently across panel visits.
var registrationTimestamp = data.registrationTimestamp || user.iat;
if (data.is_subscriber) {
return {
id: user.uid,
registrationTimestamp: registrationTimestamp,
subscriptionTimestamp: user.iat,
granted: true,
grantReason: 'SUBSCRIBER'
};
} else {
// Registered non-subscriber: return granted:false with the user
// identity and let swg-gaa fetch Showcase entitlements from
// Google itself. Self-granting METERING here skips Google's
// Extended Access CTA and never consumes/syncs the meter read.
return {
id: user.uid,
registrationTimestamp: registrationTimestamp,
granted: false
};
}
})
.catch(function() {
return {granted: false};
});
}); // ensureCsrfToken
}
function registerGoogleUser() {
return GaaMetering.getGaaUserPromise().then(function(googleUser) {
return ensureCsrfToken().then(function(csrfToken) {
return fetch('/google-news/register/', {
method: 'POST',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': csrfToken
},
// In native mode getGaaUserPromise resolves with the raw GSI
// credential response ({credential: <jwt>}); idToken only exists
// on the decoded legacy shape. Sending undefined serialized to {}.
body: JSON.stringify({credential: googleUser.credential || googleUser.idToken})
});
});
})
.then(function(response) { return response.json(); })
.catch(function() { return {granted: false}; });
}
var urlParams = new URLSearchParams(window.location.search);
if (!urlParams.has('gaa_at')) {
return;
}
// Lock the article up front on Extended Access traffic. GaaMetering
// redirects to the subscription flow through showPaywall() on explicit
// deny paths; if the user
// dismisses the regwall, the flow just stalls on registerUserPromise
// and nothing fires, so an unlocked-by-default page would give the
// full article away. unlockArticle() reverses this on any grant.
lockArticle();
function startGaaMetering(user) {
var isLoggedIn = !!user;
var syncUserState = { granted: false };
var publisherEntitlementPromise = isLoggedIn
? fetchGoogleEntitlements(user)
: Promise.resolve({granted: false});
var resolveLoginUserState;
var handleLoginPromise = new Promise(function(resolve) {
resolveLoginUserState = resolve;
});
GaaMetering.init({
// googleApiClientId and authorizationUrl are mutually exclusive:
// swg-gaa's validateParameters rejects the config (and init()
// silently returns false) if both are present. Native registration
// uses googleApiClientId + registerUserPromise; the publisher OAuth
// redirect happens in getLoginPromise() below, not via init config.
googleApiClientId: '294375148301-9l41b2a0etumgfmqj635b2l11l76mqro.apps.googleusercontent.com',
allowedReferrers: allowedReferrers,
userState: syncUserState,
unlockArticle: unlockArticle,
showPaywall: showPaywall,
registerUserPromise: registerGoogleUser(),
handleLoginPromise: handleLoginPromise,
publisherEntitlementPromise: publisherEntitlementPromise,
});
registerGaaAnalytics();
GaaMetering.getLoginPromise().then(function() {
// GAA's registration intervention must use the publisher's Google
// OAuth flow. Its callback creates or links the Piano account,
// establishes a site session, then returns here with the GAA token
// intact so the entitlement check can complete.
resolveLoginUserState({granted: false});
window.location.assign(getAuthorizationUrl());
});
}
// Poll tp.pianoId (available < 1 s — reads __utp / localStorage
// synchronously) rather than tp.push(['init',...]) which fires only
// after Piano's full experience execution (30+ s on staging).
//
// Publisher-owned Google OAuth sets Piano cookies. Existing sessions are
// detected here so the entitlements proxy can decide whether to unlock
// without another sign-in.
var _gaaCount = 0;
var _gaaMax = 40; // 40 × 100 ms = 4 s max
var _gaaTimer = setInterval(function() {
var pianoReady = window.tp && tp.pianoId &&
typeof tp.pianoId.isUserValid === 'function';
var timedOut = ++_gaaCount >= _gaaMax;
if (!pianoReady && !timedOut) return;
clearInterval(_gaaTimer);
var user = pianoReady && tp.pianoId.isUserValid() ? tp.pianoId.getUser() : null;
startGaaMetering(user);
}, 100);
}
</script>
<script async src="https://news.google.com/swg/js/v1/swg-gaa.js" onload="InitGaaMetering()"></script>
<script>
var isFBReferral = document.cookie.match('RefererIsFacebook=1');
if (isFBReferral) {
var flaggedElems = document.getElementsByClassName("do-not-display-flag");
var numItems = flaggedElems.length;
for (var i=0; i<numItems; i++) {
flaggedElems[0].remove();
}
}
</script>
<!-- Quantcast Tag -->
<script type="text/javascript">
var _qevents = _qevents || [];
(function() {
var elem = document.createElement('script');
elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js";
elem.async = true;
elem.type = "text/javascript";
var scpt = document.getElementsByTagName('script')[0];
scpt.parentNode.insertBefore(elem, scpt);
})();
_qevents.push({
qacct:"p-c69_1G6fdlihY"
});
</script>
<noscript>
<div style="display:none;">
<img loading="lazy" src="//pixel.quantserve.com/pixel/p-c69_1G6fdlihY.gif" border="0" height="1" width="1" alt="Quantcast"/>
</div>
</noscript>
<!-- End Quantcast tag -->
<script>
tp = window.tp || [];
tp.push(["setContentAuthor", "Tom Howell Jr."]); // The content author
tp.push(["setContentSection", "Politics"]); // The content section
tp.push(["setTags", ["Politics", "SaxoTech Editorial"]]); // The content tags
tp.push(["setZone", "Web"]); // Zone can be an AAM platform or section of your site
tp.push(["setContentCreated", "2025\u002D08\u002D27T14:14:00Z"]);
</script>
<script type="text/javascript">
function loadOutbrain() {
$('.GRAYMATTER-DELAY').addClass('OUTBRAIN').removeClass('GRAYMATTER-DELAY');
if (window.OBR) {
// if script is already loaded, this will trigger the ads to load
OBR.extern.researchWidget();
} else {
$.getScript("//widgets.outbrain.com/outbrain.js");
}
}
/**
*
* @type {jQuery.fn.init|Window.jQuery.fn.init|jQuery|HTMLElement}
*/
var $bigTextPag = $('.bigtext > p').not('.article-category');
var $articleTopLinks = $('.bigtext > .article-toplinks');
var $articleCategory = $('.bigtext > .article-category');
var ShowCount = 7;
function calculateDistanceToBottom(containerSelector, childSelector) {
// Find the container and child elements
const container = document.querySelector(containerSelector);
const child = container.querySelectorAll(childSelector)[7];
if (!container || !child) {
console.error("Container or child element not found");
return;
}
const distanceToChildTop = child.offsetTop;
const childHeight = child.clientHeight;
return distanceToChildTop + childHeight;
}
function layoutArticle(showAds=true) {
var animspeed = 900; // animation speed in milliseconds
let $blockquote = $('.bigtext'); // container for the paragraphs to be displayed
const height = $blockquote.height();
loadOutbrain();
const mini = calculateDistanceToBottom('.bigtext', 'p');
$blockquote.attr('data-fullheight', height + 'px');
$blockquote.attr('data-miniheight', mini + 'px');
$blockquote.css('height', mini + 'px');
$('.expand').on('click', function (e) {
dataLayer.push({
event: 'pageview',
page_path_fragment: "#read-more"
});
var $text = $('div.bigtext');
$(document).trigger('expand-article');
$text.animate({
'height': $text.attr('data-fullheight')
}, animspeed, null, function () {
$text.height('inherit');
});
$(this).next('.contract').removeClass('hide');
$(this).addClass('hide');
loadOutbrain();
});
// used by the Print button to expand all content for printing
$('.print-button').on('click', function (e) {
$('.bigtext').height('inherit');
$('.expand').addClass('hide');
$('.contract').removeClass('hide');
//$('.read-more-show').removeClass('hide');
loadOutbrain();
});
$('.contract').on('click', function (e) {
var $text = $('div.bigtext');
$text.animate({
'height': $text.attr('data-miniheight')
}, animspeed);
$(this).prev('.expand').removeClass('hide');
$(this).addClass('hide');
});
}
/**
* Show more article text and the comments panel on
*
* NOTE: when `ShowCount` or less <p> are set on the content, don't show the
* expand/hide link. There's one extra <p> hard-coded on the
* template after the comments for spacing purposes.
*/
$(document).ready(function() {
var viewPWidth = window.innerWidth || document.documentElement.clientWidth;
if (Cookies.get('twteditor')) {
$('.page-headline').append(" <a id='s_e_redir' href='#'>[Edit]</a>");
$('#s_e_redir').click(function(evt){
evt.stopPropagation();
window.open(atob('L2dnSHEzX195QjYv')+'?s=5403016', '_blank');
return false;
});
}
setTimeout(function(){
if (window.isTWTApp) {
$('.share-and-comments#share-app').css({'display': 'flex', 'width': '100%', 'background': 'ghostwhite'});
$('.shareaholic-canvas').css({'justify-content': 'space-between', 'padding-right': '10px'});
$('.shareaholic-link').on('click', function(event){
event.preventDefault();
ShareItemHandler.postMessage(JSON.stringify({
url: $(this).data('deeplink'),
subject: 'Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says'
}));
return false;
});
} else {
const md = new MobileDetect(window.navigator.userAgent);
if (md.is('iPhone')) {
// Display an extra share button
const apple_share_button = document.createElement('a');
apple_share_button.href = 'javascript:void(0)';
apple_share_button.onclick = function() {
const data = {
title: 'Lisa Cook should take leave from Fed during legal fight over firing, Kevin Hassett says',
url: 'https://www.washingtontimes.com/news/2025/aug/27/lisa-cook-take-leave-fed-legal-fight-firing-kevin-hassett-says/?utm_campaign=twt_app&utm_medium=twt_app_link&utm_source=twt_app'
};
// Check if the share API is supported
if (navigator.share) {
// Share the data
navigator.share(data)
.then(() => {
console.log('Data shared successfully');
})
.catch((error) => {
console.error('Error sharing data:', error);
});
} else {
console.error('Share API not supported');
}
}
apple_share_button.classList.add('apple-share-link');
apple_share_button.id = 'apple-share';
// Create a div element to hold the SVG
const div = document.createElement('div');
div.innerHTML = `<svg viewBox="0 0 40 40" width="24" height="24" xmlns="http://www.w3.org/2000/svg"><path fill="#000000" d="M30.3 13.7L25 8.4l-5.3 5.3-1.4-1.4L25 5.6l6.7 6.7z"/><path fill="#000000" d="M24 7h2v21h-2z"/><path fill="#000000" d="M35 40H15c-1.7 0-3-1.3-3-3V19c0-1.7 1.3-3 3-3h7v2h-7c-.6 0-1 .4-1 1v18c0 .6.4 1 1 1h20c.6 0 1-.4 1-1V19c0-.6-.4-1-1-1h-7v-2h7c1.7 0 3 1.3 3 3v18c0 1.7-1.3 3-3 3z"/></svg>`;
const svg = div.firstChild;
apple_share_button.appendChild(svg);
$('.shareaholic-canvas').append(apple_share_button);
}
$('.share-and-comments#share-web').css('display', 'flex');
}
}, 5000);
});
</script>
<!-- Media Trust ad scanner -->
<script src="https://scripts.webcontentassessor.com/scripts/85d8ddb05bcf089b2c29e59623ae519ad02e2a929bfaac10d875c38b93211525"></script>
<!-- BEGIN: Google Universal Analytics -->
<script type="text/javascript">
window.dataLayer = window.dataLayer || [];
dataLayer.push({
'event': 'pageview',
'PageType': 'Story',
'TopNode': 'news',
'ChildNode': 'politics',
'UserSegment': 'Anonymous',
'Author': 'Tom Howell Jr.',
'SubCategoryList': 'politics'
,
'Segmentation': document.cookie.match('Segmentation=Preferred') ? 'Preferred' : 'Normal'
});
function _trackEvent() {
// args: category, action, label, value
var evtData = {
'event': 'ga_event',
'ga_event_category': arguments[0],
'ga_event_action': arguments[1]
};
if (arguments.length == 3){
evtData['ga_event_label'] = arguments[2];
}
if (arguments.length == 4){
evtData['ga_event_label'] = arguments[2];
evtData['ga_event_value'] = arguments[3];
}
dataLayer.push(evtData);
}
</script>
<!-- END: Google Analytics -->
<!-- Begin Piano My-Account Section -->
<script>
function navIsSticky() {
if ($('.header-container.sticky').length ){
return true;
}
return false;
}
function updateMenuAccountOptions(isSticky) {
if (isSticky) {
tp = window.tp || [];
if (tp.pianoId) {
if (tp.pianoId.isUserValid()) {
var name = tp.pianoId.getUser().given_name;
if (!name) {
name = "Account";
}
$('#nav_root_subscribe').css('display', 'none');
$('#nav_root_signin a').text(name);
$('#nav_root_signin').css('display', 'inline-flex');
} else {
$('#nav_root_subscribe').css('display', 'inline-flex');
$('#nav_root_signin a').text('Sign In');
$('#nav_root_signin').css('display', 'inline-flex');
}
}
} else {
$('#nav_root_subscribe').css('display', 'none');
$('#nav_root_signin').css('display', 'none');
}
}
function pianoReadCustomVariableCookie(specificName) {
var cookieValue;
try {
var match = document.cookie.match(new RegExp('(^| )__pcvc=([^;]+)'));
if (match) {
cookieValue = JSON.parse(match[2]);
}
}
catch (e) {
cookieValue = {};
}
if (!cookieValue) {
cookieValue = {};
}
if (typeof specificName != "undefined") {
if (typeof cookieValue[specificName] != "undefined") {
return cookieValue[specificName];
}
return null;
}
return cookieValue;
}
function pianoSetCustomVariableCookie(name, value) {
var cookieValue = pianoReadCustomVariableCookie();
cookieValue[name] = value;
var d = new Date();
d.setTime(d.getTime() + (94608000000));
var expires = "expires=" + d.toUTCString();
document.cookie = "__pcvc=" + JSON.stringify(cookieValue) + ";" + expires + ";path=/";
tp.push(["setCustomVariable", name, value]);
}
function wtGetPianoBearerToken() {
if (window.WTPianoUserToken) {
return window.WTPianoUserToken;
}
if (!window.tp || !tp.pianoId) {
return null;
}
try {
if (typeof tp.pianoId.getUserToken === 'function') {
var token = tp.pianoId.getUserToken();
if (token) {
window.WTPianoUserToken = token;
return token;
}
}
if (typeof tp.pianoId.getToken === 'function') {
var fallbackToken = tp.pianoId.getToken();
if (fallbackToken) {
window.WTPianoUserToken = fallbackToken;
return fallbackToken;
}
}
if (typeof tp.pianoId.getUser === 'function') {
var user = tp.pianoId.getUser();
if (user && user.idToken) {
window.WTPianoUserToken = user.idToken;
return user.idToken;
}
}
} catch (e) {}
return null;
}
function wtSyncWebPushSubscriptionStatus(force) {
if (!window.PushlySDK || typeof window.PushlySDK.isUserSubscribed !== 'function') {
return Promise.resolve(false);
}
if (!window.tp || !tp.pianoId || typeof tp.pianoId.isUserValid !== 'function' || !tp.pianoId.isUserValid()) {
return Promise.resolve(false);
}
var token = wtGetPianoBearerToken();
var user = typeof tp.pianoId.getUser === 'function' ? tp.pianoId.getUser() : null;
var pianoUid = user && user.uid ? String(user.uid).trim() : '';
if (!token || !pianoUid) {
return Promise.resolve(false);
}
return Promise.all([
Promise.resolve(window.PushlySDK.isUserSubscribed()),
Promise.resolve().then(function () {
if (
typeof window.PushlySDK.getUser === 'function' &&
window.PushlySDK.getUser() &&
typeof window.PushlySDK.getUser().getId === 'function'
) {
return window.PushlySDK.getUser().getId();
}
return '';
}),
])
.then(function (results) {
var isSubscribed = results[0];
var subscriberId = results[1] ? String(results[1]).trim() : '';
var normalizedSubscribed = !!isSubscribed;
var syncKey = pianoUid + ':' + String(normalizedSubscribed) + ':' + subscriberId;
if (!force && window.__WT_PUSHLY_WEB_SYNC_KEY__ === syncKey) {
return false;
}
window.__WT_PUSHLY_WEB_SYNC_KEY__ = syncKey;
return fetch('/api/v1/account/me/push-subscription', {
method: 'POST',
credentials: 'same-origin',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
Authorization: 'Bearer ' + token,
},
body: JSON.stringify({
pushly_web_subscribed: normalizedSubscribed,
pushly_web_subscriber_id: subscriberId,
}),
}).then(function (response) {
if (!response.ok) {
window.__WT_PUSHLY_WEB_SYNC_KEY__ = null;
throw new Error('Pushly web sync failed with status ' + response.status);
}
return true;
});
})
.catch(function (error) {
console.warn('Unable to sync Pushly web subscription state.', error);
return false;
});
}
function wtSyncPushlyIdentity(forceSync) {
if (typeof window.pushly !== 'function') {
return;
}
if (!window.tp || !tp.pianoId || typeof tp.pianoId.isUserValid !== 'function' || !tp.pianoId.isUserValid()) {
return;
}
var user = typeof tp.pianoId.getUser === 'function' ? tp.pianoId.getUser() : null;
var pianoUid = user && user.uid ? String(user.uid).trim() : '';
if (!pianoUid) {
return;
}
if (!forceSync && window.__WT_PUSHLY_LAST_EXTERNAL_ID__ === pianoUid) {
return;
}
pushly('on_ready', function () {
try {
pushly('external_id', pianoUid);
window.__WT_PUSHLY_LAST_EXTERNAL_ID__ = pianoUid;
wtSyncWebPushSubscriptionStatus(!!forceSync);
if (window.WTAuthorFollow && typeof window.WTAuthorFollow.refresh === 'function') {
window.WTAuthorFollow.refresh(document, { force: !!forceSync });
}
} catch (error) {
console.warn('Unable to sync Pushly external ID.', error);
}
});
}
function wtBindWebPushSubscriptionSync() {
if (window.__WT_PUSHLY_WEB_SYNC_BOUND__) {
return;
}
if (typeof window.pushly !== 'function') {
return;
}
window.__WT_PUSHLY_WEB_SYNC_BOUND__ = true;
pushly('on_ready', function () {
wtSyncPushlyIdentity(false);
wtSyncWebPushSubscriptionStatus(false);
});
pushly('on_permission_allowed', function () {
wtSyncPushlyIdentity(true);
wtSyncWebPushSubscriptionStatus(true);
});
pushly('on_permission_denied', function () {
wtSyncPushlyIdentity(true);
wtSyncWebPushSubscriptionStatus(true);
});
pushly('on_permission_dismissed', function () {
wtSyncPushlyIdentity(true);
wtSyncWebPushSubscriptionStatus(true);
});
}
wtBindWebPushSubscriptionSync();
// --- LiveConnect (LiveIntent) authenticated-user push ---
// The base LiveConnect tag (b-code.liadm.com/a-01en.min.js) loads via GTM and
// handles anonymous identity resolution on its own. To extend that with
// deterministic matches for logged-in users, push a pageView event carrying
// the authenticated user's email (or an empty string when anonymous) into
// window.liQ. Per LiveIntent's docs the email is hashed locally before
// transit, the queue is safe to push to before the script loads, and an
// empty string must be used in place of null/undefined for anon visitors.
window.liQ = window.liQ || [];
function pushLiveConnectPageView(email) {
try {
window.liQ.push({
event: 'pageView',
email: typeof email === 'string' ? email : ''
});
} catch (e) {}
}
// --- Marfeel User Journey helpers ---
// Stages we use: 0 Anonymous, 2 Registered, 3 Subscriber
(function () {
var MRF_STAGE_KEY = '__wt_mrf_stage__';
function readStickyStage() {
try {
var raw = window.sessionStorage.getItem(MRF_STAGE_KEY);
var parsed = parseInt(raw, 10);
if (!isNaN(parsed)) return parsed;
} catch (e) {}
return null;
}
function writeStickyStage(stage) {
try {
window.sessionStorage.setItem(MRF_STAGE_KEY, String(stage));
} catch (e) {}
}
function clearStickyStage() {
try {
window.sessionStorage.removeItem(MRF_STAGE_KEY);
} catch (e) {}
}
// Enable debug logging by adding ?mrf_debug=1 to the URL (or setting window.__MRF_DEBUG__ = true).
var dbg = false;
try {
if (window.__MRF_DEBUG__ === true) dbg = true;
else if (window.location && window.location.search && window.location.search.indexOf('mrf_debug=1') !== -1) dbg = true;
} catch (e) {}
function dlog() {
if (!dbg) return;
try { console.log.apply(console, arguments); } catch (e) {}
}
// Define helpers once, globally (safe for inline onclick and bundled scopes)
if (!window.marfeelSetUserType) {
window.marfeelSetUserType = function (stage) {
var requestedStage = Number(stage);
var stickyStage = readStickyStage();
var effectiveStage = requestedStage;
// Once we identify a subscriber in this session, never downgrade back to
// "registered" because of transient/missing RID results.
if (stickyStage === 3 && requestedStage < 3) {
effectiveStage = 3;
dlog('[MRF] prevent downgrade from subscriber stage', {
requested: requestedStage,
sticky: stickyStage
});
}
if (effectiveStage >= 3) writeStickyStage(3);
if (effectiveStage === 0) clearStickyStage();
// Record locally so we can debug reliably in DevTools
window.__MRF_USER_TYPE_SET__ = effectiveStage;
// Back-compat alias (some earlier tests used this)
window.__WT_MRF_USER_TYPE_SET__ = effectiveStage;
window.marfeel = window.marfeel || { cmd: [] };
window.marfeel.cmd.push(['compass', function (compass) {
try {
dlog('[MRF] compass ready. setUserType ->', effectiveStage, 'prev getUserType ->', (compass.getUserType && compass.getUserType()));
compass.setUserType(effectiveStage);
dlog('[MRF] setUserType done. getUserType ->', (compass.getUserType && compass.getUserType()));
} catch (e) {
dlog('[MRF] setUserType failed', e);
}
}]);
};
}
if (!window.marfeelGetUserType) {
// Convenience helper for testing in DevTools
window.marfeelGetUserType = function (cb) {
window.marfeel = window.marfeel || { cmd: [] };
window.marfeel.cmd.push(['compass', function (compass) {
var val = null;
try { val = (compass.getUserType && compass.getUserType()); } catch (e) {}
dlog('[MRF] getUserType ->', val, '(note: may differ from our local stage var)');
if (typeof cb === 'function') cb(val);
}]);
};
}
if (!window.marfeelTrackSubscribe) {
window.marfeelTrackSubscribe = function () {
// Prevent duplicate firing (same page/session)
if (window.__MRF_SUBSCRIBE_RECORDED__) return;
window.__MRF_SUBSCRIBE_RECORDED__ = true;
window.marfeel = window.marfeel || { cmd: [] };
window.marfeel.cmd.push(['compass', function (compass) {
try {
dlog('[MRF] trackConversion subscribe');
compass.trackConversion('subscribe');
} catch (e) {
dlog('[MRF] trackConversion failed', e);
}
}]);
// Immediately upgrade journey to Subscriber
try { window.marfeelSetUserType(3); } catch (e) {}
};
}
if (!window.marfeelDebugDump) {
window.marfeelDebugDump = function () {
try {
console.log('[MRF dump] __MRF_USER_TYPE_SET__ =', window.__MRF_USER_TYPE_SET__);
console.log('[MRF dump] __WT_MRF_USER_TYPE_SET__ =', window.__WT_MRF_USER_TYPE_SET__);
console.log('[MRF dump] sticky session stage =', readStickyStage());
console.log('[MRF dump] window.marfeel exists =', !!window.marfeel, 'cmd len =', (window.marfeel && window.marfeel.cmd && window.marfeel.cmd.length));
} catch (e) {}
try {
window.marfeelGetUserType(function (v) {
console.log('[MRF dump] compass.getUserType() =', v);
});
} catch (e) {}
};
}
// Re-apply sticky subscriber state early on each page load.
if (readStickyStage() === 3 && window.marfeelSetUserType) {
window.marfeelSetUserType(3);
}
})();
function pianoModifySubscribeButton(hasAccess, isVip = false) {
let pianoSignInWrapper = $('.signinbox-wrapper');
let pianoSubscribeButton = pianoSignInWrapper.find('.subscribe-button');
let isDesktopHeader = window.matchMedia('(min-width: 800px)').matches;
pianoSignInWrapper.toggleClass('show-mobile-newsletter', !isDesktopHeader && hasAccess);
pianoSignInWrapper.toggleClass('show-mobile-subscribe', !isDesktopHeader && !hasAccess);
if (!hasAccess) {
pianoSubscribeButton.attr('href', isDesktopHeader ? '/subscribe/?subscribe-button-header' : '/subscribe/?tpcc=mobile_hp').text('Subscribe');
return; // Exit early, no need to check for VIP
}
// Check if the user is a VIP
if (isVip) {
// If the user is a VIP, set to VIP-specific URL and title
pianoSubscribeButton.attr('href', '/vip-dashboard/').text('VIP');
} else {
pianoSubscribeButton.attr('href', '/my-times/').text('My Times');
}
}
function checkAccessList(rids, callback) {
// Guard: tp.api may not be ready yet on very early execution
if (!window.tp || !tp.api || typeof tp.api.callApi !== 'function') {
callback(false, false);
return;
}
tp.api.callApi('/access/list', {}, function (response) {
if (response.data && response.data.length > 0) {
// Determine the VIP RID dynamically
const VIP_RID = "RDEUKMX";
// Initialize flags for access and VIP
let hasAccess = false;
let isVip = false;
response.data.forEach((item) => {
if (rids.includes(item.resource.rid) && item.granted) {
hasAccess = true;
}
if (item.resource.rid === VIP_RID && item.granted) {
hasAccess = true;
isVip = true;
}
});
callback(hasAccess, isVip);
} else {
callback(false, false); // No access
}
});
}
function getPianoCurrentUser() {
try {
if (window.tp && tp.pianoId && typeof tp.pianoId.getUser === 'function') {
return tp.pianoId.getUser() || null;
}
} catch (e) {}
return null;
}
function handlePianoLoginSuccess(data) {
var callbackData = data || {};
console.log('user ', callbackData.user || null, ' logged in with token', callbackData.token || null);
if (callbackData.token) {
window.WTPianoUserToken = callbackData.token;
} else {
var fallbackToken = wtGetPianoBearerToken();
if (fallbackToken) {
window.WTPianoUserToken = fallbackToken;
}
}
if (window.WTAuthorFollow && typeof window.WTAuthorFollow.refresh === 'function') {
window.WTAuthorFollow.refresh(document, { force: true });
}
var currentUser = getPianoCurrentUser();
var name = currentUser && currentUser.given_name ? currentUser.given_name : '';
if (!name) {
name = "Account";
}
$('#piano-login .text').text(name);
$('.leftSignin').hide();
$('.signinbox-wrapper').addClass('is-logged-in');
$('#anonUserMenu').removeClass('dropdown-content').css('display', 'none');
$('#memberMenu').addClass('dropdown-content').removeAttr('style');
$('.rightSignin').removeClass('rightSignin').addClass('accountButton');
$('#nav_root_subscribe').css('display', 'none');
$('#nav_root_signin a').text(name);
$('#nav_root_signin').css('display', 'inline-block').css('margin-left', '10px');
// set Piano presence cookie, for use by ads exclusion
var d = new Date();
d.setTime(d.getTime() + 60 * 60 * 24 * 30 * 1000);
document.cookie = "onaip_=; expires=" + d.toUTCString() + "; path=/";
wtSyncPushlyIdentity(true);
let ridsToCheck = [
"RV0Z0NV",
"RKI01M5",
"RM3S7B7",
"RVI3L4T",
"RZI5NI9",
"RG4CC1T",
"RPO4N43",
"RR8LZPP",
"RFALH4B",
"RSE7ETP"
];
// Marfeel: logged in => Registered unless access check upgrades to Subscriber
if (window.marfeelSetUserType) window.marfeelSetUserType(2);
checkAccessList(ridsToCheck, function (hasAccess, isVip) {
if (hasAccess) {
if (window.marfeelSetUserType) window.marfeelSetUserType(3);
} else {
if (window.marfeelSetUserType) window.marfeelSetUserType(2);
}
pianoModifySubscribeButton(hasAccess, isVip);
});
if (document.cookie.indexOf('onaip_tnetnoc_ylno=') === -1 && tp.api && typeof tp.api.callApi === 'function') {
tp.api.callApi('/access/check', { rid: "RDEUKMX" }, function (response) {
if (response.access.granted) {
var d = new Date();
d.setTime(d.getTime() + (7 * 24 * 60 * 60 * 1000));
document.cookie = "onaip_tnetnoc_ylno=; expires=" + d.toUTCString() + "; path=/";
}
});
}
}
function wtRegistrationSource() {
var source = window.WTPianoRegistrationSource || '';
try {
source = source || window.sessionStorage.getItem('wt_piano_registration_source') || '';
} catch (e) {}
return source || 'site_register';
}
function wtSubmitPianoRegistrationAttribution(data) {
if (window.__WT_PIANO_REGISTRATION_ATTRIBUTION_REQUEST__) {
return window.__WT_PIANO_REGISTRATION_ATTRIBUTION_REQUEST__;
}
var callbackData = data || {};
var token = callbackData.token || wtGetPianoBearerToken();
if (!token) {
return Promise.resolve(false);
}
var source = wtRegistrationSource();
var pagePath = window.location && window.location.pathname ? window.location.pathname : '';
window.__WT_PIANO_REGISTRATION_ATTRIBUTION_REQUEST__ = fetch('/api/v1/account/me/registration-attribution', {
method: 'POST',
credentials: 'same-origin',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
Authorization: 'Bearer ' + token,
},
body: JSON.stringify({ source: source, page_path: pagePath }),
}).then(function (response) {
if (!response.ok) {
throw new Error('Registration attribution request failed with status ' + response.status);
}
try {
window.sessionStorage.removeItem('wt_piano_registration_source');
} catch (e) {}
window.WTPianoRegistrationSource = null;
return true;
}).catch(function (error) {
console.warn('Unable to record Piano registration attribution.', error);
return false;
});
return window.__WT_PIANO_REGISTRATION_ATTRIBUTION_REQUEST__;
}
function showPianoLogin() {
$('.user-dropdown-drawer').removeClass('is-expanded');
$('#userMenuBackdrop').removeClass('open');
$("body").removeClass('lock-scrolling');
tp = window.tp || [];
tp.push(["init", function () {
tp.pianoId.show({
screen: 'login',
loggedIn: function (data) {
var liUser = tp.pianoId.getUser() || {};
pushLiveConnectPageView(liUser.email || '');
try {
handlePianoLoginSuccess(data);
} catch (error) {
console.warn('Unable to run post-login handler.', error);
window.setTimeout(function () {
window.location.reload();
}, 150);
}
}
});
$('.tp-modal').css('z-index', '2000000000');
}]);
}
function showPianoRegister(source) {
$('.user-dropdown-drawer').removeClass('is-expanded');
$('#userMenuBackdrop').removeClass('open');
$("body").removeClass('lock-scrolling');
source = source || 'site_register';
window.__WT_PIANO_REGISTRATION_ATTRIBUTION_REQUEST__ = null;
window.WTPianoRegistrationSource = source;
try {
window.sessionStorage.setItem('wt_piano_registration_source', source);
} catch (e) {}
tp = window.tp || [];
tp.push(["init", function () {
tp.pianoId.show({
screen: 'register',
loggedIn: function (data) {
try {
handlePianoLoginSuccess(data);
} catch (error) {
console.warn('Unable to run post-register login handler.', error);
}
var attribution = data && data.registration ? wtSubmitPianoRegistrationAttribution(data) : Promise.resolve(false);
Promise.race([
attribution,
new Promise(function (resolve) { window.setTimeout(resolve, 1000); }),
]).finally(function () {
window.setTimeout(function () {
window.location.reload();
}, 150);
});
},
loggedOut: function () {
console.log('user logged out');
}
});
$('.tp-modal').css('z-index', '2000000000');
}]);
}
function pianoLogout() {
console.log('logout');
$('.user-dropdown-drawer').removeClass('is-expanded');
$('#userMenuBackdrop').removeClass('open');
$("body").removeClass('lock-scrolling');
tp = window.tp || [];
tp.pianoId.logout(function () {
pushLiveConnectPageView('');
$('#memberMenu').css('display', 'none');
$('.signinbox-wrapper').removeClass('is-logged-in');
$('#anonUserMenu').addClass('dropdown-content').removeAttr('style');
$('#memberMenu').removeClass('dropdown-content').css('display', 'none');
$('#piano-login .text').text('Sign In');
$('.leftSignin').show();
$('.accountButton').removeClass('accountButton').addClass('rightSignin');
pianoModifySubscribeButton(false);
//unset Piano presence cookie
document.cookie = "onaip_=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"
window.__WT_PUSHLY_WEB_SYNC_KEY__ = null;
});
}
tp = window.tp || [];
_cbq = window._cbq = (window._cbq || []);
tp.push(["init", function() {
if (tp.pianoId.isUserValid()) {
var liUser = tp.pianoId.getUser() || {};
pushLiveConnectPageView(liUser.email || '');
try {
if (typeof tp.pianoId.getUserToken === 'function') {
window.WTPianoUserToken = tp.pianoId.getUserToken();
}
} catch (e) {}
if (window.WTAuthorFollow && typeof window.WTAuthorFollow.refresh === 'function') {
window.WTAuthorFollow.refresh(document, { force: true });
}
var currentUser = getPianoCurrentUser();
var name = currentUser && currentUser.given_name ? currentUser.given_name : '';
if (name) {
$('.dropdown-button-wrap').before('<p class="welcome-text">Welcome, ' + name + '</p>');
} else {
name = "Account";
}
$('#piano-login .text').text(name);
$('.leftSignin').hide();
$('.signinbox-wrapper').addClass('is-logged-in')
$('.rightSignin').removeClass('rightSignin').addClass('accountButton');
$('#anonUserMenu').removeClass('dropdown-content').css('display', 'none');
$('#memberMenu').addClass('dropdown-content').removeAttr('style');
// set Piano presence cookie, for use by ads exclusion
var d = new Date();
d.setTime(d.getTime() + 60 * 60 * 24 * 30 * 1000);
document.cookie = "onaip_=; expires=" + d.toUTCString() + "; path=/";
let ridsToCheck = [
"RV0Z0NV",
"RKI01M5",
"RM3S7B7",
"RVI3L4T",
"RZI5NI9",
"RG4CC1T",
"RPO4N43",
"RR8LZPP",
"RSE7ETP",
"RFALH4B"
];
if (window.marfeelSetUserType) window.marfeelSetUserType(2);
checkAccessList(ridsToCheck, function (hasAccess, isVip) {
if (hasAccess) {
if (window.marfeelSetUserType) window.marfeelSetUserType(3);
} else {
if (window.marfeelSetUserType) window.marfeelSetUserType(2);
}
if (hasAccess) {
_cbq.push(['_acct', 'paid']);
} else {
_cbq.push(['_acct', 'lgdin']);
}
pianoModifySubscribeButton(hasAccess, isVip);
});
wtSyncPushlyIdentity(true);
if (document.cookie.indexOf('onaip_tnetnoc_ylno=') === -1 && tp.api && typeof tp.api.callApi === 'function') {
// Perform another access check for VIP RID
tp.api.callApi('/access/check', { rid: "RDEUKMX" }, function (response) {
if (response.access.granted) {
var d = new Date();
d.setTime(d.getTime() + (7 * 24 * 60 * 60 * 1000));
document.cookie = "onaip_tnetnoc_ylno=; expires=" + d.toUTCString() + "; path=/";
}
});
}
} else {
pushLiveConnectPageView('');
$('#anonUserMenu').addClass('dropdown-content').removeAttr('style');
$('#memberMenu').removeClass('dropdown-content').css('display', 'none');
$('.signinbox-wrapper').removeClass('is-logged-in');
pianoModifySubscribeButton(false);
_cbq.push(['_acct', 'anon']);
if (window.marfeelSetUserType) window.marfeelSetUserType(0);
}
if(window.ShareItemHandler) {
console.log("__APP detected, setting Piano var mobile_webview");
pianoSetCustomVariableCookie('mobile_webview', 'true');
} else {
console.log("__APP not detected");
pianoSetCustomVariableCookie('mobile_webview', 'false');
}
// GA4 integration
tp.setGA4Config({
measurementId: 'G-2KS4V69VVW',
eventParameters: {
send_page_view: false
}
});
}]);
window.addEventListener('resize', function () {
var isLoggedIn = $('.signinbox-wrapper').hasClass('is-logged-in');
if (!isLoggedIn) {
pianoModifySubscribeButton(false);
return;
}
let ridsToCheck = [
"RV0Z0NV",
"RKI01M5",
"RM3S7B7",
"RVI3L4T",
"RZI5NI9",
"RG4CC1T",
"RPO4N43",
"RR8LZPP",
"RSE7ETP",
"RFALH4B"
];
checkAccessList(ridsToCheck, function (hasAccess, isVip) {
pianoModifySubscribeButton(hasAccess, isVip);
});
});
//newsletter signup handler
tp.push(["addHandler", "customEvent", function(event, b, c, d) {
switch (event.eventName) {
case 'submit':
var email = '';
var first_name = '';
var last_name = '';
var boomtrain_id = '';
var newsletter_source = '';
if ((typeof event.params.email != 'undefined') && (event.params.email.length > 0)) {
email = event.params.email;
}
if ((typeof event.params.firstName != 'undefined') && (event.params.firstName.length > 0)) {
first_name = event.params.firstName;
}
if ((typeof event.params.lastName != 'undefined') && (event.params.lastName.length > 0)) {
last_name = event.params.lastName;
}
if ((typeof event.params.boomtrain != 'undefined') && (event.params.boomtrain.length > 0)) {
boomtrain_id = event.params.boomtrain;
}
if ((typeof event.params.newsletterSource != 'undefined') && (event.params.newsletterSource.length > 0)) {
newsletter_source = event.params.newsletterSource;
}
var data = {
email: email,
first_name: first_name,
last_name: last_name,
employer: event.params.employer || '',
job_title: event.params.jobTitle || '',
industry: event.params.industry || '',
zip_code: event.params.zipCode || '',
newsletter_source: newsletter_source
};
data[boomtrain_id] = 'on';
// Ensure CSRF token exists before POST (handles cached pages from Cloudflare)
(async function() {
if (typeof ensureCsrfToken === 'function') {
await ensureCsrfToken();
}
$.post('/newsletters/boomtrain/subscribe/', data, function(response) {
if (!response || !response.success) {
document.dispatchEvent(new CustomEvent('newsletter:signup-result', {
detail: {success: false, message: (response && response.message) || 'We could not complete your signup. Please try again.'}
}));
return;
}
pianoSetCustomVariableCookie(boomtrain_id, 'true');
tp.push(["setCustomVariable", boomtrain_id, "true"]);
document.dispatchEvent(new CustomEvent('newsletter:signup-result', {
detail: {success: true, email: email}
}));
}).fail(function(xhr, status, error) {
var message = xhr.responseJSON && xhr.responseJSON.message
? xhr.responseJSON.message
: 'We could not complete your signup. Please try again.';
document.dispatchEvent(new CustomEvent('newsletter:signup-result', {
detail: {success: false, message: message}
}));
console.error('Newsletter subscription failed:', status, error, message);
});
})();
break;
}
}]);
tp.push(["addHandler", "experienceExecute", (e) => {
console.log("==== experienceExecute, e", e);
const cutoffTime = new Date(window.cltc_score_update_cutofftime);
const existingCLTCScore = window.cltc_score;
const currentTime = new Date();
if (existingCLTCScore && existingCLTCScore !== 'None') {
console.log("==== experienceExecute, CLTC score already exists:", existingCLTCScore)
return
}
const experienceExecuteEvent = e.result.events.find((eventObj) => eventObj.eventType === 'experienceExecute');
if (!experienceExecuteEvent) return;
function findCScoreAndExtractScore(array) {
for (let i = 0; i < array.length; i++) {
if (array[i].startsWith('CScore')) {
const parts = array[i].split(':');
const score = parts[2] || null;
return score;
}
}
return null; // Return null if no 'CScore' element is found
}
function extractSlug(urlPath) {
const pathSegments = urlPath.split('/').filter(segment => segment !== '');
const lastSegment = pathSegments[pathSegments.length - 1];
const slug = lastSegment.split('#')[0];
return slug;
}
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
}]);
var cookieValues = pianoReadCustomVariableCookie();
for (var i in cookieValues) {
tp.push(['setCustomVariable', i, cookieValues[i]]);
}
tp.push(["addHandler", "checkoutComplete", function(conversion){
// Existing Turn pixel
try {
var checkoutPixel = document.createElement("img");
checkoutPixel.src = "https://r.turn.com/r/beacon?b2=IUyCvJTSsOG4y6AIMUOFZhfOHusEkTIx_oTF_HtdfM5VPVedEV-mju3OcbMMcMNBXl-ulRU5bjHDPnr8dCYv8g&cid=";
document.body.append(checkoutPixel);
} catch (e) {}
// Marfeel conversion + upgrade journey
try {
if (window.marfeelTrackSubscribe) window.marfeelTrackSubscribe();
} catch (e) {}
}]);
// Registration is distinct from a returning-user login. Piano invokes this
// after a successful Piano ID registration, so capture source attribution even
// if callback ordering differs from the modal's loggedIn callback.
tp.push(["addHandler", "registrationSuccess", function(data) {
wtSubmitPianoRegistrationAttribution(data);
}]);
// Ensure Piano login/logout functions are available globally for inline handlers (e.g., onclick="pianoLogout()")
try {
if (typeof showPianoLogin === 'function') window.showPianoLogin = showPianoLogin;
if (typeof showPianoRegister === 'function') window.showPianoRegister = showPianoRegister;
if (typeof pianoLogout === 'function') window.pianoLogout = pianoLogout;
} catch (e) {}
/*!@license Copyright 2013, Heinrich Goebl, License: MIT, see https://github.com/hgoebl/mobile-detect.js*/
!function(a,b){a(function(){"use strict";function a(a,b){return null!=a&&null!=b&&a.toLowerCase()===b.toLowerCase()}function c(a,b){var c,d,e=a.length;if(!e||!b)return!1;for(c=b.toLowerCase(),d=0;d<e;++d)if(c===a[d].toLowerCase())return!0;return!1}function d(a){for(var b in a)i.call(a,b)&&(a[b]=new RegExp(a[b],"i"))}function e(a){return(a||"").substr(0,500)}function f(a,b){this.ua=e(a),this._cache={},this.maxPhoneWidth=b||600}var g={};g.mobileDetectRules={phones:{iPhone:"\\biPhone\\b|\\biPod\\b",BlackBerry:"BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",Pixel:"; \\bPixel\\b",HTC:"HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel",Nexus:"Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 5X|Nexus 6",Dell:"Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",Motorola:"Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052",Samsung:"\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F|SM-G610F|SM-G981B|SM-G892A|SM-A530F",LG:"\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",Sony:"SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|SOV34|601SO|F8332",Asus:"Asus.*Galaxy|PadFone.*Mobile",Xiaomi:"^(?!.*\\bx11\\b).*xiaomi.*$|POCOPHONE F1|MI 8|Redmi Note 9S|Redmi Note 5A Prime|N2G47H|M2001J2G|M2001J2I|M1805E10A|M2004J11G|M1902F1G|M2002J9G|M2004J19G|M2003J6A1G",NokiaLumia:"Lumia [0-9]{3,4}",Micromax:"Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",Palm:"PalmSource|Palm",Vertu:"Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature",Pantech:"PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790",Fly:"IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250",Wiko:"KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM",iMobile:"i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)",SimValley:"\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b",Wolfgang:"AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q",Alcatel:"Alcatel",Nintendo:"Nintendo (3DS|Switch)",Amoi:"Amoi",INQ:"INQ",OnePlus:"ONEPLUS",GenericPhone:"Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"},tablets:{iPad:"iPad|iPad.*Mobile",NexusTablet:"Android.*Nexus[\\s]+(7|9|10)",GoogleTablet:"Android.*Pixel C",SamsungTablet:"SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V|SM-P610|SM-T290|SM-T515|SM-T590|SM-T595|SM-T725|SM-T817P|SM-P585N0|SM-T395|SM-T295|SM-T865|SM-P610N|SM-P615|SM-T970|SM-T380|SM-T5950|SM-T905|SM-T231|SM-T500|SM-T860",Kindle:"Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)",SurfaceTablet:"Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",HPTablet:"HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",AsusTablet:"^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\bP027\\b|\\bP024\\b|\\bP00C\\b",BlackBerryTablet:"PlayBook|RIM Tablet",HTCtablet:"HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",MotorolaTablet:"xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",NookTablet:"Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",AcerTablet:"Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30|A3-A40",ToshibaTablet:"Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",LGTablet:"\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",FujitsuTablet:"Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",PrestigioTablet:"PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",LenovoTablet:"Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X|TB-X704F|TB-X104F|TB3-X70F|TB-X705F|TB-8504F|TB3-X70L|TB3-710F|TB-X704L",DellTablet:"Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",YarvikTablet:"Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",MedionTablet:"Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",ArnovaTablet:"97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2",IntensoTablet:"INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004",IRUTablet:"M702pro",MegafonTablet:"MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b",EbodaTablet:"E-Boda (Supreme|Impresspeed|Izzycomm|Essential)",AllViewTablet:"Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)",ArchosTablet:"\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b",AinolTablet:"NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark",NokiaLumiaTablet:"Lumia 2520",SonyTablet:"Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712",PhilipsTablet:"\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b",CubeTablet:"Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT",CobyTablet:"MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010",MIDTablet:"M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10",MSITablet:"MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b",SMiTTablet:"Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)",RockChipTablet:"Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A",FlyTablet:"IQ310|Fly Vision",bqTablet:"Android.*(bq)?.*\\b(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))\\b|Maxwell.*Lite|Maxwell.*Plus",HuaweiTablet:"MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-L09|CMR-AL19",NecTablet:"\\bN-06D|\\bN-08D",PantechTablet:"Pantech.*P4100",BronchoTablet:"Broncho.*(N701|N708|N802|a710)",VersusTablet:"TOUCHPAD.*[78910]|\\bTOUCHTAB\\b",ZyncTablet:"z1000|Z99 2G|z930|z990|z909|Z919|z900",PositivoTablet:"TB07STA|TB10STA|TB07FTA|TB10FTA",NabiTablet:"Android.*\\bNabi",KoboTablet:"Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build",DanewTablet:"DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b",TexetTablet:"NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE",PlaystationTablet:"Playstation.*(Portable|Vita)",TrekstorTablet:"ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab",PyleAudioTablet:"\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",AdvanTablet:"Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",DanyTechTablet:"Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",GalapadTablet:"Android [0-9.]+; [a-z-]+; \\bG1\\b",MicromaxTablet:"Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",KarbonnTablet:"Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",AllFineTablet:"Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",PROSCANTablet:"\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b",YONESTablet:"BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026",ChangJiaTablet:"TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503",GUTablet:"TX-A1301|TX-M9002|Q702|kf026",PointOfViewTablet:"TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10",OvermaxTablet:"OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027",HCLTablet:"HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync",DPSTablet:"DPS Dream 9|DPS Dual 7",VistureTablet:"V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10",CrestaTablet:"CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989",MediatekTablet:"\\bMT8125|MT8389|MT8135|MT8377\\b",ConcordeTablet:"Concorde([ ]+)?Tab|ConCorde ReadMan",GoCleverTablet:"GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042",ModecomTablet:"FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003",VoninoTablet:"\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b",ECSTablet:"V07OT2|TM105A|S10OT1|TR10CS1",StorexTablet:"eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab",VodafoneTablet:"SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497|VFD 1400",EssentielBTablet:"Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2",RossMoorTablet:"RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711",iMobileTablet:"i-mobile i-note",TolinoTablet:"tolino tab [0-9.]+|tolino shine",AudioSonicTablet:"\\bC-22Q|T7-QC|T-17B|T-17P\\b",AMPETablet:"Android.* A78 ",SkkTablet:"Android.* (SKYPAD|PHOENIX|CYCLOPS)",TecnoTablet:"TECNO P9|TECNO DP8D",JXDTablet:"Android.* \\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b",iJoyTablet:"Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)",FX2Tablet:"FX2 PAD7|FX2 PAD10",XoroTablet:"KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151",ViewsonicTablet:"ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a",VerizonTablet:"QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1",OdysTablet:"LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10",CaptivaTablet:"CAPTIVA PAD",IconbitTablet:"NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S",TeclastTablet:"T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi",OndaTablet:"\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\b[\\s]+|V10 \\b4G\\b",JaytechTablet:"TPC-PA762",BlaupunktTablet:"Endeavour 800NG|Endeavour 1010",DigmaTablet:"\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b",EvolioTablet:"ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b",LavaTablet:"QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b",AocTablet:"MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712",MpmanTablet:"MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\\bMPG7\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010",CelkonTablet:"CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b",WolderTablet:"miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b",MediacomTablet:"M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA",MiTablet:"\\bMI PAD\\b|\\bHM NOTE 1W\\b",NibiruTablet:"Nibiru M1|Nibiru Jupiter One",NexoTablet:"NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI",LeaderTablet:"TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100",UbislateTablet:"UbiSlate[\\s]?7C",PocketBookTablet:"Pocketbook",KocasoTablet:"\\b(TB-1207)\\b",HisenseTablet:"\\b(F5281|E2371)\\b",Hudl:"Hudl HT7S3|Hudl 2",TelstraTablet:"T-Hub2",GenericTablet:"Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bTP750\\b|\\bQTAQZ3\\b|WVT101|TM1088|KT107"},oss:{AndroidOS:"Android",BlackBerryOS:"blackberry|\\bBB10\\b|rim tablet os",PalmOS:"PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino",SymbianOS:"Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b",WindowsMobileOS:"Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Windows Mobile|Windows Phone [0-9.]+|WCE;",WindowsPhoneOS:"Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",iOS:"\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",iPadOS:"CPU OS 13",SailfishOS:"Sailfish",MeeGoOS:"MeeGo",MaemoOS:"Maemo",JavaOS:"J2ME/|\\bMIDP\\b|\\bCLDC\\b",webOS:"webOS|hpwOS",badaOS:"\\bBada\\b",BREWOS:"BREW"},uas:{Chrome:"\\bCrMo\\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?",Dolfin:"\\bDolfin\\b",Opera:"Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+$|Coast/[0-9.]+",Skyfire:"Skyfire",Edge:"\\bEdgiOS\\b|Mobile Safari/[.0-9]* Edge",IE:"IEMobile|MSIEMobile",Firefox:"fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS",Bolt:"bolt",TeaShark:"teashark",Blazer:"Blazer",Safari:"Version((?!\\bEdgiOS\\b).)*Mobile.*Safari|Safari.*Mobile|MobileSafari",WeChat:"\\bMicroMessenger\\b",UCBrowser:"UC.*Browser|UCWEB",baiduboxapp:"baiduboxapp",baidubrowser:"baidubrowser",DiigoBrowser:"DiigoBrowser",Mercury:"\\bMercury\\b",ObigoBrowser:"Obigo",NetFront:"NF-Browser",GenericBrowser:"NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",PaleMoon:"Android.*PaleMoon|Mobile.*PaleMoon"},props:{Mobile:"Mobile/[VER]",Build:"Build/[VER]",Version:"Version/[VER]",VendorID:"VendorID/[VER]",iPad:"iPad.*CPU[a-z ]+[VER]",iPhone:"iPhone.*CPU[a-z ]+[VER]",iPod:"iPod.*CPU[a-z ]+[VER]",Kindle:"Kindle/[VER]",Chrome:["Chrome/[VER]","CriOS/[VER]","CrMo/[VER]"],Coast:["Coast/[VER]"],Dolfin:"Dolfin/[VER]",Firefox:["Firefox/[VER]","FxiOS/[VER]"],Fennec:"Fennec/[VER]",Edge:"Edge/[VER]",IE:["IEMobile/[VER];","IEMobile [VER]","MSIE [VER];","Trident/[0-9.]+;.*rv:[VER]"],NetFront:"NetFront/[VER]",NokiaBrowser:"NokiaBrowser/[VER]",Opera:[" OPR/[VER]","Opera Mini/[VER]","Version/[VER]"],"Opera Mini":"Opera Mini/[VER]","Opera Mobi":"Version/[VER]",UCBrowser:["UCWEB[VER]","UC.*Browser/[VER]"],MQQBrowser:"MQQBrowser/[VER]",MicroMessenger:"MicroMessenger/[VER]",baiduboxapp:"baiduboxapp/[VER]",baidubrowser:"baidubrowser/[VER]",SamsungBrowser:"SamsungBrowser/[VER]",Iron:"Iron/[VER]",Safari:["Version/[VER]","Safari/[VER]"],Skyfire:"Skyfire/[VER]",Tizen:"Tizen/[VER]",Webkit:"webkit[ /][VER]",PaleMoon:"PaleMoon/[VER]",SailfishBrowser:"SailfishBrowser/[VER]",Gecko:"Gecko/[VER]",Trident:"Trident/[VER]",Presto:"Presto/[VER]",Goanna:"Goanna/[VER]",iOS:" \\bi?OS\\b [VER][ ;]{1}",Android:"Android [VER]",Sailfish:"Sailfish [VER]",BlackBerry:["BlackBerry[\\w]+/[VER]","BlackBerry.*Version/[VER]","Version/[VER]"],BREW:"BREW [VER]",Java:"Java/[VER]","Windows Phone OS":["Windows Phone OS [VER]","Windows Phone [VER]"],"Windows Phone":"Windows Phone [VER]","Windows CE":"Windows CE/[VER]","Windows NT":"Windows NT [VER]",Symbian:["SymbianOS/[VER]","Symbian/[VER]"],webOS:["webOS/[VER]","hpwOS/[VER];"]},utils:{Bot:"Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp|AspiegelBot",MobileBot:"Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2",DesktopMode:"WPDesktop",TV:"SonyDTV|HbbTV",WebKit:"(webkit)[ /]([\\w.]+)",Console:"\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",Watch:"SM-V700"}},g.detectMobileBrowsers={fullPattern:/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,
shortPattern:/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,tabletPattern:/android|ipad|playbook|silk/i};var h,i=Object.prototype.hasOwnProperty;return g.FALLBACK_PHONE="UnknownPhone",g.FALLBACK_TABLET="UnknownTablet",g.FALLBACK_MOBILE="UnknownMobile",h="isArray"in Array?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)},function(){var a,b,c,e,f,j,k=g.mobileDetectRules;for(a in k.props)if(i.call(k.props,a)){for(b=k.props[a],h(b)||(b=[b]),f=b.length,e=0;e<f;++e)c=b[e],j=c.indexOf("[VER]"),j>=0&&(c=c.substring(0,j)+"([\\w._\\+]+)"+c.substring(j+5)),b[e]=new RegExp(c,"i");k.props[a]=b}d(k.oss),d(k.phones),d(k.tablets),d(k.uas),d(k.utils),k.oss0={WindowsPhoneOS:k.oss.WindowsPhoneOS,WindowsMobileOS:k.oss.WindowsMobileOS}}(),g.findMatch=function(a,b){for(var c in a)if(i.call(a,c)&&a[c].test(b))return c;return null},g.findMatches=function(a,b){var c=[];for(var d in a)i.call(a,d)&&a[d].test(b)&&c.push(d);return c},g.getVersionStr=function(a,b){var c,d,e,f,h=g.mobileDetectRules.props;if(i.call(h,a))for(c=h[a],e=c.length,d=0;d<e;++d)if(f=c[d].exec(b),null!==f)return f[1];return null},g.getVersion=function(a,b){var c=g.getVersionStr(a,b);return c?g.prepareVersionNo(c):NaN},g.prepareVersionNo=function(a){var b;return b=a.split(/[a-z._ \/\-]/i),1===b.length&&(a=b[0]),b.length>1&&(a=b[0]+".",b.shift(),a+=b.join("")),Number(a)},g.isMobileFallback=function(a){return g.detectMobileBrowsers.fullPattern.test(a)||g.detectMobileBrowsers.shortPattern.test(a.substr(0,4))},g.isTabletFallback=function(a){return g.detectMobileBrowsers.tabletPattern.test(a)},g.prepareDetectionCache=function(a,c,d){if(a.mobile===b){var e,h,i;return(h=g.findMatch(g.mobileDetectRules.tablets,c))?(a.mobile=a.tablet=h,void(a.phone=null)):(e=g.findMatch(g.mobileDetectRules.phones,c))?(a.mobile=a.phone=e,void(a.tablet=null)):void(g.isMobileFallback(c)?(i=f.isPhoneSized(d),i===b?(a.mobile=g.FALLBACK_MOBILE,a.tablet=a.phone=null):i?(a.mobile=a.phone=g.FALLBACK_PHONE,a.tablet=null):(a.mobile=a.tablet=g.FALLBACK_TABLET,a.phone=null)):g.isTabletFallback(c)?(a.mobile=a.tablet=g.FALLBACK_TABLET,a.phone=null):a.mobile=a.tablet=a.phone=null)}},g.mobileGrade=function(a){var b=null!==a.mobile();return a.os("iOS")&&a.version("iPad")>=4.3||a.os("iOS")&&a.version("iPhone")>=3.1||a.os("iOS")&&a.version("iPod")>=3.1||a.version("Android")>2.1&&a.is("Webkit")||a.version("Windows Phone OS")>=7||a.is("BlackBerry")&&a.version("BlackBerry")>=6||a.match("Playbook.*Tablet")||a.version("webOS")>=1.4&&a.match("Palm|Pre|Pixi")||a.match("hp.*TouchPad")||a.is("Firefox")&&a.version("Firefox")>=12||a.is("Chrome")&&a.is("AndroidOS")&&a.version("Android")>=4||a.is("Skyfire")&&a.version("Skyfire")>=4.1&&a.is("AndroidOS")&&a.version("Android")>=2.3||a.is("Opera")&&a.version("Opera Mobi")>11&&a.is("AndroidOS")||a.is("MeeGoOS")||a.is("Tizen")||a.is("Dolfin")&&a.version("Bada")>=2||(a.is("UC Browser")||a.is("Dolfin"))&&a.version("Android")>=2.3||a.match("Kindle Fire")||a.is("Kindle")&&a.version("Kindle")>=3||a.is("AndroidOS")&&a.is("NookTablet")||a.version("Chrome")>=11&&!b||a.version("Safari")>=5&&!b||a.version("Firefox")>=4&&!b||a.version("MSIE")>=7&&!b||a.version("Opera")>=10&&!b?"A":a.os("iOS")&&a.version("iPad")<4.3||a.os("iOS")&&a.version("iPhone")<3.1||a.os("iOS")&&a.version("iPod")<3.1||a.is("Blackberry")&&a.version("BlackBerry")>=5&&a.version("BlackBerry")<6||a.version("Opera Mini")>=5&&a.version("Opera Mini")<=6.5&&(a.version("Android")>=2.3||a.is("iOS"))||a.match("NokiaN8|NokiaC7|N97.*Series60|Symbian/3")||a.version("Opera Mobi")>=11&&a.is("SymbianOS")?"B":(a.version("BlackBerry")<5||a.match("MSIEMobile|Windows CE.*Mobile")||a.version("Windows Mobile")<=5.2,"C")},g.detectOS=function(a){return g.findMatch(g.mobileDetectRules.oss0,a)||g.findMatch(g.mobileDetectRules.oss,a)},g.getDeviceSmallerSide=function(){return window.screen.width<window.screen.height?window.screen.width:window.screen.height},f.prototype={constructor:f,mobile:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.mobile},phone:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.phone},tablet:function(){return g.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.tablet},userAgent:function(){return this._cache.userAgent===b&&(this._cache.userAgent=g.findMatch(g.mobileDetectRules.uas,this.ua)),this._cache.userAgent},userAgents:function(){return this._cache.userAgents===b&&(this._cache.userAgents=g.findMatches(g.mobileDetectRules.uas,this.ua)),this._cache.userAgents},os:function(){return this._cache.os===b&&(this._cache.os=g.detectOS(this.ua)),this._cache.os},version:function(a){return g.getVersion(a,this.ua)},versionStr:function(a){return g.getVersionStr(a,this.ua)},is:function(b){return c(this.userAgents(),b)||a(b,this.os())||a(b,this.phone())||a(b,this.tablet())||c(g.findMatches(g.mobileDetectRules.utils,this.ua),b)},match:function(a){return a instanceof RegExp||(a=new RegExp(a,"i")),a.test(this.ua)},isPhoneSized:function(a){return f.isPhoneSized(a||this.maxPhoneWidth)},mobileGrade:function(){return this._cache.grade===b&&(this._cache.grade=g.mobileGrade(this)),this._cache.grade}},"undefined"!=typeof window&&window.screen?f.isPhoneSized=function(a){return a<0?b:g.getDeviceSmallerSide()<=a}:f.isPhoneSized=function(){},f._impl=g,f.version="1.4.5 2021-03-13",f})}(function(a){if("undefined"!=typeof module&&module.exports)return function(a){module.exports=a()};if("function"==typeof define&&define.amd)return define;if("undefined"!=typeof window)return function(a){window.MobileDetect=a()};throw new Error("unknown environment")}());
$(document).ready(function(){
if (window.IS_ADS_DISPLAY_ENABLED && typeof loadAds === 'function') {
loadAds();
}
var md = new MobileDetect(window.navigator.userAgent);
if(md.tablet()) {
pianoSetCustomVariableCookie("piano-device-type", "tablet");
} else if (md.mobile()) {
pianoSetCustomVariableCookie("piano-device-type", "mobile");
} else if (window.navigator.userAgent.toLowerCase() === 'twtapp') {
let viewPWidth = window.innerWidth || document.documentElement.clientWidth;
if (viewPWidth < 800) {
pianoSetCustomVariableCookie("piano-device-type", "mobile");
} else {
pianoSetCustomVariableCookie("piano-device-type", "tablet");
}
} else {
pianoSetCustomVariableCookie("piano-device-type", "desktop");
}
$('#nav_root_signin').click(function(evt){
if (tp.pianoId){
if(tp.pianoId.isUserValid()) {
return;
}
}
evt.preventDefault();
showPianoLogin();
});
});
</script>
<!-- End Piano My-Account Section -->
<script type="text/javascript">
function updateMobilePianoTopRibbon() {
var isDesktop = $(window).width() > 800;
var $header = $('.header-container');
var $ribbon = $('.piano-top-ribbon');
var ribbon = $ribbon.get(0);
if (!$ribbon.length || !ribbon) {
return;
}
if (isDesktop) {
$ribbon.removeClass('is-mobile-fixed');
$header.css('padding-bottom', '');
return;
}
var hasContent = ribbon.children.length > 0;
if (!hasContent) {
$ribbon.removeClass('is-mobile-fixed');
$header.css('padding-bottom', '');
return;
}
$ribbon.addClass('is-mobile-fixed');
$header.css('padding-bottom', ribbon.scrollHeight + 'px');
}
function updateStickyNavState() {
var scrollTop = $(window).scrollTop();
var isDesktop = $(window).width() > 800;
if (isDesktop) {
$('.header-container').removeClass('mobile-scrolled');
if (scrollTop > 105) {
$('.header-container').addClass('sticky');
$('body').addClass('has-sticky-nav');
$('body').css('padding-top', '157px');
$('#nav_root_email-sticky-icon').show();
updateMenuAccountOptions(true);
} else {
$('.header-container').removeClass('sticky');
$('body').removeClass('has-sticky-nav');
$('body').css('padding-top', 0);
$('#nav_root_email-sticky-icon').hide();
updateMenuAccountOptions(false);
}
} else {
var isTopNavVisible = scrollTop <= 24;
$('.header-container').removeClass('sticky');
$('body').removeClass('has-sticky-nav');
$('body').css('padding-top', 0);
$('#nav_root_email-sticky-icon').hide();
updateMenuAccountOptions(false);
$('.header-container').toggleClass('mobile-scrolled', !isTopNavVisible);
}
updateMobilePianoTopRibbon();
}
$(window).on('scroll resize', updateStickyNavState);
$(document).ready(function() {
updateStickyNavState();
var ribbon = document.querySelector('.piano-top-ribbon');
if (!ribbon || typeof ResizeObserver === 'undefined') {
return;
}
new ResizeObserver(updateMobilePianoTopRibbon).observe(ribbon);
});
</script>
<script>
function conditionalBack(fallbackUrl) {
fallbackUrl = fallbackUrl || '/';
var prevPage = window.location.href;
window.history.go(-1);
setTimeout(function(){
if (window.location.href == prevPage) {
window.location.href = fallbackUrl;
}
}, 500);
}
</script>
<!-- Begin Global Scripts -->
<script src="/static/js/global.js"></script>
<!--End Global Scripts -->
<script>
if (Cookies.get('_pc_newsletter-notification-clicked')) {
document.getElementById('newsletter-signup-icon-badge').remove();
}
</script>
<!--START Lightbox Javascript
<script type="text/javascript">
(function () {
var e = document.createElement('script'); e.type = 'text/javascript'; e.async = true;
e.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'www.lightboxcdn.com/vendor/a03ff559-e73a-4fb6-91a2-074fb72400fe/lightbox.js?mb=' + (new Date().getTime());
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(e, s);
})();
</script>
END Lightbox Javascript-->
<script>
/*
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/twt-service-worker.js')
.then(function (registration) {
console.log('Service Worker registered with scope:', registration.scope);
})
.catch(function (error) {
console.log('Service Worker registration failed:', error);
});
}
*/
function slugifyPathname() {
let pathname = window.location.pathname;
// Remove leading and trailing slashes
pathname = pathname.replace(/^\/|\/$/g, '');
// Replace special characters and spaces with hyphens, and convert to lowercase
pathname = pathname.replace(/[^a-zA-Z0-9\- ]/g, '').replace(/\s+/g, '-').toLowerCase();
return pathname;
}
// Get the current page path and create a unique ID
const pagePath = window.location.pathname;
const pageID = 'twt-lpl-' + slugifyPathname();
// Child templates can opt out when their in-page state (for example, audio)
// must survive a return to the tab.
const visibilityReloadEnabled = true;
function checkReload() {
if (!visibilityReloadEnabled) {
console.log("__APP checkReload disabled by template");
return;
}
console.log("__APP checkReload");
const timestamp = sessionStorage.getItem(pageID);
const currentTime = Date.now();
// Set the reload threshold to 10 minutes if the page path starts with "/news", or 5 minute otherwise
const reloadThreshold = pagePath.startsWith('/news/20') ? 10 * 60 * 1000 : 5 * 60 * 1000;
if (!timestamp || currentTime - parseInt(timestamp) > reloadThreshold) {
sessionStorage.setItem(pageID, currentTime.toString());
window.location.reload();
}
}
if (sessionStorage.getItem(pageID) === null) {
console.log("__APP lpl not found");
// Reload if this is a PWA and the page is in standalone mode
if (window.matchMedia('(display-mode: standalone)').matches) {
sessionStorage.setItem(pageID, Date.now() .toString());
window.location.reload();
} else {
sessionStorage.setItem(pageID, Date.now() .toString());
}
}
document.addEventListener('visibilitychange', function() {
if (document.visibilityState === 'visible') {
console.log("__APP visibilitychange event");
checkReload();
}
});
window.addEventListener('pageshow', function (event) {
console.log("__APP pageshow event");
//checkReload();
});
</script>
<!-- Marfeel Analytics -->
<script type="text/javascript">
!function(){"use strict";function e(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c=document.createElement("script");c.src=e,t?c.type="module":(c.async=!0,c.type="text/javascript",c.setAttribute("nomodule",""));var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(c,n)}!function(t,c){!function(t,c,n){var a,o,r;n.accountId=c,null!==(a=t.marfeel)&&void 0!==a||(t.marfeel={}),null!==(o=(r=t.marfeel).cmd)&&void 0!==o||(r.cmd=[]),t.marfeel.config=n;var i="https://sdk.mrf.io/statics";e(i+"/marfeel-sdk.js?id="+c,!0),e(i+"/marfeel-sdk.es5.js?id="+c,!1)}(t,c,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{})}(window,7452,{} /* Config */)}();
window.marfeel = window.marfeel || { cmd: [] };
</script>
<!-- End Marfeel Analytics -->
<script>
(function(src){var a=document.createElement("script");a.type="text/javascript";a.async=true;a.src=src;var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b)})("//experience.tinypass.com/xbuilder/experience/load?aid=hph4LAYuC6");
</script>
<script>
tp = window.tp || [];
console.log('TP setUsePianoIdUserProvider');
tp.push(["setUsePianoIdUserProvider", true ]); // Piano ID Initialization
</script>
<div class="loader"></div>
<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a48c0909795ec018',t:'MTc5MTcwMjUyNA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
</html>