{"version":3,"sources":["prebid.js","iiq.js","pricing.js","https://adncdn.net/0"],"names":["window","document","URL_PATHS_BLACKLIST","Object","freeze","adsConfig","id","size","position","isLazyLoaded","refreshIteration","sizeMapping","desktop","tablet","mobile","refreshTime","biddersWhiteList","appnexus","magnite","msft","pubmatic","rubicon","openx","unruly","country","adagio","adyoulike","amx","anyclip","contxtful","conversant","criteo","exco","fluct","gamoshi","ix","kueezrtb","medianet","oms","onetag","pixfuture","programmaticx","richaudience","rise","seedtag","sharethrough","smartadserver","smilewanted","sovrn","sparteo","ssp_geniee","teads","underdogmedia","vidazoo","yandex","getCountry","bidders","bidder","params","zoneId","placementId","siteId","tagId","pubId","networkId","org","unit","delDomain","filter","name","toLowerCase","replace","includes","bidderSettings","storageAllowed","adnimation","sonobi","taboola","bidderNames","endsWith","map","s2sBidders","s2sAliases","fromEntries","slice","GDPR_GEOS","needsGdpr","async","maxMs","Promise","resolve","start","Date","now","check","__tcfapi","setTimeout","isGdprRequired","pbjsConfig","s2sConfig","enabled","accountId","endpoint","syncEndpoint","timeout","extPrebid","aliases","priceGranularity","currency","adServerCurrency","conversionRateFile","defaultRates","USD","EUR","ratesTTL","floors","enforcement","enforceJS","enforcePBS","floorDeals","bidAdjustment","data","skipRate","schema","fields","values","banner","native","video","default","gvlMapping","amxS2S","magniteS2S","riseS2S","kueezrtbS2S","adagioS2S","consentManagement","gdpr","cmpApi","defaultGdprScope","actionTimeout","usp","useBidCache","schain","validation","config","ver","complete","nodes","asi","sid","hp","userSync","iframeEnabled","filterSettings","iframe","userIds","storage","type","expires","pid","partner","refreshInSeconds","detectMissingSizes","aliasSyncEnabled","auctionOptions","suppressStaleRender","version","customer","realTimeData","dataProviders","waitForIt","adServerTargeting","gtag","dataLayer","push","arguments","pbjs","que","googletag","cmd","pubads","addEventListener","onImpressionViewable","setConfig","collapseDiv","_taboola","GA_ID","PREBID_TIMEOUT_MS","createScript","src","preCreate","scriptEl","querySelector","console","warn","attemptLoad","createElement","fetchPriority","defer","remove","head","appendChild","pathname","location","some","path","isBlacklistedUrl","all","then","log","handleSlotRenderEnded","removeEventListener","IntentIqObject","intentIq_2072952453","adnpbjs","callback","main","timeoutInMillis","ABTestingConfigurationSource","manualWinReportEnabled","domainName","host","vrBrowserBlackList","gamParameterName","onEvent","reportExternalWin","biddingPlatformId","partnerAuctionId","auctionId","bidderCode","prebidAuctionId","cpm","originalCpm","originalCurrency","status","adUnitCode","err","error","initIiq","catch","setAttribute","adUnits","slotsMap","lazyLoader","constructor","margin","this","observer","IntersectionObserver","onIntersect","rootMargin","entries","forEach","entry","isIntersecting","cb","target","dataset","lazyCallback","unobserve","add","element","getBoundingClientRect","top","innerHeight","cbName","Math","random","toString","observe","activeSlotIds","newPbjsAdUnits","viewportType","screen","width","event","slot","slotId","getSlotElementId","adUnitPath","getAdUnitPath","adUnit","timeoutMs","adUnitToRefresh","getSlots","at","targeting","slotEl","getElementById","runBids","refresh","message","refreshAd","collectAds","length","adsEl","querySelectorAll","adPath","adpath","sizes","slotBidders","ATF","Content","BTF","Side","SideATF","Sticky","publisherId","STANDARD_SIZES","prebidSizes","viewport","Array","isArray","standardSizes","every","w","h","isNative","sw","sh","hasOnlyStandardSizes","bids","code","mediaTypes","setBidderConfig","ortb2","source","ext","pbjsBids","requestBids","adUnitCodes","bidsBackHandler","setTargetingForGPTAsync","runPrebidBids","allSettled","promise","ms","race","_","reject","Error","e","createNativeCmd","onload","performance","mark","destroyNativeCmd","footerEl","innerHTML","createNative","createAd","slotName","addSize","build","defineSlot","defineSizeMapping","addService","intent_iq_group","Language","documentElement","lang","pbjsAdUnit","find","addAdUnits","init","enableServices","display","getConfig","disableInitialLoad","createAdCmd","destroyAd","destroySlots","idx","indexOf","splice","removeAttribute","parentElement","destroyAdCmd","createInterstitial","createInterstitialCmd","getIpInfo","cached","localStorage","getItem","JSON","parse","url","res","fetch","ok","ipInfo","json","setItem","stringify","removeItem","adn","destroyNative","onDomReady","callbacks","interval","setInterval","readyState","clearInterval","observeSlots","handleAdded","node","getAttribute","handleRemoved","isAdSlot","hasAttribute","nodeList","from","nodeType","Node","ELEMENT_NODE","flatMap","concat","MutationObserver","mutations","mutation","addedNodes","removedNodes","attributeName","isStyleChanged","oldStyle","oldValue","newStyle","isVisibilityChanged","style","getComputedStyle","isDisplayed","isVisible","visibility","subtree","childList","attributes","attributeFilter","attributeOldValue","defineOutOfPageSlot","enums","OutOfPageFormat","INTERSTITIAL","injectTaboolaFooterFeed","CONTAINER_ID","GRID_WIDGETS","GRID_CONTAINERS","ARTICLE_SELECTORS","body","classList","contains","test","findAll","sels","s","insertAfter","referenceNode","nodeToInsert","parent","parentNode","insertBefore","nextSibling","buildTaboolaNodes","script","text","tries","tick","gridContainers","widgetCandidates","c","closest","join","Boolean","widgetTarget","mains","n","el","col","className","isSidebarish","pool","pickBottomMostMain","articleCandidates","article","articleWidget","tryInject","debug","safeEscape","CSS","escape","String","onpage","textAlign","marginTop","marginBottom","minHeight","alreadyHasAd","container","addSideBarSectionAdUnits","href","innerWidth","__sidebarAdsInjected","selectors","sel","found","wrap","candidates","cls","classLikely","widthLikely","parseFloat","pw","NaN","Number","isNaN","widgetCount","paraCount","sort","a","b","ax","left","bx","findSidebarContainer","injected","children","tagName","ad0","before","prepend","ad1","after","append","once","addCloseButton","stickyBannerSizeDiv","innerText","right","height","lineHeight","color","borderRadius","backgroundColor","cursor","fontSize","border","transition","onclick","stickyBannerParent","justifyContent","bottom","zIndex","stickyBanner","getElementsByTagName","flag","isEmpty","createStickyBanner","makeAd","i","wrapper","maxWidth","inject","paras","p","next","nextElementSibling","ad","insertAdjacentElement","disconnect","addInContentUnits","startsWith","addInContentRankingsOnlyUnits","inContentAdUnit","h2Section","cloneNode","addInContent30Under30AdUnits","minWidth","addAtfUnit","baseEl","cat0Elements","pElement","cat1Element","addCategoryAdUnits","section0Elements","section1Elements","addSectionAdUnits","addSideBarArticleAdUnits","suffix","boxSizing","containers","heading","table","prev","previousElementSibling","addInContentRatingAdUnits","addAtfENGLISHUnit","stack"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5HA;ACAA;CCCA,eAAgBA,EAAQC,GAMtB,MAAMC,EAAsBC,OAAOC,OAAO,CAExC,oBACA,4BACA,UACA,uEACA,kBAGIC,EAAYF,OAAOC,OAAO,CAC9B,yCAA0C,CACtCE,GAAM,yCACNC,KAAQ,CACJ,CAAC,IAAK,IACN,CAAC,IAAK,KAEVC,SAAY,MACZC,cAAgB,EAChBC,iBAAoB,EACpBC,YAAe,CACXC,QAAW,CACP,CAAC,IAAK,KAEVC,OAAU,CACN,CAAC,IAAK,KAEVC,OAAU,CACN,CAAC,IAAK,MAGdC,YAAe,KAEnB,wCAAyC,CACrCT,GAAM,wCACNC,KAAQ,CACJ,CAAC,IAAK,IACN,CAAC,IAAK,KACN,CAAC,IAAK,IACN,CAAC,IAAK,KAEVC,SAAY,UACZC,cAAgB,EAChBC,iBAAoB,EACpBC,YAAe,CACXC,QAAW,CACP,CAAC,IAAK,IACN,CAAC,IAAK,KAEVC,OAAU,CACN,CAAC,IAAK,KAEVC,OAAU,CACN,CAAC,IAAK,IACN,CAAC,IAAK,OAG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","file":"PV99bKw1Iu","sourcesContent":[null,null,null,"// Last updated: 2026-09-07T12:53:25.357Z by Gina\r\n(async function(window, document) {\r\n\r\n// ----------------------------------------------\r\n  // Configuration\r\n  // ----------------------------------------------\r\n\r\n  const URL_PATHS_BLACKLIST = Object.freeze([\r\n    // Add a list of URL paths to exclude 👇\r\n    \"/modys-architects\",\r\n    \"/jewish-billionaires-2026\",\r\n    \"/events\",\r\n    \"/from-a-private-investment-into-a-company-with-more-than-100-agents/\",\r\n    \"/2026under30/\"\r\n  ]);\r\n\r\n  const adsConfig = Object.freeze({\r\n    \"/339474670,26228694/ForbesIL/AudioUnit\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/AudioUnit\",\r\n        \"size\": [\r\n            [320, 50],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"ATF\",\r\n        \"isLazyLoaded\": false,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90]\r\n            ],\r\n            \"mobile\": [\r\n                [320, 50]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/Rating_0\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/Rating_0\",\r\n        \"size\": [\r\n            [320, 50],\r\n            [320, 100],\r\n            [728, 90],\r\n            [970, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [970, 90]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90]\r\n            ],\r\n            \"mobile\": [\r\n                [320, 50],\r\n                [320, 100]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/Rating_1\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/Rating_1\",\r\n        \"size\": [\r\n            [320, 50],\r\n            [320, 100],\r\n            [728, 90],\r\n            [970, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [970, 90]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90]\r\n            ],\r\n            \"mobile\": [\r\n                [320, 50],\r\n                [320, 100]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/InContent_2\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/InContent_2\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/InContent_3\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/InContent_3\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/InContent_4\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/InContent_4\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/InContent_5\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/InContent_5\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/InContent_6\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/InContent_6\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/InContent_7\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/InContent_7\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/InContent_8\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/InContent_8\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/InContent_9\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/InContent_9\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/Sticky_Footer\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/Sticky_Footer\",\r\n        \"size\": [\r\n            [320, 50],\r\n            [728, 90],\r\n            [970, 90]\r\n        ],\r\n        \"position\": \"Sticky\",\r\n        \"isLazyLoaded\": false,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [970, 90]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90]\r\n            ],\r\n            \"mobile\": [\r\n                [320, 50]\r\n            ]\r\n        },\r\n        \"refreshTime\": 35000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/Category_0\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/Category_0\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/Side_0\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/Side_0\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [300, 600]\r\n        ],\r\n        \"position\": \"Side\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [300, 600],\r\n                [300, 250]\r\n            ],\r\n            \"tablet\": [\r\n                [300, 600],\r\n                [300, 250]\r\n            ],\r\n            \"mobile\": [\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/Side_1\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/Side_1\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [300, 600]\r\n        ],\r\n        \"position\": \"Side\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [300, 600],\r\n                [300, 250]\r\n            ],\r\n            \"tablet\": [\r\n                [300, 600],\r\n                [300, 250]\r\n            ],\r\n            \"mobile\": [\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/InContent_0\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/InContent_0\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/InContent_1\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/InContent_1\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90],\r\n                [300, 250],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/Section_1\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/Section_1\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90],\r\n            [970, 90],\r\n            [1140, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [970, 90],\r\n                [1140, 90]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/Category_1\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/Category_1\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/ATF_HP\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/ATF_HP\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90],\r\n            [970, 250],\r\n            [970, 90]\r\n        ],\r\n        \"position\": \"ATF\",\r\n        \"isLazyLoaded\": false,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [970, 250],\r\n                [970, 90]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    },\r\n    \"/339474670,26228694/ForbesIL/Section_0\": {\r\n        \"id\": \"/339474670,26228694/ForbesIL/Section_0\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [336, 280],\r\n            [728, 90],\r\n            [970, 90],\r\n            [1140, 90]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [970, 90],\r\n                [1140, 90]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 20000\r\n    }\r\n});\r\n\r\n  const biddersWhiteList = Object.freeze({\r\n    \"appnexus\":[\"US\",\"GB\",\"CA\",\"IL\",\"JP\",\"AU\",\"NZ\",\"IN\",\"BR\",\"ID\",\"EG\",\"AE\",\"SA\",\"AR\",\"CL\",\"MY\",\"PH\",\"PT\",\"HK\",\"SG\",\"NL\",\"BE\",\"IE\",\"NO\",\"SE\",\"FI\",\"DK\",\"CH\",\"DE\",\"TR\",\"PL\",\"RO\",\"CZ\",\"ZA\"],\r\n    \"magnite\":[\"US\",\"GB\",\"IL\",\"PS\",\"TR\",\"CA\",\"DE\",\"GH\",\"ZA\",\"FR\",\"ES\",\"IT\",\"AU\",\"NZ\",\"IN\",\"MX\",\"PL\",\"EC\",\"KR\",\"UA\",\"SA\",\"NL\",\"BE\",\"BD\",\"AE\",\"SG\",\"AM\",\"JP\",\"BR\",\"NG\",\"TH\",\"MY\",\"HK\",\"UZ\",\"SE\",\"AT\",\"PH\",\"VN\",\"CL\",\"IE\",\"CH\",\"NO\",\"FI\",\"DK\",\"PT\"],\r\n    \"msft\":[\"US\",\"GB\",\"CA\",\"IL\",\"JP\",\"AU\",\"NZ\",\"IN\",\"BR\",\"ID\",\"EG\",\"AE\",\"SA\",\"AR\",\"CL\",\"MY\",\"PH\",\"PT\",\"HK\",\"SG\",\"NL\",\"BE\",\"IE\",\"NO\",\"SE\",\"FI\",\"DK\",\"CH\",\"DE\",\"TR\",\"PL\",\"RO\",\"CZ\",\"ZA\"],\r\n    \"pubmatic\":[\"US\",\"CA\",\"GB\",\"IE\",\"AU\",\"NZ\",\"DE\",\"AT\",\"CH\",\"NL\",\"BE\",\"NO\",\"SE\",\"FI\",\"DK\",\"IL\",\"PR\"],\r\n    \"rubicon\":[\"US\",\"GB\",\"IL\",\"PS\",\"TR\",\"CA\",\"DE\",\"GH\",\"ZA\",\"FR\",\"ES\",\"IT\",\"AU\",\"NZ\",\"IN\",\"MX\",\"PL\",\"EC\",\"KR\",\"UA\",\"SA\",\"NL\",\"BE\",\"BD\",\"AE\",\"SG\",\"AM\",\"JP\",\"BR\",\"NG\",\"TH\",\"MY\",\"HK\",\"UZ\",\"SE\",\"AT\",\"PH\",\"VN\",\"CL\",\"IE\",\"CH\",\"NO\",\"FI\",\"DK\",\"PT\"],\r\n    \"openx\":[\"US\",\"CA\"],\r\n    \"unruly\":[\"US\",\"GB\"],\r\n  });\r\n\r\n  const biddersBlackList = Object.freeze({\r\n    \"33across\":[\"GH\",\"GB\",\"CA\",\"DE\",\"NL\",\"IL\",\"SG\",\"AU\",\"IT\",\"FR\"],\r\n    \"adagio\":[\"FR\",\"IL\",\"GB\",\"AU\",\"BE\",\"CH\",\"PH\",\"DE\",\"CN\",\"SG\"],\r\n    \"adyoulike\":[\"IL\",\"CA\",\"CN\",\"SG\",\"GB\",\"AU\",\"ZA\",\"FR\",\"IN\",\"PK\"],\r\n    \"amx\":[\"NL\",\"ID\",\"IT\",\"PH\",\"CN\",\"ES\",\"BE\",\"SO\",\"CH\",\"BR\"],\r\n    \"anyclip\":[\"GH\",\"US\",\"GB\",\"IT\",\"CA\",\"FR\",\"AT\",\"BR\",\"DE\",\"DK\"],\r\n    \"appnexus\":[\"DE\",\"CA\",\"GB\",\"FR\",\"ID\",\"AU\",\"PH\",\"BR\",\"TH\",\"SG\"],\r\n    \"contxtful\":[\"IL\",\"IN\",\"GB\",\"ID\",\"SG\",\"KR\",\"CN\",\"PH\",\"DE\",\"TH\"],\r\n    \"conversant\":[\"IL\",\"IN\",\"KR\",\"PH\",\"TH\",\"JP\",\"VN\",\"PK\",\"CN\",\"EG\"],\r\n    \"criteo\":[\"CN\",\"BD\",\"BY\",\"KZ\",\"AR\",\"MA\",\"CY\",\"CO\",\"BG\",\"CI\"],\r\n    \"exco\":[\"US\",\"SG\",\"GB\",\"DE\",\"CA\",\"AU\",\"IT\",\"PL\",\"CN\",\"BR\"],\r\n    \"fluct\":[\"US\",\"CA\",\"HK\",\"JP\",\"SG\",\"GB\",\"AU\",\"DE\",\"CN\",\"TW\"],\r\n    \"gamoshi\":[\"US\",\"GB\",\"CA\",\"DE\",\"AU\",\"PH\",\"IT\",\"SG\",\"CN\",\"MY\"],\r\n    \"ix\":[\"CN\",\"PL\",\"IE\",\"FI\",\"DK\",\"AT\",\"GR\",\"AR\",\"MA\",\"PT\"],\r\n    \"kueezrtb\":[\"IT\",\"CN\",\"ES\",\"BE\",\"UA\",\"PH\",\"CH\",\"TH\",\"SE\",\"BY\"],\r\n    \"magnite\":[\"NL\",\"IT\",\"CN\",\"BE\",\"SO\",\"CH\",\"ES\",\"UA\",\"BR\",\"PL\"],\r\n    \"medianet\":[\"CN\",\"CH\",\"MY\",\"UA\",\"VN\",\"BD\",\"AE\",\"PK\",\"TR\",\"BY\"],\r\n    \"msft\":[\"CN\",\"SO\",\"SG\",\"UA\",\"PH\",\"BY\",\"KZ\",\"KE\",\"IN\",\"IT\"],\r\n    \"oms\":[\"SG\",\"IN\",\"IL\",\"NL\",\"ID\",\"KR\",\"IT\",\"PH\",\"TH\",\"CH\"],\r\n    \"onetag\":[\"CN\",\"PL\",\"BD\",\"GR\",\"SE\",\"PK\",\"CY\",\"RO\",\"AT\",\"PT\"],\r\n    \"openx\":[\"DE\",\"NL\",\"CN\",\"IT\",\"BE\",\"SO\",\"JP\",\"ES\",\"PH\",\"SE\"],\r\n    \"pixfuture\":[\"DE\",\"CN\",\"AU\",\"FR\",\"SG\",\"TH\",\"PH\",\"ID\",\"BR\",\"JP\"],\r\n    \"programmaticx\":[\"FR\",\"SG\",\"IL\",\"GB\",\"ID\",\"IN\",\"KR\",\"DE\",\"PH\",\"JP\"],\r\n    \"richaudience\":[\"IN\",\"GB\",\"CN\",\"PK\",\"DE\",\"BD\",\"BR\",\"ZA\",\"FR\",\"TW\"],\r\n    \"rise\":[\"FR\",\"SG\",\"IN\",\"GB\",\"DE\",\"ID\",\"AU\",\"PH\",\"KR\",\"CN\"],\r\n    \"rubicon\":[\"IL\",\"CA\",\"MY\",\"GH\",\"SG\",\"AU\",\"PR\",\"GB\",\"CN\",\"DE\"],\r\n    \"seedtag\":[\"CN\",\"PH\",\"NG\",\"IN\",\"NO\",\"AT\",\"MA\",\"DK\",\"MY\",\"CI\"],\r\n    \"sharethrough\":[\"FR\",\"SG\",\"IL\",\"GB\",\"DE\",\"BE\",\"CH\",\"BR\",\"NL\",\"IT\"],\r\n    \"smartadserver\":[\"US\",\"SO\",\"GB\",\"IL\",\"CA\",\"KE\",\"SE\",\"NO\",\"NL\",\"CN\"],\r\n    \"smilewanted\":[\"DE\",\"ID\",\"CN\",\"PH\",\"NL\",\"SE\",\"IT\",\"TH\",\"CH\",\"ES\"],\r\n    \"sovrn\":[\"NL\",\"SG\",\"IT\",\"CN\",\"ES\",\"SE\",\"VN\",\"MY\",\"NG\",\"MX\"],\r\n    \"sparteo\":[\"CN\",\"PK\",\"BD\",\"RO\",\"FI\",\"CZ\",\"DZ\",\"NO\",\"HU\",\"DK\"],\r\n    \"ssp_geniee\":[\"IL\",\"GB\",\"DE\",\"NL\",\"ID\",\"IN\",\"KR\",\"IT\",\"CN\",\"ZA\"],\r\n    \"teads\":[\"CN\",\"CA\",\"SG\",\"IL\",\"AU\",\"GB\",\"FR\",\"TH\",\"DE\",\"PH\"],\r\n    \"underdogmedia\":[\"SO\",\"US\",\"CA\",\"ZA\",\"undefined\"],\r\n    \"unruly\":[\"IN\",\"ID\",\"DE\",\"AU\",\"PH\",\"KR\",\"CN\",\"SG\",\"TH\",\"JP\"],\r\n    \"vidazoo\":[\"FR\",\"SG\",\"GB\",\"IN\",\"ID\",\"DE\",\"PH\",\"CN\",\"SO\",\"TH\"],\r\n    \"yandex\":[\"IL\",\"US\",\"CA\",\"DE\",\"UA\",\"AU\",\"GB\",\"BG\",\"KZ\",\"LV\"]\r\n  });\r\n\r\n  const country = await getCountry();\r\n\r\n  const isBidderAllowed = ({ bidder }) => {\r\n    const name = bidder?.toLowerCase().replace(/s2s$/, '');\r\n    const whiteOk = !biddersWhiteList[name] || biddersWhiteList[name].includes(country);\r\n    // const blackOk = !biddersBlackList[name] || !biddersBlackList[name].includes(country);\r\n    return whiteOk;\r\n  };\r\n\r\n  const bidders = ([\r\n    \r\n    {bidder: 'smilewanted', params: {zoneId: 'adnimation.com_hb_display',}},\r\n    {bidder: 'contxtful', params: {placementId: 'p101162'}},\r\n    {bidder: \"unruly\", params: {siteId: 233835}},\r\n    {bidder: \"unrulyS2S\", params: {siteId: 233835}},    \r\n    {bidder: \"amx\", params: {tagId: \"YWRuaW1hdGlvbi5jb20\"}},\r\n    {bidder: \"amxS2S\", params: {tagId: \"9k5RSyLDj\"}},    \r\n    {bidder: 'onetag',params: {pubId: '62d98ebd4882fb0'}},\r\n    {bidder: 'onetagS2S',params: {pubId: '62d98ebd4882fb0'}},    \r\n    {bidder: 'sparteo',params: {networkId: '2b124411-dc3b-4083-998e-84c8175f32cf'}},     \r\n    //{bidder: \"pubmatic\", params: {publisherId: \"166665\"}},\r\n    //{bidder: \"pubmaticS2S\", params: {publisherId: \"166665\"}}, \r\n    {bidder: \"rise\", params: {org: \"67dae7b0eee76c00011b7cab\"}},\r\n    {bidder: \"riseS2S\", params: {org: \"67dae7b0eee76c00011b7cab\"}},        \r\n    {bidder: \"openx\", params: {unit: \"564184934\", delDomain: \"adnimation-d.openx.net\"}},\r\n    {bidder: \"openxS2S\", params: {unit: \"564184935\", delDomain: \"adnimation-d.openx.net\"}},          \r\n\r\n  ]).filter(isBidderAllowed);\r\n\r\n  const bidderSettings = Object.freeze({\r\n    \"33across\": { \"storageAllowed\": true },\r\n    \"adagio\": { \"storageAllowed\": true },\r\n    \"adnimation\": { \"storageAllowed\": true },\r\n    \"adyoulike\": { \"storageAllowed\": true },\r\n    \"amx\": { \"storageAllowed\": true },\r\n    \"anyclip\": { \"storageAllowed\": true },\r\n    \"appnexus\": { \"storageAllowed\": true },\r\n    \"contxtful\": { \"storageAllowed\": true },\r\n    \"conversant\": { \"storageAllowed\": true },\r\n    \"criteo\": { \"storageAllowed\": true },\r\n    \"exco\": { \"storageAllowed\": true },\r\n    \"fluct\": { \"storageAllowed\": true },\r\n    \"gamoshi\": { \"storageAllowed\": true },\r\n    \"ix\": { \"storageAllowed\": true },\r\n    \"kueezrtb\": { \"storageAllowed\": true },\r\n    \"magnite\": { \"storageAllowed\": true },\r\n    \"medianet\": { \"storageAllowed\": true },\r\n    \"msft\": { \"storageAllowed\": true },\r\n    \"oms\": { \"storageAllowed\": true },\r\n    \"onetag\": { \"storageAllowed\": true },\r\n    \"openx\": { \"storageAllowed\": true },\r\n    \"pixfuture\": { \"storageAllowed\": true },\r\n    \"programmaticx\": { \"storageAllowed\": true },\r\n    \"pubmatic\": { \"storageAllowed\": true },\r\n    \"richaudience\": { \"storageAllowed\": true },\r\n    \"rise\": { \"storageAllowed\": true },\r\n    \"rubicon\": { \"storageAllowed\": true },\r\n    \"seedtag\": { \"storageAllowed\": true },\r\n    \"sharethrough\": { \"storageAllowed\": true },\r\n    \"smartadserver\": { \"storageAllowed\": true },\r\n    \"smilewanted\": { \"storageAllowed\": true },\r\n    \"sonobi\": { \"storageAllowed\": true },\r\n    \"sovrn\": { \"storageAllowed\": true },\r\n    \"sparteo\": { \"storageAllowed\": true },\r\n    \"ssp_geniee\": { \"storageAllowed\": true },\r\n    \"taboola\": { \"storageAllowed\": true },\r\n    \"teads\": { \"storageAllowed\": true },\r\n    \"underdogmedia\": { \"storageAllowed\": true },\r\n    \"unruly\": { \"storageAllowed\": true },\r\n    \"vidazoo\": { \"storageAllowed\": true },\r\n    \"yandex\": { \"storageAllowed\": true },\r\n  });\r\n\r\n  const bidderNames = bidders.filter(({bidder}) => !bidder.endsWith('S2S')).map(({bidder}) => bidder);\r\n  const s2sBidders = bidders.filter(({bidder}) => bidder.endsWith('S2S')).map(({bidder}) => bidder);\r\n  const s2sAliases = Object.fromEntries(s2sBidders.map(bidder => [bidder, bidder.slice(0, -3)]));\r\n\r\n  const GDPR_GEOS = Object.freeze(['AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','GR','HU','IE','IT','LV','LT','LU','MT','NL','PL','PT','RO','SK','SI','ES','SE','IS','LI','NO','GB','CH']);\n  const CMP_WAIT_MS = 3000;\n  function waitForTcfApi(maxMs){return new Promise((resolve)=>{const start=Date.now();(function check(){if(typeof window.__tcfapi==='function')return resolve(true);if(Date.now()-start>=maxMs)return resolve(false);setTimeout(check,50);})();});}\n  async function isGdprRequired(country){const hasCmp=await waitForTcfApi(CMP_WAIT_MS);return hasCmp||GDPR_GEOS.includes(country);}\n  const needsGdpr = await isGdprRequired(await getCountry());\n\n  const pbjsConfig = Object.freeze({\r\n    's2sConfig': {\r\n      'enabled': true,\r\n      'accountId': '1001',\r\n      'bidders': s2sBidders,\r\n      'endpoint': 'https://adnpbs.com/openrtb2/auction',\r\n      'syncEndpoint': 'https://adnpbs.com/cookie_sync',\r\n      'timeout': 1500,\r\n      'extPrebid': {\r\n        'aliases': s2sAliases\r\n      }\r\n    },\r\n    'priceGranularity': 'high',\r\n    'currency': {\r\n        'adServerCurrency': 'USD',\r\n        'conversionRateFile': 'https://cdn.jsdelivr.net/gh/prebid/currency-file@1/latest.json',\r\n        'defaultRates': {\r\n        'USD': { 'EUR': 0.92, 'USD': 1 },\r\n        'EUR': { 'USD': 1.09, 'EUR': 1 }\r\n        },\r\n        'ratesTTL': 3600000\r\n    },\r\n    'floors': {\r\n      'enforcement': {\r\n        'enforceJS': true,\r\n        'enforcePBS': true,\r\n        'floorDeals': true,\r\n        'bidAdjustment': true\r\n      },\r\n      'data': {\r\n        'currency': 'USD',\r\n        'skipRate': 0,\r\n        'schema': {\r\n          'fields': [\r\n            'mediaType'\r\n          ]\r\n        },\r\n        'values': {\r\n          'banner': 0.01,\r\n          'native': 0.01,\r\n          'video': 0.01\r\n        },\r\n        'default': 0.01\r\n      }\r\n    },\r\n    'gvlMapping': {'amxS2S':737,'magniteS2S':52,'riseS2S':1043,'kueezrtbS2S':1165,'adagioS2S':617,'anyclip':1400,'exco':444},\n    'consentManagement': {\n      'gdpr': needsGdpr && {'cmpApi':'iab','defaultGdprScope':true,'timeout':500,'actionTimeout':2000},\n      'usp': { 'cmpApi':'iab', 'timeout':500 }\n    },\r\n    'useBidCache': true,\r\n    'schain': {\r\n      'validation': 'strict',\r\n      'config': {\r\n        'ver': '1.0',\r\n        'complete': 1,\r\n        'nodes': [\r\n          {\r\n            'asi': 'adnimation.com',\r\n            'sid': '20250080',\r\n            'hp': 1\r\n          }\r\n        ]\r\n      }\r\n    },\r\n    'userSync': {\r\n      'iframeEnabled': true,\r\n      'filterSettings': {\r\n        'iframe': {\r\n          'bidders': bidderNames,\r\n          'filter': 'include'\r\n        }\r\n      },\r\n      'userIds': [\r\n        {\r\n          'name': 'sharedId',\r\n          'storage': {\r\n            'type': 'html5',\r\n            'name': '_pubcid',\r\n            'expires': 365\r\n          }\r\n        },\r\n        {\r\n          'name': 'identityLink',\r\n          'params': {\r\n            'pid': '13346'\r\n          },\r\n          'storage': {\r\n            'type': 'html5',\r\n            'name': 'idl_env',\r\n            'expires': 30\r\n          }\r\n        },\r\n        {\r\n          'name': 'id5Id',\r\n          'params': {\r\n            'partner': 1262\r\n          },\r\n          'storage': {\r\n            'type': 'html5',\r\n            'name': 'id5id',\r\n            'expires': 90,\r\n            'refreshInSeconds': 28800\r\n          }\r\n        },\r\n        {\r\n          'name': '33acrossId',\r\n          'params': {\r\n            'pid': '0010b00002KBtyLAAT'\r\n          },\r\n          'storage': {\r\n            'name': '33acrossId',\r\n            'type': 'html5',\r\n            'expires': 90,\r\n            'refreshInSeconds': 28800\r\n          }\r\n        }\r\n      ]\r\n    },\r\n    'ix': {\r\n      'detectMissingSizes': true\r\n    },\r\n    'aliasSyncEnabled': true,\r\n    'auctionOptions': {\r\n      'suppressStaleRender': true\r\n    },\r\n    'contxtful': {\r\n      'version': 'v1',\r\n      'customer': 'ADNP250319'\r\n    },\r\n    'realTimeData': {\r\n      'dataProviders': [\r\n        {\r\n          'name': 'contxtful',\r\n          'waitForIt': true,\r\n          'params': {\r\n            'version': 'v1',\r\n            'customer': 'ADNP250319',\r\n            'bidders': [\r\n              'contxtful'\r\n            ],\r\n            'adServerTargeting': true\r\n          }\r\n        }\r\n      ]\r\n    }\r\n  });\r\n\r\n  // ----------------------------------------------\r\n  // Placeholders\r\n  // ----------------------------------------------\r\n\r\n  // Prebid\r\n  window.pbjs = window.pbjs || {};\r\n  window.pbjs.que = window.pbjs.que || [];\r\n\r\n  // Google Tag\r\n  window.googletag = window.googletag || {};\r\n  window.googletag.cmd = window.googletag.cmd || [];\r\n  // Manage refresh of viewable ads\r\n  window.googletag.cmd.push(() =>\r\n    window.googletag.pubads().addEventListener(\r\n      'impressionViewable', onImpressionViewable));\r\n  // Visually collapse unfilled slots\r\n  window.googletag.cmd.push(() =>\r\n    window.googletag.setConfig({ collapseDiv: 'ON_NO_FILL' }));\r\n\r\n  // Google Analytics\r\n  window.dataLayer = window.dataLayer || [];\r\n  function gtag() {\r\n    window.dataLayer.push(arguments);\r\n  }\r\n\r\n  // Taboola\r\n  window._taboola = window._taboola || [];\r\n\r\n  // ----------------------------------------------\r\n  // Constants\r\n  // ----------------------------------------------\r\n\r\n  const GA_ID = 'G-5GSLBJ6F2E';\r\n  const APS_TIMEOUT_MS = 2000;\r\n  const PREBID_TIMEOUT_MS = 1800;\r\n\r\n  // ----------------------------------------------\r\n  // Scripts\r\n  // ----------------------------------------------\r\n\r\n  function createScript(src, preCreate = () => {}) {\r\n    return new Promise((resolve) => {\r\n      let scriptEl = document.querySelector(`script[src=\"${src}\"]`);\r\n\r\n      if (scriptEl) {\r\n        console.warn('Script already exists:', src);\r\n        resolve(false);\r\n        return;\r\n      }\r\n\r\n      const attemptLoad = () => {\r\n        scriptEl = document.createElement('script');\r\n        scriptEl.src = src;\r\n        scriptEl.fetchPriority = 'high';\r\n        preCreate(scriptEl);\r\n        scriptEl.async = !scriptEl.defer;\r\n        scriptEl.addEventListener('load', () => resolve(true));\r\n        scriptEl.addEventListener('error', () => {\r\n          console.warn('Retrying to load script:', src);\r\n          scriptEl.remove();\r\n          setTimeout(attemptLoad, 100);\r\n        });\r\n        document.head.appendChild(scriptEl);\r\n      };\r\n\r\n      attemptLoad();\r\n    });\r\n  }\r\n\r\n  // Don't initialize anything if page URL is blacklisted\r\n  if (isBlacklistedUrl()) {\r\n    throw 'Skipping...';\r\n  }\r\n\r\n  Promise.all([\r\n    // Amazon Publisher Services\r\n//     createScript('https://c.amazon-adsystem.com/aax2/apstag.js'),\r\n\r\n    // Human anti-bot protection\r\n    //createScript('https://cadmus.script.ac/d3svkhbhkz2i0f/script.js'),\r\n  ])\r\n    .then(config)\r\n    .then(main)\r\n    .catch((err) => console.error('Failed to bootstrap scripts:', err));\r\n\r\n  // Block Through anti-adblock\r\n  createScript('https://btloader.com/tag?o=5696523966873600&upapi=true');\r\n\r\n  // Vidazoo video ads\r\n  createScript('https://static.vidazoo.com/basev/vwpt.js', (scriptEl) => {\r\n    scriptEl.setAttribute('data-widget-id', '65e9b79ebdb3a9c5732bbae8');\r\n  });\r\n\r\n  // Google Analytics\r\n  createScript(`https://www.googletagmanager.com/gtag/js?id=${GA_ID}`);\r\n\r\n  // KueezRTB cookieless solution\r\n  createScript('https://static.kueezrtb.com/latest.js', (scriptEl) => {\r\n    scriptEl.setAttribute('data-cfasync', 'false');\r\n    scriptEl.id = 'kueezrtb_latest';\r\n  });\r\n\r\n  class LazyLoader {\r\n    constructor(margin = '100px') {\r\n      this.observer = new IntersectionObserver(this.onIntersect, {\r\n        rootMargin: margin\r\n      });\r\n    }\r\n\r\n    onIntersect = (entries) => {\r\n      entries.forEach((entry) => {\r\n        if (entry.isIntersecting) {\r\n          const cb = entry.target.dataset.lazyCallback;\r\n          if (cb && window[cb]) {\r\n            window[cb](entry.target);\r\n            delete window[cb];\r\n          }\r\n          this.observer.unobserve(entry.target);\r\n        }\r\n      });\r\n    };\r\n\r\n    add(element, callback) {\r\n      if (!element || typeof callback !== 'function') return;\r\n      if (element.getBoundingClientRect().top < window.innerHeight) {\r\n        callback(element);\r\n      } else {\r\n        const cbName = 'lazy_cb_' + Math.random().toString(36).slice(2);\r\n        window[cbName] = callback;\r\n        element.dataset.lazyCallback = cbName;\r\n        this.observer.observe(element);\r\n      }\r\n    }\r\n  }\r\n\r\n  // ----------------------------------------------\r\n  // App\r\n  // ----------------------------------------------\r\n\r\n  const adUnits = [];\r\n  const slotsMap = [];\r\n  const lazyLoader = new LazyLoader();\r\n  const activeSlotIds = [];\r\n  const newPbjsAdUnits = [];\r\n  const viewportType =\r\n    window.screen.width > 1525\r\n      ? 'desktop'\r\n      : window.screen.width > 730\r\n        ? 'tablet'\r\n        : 'mobile';\r\n\r\n  /**\r\n   * Main entry point of our tag.\r\n   */\r\n  async function main() {\r\n    const isOk = await createScript('https://securepubads.g.doubleclick.net/tag/js/gpt.js');\r\n    if (isOk) {\r\n      console.log('Starting...');\r\n    }\r\n  }\r\n\r\n  function config() {\r\n    console.log('Configuring...');\r\n    initGa();\r\n    // initAps();\r\n    initIiq();\r\n  }\r\n\r\n  function initAps() {\r\n    window.apstag.init({\r\n      pubID: '83d5088d-5f70-4acf-a888-15a83bf33932',\r\n      adServer: 'googletag',\r\n      schain: {\r\n        complete: 1, \r\n            ver: '1.0', \r\n                nodes: [\r\n                    {\r\n                        asi: 'zerodegreeads.com',\r\n                        sid: '42025QQQ4',\r\n                        hp: 1\r\n                        // rid: 'string', // The request ID (optional)\r\n                        // name: 'string', // Name of the company paid for inventory under seller ID (optional)\r\n                        // domain: 'string', // Business domain of this node (optional)\r\n                    }\r\n                ]\r\n        }       \r\n    });\r\n  }\r\n\r\n  function initGa() {\r\n    window.googletag.cmd.push(() => {\r\n      const handleSlotRenderEnded = () => {\r\n        gtag('js', new Date());\r\n        gtag('config', GA_ID);\r\n\r\n        googletag.pubads().removeEventListener('slotRenderEnded', handleSlotRenderEnded);\r\n      };\r\n      googletag.pubads().addEventListener('slotRenderEnded', handleSlotRenderEnded);\r\n    });\r\n  }\r\n\r\n  function initIiq() {\r\n    if (!window.IntentIqObject) {\r\n      console.log('IIQ not found - skipping initialization');\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Configure IntentIQ\r\n      window.intentIq_2072952453 = new IntentIqObject({\r\n        partner: 2072952453,\r\n        pbjs: adnpbjs,\r\n        callback: main,\r\n        timeoutInMillis: PREBID_TIMEOUT_MS,\r\n        ABTestingConfigurationSource: 'IIQServer',\r\n        manualWinReportEnabled: true,\r\n        domainName: window.location.host,\r\n        vrBrowserBlackList: ['chrome'],\r\n        gamParameterName: 'googletag', // Optional\r\n      });\r\n\r\n      adnpbjs.onEvent('bidWon', (data) => {\r\n        window.intentIq_2072952453.reportExternalWin({\r\n          biddingPlatformId: 1, // PreBid\r\n          partnerAuctionId: data.auctionId,\r\n          bidderCode: data.bidderCode,\r\n          prebidAuctionId: data.auctionId,\r\n          cpm: data.cpm,\r\n          currency: 'USD',\r\n          originalCpm: data.originalCpm,\r\n          originalCurrency: 'USD',\r\n          status: data.status,\r\n          placementId: data.adUnitCode\r\n        });\r\n      });\r\n\r\n    } catch (err) {\r\n      console.error('Failed to initialize IntentIQ:', err);\r\n      throw err;\r\n    }\r\n  }\r\n\r\n  function initAds() {\r\n    const adsEl = document.querySelectorAll('[data-onpage=\"true\"]');\r\n    adsEl.forEach(slotEl => createAd(slotEl.dataset.adpath));\r\n  }\r\n\r\n  function onImpressionViewable(event) {\r\n    const { slot } = event;\r\n    const slotId = slot.getSlotElementId();\r\n    if (!activeSlotIds.includes(slotId)) {\r\n      return;\r\n    }\r\n\r\n    const adUnitPath = slot.getAdUnitPath();\r\n    const adUnit = adsConfig[adUnitPath];\r\n    const timeoutMs = adUnit.refreshTime;\r\n\r\n    setTimeout(() => refreshAd(slot, slotId, adUnit), timeoutMs);\r\n  }\r\n\r\n  function collectAds() {\r\n    adUnits.length = 0;\r\n\r\n    const adsEl = document.querySelectorAll('[data-onpage=\"true\"]');\r\n    if (!adsEl.length) {\r\n      console.warn('No ads found to collect');\r\n      return;\r\n    }\r\n\r\n    adsEl.forEach((slotEl) => {\r\n      const adPath = slotEl.dataset.adpath;\r\n      const slot = adsConfig[adPath];\r\n      const slotId = slot?.id;\r\n      const sizes = slot?.sizeMapping[viewportType];\r\n\r\n      if (!sizes?.length) {\r\n        console.warn(\r\n          'Failed to find slot sizes for viewport - bids will be affected for',\r\n          viewportType, slotId\r\n        );\r\n        return;\r\n      }\r\n      const slotBidders = [...bidders];\r\n      const tagMap = {\r\n            ATF: \"ATF\",\r\n            Content: \"Content\",\r\n            BTF: \"BTF\",\r\n            Side: \"Side\",\r\n            SideATF: \"SideATF\",\r\n            Sticky: \"Sticky\"\r\n        };\r\n\r\n        slotBidders.push({\r\n            bidder: \"taboola\",\r\n            params: {\r\n                tagId: tagMap[slot.position] || \"ROS\",\r\n                publisherId: \"1940773\"\r\n            }\r\n        });\r\n        const STANDARD_SIZES = {\r\n            desktop: [\r\n                [1, 1],\r\n                [728, 90],\r\n                [970, 90],\r\n                [970, 250],\r\n                [300, 250],\r\n                [300, 600],\r\n                [160, 600],\r\n                [336, 280],\r\n                [320, 50],\r\n                [320, 100],\r\n            ],\r\n            tablet: [\r\n                [1, 1],\r\n                [728, 90],\r\n                [300, 250],\r\n                [300, 600],\r\n                [160, 600],\r\n                [336, 280],\r\n            ],\r\n            mobile: [\r\n                [1, 1],\r\n                [320, 50],\r\n                [320, 100],\r\n                [300, 250],\r\n                [336, 280],\r\n                [360, 360],\r\n            ]\r\n        };\r\n\r\n        function hasOnlyStandardSizes(sizes, viewport) {\r\n            if (!Array.isArray(sizes) || sizes.length === 0) return false;\r\n\r\n            const standardSizes = STANDARD_SIZES[viewport] || [];\r\n\r\n            const isNative = (w, h) => w === 1 && h === 2;\r\n\r\n            return sizes.every(size => {\r\n                if (Array.isArray(size)) {\r\n                    const [w, h] = size;\r\n                    if (isNative(w, h)) return true;\r\n                    return standardSizes.some(([sw, sh]) => sw === w && sh === h);\r\n                }\r\n                return false;\r\n            });\r\n        }\r\n    const prebidSizes = sizes.filter(size => hasOnlyStandardSizes([size], viewportType));\r\n\r\nif (prebidSizes.length) {\r\n        adUnits.push({\r\n            bids: slotBidders,\r\n            code: slotId,\r\n            mediaTypes: {\r\n            banner: {\r\n                sizes: prebidSizes\r\n            }\r\n            }\r\n        });\r\n        console.log(`Prebid sizes for ${slotId}:`, prebidSizes);\r\n        } else {\r\n        console.log(`Skipping Prebid for ${slotId} — No compatible sizes.`);\r\n        }\r\n    });\r\n\r\n    newPbjsAdUnits.length = 0;\r\n    newPbjsAdUnits.push(...adUnits);\r\n\r\n    window.adnpbjs.que.push(() => {\r\n      window.adnpbjs.bidderSettings = bidderSettings;\r\n      window.adnpbjs.setConfig(pbjsConfig);\r\n      window.adnpbjs.setBidderConfig({\r\n        bidders: ['sparteo'],\r\n        config: {\r\n          ortb2: {\r\n            source: {\r\n              ext: {\r\n                schain: {\r\n                  ver: \"1.0\",\r\n                  complete: 1,\r\n                  nodes: [{\r\n                    asi: \"zerodegreeads.com\",\r\n                    sid: \"42025QQQ4\",\r\n                    hp: 1\r\n                  }]\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  function runApsBids(slotEl, resolve) {\r\n    return;\r\n\r\n    const slotId = slotEl.id;\r\n    const adPath = slotEl.dataset.adpath;\r\n\r\n    const sizes = adsConfig[adPath].sizeMapping[viewportType];\r\n    if (!sizes.length) {\r\n      console.warn(\r\n        'Failed to find slot sizes for viewport - canceling APS bid for',\r\n        viewportType, slotId\r\n      );\r\n      resolve();\r\n      return;\r\n    }\r\n\r\n    const slots = [{\r\n      slotID: slotId,\r\n      slotName: adsConfig[adPath].id,\r\n      sizes\r\n    }];\r\n\r\n    window.apstag.fetchBids({ slots, timeout: APS_TIMEOUT_MS }, () => {\r\n      window.apstag.setDisplayBids();\r\n      resolve();\r\n    });\r\n  }\r\n\r\n  function runPrebidBids(slotEl, resolve) {\r\n    const slotId = slotEl.id;\r\n    window.pbjs.que.push(() =>\r\n      window.pbjs.requestBids({\r\n        timeout: PREBID_TIMEOUT_MS,\r\n        adUnitCodes: [slotId],\r\n        bidsBackHandler: () => {\r\n          window.pbjs.setTargetingForGPTAsync([slotId]);\r\n          resolve();\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  async function runBids(slotEl) {\r\n    try{\r\n        const slotId = slotEl.id;\r\n        // const apsBids = new Promise((resolve) => runApsBids(slotEl, resolve));\r\n        const pbjsBids = new Promise((resolve) => runPrebidBids(slotEl, resolve));\r\n        function withTimeout(promise, ms) {\r\n        return Promise.race([\r\n            promise,\r\n            new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), ms))\r\n        ]);\r\n        }\r\n\r\n        await Promise.allSettled([\r\n          // withTimeout(apsBids, 3000),\r\n            withTimeout(pbjsBids, 3000)\r\n        ]);\r\n\r\n    }catch(e){\r\n        console.log(e);\r\n        return\r\n    }\r\n  }\r\n\r\n  async function createAdCmd(slotName) {\r\n    const slotEl = document.querySelector(`[data-adpath=\"${slotName}\"]`);\r\n    if (!slotEl) {\r\n      console.warn('Failed to find ad to create by id:', slotName);\r\n      return;\r\n    }\r\n\r\n    collectAds();\r\n\r\n    let adUnit = adsConfig[slotName];\r\n    if (!adUnit) {\r\n      console.warn('Failed to find ad with the following id:', slotName);\r\n      return;\r\n    }\r\n\r\n    const sizeMapping = googletag\r\n      .sizeMapping()\r\n      .addSize([980, 200], adUnit.sizeMapping.desktop)\r\n      .addSize([730, 200], adUnit.sizeMapping.tablet)\r\n      .addSize([0, 0], adUnit.sizeMapping.mobile)\r\n      .build();\r\n\r\n    const adPath = slotEl.dataset.adpath;\r\n    let refreshIteration = adsConfig[adPath].refreshIteration;\r\n    refreshIteration++;\r\n\r\n    const slot = googletag\r\n      .defineSlot(adUnit.id, adUnit.size)\r\n      .defineSizeMapping(sizeMapping)\r\n      .addService(window.googletag.pubads());\r\n\r\n    slot.setConfig({ targeting: { refreshIteration: refreshIteration.toString(), intent_iq_group: 'U', Language: document.documentElement.lang } });\r\n\r\n    slotEl.id = slot.getSlotElementId();\r\n\r\n    const pbjsAdUnit = newPbjsAdUnits.find(adUnit => adUnit.code === slotName);\r\n    if (pbjsAdUnit) {\r\n      pbjsAdUnit.code = slotEl.id;\r\n      window.adnpbjs.addAdUnits(pbjsAdUnit);\r\n      window.pbjs = adnpbjs;\r\n    }\r\n\r\n    slotsMap[slotEl.id] = slot;\r\n    activeSlotIds.push(slotEl.id);\r\n\r\n    const init = async () => {\r\n      try {\r\n        await runBids(slotEl);\r\n        window.googletag.enableServices();\r\n        window.googletag.display(slotEl.id);\r\n        if (googletag.getConfig('disableInitialLoad').disableInitialLoad) {\r\n          window.googletag.pubads().refresh([slot]);\r\n        }\r\n      } catch (err) {\r\n        console.error('Failed to run bids for ad slot: %s, %s', slotEl.id, err);\r\n      }\r\n    };\r\n\r\n    const isLazyLoaded = adsConfig[adPath]?.isLazyLoaded !== false;\r\n    if (isLazyLoaded) {\r\n      lazyLoader.add(slotEl, init);\r\n    } else {\r\n      init();\r\n    }\r\n  }\r\n\r\n  async function refreshAd(slot, slotId, adUnit) {\r\n    try {\r\n      const adUnitToRefresh = googletag\r\n        .pubads()\r\n        .getSlots()\r\n        .filter((slot) => slot.getSlotElementId() === slotId)\r\n        .at(0);\r\n\r\n      if (!adUnitToRefresh) {\r\n        return;\r\n      }\r\n\r\n      adUnit.refreshIteration++;\r\n      slot.setConfig({ targeting: { refreshIteration: adUnit.refreshIteration.toString() } });\r\n\r\n      const slotEl = document.getElementById(adUnitToRefresh.getSlotElementId());\r\n      await runBids(slotEl);\r\n\r\n      window.googletag.pubads().refresh([slotsMap[slotEl.id]]);\r\n    } catch (err) {\r\n      console.error('Failed to refresh ad:', slotId, err.message);\r\n    }\r\n  }\r\n\r\n  function destroyAdCmd(slotName) {\r\n    const slotEl = document.querySelector(`[data-adpath=\"${slotName}\"]`);\r\n    if (!slotEl) {\r\n      console.warn('Failed to find ad to destroy by id:', slotName);\r\n      return;\r\n    }\r\n\r\n    const slotId = slotEl.id;\r\n    if (slotId && slotsMap[slotId]) {\r\n      window.googletag.destroySlots([slotsMap[slotId]]);\r\n      delete slotsMap[slotId];\r\n      const idx = activeSlotIds.indexOf(slotId);\r\n      if (idx > -1) {\r\n        activeSlotIds.splice(idx, 1);\r\n      }\r\n    }\r\n\r\n    slotEl.innerHTML = '';\r\n    slotEl.id = '';\r\n    slotEl.removeAttribute('data-onpage');\r\n    if (slotId.toLowerCase().includes('sticky_footer')) {\r\n        slotEl.parentElement.parentElement.remove();\r\n    }\r\n  }\r\n\r\n  function createNativeCmd() {\r\n    createScript('https://cdn.taboola.com/libtrc/adnimationnetwork/loader.js', (scriptEl) => {\r\n      scriptEl.id = 'tb_loader_script';\r\n      scriptEl.onload = () => {\r\n        window.performance?.mark?.('tbl_ic');\r\n      };\r\n    });\r\n\r\n    createScript('data:text/javascript;charset=utf-8,_taboola.push({flush:true})', (scriptEl) => {\r\n      scriptEl.setAttribute('data-taboola-flush', 'true');\r\n      scriptEl.defer = true;\r\n    });\r\n  }\r\n\r\n  function destroyNativeCmd() {\r\n    const footerEl = document.querySelector('.adn-footer');\r\n    if (footerEl) {\r\n      footerEl.innerHTML = '';\r\n    }\r\n  }\r\n\r\n  function createNative() {\r\n    window.googletag.cmd.push(createNativeCmd);\r\n  }\r\n\r\n  function destroyNative() {\r\n    window.googletag.cmd.push(destroyNativeCmd);\r\n  }\r\n\r\n  function createAd(slotName) {\r\n    window.googletag.cmd.push(() => createAdCmd(slotName));\r\n  }\r\n\r\n  function destroyAd(slotName) {\r\n    window.googletag.cmd.push(() => destroyAdCmd(slotName));\r\n  }\r\n\r\n  function createInterstitial() {\r\n    window.googletag.cmd.push(createInterstitialCmd);\r\n  }\r\n\r\n  // ----------------------------------------------\r\n  // Exports\r\n  // ----------------------------------------------\r\n\r\n  window.adn = {\r\n    createAd,\r\n    destroyAd,\r\n    createNative,\r\n    destroyNative,\r\n    createInterstitial,\r\n  };\r\n\r\n  // ----------------------------------------------\r\n  // Utils\r\n  // ----------------------------------------------\r\n\r\n  async function getIpInfo() {\r\n    try {\r\n      const cached = localStorage.getItem('ipinfo');\r\n      if (cached) return JSON.parse(cached);\r\n      const key = '7c4d73767e64472ea502eacdbc47386b';\r\n      const url = `https://d2dvy74lyjayxz.cloudfront.net/?key=${key}`;\r\n      const res = await fetch(url);\r\n      if (!res.ok) throw new Error(`HTTP-${res.status}`);\r\n      const ipInfo = await res.json();\r\n      localStorage.setItem('ipinfo', JSON.stringify(ipInfo));\r\n      localStorage.removeItem('adngeo'); // Old version cleanup\r\n      return ipInfo;\r\n    } catch (err) {\r\n      console.error('Failed to get ip info:', err.message);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  async function getCountry() {\r\n    const ipInfo = await getIpInfo();\r\n    return ipInfo?.country ?? 'US';\r\n  }\r\n\r\n  async function getPlatform() {\r\n    const ipInfo = await getIpInfo();\r\n    return ['ios','android','mobile','desktop'].find(k => ipInfo?.[k]) ?? 'desktop';\r\n  }\r\n\r\n  async function waitForElement(selector) {\r\n    let cnt = 0;\r\n    const timeout = 100;\r\n    const threshold = 3000 / timeout;\r\n    return new Promise((resolve) => {\r\n      let interval = setInterval(() => {\r\n        const el = document.querySelector(selector);\r\n        if (el) {\r\n          clearInterval(interval);\r\n          resolve(el);\r\n        }\r\n        if (++cnt === threshold) {\r\n          cnt = 0;\r\n          console.warn('Still waiting for selector:', selector);\r\n        }\r\n      }, timeout);\r\n    });\r\n  }\r\n\r\n  const onDomReady = (function() {\r\n    const callbacks = [];\r\n\r\n    document.addEventListener('DOMContentLoaded', () => {\r\n      callbacks.forEach((callback) => callback());\r\n      callbacks.length = 0;\r\n    });\r\n\r\n    const interval = setInterval(() => {\r\n      if (\r\n        document.readyState === 'complete' ||\r\n        document.readyState === 'interactive'\r\n      ) {\r\n        clearInterval(interval);\r\n        callbacks.forEach((callback) => callback());\r\n        callbacks.length = 0;\r\n      }\r\n    }, 100);\r\n\r\n    return (callback) => {\r\n      if (\r\n        document.readyState === 'complete' ||\r\n        document.readyState === 'interactive'\r\n      ) {\r\n        setTimeout(callback, 0);\r\n      } else {\r\n        callbacks.push(callback);\r\n      }\r\n    };\r\n  })();\r\n\r\n  // Find \"URL_PATHS_BLACKLIST\" under the \"Configuration\" section.\r\n  // There you can add any additional URL paths to blacklist.\r\n  function isBlacklistedUrl() {\r\n    const { pathname } = window.location;\r\n    const list = URL_PATHS_BLACKLIST ?? [];\r\n    const isBlacklisted = list.some((path) =>\r\n      path === '/' ? pathname === path : pathname.includes(path));\r\n    return isBlacklisted;\r\n  }\r\n\r\n  function observeSlots() {\r\n    const isVisible = (element) => {\r\n      const style = window.getComputedStyle(element);\r\n      const isDisplayed = style.display !== 'none';\r\n      const isVisible = style.visibility !== 'hidden';\r\n      return isDisplayed && isVisible;\r\n    };\r\n\r\n    const isStyleChanged = (mutation) =>\r\n      mutation.type === 'attributes' &&\r\n      (\r\n        mutation.attributeName === 'style' ||\r\n        mutation.attributeName === 'class'\r\n      );\r\n\r\n    const isVisibilityChanged = (mutation) => {\r\n      const oldStyle = mutation.oldValue || '';\r\n      const newStyle = mutation.target.getAttribute('style') || '';\r\n      const wasHidden = oldStyle.includes('hidden') || oldStyle.includes('none');\r\n      const isHidden = newStyle.includes('hidden') || newStyle.includes('none');\r\n      return wasHidden !== isHidden;\r\n    }\r\n\r\n    const handleAdded = (node) => {\r\n      const slot = node.getAttribute('data-adpath');\r\n      console.log('Added:', slot);\r\n      createAd(slot);\r\n    }\r\n\r\n    const handleRemoved = (node) => {\r\n      const slot = node.getAttribute('data-adpath');\r\n      console.log('Removed:', slot);\r\n      destroyAd(slot);\r\n    }\r\n\r\n    const isAdSlot = (node) => node.hasAttribute?.('data-adpath');\r\n\r\n    const getSlots = (nodeList) =>\r\n      Array.from(nodeList)\r\n        .filter((node) => node.nodeType === Node.ELEMENT_NODE)\r\n        .flatMap((node) => Array.from(node.querySelectorAll('[data-adpath]')).concat(node))\r\n        .filter(isAdSlot);\r\n\r\n    const handleMutations = (mutations) =>\r\n      mutations.forEach((mutation) => {\r\n        const addedNodes = getSlots(mutation.addedNodes);\r\n        const removedNodes = getSlots(mutation.removedNodes);\r\n\r\n        addedNodes.forEach(handleAdded);\r\n        removedNodes.forEach(handleRemoved);\r\n\r\n        if (\r\n          !addedNodes.includes(mutation.target) &&\r\n          !removedNodes.includes(mutation.target) &&\r\n          isStyleChanged(mutation) &&\r\n          isVisibilityChanged(mutation)\r\n        ) {\r\n          const childNodes = getSlots(mutation.target);\r\n          childNodes.forEach((node) => {\r\n            if (isVisible(node)) {\r\n              handleAdded(node);\r\n            } else {\r\n              handleRemoved(node);\r\n            }\r\n          });\r\n        }\r\n      });\r\n\r\n    const config = {\r\n      subtree: true,\r\n      childList: true,\r\n      attributes: true,\r\n      attributeFilter: ['style', 'class'],\r\n      attributeOldValue: true\r\n    };\r\n\r\n    const observer = new MutationObserver(handleMutations);\r\n    observer.observe(document, config);\r\n  }\r\n\r\n  // ----------------------------------------------\r\n  // Custom\r\n  // ----------------------------------------------\r\n\r\n  function createStickyBanner() {\r\n  \r\n  const addCloseButton = (stickyBannerSizeDiv) => {\r\n  const el = document.createElement('div');\r\n  el.innerText = 'Close';\r\n  el.style.position = 'absolute';\r\n  el.style.top = '-24px';\r\n  el.style.right = '0px';\r\n  el.style.height = '24px';\r\n  el.style.width = '54px';\r\n  el.style.lineHeight = '24px';\r\n  el.style.color = 'white';\r\n  el.style.borderRadius = '6px';\r\n  el.style.backgroundColor = 'black';\r\n  el.style.cursor = 'pointer';\r\n  el.style.fontSize = '14px';\r\n  el.style.textAlign = 'center';\r\n  el.style.border = '1px solid white';\r\n  el.style.transition = 'all 0.2s ease'; // ✅ smooth hover transition\r\n\r\n  el.classList.add('closeButton');\r\n\r\n  // ✅ Hover effect\r\n  el.addEventListener('mouseenter', () => {\r\n    el.style.backgroundColor = 'white';\r\n    el.style.color = 'black';\r\n  });\r\n  el.addEventListener('mouseleave', () => {\r\n    el.style.backgroundColor = 'black';\r\n    el.style.color = 'white';\r\n  });\r\n\r\n  el.onclick = function() {\r\n    this.parentElement.remove();\r\n  };\r\n  stickyBannerSizeDiv.append(el);\r\n};\r\n\r\nconst stickyBannerParent = document.createElement('div');\r\n  stickyBannerParent.classList.add('adnSticky');\r\n  stickyBannerParent.style.position = 'fixed';\r\n  stickyBannerParent.style.display = 'flex';\r\n  stickyBannerParent.style.justifyContent = 'space-evenly';\r\n  stickyBannerParent.style.bottom = '0px';\r\n  stickyBannerParent.style.width = '100%';\r\n  stickyBannerParent.style.backgroundColor = 'transparent';\r\n  stickyBannerParent.style.zIndex = '9999999999';\r\n\r\n  const stickyBannerSizeDiv = document.createElement('div');\r\n  stickyBannerSizeDiv.style.position = 'relative';\r\n\r\n  const stickyBanner = document.createElement('div');\r\n  stickyBanner.dataset.onpage = !0;\r\n  stickyBanner.dataset.adpath = '/339474670,26228694/ForbesIL/Sticky_Footer';\r\n\r\n  stickyBannerSizeDiv.append(stickyBanner);\r\n  stickyBannerParent.append(stickyBannerSizeDiv);\r\n  document.getElementsByTagName('body')[0].append(stickyBannerParent);\r\n\r\n  let flag = true;\r\n  googletag.cmd.push(() => {\r\n    googletag.pubads().addEventListener('slotRenderEnded', (event) => {\r\n      if (\r\n        event.slot.getSlotElementId().includes('Sticky_Footer') &&\r\n        !event.isEmpty && flag\r\n      ) {\r\n        flag = false;\r\n        addCloseButton(stickyBannerSizeDiv);\r\n      }\r\n    });\r\n    googletag.enableServices();\r\n  });\r\n  \r\n}\r\n\r\nlet addInContent30Under30AdUnits = () => {\r\n    let inContentAdUnit = document.createElement('div');\r\n    inContentAdUnit.dataset.onpage = true;\r\n    inContentAdUnit.dataset.adpath = '/339474670,26228694/ForbesIL/InContent';\r\n    inContentAdUnit.style.textAlign = '-webkit-center';\r\n    inContentAdUnit.style.marginTop = '40px';\r\n    inContentAdUnit.style.marginBottom = '40px';\r\n    inContentAdUnit.style.minHeight = '250px';\r\n    // inContentAdUnit.style.backgroundColor = 'pink';\r\n\r\n    let h2Section = document.querySelectorAll('body > div.elementor.elementor-187192.elementor-location-single.post-215076.rankings.type-rankings.status-publish.has-post-thumbnail.hentry.rankings_taxonomy-30under30 > section.elementor-element.elementor-element-e44d094.e-flex.e-con-boxed.e-con.e-parent.e-lazyloaded > div > div.elementor-element.elementor-element-aa559a2.elementor-widget.elementor-widget-theme-post-content > p:nth-of-type(3n + 3)');\r\n    for (let i = 0; i < h2Section.length && i < 2; i++) {\r\n        let adUnit = inContentAdUnit.cloneNode(true);\r\n        adUnit.dataset.adpath = '/339474670,26228694/ForbesIL/InContent_' + i;\r\n        h2Section[i].after(adUnit);\r\n    }\r\n};\r\n\r\nfunction addInContentRatingAdUnits() {\r\n  const makeAd = (suffix) => {\r\n    const el = document.createElement('div');\r\n    el.dataset.onpage = true;\r\n    el.dataset.adpath = `/339474670,26228694/ForbesIL/Rating_${suffix}`;\r\n    el.style.display = 'block';\r\n    el.style.width = '100%';\r\n    el.style.maxWidth = '970px';\r\n    el.style.margin = '40px auto';\r\n    el.style.boxSizing = 'border-box';\r\n    el.style.minHeight = '90px';\r\n    el.style.textAlign = 'center';\r\n    // el.style.backgroundColor = 'pink'; // debug\r\n    return el;\r\n  };\r\n\r\n  // Select all inner content containers in the Elementor layout\r\n  const containers = document.querySelectorAll(\r\n    'body > div.elementor.elementor-6514 > div > div'\r\n  );\r\n\r\n  console.log('Found containers:', containers.length);\r\n\r\n  containers.forEach((container, i) => {\r\n    const heading = container.querySelector(\r\n      '.elementor-heading-title.elementor-size-default, h1, h2, h3, h4, h5, h6'\r\n    );\r\n    const table = container.querySelector('table');\r\n\r\n    if (table && heading) {\r\n      // Insert ad above heading\r\n      const prev = heading.previousElementSibling;\r\n      if (!(prev && prev.dataset && prev.dataset.adpath)) {\r\n        console.log('✅ Inserting ad before heading in container', i);\r\n        heading.before(makeAd(i));\r\n      }\r\n    } else if (table && !heading) {\r\n      // No heading → fallback above table\r\n      console.log('⚠️ No heading in container', i, '— inserting before table.');\r\n      table.before(makeAd(i));\r\n    } else {\r\n      console.log('ℹ️ No table found in container', i);\r\n    }\r\n  });\r\n}\r\n\r\nfunction addInContentUnits() {\r\n  // 🚫 Do NOT run on URLs that contain '/rankings/'\r\n  if (window.location.href.includes('/rankings/')) return;\r\n\r\n  const MAX_ADS = 10;\r\n\r\n  const container =\r\n    document.querySelector('[data-widget_type=\"theme-post-content.default\"]') ||\r\n    document.querySelector('.elementor-widget-theme-post-content');\r\n\r\n  if (!container) {\r\n    console.debug('[InContentDark] Post-content container not found.');\r\n    return;\r\n  }\r\n\r\n  // ✅ Create centered ad with wrapper\r\n  const makeAd = (i) => {\r\n    // Outer wrapper (controls centering)\r\n    const wrapper = document.createElement('div');\r\n    wrapper.style.display = 'flex';\r\n    wrapper.style.justifyContent = 'center';\r\n    wrapper.style.width = '100%';\r\n    wrapper.style.marginTop = '40px';\r\n    wrapper.style.marginBottom = '40px';\r\n\r\n    // Inner ad container (actual GPT div)\r\n    const el = document.createElement('div');\r\n    el.dataset.onpage = true;\r\n    el.dataset.adpath = '/339474670,26228694/ForbesIL/InContent_' + i;\r\n\r\n    // Important styles\r\n    el.style.textAlign = 'center';\r\n    el.style.minHeight = '250px';\r\n    el.style.width = '100%';\r\n    el.style.maxWidth = '970px'; // ✅ prevents stretching on large screens\r\n\r\n    wrapper.appendChild(el);\r\n    return wrapper;\r\n  };\r\n\r\n  const inject = () => {\r\n    const paras = Array.from(container.querySelectorAll('p'));\r\n    if (!paras.length) return 0;\r\n\r\n    let injected = 0;\r\n\r\n    for (let idx = 0; idx < paras.length && injected < MAX_ADS; idx++) {\r\n      // Start after paragraph 7, then every 6 paragraphs\r\n      if (idx >= 7 && (idx - 6) % 6 === 0) {\r\n        const p = paras[idx];\r\n\r\n        const next = p.nextElementSibling;\r\n        if (\r\n          next &&\r\n          next.querySelector &&\r\n          next.querySelector('[data-adpath^=\"/339474670,26228694/ForbesIL/InContent_\"]')\r\n        ) {\r\n          continue;\r\n        }\r\n\r\n        const ad = makeAd(injected);\r\n\r\n        p.insertAdjacentElement('afterend', ad);\r\n        injected++;\r\n      }\r\n    }\r\n\r\n    return injected;\r\n  };\r\n\r\n  const countNow = inject();\r\n\r\n  if (countNow === 0) {\r\n    let tries = 0;\r\n    const observer = new MutationObserver(() => {\r\n      const c = inject();\r\n      tries++;\r\n      if (c > 0 || tries > 10) observer.disconnect();\r\n    });\r\n    observer.observe(container, { childList: true, subtree: true });\r\n  }\r\n}\r\n\r\nfunction addInContentRankingsOnlyUnits() {\r\n  // ✅ Run only on URLs that contain '/rankings/'\r\n  if (!window.location.href.includes('/rankings/')) return;\r\n\r\n  const MAX_ADS = 5;\r\n\r\n  // 1) Find the article body container\r\n  const container =\r\n    document.querySelector('[data-widget_type=\"theme-post-content.default\"]') ||\r\n    document.querySelector('.elementor-widget-theme-post-content');\r\n\r\n  if (!container) {\r\n    console.debug('[InContentDark] Post-content container not found.');\r\n    return;\r\n  }\r\n\r\n  // 2) Create an ad element\r\n  const makeAd = (i) => {\r\n    const el = document.createElement('div');\r\n    el.dataset.onpage = true;\r\n    el.dataset.adpath = '/339474670,26228694/ForbesIL/InContent_' + i;\r\n    el.style.textAlign = 'center';\r\n    el.style.marginTop = '40px';\r\n    el.style.marginBottom = '40px';\r\n    el.style.minHeight = '250px';\r\n    return el;\r\n  };\r\n\r\n  // 3) Inject ads AFTER selected paragraphs\r\n  const inject = () => {\r\n    const paras = Array.from(container.querySelectorAll('p'));\r\n    if (!paras.length) return 0;\r\n\r\n    let injected = 0;\r\n    for (let idx = 0; idx < paras.length && injected < MAX_ADS; idx++) {\r\n      // Insert after every 4th paragraph (first = after p4)\r\n      if ((idx + 1) % 6 === 0) {\r\n        const p = paras[idx];\r\n\r\n        // Avoid duplicate insertion\r\n        const next = p.nextElementSibling;\r\n        if (next && next.dataset?.adpath?.startsWith('/339474670,26228694/ForbesIL/InContent_')) {\r\n          continue;\r\n        }\r\n\r\n        const ad = makeAd(injected);\r\n\r\n        // ✅ Inject AFTER paragraph\r\n        p.after(ad);\r\n\r\n        injected++;\r\n      }\r\n    }\r\n    return injected;\r\n  };\r\n\r\n  const countNow = inject();\r\n\r\n  // 4) Retry if DOM not ready yet\r\n  if (countNow === 0) {\r\n    let tries = 0;\r\n    const observer = new MutationObserver(() => {\r\n      const c = inject();\r\n      tries++;\r\n      if (c > 0 || tries > 10) observer.disconnect();\r\n    });\r\n    observer.observe(container, { childList: true, subtree: true });\r\n  }\r\n}\r\n\r\nfunction addAtfUnit() {\r\n  const el = document.createElement('div');\r\n  el.dataset.onpage = true;\r\n  el.dataset.adpath = '/339474670,26228694/ForbesIL/ATF_HP';\r\n  el.style.textAlign = 'center';\r\n  el.style.marginTop = '40px';\r\n  el.style.marginBottom = '40px';\r\n  el.style.minHeight = '250px';\r\n  if (window.innerWidth > 767) { el.style.minWidth = '970px'; }\r\n\r\n  // el.style.backgroundColor = 'purple';\r\n\r\n  const target = document.querySelector(\r\n    '#content > div > div.elementor-element.elementor-element-32c1420.e-con-full.e-flex.e-con.e-child'\r\n  );\r\n\r\n  // ✅ Exit early if selector not found\r\n  if (!target) {\r\n    console.debug('[addAtfUnit] Target section not found.');\r\n    return;\r\n  }\r\n\r\n  // ✅ Insert ad BEFORE the target element\r\n  target.parentNode.insertBefore(el, target);\r\n}\r\n\r\nfunction addAtfENGLISHUnit() {\r\n  const el = document.createElement('div');\r\n  el.dataset.onpage = true;\r\n  el.dataset.adpath = '/339474670,26228694/ForbesIL/ATF_HP';\r\n  el.style.textAlign = 'center';\r\n  el.style.marginTop = '40px';\r\n  el.style.marginBottom = '40px';\r\n  el.style.minHeight = '250px';\r\n  if (window.innerWidth > 767) { el.style.minWidth = '970px'; }\r\n  // el.style.backgroundColor = 'purple';\r\n\r\n  const target = document.querySelector(\r\n    'body > main > section > div > div > div > section.elementor-section.elementor-inner-section.elementor-element.elementor-element-4cad5f0d.elementor-section-full_width.elementor-section-height-default.elementor-section-height-default'\r\n  );\r\n\r\n  // ✅ Exit early if selector not found\r\n  if (!target) {\r\n    console.debug('[addAtfENGLISHUnit] Target section not found.');\r\n    return;\r\n  }\r\n\r\n  // ✅ Insert the ad BEFORE the target element\r\n  target.parentNode.insertBefore(el, target);\r\n}\r\n\r\nfunction addCategoryAdUnits() {\r\n  // Shared base ad element\r\n  const baseEl = document.createElement('div');\r\n  baseEl.dataset.onpage = true;\r\n  baseEl.style.textAlign = '-webkit-center';\r\n  baseEl.style.marginTop = '10px';\r\n  baseEl.style.marginBottom = '10px';\r\n  baseEl.style.minHeight = '100px';\r\n  // baseEl.style.backgroundColor = 'yellow';\r\n\r\n  // --- Category_0 ---\r\n  const cat0Elements = document.querySelectorAll(\r\n    'body > div.elementor.elementor-173826 > section.elementor-section.elementor-top-section.elementor-element.elementor-element-507adf4.elementor-section-boxed.elementor-section-height-default.elementor-section-height-default > div > div.elementor-column.elementor-col-66.elementor-top-column.elementor-element.elementor-element-94f8ddf > div > div.elementor-element.elementor-element-8d524e9.elementor-grid-1.elementor-grid-tablet-1.elementor-posts--align-center.elementor-grid-mobile-1.elementor-posts--thumbnail-top.elementor-widget.elementor-widget-posts > div > div > article'\r\n  );\r\n\r\n  // ✅ Exit early if no Category_0 elements found\r\n  if (!cat0Elements || cat0Elements.length === 0) {\r\n    return;\r\n  }\r\n\r\n  cat0Elements.forEach(pElement => {\r\n    let adUnit = baseEl.cloneNode(true);\r\n    adUnit.dataset.adpath = '/339474670,26228694/ForbesIL/Category_0';\r\n    pElement.parentElement.insertBefore(adUnit, pElement.nextElementSibling);\r\n  });\r\n\r\n  // --- Category_1 ---\r\n  const cat1Element = document.querySelector(\r\n    'body > div.elementor.elementor-173826 > section.elementor-section.elementor-top-section.elementor-element.elementor-element-507adf4.elementor-section-boxed.elementor-section-height-default.elementor-section-height-default > div > div.elementor-column.elementor-col-66.elementor-top-column.elementor-element.elementor-element-94f8ddf > div > div.elementor-element.elementor-element-beac0da.elementor-hidden-phone.elementor-widget.elementor-widget-html'\r\n  );\r\n\r\n  // ✅ Only add Category_1 if element exists\r\n  if (cat1Element) {\r\n    let adUnit = baseEl.cloneNode(true);\r\n    adUnit.dataset.adpath = '/339474670,26228694/ForbesIL/Category_1';\r\n    cat1Element.after(adUnit);\r\n  }\r\n}\r\n\r\nfunction addSectionAdUnits() {\r\n  // Shared base element\r\n  const baseEl = document.createElement('div');\r\n  baseEl.dataset.onpage = true;\r\n  baseEl.style.textAlign = '-webkit-center';\r\n  baseEl.style.marginTop = '40px';\r\n  baseEl.style.marginBottom = '40px';\r\n  baseEl.style.minHeight = '100px';\r\n\r\n  // --- Section_0 (before first selector) ---\r\n  const section0Elements = document.querySelectorAll(\r\n    '#content > div > div.elementor-element.elementor-element-3e2248b.elementor-widget.elementor-widget-heading'\r\n  );\r\n\r\n  // ✅ Exit early if no Section_0 or Section_1 elements found at all\r\n  const section1Elements = document.querySelectorAll(\r\n    '#content > div > div.elementor-element.elementor-element-c9473c6.elementor-widget.elementor-widget-heading'\r\n  );\r\n\r\n  if (\r\n    (!section0Elements || section0Elements.length === 0) &&\r\n    (!section1Elements || section1Elements.length === 0)\r\n  ) {\r\n    return;\r\n  }\r\n\r\n  // --- Insert Section_0 ads ---\r\n  if (section0Elements && section0Elements.length > 0) {\r\n    section0Elements.forEach(pElement => {\r\n      let adUnit = baseEl.cloneNode(true);\r\n      adUnit.dataset.adpath = '/339474670,26228694/ForbesIL/Section_0';\r\n      pElement.parentElement.insertBefore(adUnit, pElement); // ✅ before element\r\n    });\r\n  }\r\n\r\n  // --- Insert Section_1 ads ---\r\n  if (section1Elements && section1Elements.length > 0) {\r\n    section1Elements.forEach(pElement => {\r\n      let adUnit = baseEl.cloneNode(true);\r\n      adUnit.dataset.adpath = '/339474670,26228694/ForbesIL/Section_1';\r\n      pElement.parentElement.insertBefore(adUnit, pElement); // ✅ before element\r\n    });\r\n  }\r\n}\r\n\r\n(function () {\r\n  // Safe escape (older browsers may not have CSS.escape)\r\n  const safeEscape = (window.CSS && typeof CSS.escape === 'function')\r\n    ? CSS.escape\r\n    : (s) => String(s).replace(/[^a-zA-Z0-9_\\-]/g, '\\\\$&');\r\n\r\n  function createAd(adpath) {\r\n    const el = document.createElement('div');\r\n    el.dataset.onpage = true;\r\n    el.dataset.adpath = adpath;\r\n    el.style.textAlign = 'center';\r\n    el.style.marginTop = '40px';\r\n    el.style.marginBottom = '40px';\r\n    el.style.minHeight = '250px';\r\n    // el.style.backgroundColor = 'green'; // debug\r\n    return el;\r\n  }\r\n\r\n  function alreadyHasAd(container, adpath) {\r\n    return !!container.querySelector(`[data-adpath=\"${safeEscape(adpath)}\"]`);\r\n  }\r\n\r\n  function findSidebarContainer() {\r\n    const selectors = [\r\n      '.elementor-widget-sidebar .elementor-widget-container',\r\n      '.elementor-widget-sidebar',\r\n      'aside .widget-area',\r\n      'aside.sidebar .widget-area',\r\n      '.site-sidebar .widget-area',\r\n      '.site-sidebar .elementor-widget-wrap',\r\n      '.widget-area .elementor-widget-wrap',\r\n      'aside .elementor-widget-wrap',\r\n      '.elementor .elementor-column.elementor-col-25 .elementor-widget-wrap',\r\n      '.elementor .elementor-column.elementor-col-20 .elementor-widget-wrap',\r\n      '.elementor .elementor-column.elementor-col-33 .elementor-widget-wrap',\r\n    ];\r\n\r\n    for (const sel of selectors) {\r\n      const found = document.querySelector(sel);\r\n      if (found) {\r\n        const wrap =\r\n          found.closest('.elementor-widget-wrap') ||\r\n          found.querySelector('.elementor-widget-wrap') ||\r\n          found;\r\n        if (wrap) return wrap;\r\n      }\r\n    }\r\n\r\n    // Fallback heuristic\r\n    const wraps = Array.from(\r\n      document.querySelectorAll('.elementor .elementor-column .elementor-widget-wrap')\r\n    );\r\n\r\n    const candidates = wraps.filter((wrap) => {\r\n      const col = wrap.closest('.elementor-column');\r\n      if (!col) return false;\r\n\r\n      const cls = col.className || '';\r\n      const classLikely = /(elementor-col-20|elementor-col-25|elementor-col-33)/.test(cls);\r\n\r\n      let widthLikely = false;\r\n      try {\r\n        const w = parseFloat(getComputedStyle(col).width);\r\n        const parent = col.parentElement;\r\n        const pw = parent ? parseFloat(getComputedStyle(parent).width) : NaN;\r\n        if (!Number.isNaN(w) && !Number.isNaN(pw) && pw > 0) {\r\n          widthLikely = w / pw <= 0.35;\r\n        }\r\n      } catch (_) {}\r\n\r\n      const widgetCount = wrap.querySelectorAll('.elementor-widget').length;\r\n      const paraCount = wrap.querySelectorAll('p').length;\r\n\r\n      return (classLikely || widthLikely) && widgetCount >= 2 && widgetCount >= paraCount;\r\n    });\r\n\r\n    if (candidates.length) {\r\n      candidates.sort((a, b) => {\r\n        const ax = a.getBoundingClientRect().left;\r\n        const bx = b.getBoundingClientRect().left;\r\n        if (ax !== bx) return bx - ax; // rightmost\r\n        return (\r\n          b.querySelectorAll('.elementor-widget').length -\r\n          a.querySelectorAll('.elementor-widget').length\r\n        );\r\n      });\r\n      return candidates[0];\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  function addSideBarSectionAdUnits() {\r\n    // 1) Skip /e/ URLs\r\n    if (window.location.href.includes('forbes.co.il/e/') || window.location.href.includes('forbes.co.il/rankings/')) {\r\n      console.log('🚫 Skipping sidebar ads on this URL');\r\n      return;\r\n    }\r\n\r\n    // 2) Desktop only\r\n    if (window.innerWidth <= 768) return;\r\n\r\n    // 3) Prevent multiple injections across the page life\r\n    if (window.__sidebarAdsInjected) return;\r\n\r\n    // 4) Find container — if not found, RETURN and leave it\r\n    const container = findSidebarContainer();\r\n    if (!container) {\r\n      console.log('❌ Sidebar container not found. Not retrying.');\r\n      return; // <- no flag set, no retries\r\n    }\r\n\r\n    // 5) Inject\r\n    let injected = false;\r\n    const children = Array.from(container.children).filter((el) => el && el.tagName);\r\n\r\n    const ad0 = '/339474670,26228694/ForbesIL/Side_0';\r\n    if (!alreadyHasAd(container, ad0)) {\r\n      if (children.length) children[0].before(createAd(ad0));\r\n      else container.prepend(createAd(ad0));\r\n      injected = true;\r\n    }\r\n\r\n    const ad1 = '/339474670,26228694/ForbesIL/Side_1';\r\n    if (!alreadyHasAd(container, ad1)) {\r\n      if (children.length) children[children.length - 1].after(createAd(ad1));\r\n      else container.append(createAd(ad1));\r\n      injected = true;\r\n    }\r\n\r\n    if (injected) {\r\n      window.__sidebarAdsInjected = true;\r\n      console.log('✅ Sidebar ads injected.');\r\n    } else {\r\n      console.log('ℹ️ Sidebar container found but ads already present.');\r\n    }\r\n  }\r\n\r\n  // Expose global (so it’s callable) and run ONCE\r\n  window.addSideBarSectionAdUnits = addSideBarSectionAdUnits;\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', addSideBarSectionAdUnits, { once: true });\r\n  } else {\r\n    addSideBarSectionAdUnits();\r\n  }\r\n})();\r\n\r\nfunction addSideBarArticleAdUnits() {\r\n  if (window.innerWidth > 768) {\r\n    const createAd = (adpath) => {\r\n      const el = document.createElement('div');\r\n      el.dataset.onpage = true;\r\n      el.dataset.adpath = adpath;\r\n      el.style.textAlign = 'center';\r\n      el.style.marginTop = '40px';\r\n      el.style.marginBottom = '40px';\r\n      el.style.minHeight = '250px';\r\n            //el.style.backgroundColor = 'green';\r\n      return el;\r\n    };\r\n\r\n    const container = document.querySelector(\r\n      'body > main > section > div > aside > div'\r\n    );\r\n\r\n    if (!container) {\r\n      console.log(\"❌ Sidebar container not found.\");\r\n      return;\r\n    }\r\n\r\n    const children = container.querySelectorAll(':scope > div'); // direct children only\r\n    if (!children.length) {\r\n      console.log(\"❌ No child divs inside sidebar container.\");\r\n      return;\r\n    }\r\n\r\n    // Insert Side_0 before the first child\r\n    children[0].before(createAd('/339474670,26228694/ForbesIL/Side_0'));\r\n\r\n    // Insert Side_1 after the last child\r\n    children[children.length - 1].after(createAd('/339474670,26228694/ForbesIL/Side_1'));\r\n  }\r\n}\r\n\r\nfunction createInterstitialCmd() {\r\n  \r\n  const slot = window.googletag.defineOutOfPageSlot(\r\n    '/339474670,26228694/ForbesIL/ForbesIL_Interstitial', window.googletag.enums.OutOfPageFormat.INTERSTITIAL);\r\n\r\n  if (!slot) {\r\n    console.error('Failed to define out of page slot - Interstitial');\r\n    return;\r\n  }\r\n\r\n  slot.addService(window.googletag.pubads());\r\n  window.googletag.enableServices();\r\n  window.googletag.display(slot);\r\n  \r\n}\r\n\r\nfunction createVideoPlayer() {\r\n  \r\n  createScript('https://cnt.trvdp.com/js/1770/16272.js');\r\n  \r\n}\r\n\r\nfunction createAudioPlayer() {\r\n  const target = document.querySelector('body > main > section.elementor-element.elementor-element-e02b0f9.e-flex.e-con-boxed.e-con.e-parent.e-lazyloaded > div > div.elementor-element.elementor-element-848122c.elementor-widget.elementor-widget-theme-post-excerpt');\r\n  if (!target) return console.error(\"❌ Target element not found.\");\r\n\r\n  const API_URL = \"https://plsbmrgivrjwya6jq2jbqaqc6m0dajyq.lambda-url.us-east-1.on.aws/\";\r\n  const isDarkTheme = 'white' === \"dark\";\r\n\r\n  // State management\r\n  const state = {\r\n    audio: null,\r\n    fullText: '',\r\n    currentBlobUrl: null,\r\n    prefetchedAudioBlob: null,\r\n    prefetchedBlobUrl: null,\r\n    isPlaying: false,\r\n    isLoading: false,\r\n    isPrefetching: false,\r\n    handlers: { canplay: null, timeupdate: null, error: null }\r\n  };\r\n\r\n  // Theme configuration\r\n  const themes = {\r\n    light: {\r\n      bg: \"#FFFFFF\", border: \"#C8C8C8\", text: \"#202020\",\r\n      subtext: \"#666\", fill: \"#1c1c1c\", progress: \"#e4e4e4\", progressFill: \"#848484\"\r\n    },\r\n    dark: {\r\n      bg: \"#1E1E1E\", border: \"#C8C8C8\", text: \"#F1F1F1\",\r\n      subtext: \"#BBB\", fill: \"#F1F1F1\", progress: \"#444\", progressFill: \"#888\"\r\n    }\r\n  };\r\n  const selectedTheme = themes[isDarkTheme ? 'dark' : 'light'];\r\n\r\n  // Create UI components\r\n  function createPlayerUI() {\r\n    const wrapper = document.createElement('div');\r\n    wrapper.id = \"adn-audio-wrapper\";\r\n\r\n    const shadow = wrapper.attachShadow({ mode: 'open' });\r\n    window.shadowAdn = shadow;\r\n\r\n    const styles = `\r\n      :host { all: initial; }\r\n      .player {\r\n        direction: ltr; display: flex; flex-direction: column; font-family: Verdana, sans-serif;\r\n        border-radius: 8px 8px 0 0; background: ${selectedTheme.bg};\r\n        padding: 8px 12px; box-sizing: border-box; width: 100%; color: ${selectedTheme.text};\r\n      }\r\n      .top-row { display: flex; justify-content: space-between; align-items: center; }\r\n      .title { font-size: 14px; color: ${selectedTheme.text}; position: relative; right: 44%; }\r\n      .progress { margin: 6px 0; height: 6px; background: ${selectedTheme.progress}; border-radius: 4px; overflow: hidden; position: relative; }\r\n      .progress-inner { height: 100%; width: 0%; background: ${selectedTheme.progressFill}; }\r\n      .controls-row { display: flex; align-items: center; justify-content: space-between; margin-top: 4px; }\r\n      .time { font-size: 10px; color: ${selectedTheme.subtext}; min-width: 45px; text-align: center; }\r\n      .controls { display: flex; align-items: center; gap: 12px; }\r\n      .btn { background: none; border: none; cursor: pointer; padding: 0; }\r\n      .btn svg { width: 30px; height: 30px; fill: ${selectedTheme.fill}; }\r\n      .loading svg { animation: spin 1s linear infinite; }\r\n      .prefetching svg { opacity: 0.6; }\r\n      @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\r\n\r\n      @media (max-width: 768px) {\r\n        .title { right: 38%; }\r\n      }\r\n\r\n      @media (min-width: 769px) {\r\n        .title { right: 44%; }\r\n      }\r\n    `;\r\n\r\n    const playerHTML = `\r\n      <div class=\"player\">\r\n        <div class=\"top-row\">\r\n          <div class=\"controls\">\r\n            <button id=\"toggleBtn\" class=\"btn\" aria-label=\"Play or Stop\">\r\n              <svg id=\"btnIcon\" viewBox=\"0 0 36 36\">\r\n                <circle cx=\"18\" cy=\"18\" r=\"17\" stroke=\"${selectedTheme.fill}\" stroke-width=\"2\" fill=\"none\"/>\r\n                <path d=\"M14 12L26 18L14 24Z\" fill=\"${selectedTheme.fill}\"/>\r\n              </svg>\r\n            </button>\r\n          </div>\r\n          <div class=\"title\">לחצו להאזנה לכתבה</div>\r\n        </div>\r\n        <div class=\"progress\">\r\n          <div class=\"progress-inner\" id=\"progressBar\"></div>\r\n        </div>\r\n        <div class=\"controls-row\">\r\n          <div class=\"time\" id=\"currentTime\">00:00</div>\r\n          <div class=\"time\" id=\"duration\">00:00</div>\r\n        </div>\r\n      </div>\r\n    `;\r\n\r\n    shadow.innerHTML = `<style>${styles}</style>${playerHTML}`;\r\n    target.after(wrapper);\r\n\r\n    return { wrapper, shadow };\r\n  }\r\n\r\n  function createAdSlot() {\r\n    const adSlot = document.createElement('div');\r\n    Object.assign(adSlot.dataset, {\r\n      onpage: 'true',\r\n      adpath: '/339474670,26228694/ForbesIL/AudioUnit'\r\n    });\r\n    adSlot.id = '339474670,26228694/ForbesIL/AudioUnit_0';\r\n\r\n    adSlot.style.cssText = `\r\n      text-align: -webkit-center;\r\n      min-height: 90px;\r\n      padding: 12px;\r\n      background: ${selectedTheme.bg};\r\n    `;\r\n\r\n    const logoLink = document.createElement('a');\r\n    logoLink.href = \"https://adnimation.com\";\r\n    logoLink.target = \"_blank\";\r\n\r\n    const logo = document.createElement('img');\r\n    logo.id = \"AdnimationLogo\";\r\n    logo.src = \"https://adncdn.net/Adnimation%20Logo%20Transparent.png\";\r\n    logo.style.cssText = `\r\n      width: 50px;\r\n      height: 14px;\r\n    `;\r\n\r\n    logoLink.append(logo);\r\n\r\n    const separator = document.createElement('div');\r\n    separator.style.cssText = `\r\n      height: 1px;\r\n      margin: 0 -12px 12px;\r\n    `;\r\n    window.shadowAdn.querySelector(\".controls-row\").append(logoLink);\r\n    return adSlot;\r\n  }\r\n\r\n  // Utility functions\r\n  const formatTime = (s) => {\r\n    const m = Math.floor(s / 60).toString().padStart(2, '0');\r\n    const sec = Math.floor(s % 60).toString().padStart(2, '0');\r\n    return `${m}:${sec}`;\r\n  };\r\n\r\n  const cleanText = (input) => input\r\n    .replace(/https?:\\/\\/\\S+/g, '')\r\n    .replace(/\\b(?:UPDATED|PUBLISHED)?\\d{6,}\\b/g, '')\r\n    .replace(/(?:FOLLOW US ON.*|INSTAGRAM.*|TWITTER.*|THREADS.*)/gi, '')\r\n    .replace(/[^\\p{L}\\p{N}\\s.,!?\\-]/gu, '')\r\n    .replace(/\\s{2,}/g, ' ')\r\n    .replace(/\\s*([.,!?])\\s*/g, '$1 ')\r\n    .replace(/\\n{2,}/g, '\\n')\r\n    .trim();\r\n\r\n  // Text extraction\r\n  function extractText() {\r\n    // Try structured data first\r\n    for (const script of document.querySelectorAll('script[type=\"application/ld+json\"]')) {\r\n      try {\r\n        const data = JSON.parse(script.textContent);\r\n        const type = data['@type'];\r\n        const isNews = (typeof type === 'string' && type === 'NewsArticle') ||\r\n                      (Array.isArray(type) && type.includes('NewsArticle'));\r\n\r\n        if (isNews && data.articleBody) {\r\n          return `${data.headline || ''}\\n\\n${data.articleBody}`.trim();\r\n        }\r\n      } catch (_) {}\r\n    }\r\n\r\n    // Fallback to DOM heuristics\r\n    const selectors = ['article', '[itemprop=articleBody]', '.article-body', 'main', '[role=main]'];\r\n    let container = selectors.map(sel => document.querySelector(sel))\r\n      .find(el => el?.innerText?.trim().length > 100);\r\n\r\n    if (!container) {\r\n      container = Array.from(document.querySelectorAll(\"div\"))\r\n        .filter(div => {\r\n          const text = div.innerText?.trim() || '';\r\n          if (text.length < 150 || div.offsetHeight < 100) return false;\r\n          const goodTags = div.querySelectorAll(\"p,h1,h2,h3\").length;\r\n          const badTags = div.querySelectorAll(\"li,a,ul\").length;\r\n          return goodTags - badTags > 2;\r\n        })\r\n        .sort((a, b) => b.innerText.length - a.innerText.length)[0];\r\n    }\r\n\r\n    if (!container) return '';\r\n\r\n    const ignorePatterns = [\r\n      /by\\s+\\w+/i, /next article/i, /previous article/i, /get the news/i, /subscribe/i,\r\n      /follow us/i, /author|editor|posted|published/i, /[\\d]{1,2} [a-z]{3,9} \\d{4}/i,\r\n      /read more|comments|share this|view gallery/i\r\n    ];\r\n\r\n    const lines = Array.from(container.querySelectorAll(\"p, h1, h2, h3\"))\r\n      .map(el => el.innerText?.trim() || '')\r\n      .filter(text => text.length > 30 && !ignorePatterns.some(rx => rx.test(text)));\r\n\r\n    return Array.from(new Set(lines)).join(\"\\n\\n\");\r\n  }\r\n\r\n  // Audio management\r\n  function cleanup() {\r\n    if (state.audio) {\r\n      Object.values(state.handlers).forEach(handler => {\r\n        if (handler) state.audio.removeEventListener(handler.type, handler.fn);\r\n      });\r\n      state.audio.pause();\r\n      state.audio.src = '';\r\n      state.audio = null;\r\n    }\r\n    [state.currentBlobUrl, state.prefetchedBlobUrl].forEach(url => {\r\n      if (url) URL.revokeObjectURL(url);\r\n    });\r\n    Object.assign(state, {\r\n      currentBlobUrl: null, prefetchedBlobUrl: null, prefetchedAudioBlob: null,\r\n      isPlaying: false, isLoading: false, handlers: { canplay: null, timeupdate: null, error: null }\r\n    });\r\n  }\r\n\r\n  function updateIcon(type) {\r\n    const iconEl = shadow.getElementById(\"btnIcon\");\r\n    const toggleBtn = shadow.getElementById(\"toggleBtn\");\r\n\r\n    const icons = {\r\n      play: `<circle cx=\"18\" cy=\"18\" r=\"17\" stroke=\"${selectedTheme.fill}\" stroke-width=\"2\" fill=\"none\"/>\r\n        <path d=\"M14 12L26 18L14 24Z\" fill=\"${selectedTheme.fill}\"/>`,\r\n      stop: `<circle cx=\"18\" cy=\"18\" r=\"17\" stroke=\"${selectedTheme.fill}\" stroke-width=\"2\" fill=\"none\"/>\r\n        <rect x=\"13\" y=\"12\" width=\"10\" height=\"12\" fill=\"${selectedTheme.fill}\"/>`,\r\n      loading: `<circle cx=\"18\" cy=\"18\" r=\"17\" stroke=\"${selectedTheme.fill}\" stroke-width=\"2\" fill=\"none\"/>\r\n        <path d=\"M18 10a8 8 0 1 1-8 8\" stroke=\"${selectedTheme.fill}\" stroke-width=\"2\" fill=\"none\"/>`\r\n    };\r\n\r\n    iconEl.innerHTML = icons[type] || icons.play;\r\n    toggleBtn.className = `btn ${type === 'loading' ? 'loading' : type === 'prefetching' ? 'prefetching' : ''}`;\r\n  }\r\n\r\n  async function fetchAudio(text) {\r\n    const response = await fetch(API_URL, {\r\n      method: \"POST\",\r\n      headers: { \"Content-Type\": \"application/json\" },\r\n      body: JSON.stringify({ text: cleanText(text), gender: \"male\", pageUrl: location.href })\r\n    });\r\n\r\n    try {\r\n      const data = await response.clone().json();\r\n      if (data.audioUrl) {\r\n        const audioRes = await fetch(data.audioUrl);\r\n        if (!audioRes.ok) throw new Error(\"Failed to fetch audio file.\");\r\n        return await audioRes.blob();\r\n      }\r\n      throw new Error(\"Missing audioUrl in response.\");\r\n    } catch {\r\n      if (response.ok && response.headers.get(\"Content-Type\") === \"audio/mpeg\") {\r\n        return await response.blob();\r\n      }\r\n      throw new Error(`API error: ${await response.text()}`);\r\n    }\r\n  }\r\n\r\n  async function setupAudio(audioBlob) {\r\n    const blobUrl = URL.createObjectURL(audioBlob);\r\n    state.currentBlobUrl = blobUrl;\r\n    state.audio = new Audio(blobUrl);\r\n    state.audio.preload = \"auto\";\r\n\r\n    // Get elements first\r\n    const elements = {\r\n      duration: shadow.getElementById(\"duration\"),\r\n      progressBar: shadow.getElementById(\"progressBar\"),\r\n      currentTime: shadow.getElementById(\"currentTime\")\r\n    };\r\n\r\n    // Set up duration handler\r\n    state.audio.addEventListener('loadedmetadata', () => {\r\n      const total = state.audio.duration || 0;\r\n      if (elements.duration) {\r\n        elements.duration.textContent = formatTime(total);\r\n      }\r\n      console.log(\"Duration set:\", formatTime(total));\r\n    });\r\n\r\n    // Also try with canplaythrough as backup\r\n    state.audio.addEventListener('canplaythrough', () => {\r\n      const total = state.audio.duration || 0;\r\n      if (elements.duration && elements.duration.textContent === \"00:00\") {\r\n        elements.duration.textContent = formatTime(total);\r\n      }\r\n    });\r\n\r\n    state.handlers.canplay = {\r\n      type: 'canplaythrough',\r\n      fn: () => {\r\n        state.audio.play().catch(err => {\r\n          console.error(\"Failed to play audio:\", err);\r\n          alert(\"שגיאה לא הצליח להטעין\");\r\n        });\r\n\r\n        state.isPlaying = true;\r\n        state.isLoading = false;\r\n        updateIcon('stop');\r\n      }\r\n    };\r\n\r\n    state.handlers.timeupdate = {\r\n      type: 'timeupdate',\r\n      fn: () => {\r\n        if (!state.audio.duration) return;\r\n        const percent = (state.audio.currentTime / state.audio.duration) * 100;\r\n        elements.progressBar.style.width = `${percent}%`;\r\n        elements.currentTime.textContent = formatTime(state.audio.currentTime);\r\n      }\r\n    };\r\n\r\n    state.handlers.error = {\r\n      type: 'error',\r\n      fn: (e) => {\r\n        console.error(\"Audio error:\", e);\r\n        alert(\"לא ניתן להפעיל את קובץ השמע.\");\r\n        cleanup();\r\n        updateIcon('play');\r\n      }\r\n    };\r\n\r\n    Object.values(state.handlers).forEach(handler => {\r\n      state.audio.addEventListener(handler.type, handler.fn);\r\n    });\r\n  }\r\n\r\n  function enableSeeking(shadowRoot) {\r\n    const progressBar = shadowRoot.getElementById(\"progressBar\");\r\n    const progressContainer = progressBar.parentElement;\r\n\r\n    let isDragging = false;\r\n\r\n    const seek = (event) => {\r\n      if (!state.audio || !state.audio.duration) return;\r\n\r\n      const rect = progressContainer.getBoundingClientRect();\r\n      const clickX = event.clientX - rect.left;\r\n      const percentage = Math.min(Math.max(clickX / rect.width, 0), 1);\r\n      const newTime = percentage * state.audio.duration;\r\n\r\n      state.audio.currentTime = newTime;\r\n      progressBar.style.width = `${percentage * 100}%`;\r\n    };\r\n\r\n    progressContainer.addEventListener(\"mousedown\", (event) => {\r\n      isDragging = true;\r\n      seek(event);\r\n    });\r\n\r\n    document.addEventListener(\"mousemove\", (event) => {\r\n      if (isDragging) seek(event);\r\n    });\r\n\r\n    document.addEventListener(\"mouseup\", () => {\r\n      isDragging = false;\r\n    });\r\n\r\n    // Also support direct click without drag\r\n    progressContainer.addEventListener(\"click\", seek);\r\n  }\r\n\r\n  async function prefetchAudio() {\r\n    if (state.isPrefetching || state.prefetchedAudioBlob) return;\r\n\r\n    const text = extractText();\r\n    if (!text) return console.warn(\"No text found for prefetching\");\r\n\r\n    state.isPrefetching = true;\r\n    updateIcon('prefetching');\r\n\r\n    try {\r\n      const audioBlob = await fetchAudio(text);\r\n      if (!audioBlob?.size) throw new Error(\"Empty audio blob received\");\r\n\r\n      state.prefetchedAudioBlob = audioBlob;\r\n\r\n      // Create a temporary audio to get duration immediately\r\n      const tempAudio = new Audio(URL.createObjectURL(audioBlob));\r\n      tempAudio.addEventListener('loadedmetadata', () => {\r\n        const durationEl = shadow.getElementById(\"duration\");\r\n        if (durationEl && tempAudio.duration) {\r\n          durationEl.textContent = formatTime(tempAudio.duration);\r\n          console.log(\"Duration prefetched:\", formatTime(tempAudio.duration));\r\n        }\r\n        // Clean up temp audio\r\n        URL.revokeObjectURL(tempAudio.src);\r\n      });\r\n\r\n      console.log(\"✅ Audio prefetched successfully\");\r\n    } catch (err) {\r\n      console.error(\"Prefetch failed:\", err);\r\n      state.prefetchedAudioBlob = null;\r\n    } finally {\r\n      state.isPrefetching = false;\r\n      updateIcon('play');\r\n    }\r\n  }\r\n\r\n  async function playAudio() {\r\n    const wasPrefetched = !!state.prefetchedAudioBlob;\r\n    const audioBlob = state.prefetchedAudioBlob;\r\n\r\n    cleanup(); // This clears state.prefetchedAudioBlob, so we copy first\r\n    state.isLoading = true;\r\n    updateIcon('loading');\r\n\r\n    try {\r\n      let finalAudioBlob = audioBlob;\r\n\r\n      if (!finalAudioBlob) {\r\n        const text = extractText();\r\n        if (!text) throw new Error(\"No readable text found in article\");\r\n        finalAudioBlob = await fetchAudio(text);\r\n      }\r\n\r\n      if (!finalAudioBlob?.size) throw new Error(\"Empty audio blob\");\r\n\r\n      await setupAudio(finalAudioBlob);\r\n\r\n      // Preserve prefetch blob if it was used\r\n      if (wasPrefetched) {\r\n        state.prefetchedAudioBlob = finalAudioBlob;\r\n      }\r\n\r\n    } catch (err) {\r\n      console.error(\"Failed to play audio:\", err);\r\n      alert(\"שגיאה בהפעלת השמע\");\r\n      cleanup();\r\n      updateIcon('play');\r\n    }\r\n  }\r\n\r\n  // Initialize\r\n  const outerWrapper = document.createElement(\"div\");\r\n  outerWrapper.id = \"adn-audio-outer-wrapper\";\r\n\r\n  outerWrapper.style.cssText = `\r\n    width: 100%;\r\n    border-radius: 8px;\r\n    overflow: hidden;\r\n    background: ${selectedTheme.bg};\r\n    margin-bottom: 16px;\r\n  `;\r\n\r\n  const { wrapper, shadow } = createPlayerUI();\r\n  enableSeeking(shadow);\r\n\r\n  outerWrapper.appendChild(wrapper);\r\n  const adSlot = createAdSlot();\r\n  outerWrapper.appendChild(adSlot);\r\n\r\n  target.after(outerWrapper);\r\n\r\n  shadow.getElementById(\"toggleBtn\").addEventListener(\"click\", () => {\r\n    if (state.isLoading) return;\r\n    state.isPlaying ? cleanup() && updateIcon('play') : playAudio();\r\n  });\r\n\r\n  // Uncomment to enable prefetching\r\n  // setTimeout(prefetchAudio, 1000);\r\n}\r\n\r\nfunction injectTaboolaFooterFeed() {\r\n  // --- config\r\n  const CONTAINER_ID = 'taboola-header-thumbnails-1x4';\r\n  const GRID_WIDGETS = [\r\n    '.elementor-widget-posts',\r\n    '.elementor-widget-loop-grid'\r\n  ];\r\n  const GRID_CONTAINERS = [\r\n    '.elementor-widget-posts .elementor-posts-container',\r\n    '.elementor-widget-loop-grid .elementor-loop-container',\r\n    '.elementor-widget-posts .elementor-grid'\r\n  ];\r\n  const ARTICLE_SELECTORS = [\r\n    '[data-widget_type=\"theme-post-content.default\"]',\r\n    '.elementor-widget-theme-post-content',\r\n    'article .entry-content'\r\n  ];\r\n  const MAX_TRIES = 10;\r\n  const TRY_EVERY_MS = 400;\r\n\r\n  // guards\r\n  if (document.getElementById(CONTAINER_ID)) return;\r\n\r\n  const isArticle =\r\n    document.body.classList.contains('single-post') ||\r\n    /^\\/[^/]+\\/?$/.test(location.pathname);\r\n  if (!isArticle) return;\r\n\r\n  const findAll = (sels) => sels.flatMap((s) => Array.from(document.querySelectorAll(s)));\r\n\r\n  const isSidebarish = (el) => {\r\n    const col = el.closest('.elementor-column');\r\n    if (!col) return false;\r\n    return /\\belementor-col-(20|25|30|33)\\b/.test(col.className);\r\n  };\r\n\r\n  const pickBottomMostMain = (nodes) => {\r\n    const mains = nodes.filter((n) => !isSidebarish(n));\r\n    const pool = mains.length ? mains : nodes;\r\n    return pool[pool.length - 1] || null;\r\n  };\r\n\r\n  const insertAfter = (referenceNode, nodeToInsert) => {\r\n    const parent = referenceNode.parentNode;\r\n    if (!parent) return false;\r\n    parent.insertBefore(nodeToInsert, referenceNode.nextSibling);\r\n    return true;\r\n  };\r\n\r\n  const buildTaboolaNodes = () => {\r\n    const host = document.createElement('div');\r\n    host.id = CONTAINER_ID;\r\n    // host.style.maxWidth = '970px';\r\n    // host.style.margin = '40px auto';\r\n\r\n    const script = document.createElement('script');\r\n    script.type = 'text/javascript';\r\n    script.text = `\r\n      window._taboola = window._taboola || [];\r\n      _taboola.push({\r\n        mode: 'thumbnails-header-1x4',\r\n        container: '${CONTAINER_ID}',\r\n        placement: 'Header Thumbnails 1x4',\r\n        target_type: 'mix'\r\n      });\r\n    `;\r\n\r\n    return { host, script };\r\n  };\r\n\r\n  const tryInject = () => {\r\n    // 1) Find grid containers, then elevate to their widget roots\r\n    const gridContainers = findAll(GRID_CONTAINERS);\r\n    let widgetCandidates = [];\r\n    if (gridContainers.length) {\r\n      widgetCandidates = gridContainers\r\n        .map((c) => c.closest(GRID_WIDGETS.join(',')))\r\n        .filter(Boolean);\r\n    } else {\r\n      // If we didn’t find inner containers, try widgets directly\r\n      widgetCandidates = findAll(GRID_WIDGETS);\r\n    }\r\n\r\n    const widgetTarget = pickBottomMostMain(widgetCandidates);\r\n\r\n    if (widgetTarget && !document.getElementById(CONTAINER_ID)) {\r\n      const { host, script } = buildTaboolaNodes();\r\n      // insert AFTER the grid widget (not inside it)\r\n      if (insertAfter(widgetTarget, host) && insertAfter(host, script)) {\r\n        console.log('[TaboolaFeed] Inserted after grid widget:', widgetTarget);\r\n        return true;\r\n      }\r\n    }\r\n\r\n    // 2) Fallback: insert AFTER the article body widget/section\r\n    const articleCandidates = findAll(ARTICLE_SELECTORS);\r\n    const article = articleCandidates[articleCandidates.length - 1];\r\n    if (article && !document.getElementById(CONTAINER_ID)) {\r\n      // prefer the widget wrapper if present, so we can insert after it\r\n      const articleWidget =\r\n        article.closest('.elementor-widget') ||\r\n        article.closest('.elementor-section') ||\r\n        article;\r\n      const { host, script } = buildTaboolaNodes();\r\n      if (insertAfter(articleWidget, host) && insertAfter(host, script)) {\r\n        console.log('[TaboolaFeed] Inserted after article body.');\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  };\r\n\r\n  let tries = 0;\r\n  const tick = () => {\r\n    tries++;\r\n    if (tryInject()) return;\r\n    if (tries < MAX_TRIES) setTimeout(tick, TRY_EVERY_MS);\r\n    else console.debug('[TaboolaFeed] No suitable spot found after retries.');\r\n  };\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', tick);\r\n  } else {\r\n    tick();\r\n  }\r\n}\r\n\r\nonDomReady(async () => {\r\n\r\n    try {\r\n        \r\n                    createNative();\r\n                    injectTaboolaFooterFeed();\r\n                    createStickyBanner();\r\n\r\n                    if (\r\n                        !window.location.href.includes(\"the-best-investment-managers-in-israel-2025\") &&\r\n                        !window.location.href.includes(\"best-pension-provident-funds-managers-2025\") &&\r\n                        !window.location.href.includes(\"2026nextbilliondollarstartups\")\r\n                        ) {\r\n                                addInContentUnits();\r\n                                addInContentRankingsOnlyUnits();\r\n                                addInContent30Under30AdUnits();\r\n                                }\r\n\r\naddAtfUnit();\r\n                    addCategoryAdUnits();\r\n                    addSectionAdUnits();\r\n                    addSideBarArticleAdUnits();\r\n                    //createAudioPlayer();\r\n                    createVideoPlayer();\r\n                    createInterstitial();\r\n                    addSideBarSectionAdUnits();\r\n\r\nif (\r\n            window.location.href.includes(\"/e/rankings/\")\r\n            ) {        \r\n                addInContentRatingAdUnits();\r\n\r\n            }\r\n\r\n            if (window.location.href === \"https://forbes.co.il/e/\") {\r\n                addAtfENGLISHUnit();\r\n            }\r\n        \r\n      // Add custom slots creation logic here 👇\r\n    } catch(err) {\r\n      console.error('Failed to create slots:', err.stack);\r\n    }\r\n\r\n    // Must be called last\r\n    initAds();\r\n    observeSlots();\r\n  });\r\n\r\n})(window, document);\r\n\r\n"]}