- ID da verificação
- ecbf6932-d0de-40ab-84cb-beaed77959b9Concluído
- URL enviado:
- https://www.nexusmods.com/daggerfallunity/mods/117
- Relatório concluído:
Links · 43 encontrado(s)
Os links de saída identificados na página
Link | Texto |
---|---|
https://next.nexusmods.com/daggerfallunity/collections?sortBy=total_downloads | All collections |
https://next.nexusmods.com/daggerfallunity/collections?sortBy=listed_at | Recently added |
https://next.nexusmods.com/daggerfallunity/collections?sortBy=endorsements_count | Most endorsed |
https://next.nexusmods.com/daggerfallunity/collections?sortBy=overall_rating | Highest rated |
https://modding.wiki/en/nexusmods/collections/about | Explore |
https://users.nexusmods.com/account/billing/premium | Upgrade |
https://forums.nexusmods.com/forum/8406-modding-discussion | Forums |
https://wiki.nexusmods.com/index.php/Main_Page | Wiki |
https://www.patreon.com/nexusmods | Support authors |
https://discord.gg/nexusmods | Discord |
Variáveis JavaScript · 290 encontrada(s)
Variáveis JavaScript globais carregadas no objeto janela de uma página são variáveis declaradas fora das funções e acessíveis de qualquer lugar no código dentro do escopo atual
Nome | Tipo |
---|---|
0 | object |
1 | object |
2 | object |
3 | object |
4 | object |
5 | object |
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
AdSlots | object |
Mensagens de registro do console · 2 encontrada(s)
Mensagens registradas no console web
Tipo | Categoria | Log |
---|---|---|
error | network |
|
log | other |
|
HTML
O corpo HTML bruto da página
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en" style="" data-previous-scroll-y="-0px" class="sp-message-open"><head>
<title>Pet Animal Companions at Daggerfall Unity Nexus - Mods and community</title>
<link rel="preload" href="https://static.anonymised.io/light/loader.js" as="script">
<link rel="preload" href="https://boot.pbstck.com/v1/tag/27a51c72-c5c4-48bf-b8e9-3ef1c4a43b5b" as="script">
<link rel="preload" href="https://btloader.com/tag?o=5684350990417920&upapi=true" as="script">
<link rel="preload" href="https://cdn.privacy-mgmt.com/unified/wrapperMessagingWithoutDetection.js" as="script">
<link rel="preload" href="https://z.moatads.com/networknheader13924283968/moatheader.js" as="script">
<link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-0CPE0JFSCT" as="script">
<link rel="preload" href="https://securepubads.g.doubleclick.net/tag/js/gpt.js" as="script">
<link rel="preload" href="https://cdn.pbxai.com/736376db-e1cc-45b9-91e1-f3ccf5a10d38.js" as="script">
<script src="https://static.anonymised.io/light/loader.js" async="" nnid="nn-482cb016" id="idward-plugin-js" idw_client_id="NTU=" idw_hide_button="true"></script><script src="https://boot.pbstck.com/v1/adm/4f1bddd4-4eb4-4afe-835e-e6ea9e7c7104" async="" nnid="nn-598d6d9"></script><script src="https://btloader.com/tag?o=5684350990417920&upapi=true" async="" nnid="nn-78bf31fb"></script><script src="https://cdn.privacy-mgmt.com/unified/wrapperMessagingWithoutDetection.js" async="" nnid="nn-31ce57da"></script><script src="https://www.googletagmanager.com/gtag/js?id=G-0CPE0JFSCT" async="" nnid="nn-77ed23dc"></script><script src="https://scripts.webcontentassessor.com/scripts/1e7f8b38994af8028d05bef928a68c0ed2fb53fe81f8895e52809d09cd9cce16" nnid="nn-295b3d35"></script><script src="https://kumo.network-n.com/dist/1.54.6/solar-mobile.js" async="" nnid="nn-65496087"></script><script src="https://kumo.network-n.com/dist/1.54.6/quantcast.js" async="" nnid="nn-226e70f7"></script><script src="https://kumo.network-n.com/dist/1.54.6/primis.js" async="" nnid="nn-614637a5"></script><script src="https://kumo.network-n.com/dist/1.54.6/gpt-positions.js" async="" nnid="nn-7185788f"></script><script src="https://kumo.network-n.com/dist/1.54.6/galaxy-board.js" async="" nnid="nn-22dc72ec"></script><script src="https://kumo.network-n.com/dist/1.54.6/celtra-bfab.js" async="" nnid="nn-d065c80"></script><script src="https://kumo.network-n.com/dist/1.54.6/anonymised.js" async="" nnid="nn-339269d4"></script><script src="https://kumo.network-n.com/dist/1.54.6/analytics.js" async="" nnid="nn-3ff01f3"></script><script src="https://kumo.network-n.com/dist/1.54.6/pubstack-adm.js" async="" nnid="nn-390e6eed"></script><script src="https://kumo.network-n.com/dist/1.54.6/tagging.js" async="" nnid="nn-4d3a091c"></script><script src="https://kumo.network-n.com/dist/1.54.6/comscore.js" async="" nnid="nn-3bf88124"></script><script src="https://kumo.network-n.com/dist/1.54.6/mediatrust.js" async="" nnid="nn-5b1c5781"></script><script src="https://kumo.network-n.com/dist/1.54.6/blockthrough.js" async="" nnid="nn-675b3cdd"></script><script src="https://kumo.network-n.com/dist/1.54.6/cmp-sourcepoint.js" async="" nnid="nn-45beeeab"></script><script src="https://rules.quantcount.com/rules-p-bcgV-fdjlWlQo.js" async=""></script><script type="text/javascript" async="" src="https://www.google-analytics.com/analytics.js"></script><script type="text/javascript" async="" src="https://www.googletagmanager.com/gtag/js?id=G-N0TELNQ37M&l=nexusDataLayer&cx=c&gtm=45He4bk0v866853703za200"></script><script src="https://secure.quantserve.com/quant.js" async="" type="text/javascript"></script><script async="" src="https://pw.nexusmods.com/js/container_aHn6giK8.js"></script><script async="" src="//pw.nexusmods.com/matomo.js"></script><script async="" src="https://www.googletagmanager.com/gtm.js?id=GTM-KCVF2WQ&l=nexusDataLayer"></script><script async="" src="https://sb.scorecardresearch.com/cs/38976705/beacon.js"></script><script>window.AdSlots = window.AdSlots || {cmd: []};</script>
<script async="" src="https://kumo.network-n.com/dist/app.js" site="nexus-mods"></script>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="application-name" content=" ">
<meta name="msapplication-TileColor" content="#FFFFFF">
<meta name="msapplication-TileImage" content="https://images.nexusmods.com/favicons/ReskinOrange/mstile-144x144.png">
<meta name="msapplication-square70x70logo" content="https://images.nexusmods.com/favicons/ReskinOrange/mstile-70x70.png">
<meta name="msapplication-square150x150logo" content="https://images.nexusmods.com/favicons/ReskinOrange/mstile-150x150.png">
<meta name="msapplication-wide310x150logo" content="https://images.nexusmods.com/favicons/ReskinOrange/mstile-310x150.png">
<meta name="msapplication-square310x310logo" content="https://images.nexusmods.com/favicons/ReskinOrange/mstile-310x310.png">
<meta name="description" content="Pet Animal Companions for Daggerfall! (imsobadatnicknames's Companion Questpack Framework)7 different animal pets (and 1 magical pet) are waiting to be found and adopted in the Illiac Ba">
<meta property="og:site_name" content="Nexus Mods :: Daggerfall Unity">
<meta property="og:url" content="https://www.nexusmods.com/daggerfallunity/mods/117">
<meta property="og:type" content="article">
<meta property="og:title" content="Pet Animal Companions">
<meta property="og:description" content="Pet Animal Companions for Daggerfall! (imsobadatnicknames's Companion Questpack Framework)7 different animal pets (and 1 magical pet) are waiting to be found and adopted in the Illiac Ba">
<meta property="og:image" content="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353538-958521904.jpeg">
<meta name="twitter:title" content="Pet Animal Companions">
<meta name="twitter:description" content="Pet Animal Companions for Daggerfall! (imsobadatnicknames's Companion Questpack Framework)7 different animal pets (and 1 magical pet) are waiting to be found and adopted in the Illiac Ba">
<meta name="twitter:image" content="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353538-958521904.jpeg">
<meta property="twitter:label1" content="Version">
<meta property="twitter:data1" content="1.20">
<meta property="twitter:label2" content="Total Views">
<meta property="twitter:data2" content="5264">
<!-- defaut meta twitter card -->
<meta content="summary_large_image" name="twitter:card">
<meta content="@NexusSites" name="twitter:site">
<!-- imported links -->
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:400,500,700,300">
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Montserrat:400,500,600,700,900,300">
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css2?family=Orbitron:wght@700&text=0123456789">
<link rel="apple-touch-icon-precomposed" sizes="57x57" href="https://images.nexusmods.com/favicons/ReskinOrange/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="https://images.nexusmods.com/favicons/ReskinOrange/apple-touch-icon.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="https://images.nexusmods.com/favicons/ReskinOrange/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="https://images.nexusmods.com/favicons/ReskinOrange/apple-touch-icon.png">
<link rel="apple-touch-icon-precomposed" sizes="60x60" href="https://images.nexusmods.com/favicons/ReskinOrange/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="https://images.nexusmods.com/favicons/ReskinOrange/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="https://images.nexusmods.com/favicons/ReskinOrange/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="https://images.nexusmods.com/favicons/ReskinOrange/apple-touch-icon-152x152.png">
<link rel="shortcut icon" sizes="196x196" href="https://images.nexusmods.com/favicons/ReskinOrange/firefox_app_128x128.png">
<link rel="shortcut icon" sizes="96x96" href="https://images.nexusmods.com/favicons/ReskinOrange/firefox_app_128x128.png">
<link rel="shortcut icon" sizes="230x230" href="https://images.nexusmods.com/favicons/ReskinOrange/favicon-230x230.png">
<link rel="shortcut icon" sizes="32x32" href="https://images.nexusmods.com/favicons/ReskinOrange/favicon-32x32.png">
<link rel="shortcut icon" sizes="16x16" href="https://images.nexusmods.com/favicons/ReskinOrange/favicon-16x16.png">
<link rel="shortcut icon" href="https://images.nexusmods.com/favicons/ReskinOrange/favicon.ico">
<!-- imported links end -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.0/css/all.css" integrity="sha384-lZN37f5QGtY3VHgisS14W3ExzMWZxybE1SJSEsQp9S+oqd12jhcu+A56Ebc1zFSJ" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="../../../assets/stylesheets/highstock/highstock-7.1.3.css">
<link rel="stylesheet" type="text/css" href="../../../assets/stylesheets/highstock/overrides.css">
<link href="https://www.nexusmods.com/assets/dist/app-Z7TFKJJH.css" rel="stylesheet" type="text/css">
<!-- imported scripts -->
<!-- imported scripts end -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.0.0/papaparse.min.js"></script>
<!-- Google Tag Manager (Nexus) -->
<script>
window.nexusDataLayer = window.nexusDataLayer || [];
window.nexusDataLayer.push({
login_status: "Guest",
});
</script>
<script>
window.nexusDataLayer.push({
game_name: "Daggerfall Unity",
});
</script>
<script>
window.nexusDataLayer.push({"mod_name":"Pet Animal Companions","mod_id":117,"mod_author_id":131665});
</script>
<!-- Begin comScore Tag -->
<script>
var _comscore = _comscore || [];
_comscore.push({ c1: "2", c2: "38976705" });
(function() {
var s = document.createElement("script"), el = document.getElementsByTagName("script")[0]; s.async = true;
s.src = "https://sb.scorecardresearch.com/cs/38976705/beacon.js";
el.parentNode.insertBefore(s, el);
})();
</script>
<noscript>
<img src="https://sb.scorecardresearch.com/p?c1=2&c2=38976705&cv=3.6.0&cj=1">
</noscript>
<!-- End comScore Tag -->
<script>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','nexusDataLayer','GTM-KCVF2WQ');
</script>
<!-- End Google Tag Manager (Nexus) -->
<script src="https://unpkg.com/unleash-proxy-client@latest/build/main.min.js" type="text/javascript" defer=""></script>
<script type="text/javascript">
window.blockingAds = false;
function onkaeadcrkmatecabrtbceheolrwth(blocking = false) {
var mins = 5;
var days = mins / ( 24 * 60 );
window.blockingAds = blocking;
const isBlocked = blocking;
var currentStoredStatus = Cookies.get('ab');
var newStatus = null;
var skipWrite = false;
if (currentStoredStatus === undefined)
{
newStatus = isBlocked ? 1 : 0;
}
else
{
var arrStoredStatus = currentStoredStatus.split("|");
if ( arrStoredStatus.length !== 2 )
{
newStatus = isBlocked ? 1 : 0;
}
else
{
var numericStoredStatus = parseInt( arrStoredStatus[0] );
if ( numericStoredStatus === 0 && isBlocked === true )
{
newStatus = 2;
}
else if ( numericStoredStatus === 1 && isBlocked !== true )
{
newStatus = 0;
}
else
{
newStatus = currentStoredStatus;
skipWrite = true;
}
}
}
if ( skipWrite !== true )
{
var now = Math.round( $.now() / 1000 );
var secs = mins * 60;
var expiry = now + secs;
Cookies.set('ab', newStatus + '|' + expiry, { expires: days });
}
}
function areAdsBlocked(){
return window.blockingAds;
}
</script>
<script type="text/javascript">
window.unleashClient = {
isEnabled: function() {
return false;
}
};
</script>
<script>
var actionLogOffset = new Array();
var notifications_game_id = 2927;
var notifications_game_domain_name = "daggerfallunity";
var file_upload_url = 'https://upload.nexusmods.com';
var upload_url = "https://file-metadata.nexusmods.com/file";
var upload_bucket = "nexus-files-s3";
var upload_metadata_bucket = "nexus-files-s3-meta";
var upload_service = "https://upload.nexusmods.com";
window.current_game_id = 2927;
var user_service_url = 'https://users.nexusmods.com';
var notification_service_url = 'https://notifications.nexusmods.com';
window.notificationsDisabled = false;
window.notificationsActive = true;
window.notificationsGameSpecific = false;
window.env = {};
window.env.NEXT_PUBLIC_SITE_URL = "https://next.nexusmods.com";
window.env.NEXT_PUBLIC_FLAMEWORK_URI = "https://www.nexusmods.com";
window.env.NEXT_PUBLIC_MODERATION_PUBLIC_GRAPHQL_URI = "https://moderation-router.nexusmods.com/graphql";
window.env.INVISION_GRAPHQL_URL = "https://invision-router.nexusmods.com/graphql";
window.env.NOTIFICATIONS_GRAPHQL_URL = "https://notifications-router.nexusmods.com/graphql";
window.env.NEXT_PUBLIC_FETCH_ROOT = "https://next.nexusmods.com";
</script>
<script src="https://www.nexusmods.com/assets/dist/app-SC5T7Y3O.js"></script><style id="_goober"> @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go3020080000{from{transform:scale(0);opacity:0;}to{transform:scale(1);opacity:1;}}@keyframes go463499852{from{transform:scale(0) rotate(90deg);opacity:0;}to{transform:scale(1) rotate(90deg);opacity:1;}}@keyframes go1268368563{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}@keyframes go1310225428{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go651618207{0%{height:0;width:0;opacity:0;}40%{height:0;width:6px;opacity:1;}100%{opacity:1;height:10px;}}@keyframes go901347462{from{transform:scale(0.6);opacity:0.4;}to{transform:scale(1);opacity:1;}}.go4109123758{z-index:9999;}.go4109123758 > *{pointer-events:auto;}</style>
<script>
$(document).data('nexus.game_id', 2927 );
$(document).data('nexus.blocked_tags', "");
$(document).data('nexus.blocked_authors', "");
$(document).data('nexus.include_adult', 0);
$(document).data('nexus.adult_blur', 0);
</script>
<script>
(function(h,o,t,j,a,r){
h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
h._hjSettings={hjid:1264276,hjsv:6};
a=o.getElementsByTagName('head')[0];
r=o.createElement('script');r.async=1;
r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
a.appendChild(r);
})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
</script><script async="" src="https://static.hotjar.com/c/hotjar-1264276.js?sv=6"></script>
<!-- Toastr lib -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css" rel="stylesheet" type="text/css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js" type="text/javascript"></script>
<script src="https://www.nexusmods.com/Contents/Scripts/ad-specs.js?" type="text/javascript"></script><script>
if(document.getElementById('eSTdHLCPsMFO')){
onkaeadcrkmatecabrtbceheolrwth(false);
} else {
onkaeadcrkmatecabrtbceheolrwth(true);
}
</script><script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//pw.nexusmods.com/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script><script>
var _mtm = window._mtm = window._mtm || [];
_mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'});
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src='https://pw.nexusmods.com/js/container_aHn6giK8.js'; s.parentNode.insertBefore(g,s);
</script><script type="text/javascript">
var _qevents = _qevents || [];
(function() {
var elem = document.createElement('script');
elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js";
elem.async = true;
elem.type = "text/javascript";
var scpt = document.getElementsByTagName('script')[0];
scpt.parentNode.insertBefore(elem, scpt);
})();
_qevents.push({
qacct:"p-bcgV-fdjlWlQo"
});
</script><script async="" src="https://script.hotjar.com/modules.86621fa4aeada5bcf025.js" charset="utf-8"></script><style>@media only screen and (min-width:900px){.bfa-maximum div[id*=primis_playerSekindoSPlayer][style*="position: fixed"]{top:var(--nnVideoOffsetTop,140px)!important}.bfa-loaded.bfa-collapsed div[id*=primis_playerSekindoSPlayer][style*="position: fixed"]{bottom:100px!important;top:auto!important}}</style><style>.galaxy-maximum div[id*=primis_playerSekindoSPlayer][style*="position: fixed"]{bottom:510px!important}.galaxy-loaded div[id*=primis_playerSekindoSPlayer][style*="position: fixed"]{bottom:265px!important;top:auto!important}.galaxy-loaded .notranslate.celtra-placement-sticky img{display:none}</style><style>[id^=primis_playerSekindoSPlayer]{margin-bottom:var(--cmpHeight)!important}</style><style>.nn-sticky{width:100%;display:flex;justify-content:center;position:fixed;bottom:var(--cmpHeight,0);left:0;right:0;z-index:9999;pointer-events:none}.nn-sticky>div{margin:0;padding:0;position:relative;z-index:9999;pointer-events:auto}.nn-sticky .close-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:block;width:40px;height:40px;position:absolute;right:-5px;top:0;margin-top:-40px;border-radius:40px;cursor:pointer;outline:none;background:#555;z-index:9999;pointer-events:auto}.nn-sticky .close-btn:after{content:"";background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cpath d='M10 10l20 20m0-20L10 30' stroke='%23fff' stroke-width='4'/%3E%3C/svg%3E") no-repeat 50% 50%;background-size:25px;width:100%;height:100%;display:block}.nn_sticky_ad>div{position:-webkit-sticky!important;position:sticky!important;top:15px;min-height:0!important}</style><style>@media only screen and (max-width:480px){.solar-loaded div[id*=primis_playerSekindoSPlayer]{bottom:auto!important}.solar-loaded div[id*=primis_playerSekindoSPlayer][style*="overflow: visible; position: fixed"]{bottom:200px!important}.solar-loaded .avp-floating-container.avp-bottom-right{bottom:300px!important}}</style><meta name="pbstck_context:website" content="NexusMods-651189ba36d9f"><meta name="pbstck_context:device" content="mobile"><meta name="pbstck_context:country" content="ES"><script charset="utf-8" src="https://cdn.privacy-mgmt.com/unified/4.27.2/gdpr-tcf.00cd3b6a2692e330e4ec.bundle.js"></script><script charset="utf-8" src="https://cdn.privacy-mgmt.com/unified/4.27.2/usnat-uspapi.25b8b71f04c7ff439a79.bundle.js"></script><script src="https://static.anonymised.io/light/bundle.js?v=0.3.19" async="" nnid="nn-482cb016" id="idward-plugin-js" idw_client_id="NTU=" idw_hide_button="true"></script><script type="text/javascript">(function(){ var kleanads=function(e){"use strict";var t,i,n;!function(e){e.HISTORY_MUTATION="_pbstck_kleanads_historyMutation",e.PAGE_CHANGE="_pbstck_kleanads_pageChange",e.REFRESH_INIT="_pbstck_kleanads_refreshInit"}(t||(t={})),function(e){e.SPA_RELOAD="admSPAReload"}(i||(i={})),function(e){e.REPLACE_STATE="replaceState",e.PUSH_STATE="pushState"}(n||(n={}));const s=e=>{window.history[e]=new Proxy(window.history[e],{apply(i,n,s){const a=window.location.href,r=i.apply(n,s),o=new CustomEvent(t.HISTORY_MUTATION,{detail:{referrer:a,stateObj:s[0],title:s[1],url:s[2],type:e}});return dispatchEvent(o),r}})},a=()=>{s(n.REPLACE_STATE),s(n.PUSH_STATE)};function r(e){const t=document.createElement("meta");t.setAttribute("name","pbstck_context:pbstck_ab_test"),t.content=e,document.head.appendChild(t)}function o(e,t){const i=document.createElement("meta");i.setAttribute("name",`pbstck:${e}`),i.content=t,document.head.appendChild(i)}function d(e){const t={};e.document.querySelectorAll('meta[name^="ad:"]').forEach((e=>{const i=function(e){const t=e.attributes.getNamedItem("name")?.value||"";return t.startsWith("ad:")?t.slice(3):t}(e);i&&(t[i]=function(e){const t=e.attributes.getNamedItem("content")?.value||"";return t.split(",")}(e))}));const i=new URLSearchParams(e.location.search);for(const e of i.keys())e.startsWith("ad:")&&(t[e.slice(3)]=i.getAll(e));return t}function c(){const e=document.head.querySelector('meta[name="ad:no_cmp"]');return!!e&&"true"===e.content}const l={advertisers:[],orders:[],lineItems:[]},u="adm";class f{constructor(e,t,i,n=1){this.tagId=e,this.kleanadsVersion=t,this.throttling=n,this.device=i||"na"}handleMessage(e,t,i){const n={source:"kleanads",type:"log",level:e,message:t,tagId:this.tagId,kleanadsVersion:this.kleanadsVersion,href:window.location.href,device:this.device,...i};var s,a;s=n,a=this.throttling,100*Math.random()<a&&navigator.sendBeacon("https://intake.pbstck.com/v1/trace",JSON.stringify(s))}error(e){this.handleMessage("error",e)}warn(e){this.handleMessage("warn",e)}logWithPayload(e,t){this.handleMessage("info",e,t)}}const g=/kleanads:debug/.test(window.location.href),h=!!window.localStorage?.getItem&&null!==window.localStorage.getItem("kleanads"),p="kleanads";let m,b="na",v="na",y="na";function A(){return g||h}function S(e,t){return`[${e}] [${performance.now().toFixed(2)}] ${t}`}function I(e){y=e}function C(e,...t){A()&&console.log(S(p,e),...t)}function w(e,...t){if(A()){const i="background: #4D5E98;color: #fff; padding: 2px 4px;font-weight:bold;text-transform:capitalize;border-radius: 1px; margin:0 2px;";console.debug("%cDEBUG",i,S(p,e),...t)}}function E(e,...t){A()&&console.warn(S(p,e),...t),m?.warn(e)}function _(e,...t){A()&&console.error(S(p,e),...t),m?.error(e),navigator.sendBeacon(`https://intake.pbstck.com/v1/intake/error?tId=${b}&v=${v}&s=${y}&c=1`,JSON.stringify([{message:e}]))}function T(e,t){m?.logWithPayload(e,t)}function k(e,t){const i={type:"customEvent",eventName:e,message:t};window.postMessage(i,"*")}function O(e){return null!==document.getElementById(e)}function R(e){const t=document.getElementById(e);if(t){return t.getBoundingClientRect().top}return C(`[DOM] div ${e} not found during get distance from top`),0}function $(e,t){return new Promise(((i,n)=>e().then(i).catch((i=>{return t>1?(s=100,new Promise((e=>setTimeout(e,s)))).then($.bind(null,e,t-1)).then((e=>e)).catch(n):n(i);var s}))))}const L=async(e,t=3)=>$((()=>import(e)),t).then((e=>e)).catch((i=>{throw _(`Failed to load module ${e} after ${t} retries`,i),new Error("Too many failed attempt to load external module.")})),P=(e,t)=>{const i=function(e,t){const i=document.createElement("script");return i.setAttribute("src",e),i}(e);i.setAttribute("async","true"),i.setAttribute("data-kleanads","true"),document.head.append(i)};async function N(e,t){const{beforeStart:i}=t,n=function(e,t){return(e.extraScripts??[]).filter((i=>i.tagId===e.tagId&&!!i.beforeStart===t))}(e,i);if(n.length>0){C("[extra-script]",i?"Loading extraScripts before config":"Loading extraScripts after consent");const e=n.filter((({synchronous:e})=>!e)).flatMap((e=>e.scripts)),t=n.filter((({synchronous:e})=>e)).flatMap((e=>e.scripts));if(e.length>0&&(C(`[extra-script] downloading async extra scripts ${e.join("\n")}`),e.forEach((e=>P(e)))),t.length>0){C(`[extra-script] downloading sync extra scripts ${t.join("\n")}`);for(const e of t)try{await L(e)}catch(e){E("[extra-script] Error while loading sync extra script",e)}}}}function U(e,t){return e.size<t.size?1:e.size>t.size?-1:0}function x(e){return e.filter(M)}function D(e){if("fluid"===e)return"fluid";const[t,i]=e.split("x");return[parseInt(t,10),parseInt(i,10)]}function j(e){return e>=100||e>=Math.floor(100*Math.random())+1}function B(e){if(100!==e.reduce(((e,t)=>e+t),0))return C("[drawComplexAbTests] The sum of all probabilities should be equal to 100 and is not, we use the first version of the ab test"),1;const t=e.reduce(((e,t)=>(e.length?e.push(e[e.length-1]+t):e.push(t),e)),[]),i=Math.floor(100*Math.random())+1;return t.findIndex((e=>i<=e))+1}function M(e){return Array.isArray(e)&&2===e.length&&"number"==typeof e[0]&&"number"==typeof e[1]}const V=["master","master-1","master-2","master-3","companion",void 0],F=(e,t)=>V.indexOf(e.roadblock)-V.indexOf(t.roadblock)||R(e.divId)-R(t.divId),z=(e,t)=>"fluid"===e&&"fluid"===t||e[0]===t[0]&&e[1]===t[1];function W(e){const t=e.values??[];return e.value?e.value:t}const G=["adyoulike"],H=e=>e.filter((e=>e.mediaTypes.includes("Banner"))).map(q),J=e=>e.map(q),K=e=>e.filter((e=>e.mediaTypes.includes("Native"))).map(q),Y=e=>e.filter((e=>e.mediaTypes.includes("Outstream"))).map(q),q=e=>({bidder:e.bidder,params:e.params}),X=e=>({banner:{sizes:x(e)}}),Q=e=>({video:e}),Z=e=>({native:e}),ee=e=>({video:{context:"outstream",playerSize:[640,480],mimes:["video/mp4","video/ogg","video/webm","application/javascript"],protocols:[1,2,3,4,5,6,7,8,11,12,13,14],api:[1,2,3,5,6,7],playbackmethod:[2,3,4],skip:1,linearity:2,startdelay:0,placement:3,plcmt:4,maxduration:30,playVideoVisibleThreshold:25,nonViewableBehavior:"pause",renderer:e}}),te=e=>{const t={};return e.mediaTypes.includes("Banner")&&(t.banner=X(e.sizes).banner),e.mediaTypes.includes("Outstream")&&(t.video=ee(ie()).video),e.mediaTypes.includes("Native")&&(t.native=Z(e.nativeParams).native),t},ie=()=>({url:"https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js",options:{adText:"",aspectRatio:"16:9",skippable:{enabled:!0,skipButtonText:"SKIP"}}}),ne=(e,t)=>{const i=e.floors;i&&t&&(i.values.banner=Math.max(i.values.banner,t));const n={code:e.divId,pubstack:{adUnitName:e.adServerAdUnitName,adUnitPath:oe(e)},floors:i,ortb2Imp:e.ortb2Imp},s=e.getTargetings();if(s.find((e=>"ad_index"===e.key))){const e=s.find((e=>"ad_index"===e.key))?.value;n.pubstack&&(n.pubstack.tags=[`ad_index:${e}`])}return n},se=e=>{const t=x(e).filter((e=>!z(e,[1800,1e3]))),i=(e=>!!e.find((e=>z(e,[1800,1e3]))))(e)?[[1800,1e3]]:[];return[t,i]},ae=(e,t)=>e.bidders.reduce(((e,i)=>(t?.includes(i.bidder)?e.multiformat.push(i):e.singleformat.push(i),e)),{multiformat:[],singleformat:[]});function re(e,t){const i=ne(e,t?.newFloor),n=e.mediaTypes;if(n.includes("Instream"))return[{...i,bids:J(e.bidders),mediaTypes:Q(e.instreamParams?.mediaTypeParams)}];const s=[],a=ae(e,t?.multiformatBidders);if(a.multiformat.length>0&&s.push({...i,bids:a.multiformat.map(q),mediaTypes:te(e)}),a.singleformat.length>0){if(n.includes("Banner")){const[t,n]=se(e.sizes);if(t.length&&s.push({...i,bids:H(a.singleformat),mediaTypes:X(t)}),n.length){const t=e.bidders,a=(e.biddersSkin?t.filter((t=>e.biddersSkin?.includes(t.bidder))):t).filter((e=>!G.includes(e.bidder)));s.push({...i,bids:H(a),mediaTypes:X(n)})}}n.includes("Outstream")&&s.push({...i,bids:Y(a.singleformat),mediaTypes:ee(),renderer:ie()}),n.includes("Native")&&s.push({...i,bids:K(a.singleformat),mediaTypes:Z(e.nativeParams)})}return s}function oe(e){const t=[...e.getTargetings()],i=(e.pubstackDeclarationTargetingKeys??[]).map((e=>{const i=t.find((t=>t.key===e));if(i)return i;{const t=d(window)[e];return t?{key:e,values:t}:void 0}})).filter((e=>!!e)).map((e=>`${e.key}=${function(e){const t=e.values?e.values.join(","):"";return e.value?e.value:t}(e)}`)).join("&"),n=e.adUnitPath.includes("?")?"&":"?";return i.length>0?`${e.adUnitPath}${n}${i}`:e.adUnitPath}class de{constructor(){this.uprEnabled=!0,this.disableGptPreAuction=!1,this.kleanadsRunCount=1}setUprState(e,t){switch("true"===function(e,t){const i=`meta[name="${t}"]`,n=e.document.querySelector(i);return null!==n?n.getAttribute("content"):null}(window,"adm_feature:upr_disabled")&&(e="disabled"),e){case"disabled":this.uprEnabled=!1;break;case"tested":this.uprEnabled=j(t??50),this.uprTested=!0;break;default:this.uprEnabled=!0}}setKleanadsRunCount(e){this.kleanadsRunCount=e}static getInstance(){return de.instance||(de.instance=new de),de.instance}}const ce="ad_floor-rule",le="prkv";function ue(e){if("string"==typeof e)return!0;if(Array.isArray(e)){for(const t of e)if("string"!=typeof t)return!1;return!0}return!1}function fe(e,t){const i=e.getTargeting(t);i&&i.length>0&&e.clearTargeting(t)}const ge="bid_bidder",he="bid_size",pe="bid_mediatype",me="[instream] [Dailymotion]";class be{constructor(e,t,i,n){this.callbackAdded=!1,this.configSetOnce=!1,this.adReadyToFetchReceivedOnce=!1,this.adReadyToFetchCallback=()=>{},this.declaredAdUnit="",this.pubstackWindow=e,this.pageContext=t,this.device=i,this.targetings=ye(this.device,this.pubstackWindow),this.instreamType=n??"dailymotion-v1"}declareAdUnit(e){"dailymotion-v3"===this.instreamType&&""===this.declaredAdUnit&&(this.declaredAdUnit=e.divId,this.executeWhenAdServerReady((()=>{const t=this.pubstackWindow.dailymotion;t?t.getPlayer(e.divId).then((t=>{t.on(this.pubstackWindow.dailymotion?.events.AD_READYTOFETCH,(()=>{C(`${me} ${e.divId} event AD_READYTOFETCH received`),this.adReadyToFetchReceivedOnce||(this.adReadyToFetchReceivedOnce=!0),this.adReadyToFetchCallback()}))})):_(`${me} unable to get dailymotion on the page`)})))}setApsTargetings(e){if(0!==e.length){C(`${me} putting targeting keys for aps auction of winning bidder`,e[0]);try{const t=e[0].helpers?.qsParams();if(t)return void this.targetings.push(t.slice(1));const i=e[0].qsParams;if(i)return void this.targetings.push(i.slice(1))}catch(e){_(`${me} error setting APS targetings`,e)}}}executeWhenAdServerReady(e){this.pubstackWindow.dailymotion?e():setTimeout(this.executeWhenAdServerReady.bind(this,e),100)}async callAdServer(e,t){const i=e.divId;if("dailymotion-v3"===this.instreamType&&e.divId!==this.declaredAdUnit)return void _(`${me} ${e.divId} call ad server but it is not the same divId as the one declared ${this.declaredAdUnit}`);C(`${me} ${i} call ad server`);const n=await(this.pubstackWindow.dailymotion?.getPlayer(i));if(!n)return void _(`${me} no player found for ${i}`);C(`${me} ${i} player:`,n);const s=await n.getState();switch(this.customConfig=function(e,t,i,n){const s=function(e){return e.getTargetings().map(ve)}(e);C(`${me} adUnitTargetings`,s);const a=Array.from(i.entries()).filter((([,e])=>!!e)).map((([e,t])=>`${e}=${t}`)),r=s.concat(t).concat(a).join("&"),o={...e.instreamParams?.vast,vpmute:n.playerIsMuted?1:0},d=Object.keys(o).map((function(e){return`${e}=${o[e]}`})).join("&"),c=e.instreamParams?.adDeactivationContext;let l=!1;if(c){const e=i.get(c.key);l=!!e&&c.values.includes(e)}const u={dynamiciu:e.adUnitPath,keyvalues:r,keyvalues2:d};return l?{...u,premium:"true"}:u}(e,this.targetings,this.pageContext,s),C(`${me} generated customConfig`,this.customConfig),this.instreamType){case"dailymotion-v1":C(`${me} ${i} setCustomConfig`,this.customConfig),n.setCustomConfig(this.customConfig),C(`${me} ad server called ${i}`),document.dispatchEvent(new CustomEvent("admDailymotionReady",{detail:{divId:i}})),C(`${me} ${i} admDailymotionReady event dispatched`);break;case"dailymotion-v2":this.callbackAdded||(C(`${me} ${i} add callback to event ${this.pubstackWindow.dailymotion?.events.AD_READYTOFETCH}`),n.on(this.pubstackWindow.dailymotion?.events.AD_READYTOFETCH,(()=>{C(`${me} ${i} event AD_READYTOFETCH received, setCustomConfig`,this.customConfig),this.customConfig&&n.setCustomConfig(this.customConfig),t&&(C(`${me} ${i} event AD_READYTOFETCH, call "onCallFinished"`),t())})),this.callbackAdded=!0);break;case"dailymotion-v3":!this.configSetOnce&&this.adReadyToFetchReceivedOnce?(C(`${me} ${e.divId} event AD_READYTOFETCH already received, setting customConfig"`,this.customConfig),this.customConfig&&(n.setCustomConfig(this.customConfig),this.configSetOnce=!0),t&&(C(`${me} ${e.divId} event AD_READYTOFETCH, call "onCallFinished"`),t())):this.adReadyToFetchCallback=()=>{C(`${me} ${e.divId} event AD_READYTOFETCH callback, setting customConfig"`,this.customConfig),this.customConfig&&n.setCustomConfig(this.customConfig)}}}setPbjsTargetings(e,t){if(e){C(`${me} put pbjs targeting keys for ${t.divId}`);const i=e.getAdserverTargetingForAdUnitCode(t.divId);for(const e of Object.keys(i)){const n=i[e];ue(n)?this.targetings.push(`${e}=${n}`):E(`${me} [targeting] unable to set targeting ${e}=${n} on adUnit ${t.divId}`)}}else _(`${me} no pbjs given: unable to put header bidding targetings`)}cleanTargetings(){this.targetings.splice(0),this.targetings.push(...ye(this.device,this.pubstackWindow))}}function ve(e){const t=W(e);return`${e.key}=${"string"==typeof t?t:t.join(",")}`}function ye(e,t){const i=[],n=d(t);Object.keys(n).forEach((e=>{const t=n[e].join(",");i.push(`${e}=${t}`)})),i.push(`${u}=1`),i.push(`device=${e}`);const s=de.getInstance().grapeshotValues;s?.length&&i.push(`gs_cat=${s.join(",")}`);try{const e=JSON.parse(t.localStorage._pdfps).slice(0,250).join(",");""!==e?i.push(`permutive=${e}`):C(`[${me}] no permutive targeting found`)}catch(e){C(`[${me}] error reading permutive targeting, ${e}`)}return i}var Ae,Se,Ie;!function(e){e.BEGIN_INIT="begin_init",e.CMP_RESPONSE_AVAILABLE="cmp_response_available",e.MAIN_THREAD_END="main_thread_end",e.GOOGLETAG_READY="googletag_ready",e.APSTAG_READY="apstag_ready",e.PREBID_READY="prebid_ready"}(Ae||(Ae={})),function(e){e.BEGIN_CONFIGURE="begin_configure",e.BEGIN_START="begin_start",e.SPA_RELOAD="spa_reload"}(Se||(Se={})),function(e){e.START_AUCTION="start_auction",e.END_PBJS_AUCTION="end_pbjs_auction",e.END_APS_AUCTION="end_aps_auction",e.START_AD_SERVER_CALL="start_ad_server_call",e.SLOT_RENDER_ENDED_TIME="slot_render_ended_time",e.SLOT_RESPONSE_RECEIVED_TIME="slot_response_received_time"}(Ie||(Ie={}));const Ce=[],we=[],Ee="getEntriesByName"in performance&&"measure"in performance&&"mark"in performance;function _e(e){Ce.includes(e)||(Ue(e),Ce.push(e))}function Te(e){Ue(e)}function ke(e,t){const i=Ne(e,t);we.includes(i)||(Ue(i),we.push(i))}function Oe(e){return function(e){if(Ee)return performance.getEntriesByName(e).map((e=>e.startTime));return[]}(e)}function Re(e){if(Ce.includes(e))return function(e){if(Ee)return performance.getEntriesByName(e)[0].startTime;return}(e)}function $e(e,t){if(Ce.includes(e)&&Ce.includes(t))return xe(e,t)}function Le(e,t,i){const n=Ne(e,i);if(Ce.includes(t)&&we.includes(n))return xe(t,n)}function Pe(e,t,i){const n=Ne(e,t),s=Ne(e,i);if(we.includes(n)&&we.includes(s))return xe(n,s)}function Ne(e,t){return`${e}_${t}`}function Ue(e){Ee&&(performance.mark(e.toString()),w(`[performance] [mark] ${e}: ${performance.getEntriesByName(e)[0].startTime.toFixed(2)}`))}function xe(e,t){if(Ee){const i=`measure_${e}_${t}`,n=performance.getEntriesByName(i);if(0!==n.length&&"measure"===n[0].entryType)return n[0].duration;try{return performance.measure(i,e,t).duration}catch{return}}}var De;!function(e){e.UNKNOWN="unknown",e.WAIT_USER_CONSENT="wait_user_consent",e.WAIT_USER_REFUSED="wait_user_refused"}(De||(De={}));let je=De.UNKNOWN;function Be(e){je=e}const Me=[];function Ve(e,t){Me.includes(e)||(T("[metric] adunit",{...We(e,t)}),Me.push(e))}const Fe=new Map;function ze(e){const t=function(e){const t=performance.getEntriesByName(e);return t.length>0&&"mark"===t[0].entryType}(Ae.GOOGLETAG_READY);Fe.set(e,t)}function We(e,t){return{adUnit:e,consentType:je,eventOrigin:t,startAuctionFromConsent:Le(e,Ae.CMP_RESPONSE_AVAILABLE,Ie.START_AUCTION),pbjsAuctionDuration:Pe(e,Ie.START_AUCTION,Ie.END_PBJS_AUCTION),apsAuctionDuration:Pe(e,Ie.START_AUCTION,Ie.END_APS_AUCTION),startAdServerCallFromConsent:Le(e,Ae.CMP_RESPONSE_AVAILABLE,Ie.START_AD_SERVER_CALL),slotRenderEndedFromConsent:Le(e,Ae.CMP_RESPONSE_AVAILABLE,Ie.SLOT_RENDER_ENDED_TIME),adServerResponseDuration:Pe(e,Ie.START_AD_SERVER_CALL,Ie.SLOT_RESPONSE_RECEIVED_TIME),totalAdCallDuration:Pe(e,Ie.START_AUCTION,Ie.SLOT_RENDER_ENDED_TIME),isGoogletagReadyAtPbjsAuctionEnd:Fe.get(e)}}function Ge(){const e=Re(Ae.BEGIN_INIT),t=Oe(Se.BEGIN_CONFIGURE),i=Oe(Se.BEGIN_START),n=Oe(Se.SPA_RELOAD),s=function(e){if(e.length>=2)return e[e.length-1]-e[e.length-2];return}(n),a={countSpaReloads:n.length,countConfigures:t.length,countStarts:i.length};e&&t.length>0&&(a.initToConfigure=t[t.length-1]-e),t.length>0&&i.length>0&&(a.configureToStart=i[i.length-1]-t[t.length-1]),s?a.diffSpaReload=s:t[0]&&n[0]&&(a.diffSpaReload=n[0]-t[0]),T("[metric] start",a)}const He="[consent]";function Je(e){return new Promise(((t,i)=>{!function(e,t,i){(n=e,new Promise(((e,t)=>Ke(n,e)))).then((()=>{try{!function(e,t){const i=function(e){return e.__tcfapi}(e);i("addEventListener",2,(e=>{if(e&&("useractioncomplete"===e.eventStatus||"tcloaded"===e.eventStatus)){w(`${He} Consent status`,e.eventStatus),_e(Ae.CMP_RESPONSE_AVAILABLE);const i=function(e){if(!e.purpose.consents||0===Object.keys(e.purpose.consents).length)return!1;for(const t in e.purpose.consents)if(!e.purpose.consents[t])return!1;return!0}(e);Be(i?De.WAIT_USER_CONSENT:De.WAIT_USER_REFUSED),t(i)}}))}(e,t)}catch(e){_(`${He} Error while loading tcf api`,e),i(e)}})).catch((e=>{_(`${He} Error while loading tcf api`,e),i(e)}));var n}(e,t,i)}))}function Ke(e,t,i){const n=e.__tcfapi;n&&function(e){if("function"!=typeof e)throw new Error("__tcfapi is not a function");return!0}(n)?t():setTimeout((()=>Ke(e,t)),100)}const Ye="[context]";function qe(e){return e.map((e=>({key:e.key.toLowerCase(),defaultValue:e.defaultValue?e.defaultValue.toLowerCase():void 0,otherValues:e.otherValues?e.otherValues.map((e=>e.toLowerCase())):[]})))}function Xe(e,t,i){(function(e,t,i){const n=[],s=qe(t).filter((e=>void 0!==e.defaultValue)).map((e=>e.key.toLowerCase())),a=[];e.document.querySelectorAll('meta[name^="pbstck_context:"]').forEach((e=>{const t=e.attributes.getNamedItem("name")?.value.substring(15).toLowerCase();t&&a.push(t)}));for(const e of i)s.includes(e)&&!a.includes(e)&&n.push(e);return n})(e,t,i).forEach((e=>{E(`[context] Missing ${e} context key used in adunit path`)}))}const Qe={pbjsFinished:!1,apsFinished:!1},Ze="[executor] [instream]";class et{constructor(e,t,i,n){this.rank=1,this.adServer=e,this.pbjs=t,this.aps=i,this.kleanadsRunCount=n}executeAdCall(e){setTimeout((()=>{Ve(e.divId,"executorTimeout")}),2e4),this.adServer.declareAdUnit(e),this.adUnitAuctionStatus?E(`${Ze} cannot make a new ad call, existing one on ${e.divId}.`):(C(`${Ze} executeAdCall for adunit`,e),this.startAuction(e))}executeRefresh(e){this.adServer.cleanTargetings();const t={labels:["pubstackRefresh",`pubstackRefreshRank:${e.rank}`]};this.startAuction(e.adUnit,t)}startAuction(e,t){this.adUnitAuctionStatus=Qe,ke(e.divId,Ie.START_AUCTION),C(`${Ze} starting auctions for ${e.divId}`);const i=de.getInstance().kleanadsRunCount;if(this.pbjs){const n=this.pbjs.getPbjs();this.pbjs.startPbjsAuction([e],(()=>{this.kleanadsRunCount===i?this.pbjsFinished(n,e):C(`${Ze} kleanads run count has changed (from ${this.kleanadsRunCount} to ${i}), avoid calling pbjsFinished`)}),t)}this.aps&&this.aps.startApsAuction([e],(t=>{this.kleanadsRunCount===i?this.apsFinished(e,t):C(`${Ze} kleanads run count has changed (from ${this.kleanadsRunCount} to ${i}), avoid calling apsFinished`)})),this.pbjs||this.aps||this.adServer.executeWhenAdServerReady((()=>{this.kleanadsRunCount===i?this.callAdServer(e):C(`${Ze} kleanads run count has changed (from ${this.kleanadsRunCount} to ${i}), avoid calling AdServer`)}))}isAlreadyMonetized(){return!!this.adUnitAuctionStatus}pbjsFinished(e,t){C(`${Ze} pbjs end callback for ${t.divId}`,e.getAllPrebidWinningBids()),ke(t.divId,Ie.END_PBJS_AUCTION),ze(t.divId),this.adServer.executeWhenAdServerReady((()=>{C(`${Ze} pbjs end callback ad server ready ${t.divId}`),this.adServer.setPbjsTargetings(e,t),this.adUnitAuctionStatus&&(this.adUnitAuctionStatus.pbjsFinished=!0),this.canCallAdServer()&&this.callAdServer(t)}))}apsFinished(e,t){C(`${Ze} aps end callback ${e.divId}`,t),ke(e.divId,Ie.END_APS_AUCTION),this.adServer.executeWhenAdServerReady((()=>{C(`${Ze} aps end callback ad server ready ${e.divId}`),this.adServer.setApsTargetings(t),this.adUnitAuctionStatus&&(this.adUnitAuctionStatus.apsFinished=!0),this.canCallAdServer()&&this.callAdServer(e)}))}canCallAdServer(){const e=this.adUnitAuctionStatus;return this.aps&&!this.pbjs?e&&e.apsFinished:this.pbjs&&!this.aps?e&&e.pbjsFinished:this.pbjs&&this.aps?e&&e.apsFinished&&e.pbjsFinished:void 0}callAdServer(e){ke(e.divId,Ie.START_AD_SERVER_CALL),this.adServer.callAdServer(e,(()=>{C(`${Ze} onCallFinished called, adding setTimeout to a new auction`),setTimeout((()=>{this.executeRefresh({adUnit:e,rank:this.rank}),this.rank++}),5e3)})),C(`${Ze} ad server called ${e.divId}`)}}let tt=4400;const it="[APS]";let nt=!1,st=!1;function at(e){const t=e.apstag;if(t.kleanadsBlocker){C(`${it} getting apstag from blocker's methods`);const e=t;return{...t,fetchBids:e.fetchBidsKleanads,setDisplayBids:e.setDisplayBidsKleanads}}return t}class rt{constructor(e,t){this.pubstackWindow=e,this.apsPubId=t}setEnableApsForTests(e){!function(e){_(`${it} this function should be used only for testing purpose`),nt=e}(e)}load(){!function(e){function t(t,i){at(e)?._Q?.push([t,i])}nt=!0,e.apstag||(e.apstag={_Q:[]}),e.apstag.init=(...e)=>t("i",e),e.apstag.fetchBids=(...e)=>t("f",e),e.apstag.setDisplayBids=()=>{},e.apstag.targetingKeys=()=>[],P("//c.amazon-adsystem.com/aax2/apstag.js")}(this.pubstackWindow)}startApsAuction(e,t){if(!nt)return C(`${it} skipping auction for adunits [${e.map((e=>e.divId)).join(",")}]`),void t([]);if(!st)return E(`${it} cannot start auction: apstag is not initialized`),void t([]);const i=at(this.pubstackWindow);if(!i)return E(`${it} cannot find apstag on the page`),void t([]);const n=function(e){return e.filter((e=>e.headerBiddingEnabled)).reduce(((e,t)=>{const i=t.mediaTypes;if(i.includes("Instream")){const t={slotID:"videoSlot",mediaType:"video",sizes:[[640,480]]};return[...e,t]}if(i.includes("Banner")){const i={slotID:t.divId,slotName:t.slotName,sizes:x(t.sizes)};return i.sizes.length?[...e,i]:e}if(i.includes("Outstream")){const i={slotID:t.divId,mediaType:"video",sizes:[[640,480]]};return[...e,i]}return[]}),[])}(e);if(0===n.length)return w(`${it} no slot created, not calling fetchbids`,n),void t([]);w(`${it} apsSlots created`,n);let s=!1;setTimeout((()=>{s||(E(`${it} fetchbids did not response before ${tt}ms, calling callback`),s=!0,t([]))}),tt),i.fetchBids({slots:n},(e=>{s||(s=!0,t(e))})),C(`${it} called fetchBids`,n)}initAps(e,t){if(nt){tt=e+1400,w(`${it} configuring failsafe timeout to ${tt}`);const i=at(this.pubstackWindow);if(!i)return void E(`${it} cannot find apstag on the page`);const n=t?.config;i.init({pubID:this.apsPubId,adServer:"googletag",bidTimeout:e,deals:!0,videoAdServer:"DFP",schain:n},(()=>{w(`${it} apstag init done`),_e(Ae.APSTAG_READY),T("[metric] apstag",{consentType:je,apstagReady:$e(Ae.CMP_RESPONSE_AVAILABLE,Ae.APSTAG_READY)})})),st=!0}else C(`${it} apstag init skipped`)}}const ot="[GAM]",dt="pbstck_ab_test",ct="xp_variant",lt=[3,1];let ut=!1;const ft=[];function gt(e){return new Promise(((t,i)=>pt(e,t,i)))}const ht=50;function pt(e,t,i){if(e.googletag)try{e.googletag.apiReady?t():setTimeout((()=>pt(e,t,i)),ht)}catch(e){i(e)}else setTimeout((()=>pt(e,t,i)),ht)}function mt(e,t,i,n,s){gt(e).then((()=>{C(`${ot} googletag ready, starting initialization`),e.googletag.pubads().disableInitialLoad(),n?.disableSingleRequest?w(`${ot} single request disabled`):e.googletag.pubads().enableSingleRequest()||_("unable to enable single request"),function(e,t,i){const n=e.googletag.pubads();t.forEach(((e,t)=>{e&&n.setTargeting(t,e)}));const s=d(e);w("[targetings] setting page level targetings from meta declaration",s),Object.keys(s).forEach((e=>{n.setTargeting(e,s[e])})),n.setTargeting(u,"1");const a=de.getInstance().grapeshotValues;a?.length&&(w(`${ot} grapeshot: setting gs_cat gam targeting values`,a),n.setTargeting("gs_cat",a));const r=i?.filter((e=>e.gamTargeting));r?.length&&(w(`${ot} setting ab_test gam targeting values`,r),r.forEach((e=>{n.setTargeting(e.name,e.value)})));if(de.getInstance().uprTested){w(`${ot} setting xp_variant/pbstck_ab_test gam targeting value any previous value will be ignored`);const e=`floor_optimization:${de.getInstance().uprEnabled}`;n.setTargeting(ct,e),n.setTargeting(dt,e)}}(e,t,s),n&&n.ppidValue&&e.googletag.pubads().setPublisherProvidedId(n.ppidValue),n&&n?.threadYieldConfig&&e.googletag.setConfig({threadYield:n.threadYieldConfig}),e.googletag.enableServices(),i?.lazyLoadingGoogle?.googleFetchMarginPercent&&i?.lazyLoadingGoogle?.googleRenderMarginPercent&&e.googletag.pubads().enableLazyLoad({fetchMarginPercent:i.lazyLoadingGoogle.googleFetchMarginPercent,renderMarginPercent:i.lazyLoadingGoogle.googleRenderMarginPercent,mobileScaling:i.lazyLoadingGoogle.googleMobileScaling}),e.googletag.pubads().setCentering(!0),C("googletag initialized"),ut=!0,ft.forEach((e=>e())),_e(Ae.GOOGLETAG_READY),T("[metric] googletag",{consentType:je,googletagReady:$e(Ae.CMP_RESPONSE_AVAILABLE,Ae.GOOGLETAG_READY),adUnitWithAuctionEnded:Array.from(Fe.keys())}),w("GAM","googletag slotRenderEnded listener added"),e.googletag.pubads().addEventListener("slotRenderEnded",bt),e.googletag.pubads().addEventListener("slotResponseReceived",vt)}))}const bt=e=>{const t=e.slot,i=t.getSlotElementId();ke(i,Ie.SLOT_RENDER_ENDED_TIME),Ve(i,"slotRenderEnded"),function(e,t){fe(t,ce),fe(t,le),w(`removed price rule targetings (${le} & ${ce}) from slot ${e}`)}(i,t),w(`slot render ended for ${i}`)},vt=e=>{const t=e.slot.getSlotElementId();w(`slot response received for ${t}`),ke(t,Ie.SLOT_RESPONSE_RECEIVED_TIME)};function yt(e,t){for(const i of e.getTargetings()){const n=W(i),s=i.key;t.setTargeting(s,n),w(`${ot} adding targeting (${s}, ${n}) to adunit ${e.divId}`)}t.setTargeting("ad_adunitname",[e.adServerAdUnitName])}function At(e){ut?e():ft.push(e)}class St{constructor(e,t){this.externalTargetingDeclarations=[],this.googletagSlotsInitialized={},this.pubstackWindow=e,this.prebidOrderIds=t}prebidReady(){}init(e,t,i,n){mt(this.pubstackWindow,e,t,i,n)}declareAdUnits(e){return this.declareGoogleSlots(e)}registerExternalTargetingDeclaration(e){this.externalTargetingDeclarations.push(e)}clean(){this.externalTargetingDeclarations=[],this.executeWhenAdServerReady((()=>{C(`${ot} cleaning slots`,this.pubstackWindow.googletag.pubads().getSlots().map((e=>e.getSlotElementId())),this.pubstackWindow.googletag.pubads().getSlots());const e=[];this.pubstackWindow.googletag.pubads().getSlots().forEach((t=>{const i=this.pubstackWindow.googletag.destroySlots([t]);w(`${ot} slot ${t.getSlotElementId()} destroyed ? ${i}`),i||(e.push(t),C(`${ot} slot ${t.getSlotElementId()} not destroyed, retrying later`))})),e.length?_(`${ot} unable to destroy slot ${It(e)}`):w(`${ot} all slots destroyed`),this.pubstackWindow.googletag.pubads().removeEventListener("slotRenderEnded",bt),this.pubstackWindow.googletag.pubads().removeEventListener("slotResponseReceived",vt),ft.splice(0)}))}setPbjsTargetings(e,t){e?(w(`${ot} try to put pbjs targeting keys for ${t.map((e=>e.divId)).join(",")}`),t.forEach((t=>{const i=this.getSlot(t,"setPbjsTargetings");i&&function(e,t,i){i.getTargetingKeys().forEach((e=>{"bid_"!==e.substring(0,4)&&"hb_"!==e.substring(0,3)||i.clearTargeting(e)}));const n=t.getAdserverTargetingForAdUnitCode(e.divId);for(const t of Object.keys(n)){const s=n[t];ue(s)?i.setTargeting(t,s):E(`[targeting] unable to set targeting ${t}=${s} on adUnit ${e.divId}`)}i.setTargeting("kuc_version","2408211643")}(t,e,i)}))):_(`${ot} no pbjs given: unable to put header bidding targetings`)}setApsTargetings(e,t){var i;w(`${ot} putting targeting keys for aps auction`,t),i=this.pubstackWindow,at(i)?.setDisplayBids()}setRefreshTargeting(e){const t=this.getSlot(e.adUnit,"setPbjsTargetings");var i,n;t&&(i=t,n=e.rank,i.setTargeting("ad_refresh","1"),i.setTargeting("pbstck_refresh","1"),i.setTargeting("ad_refresh-rank",function(e){return e<10?`${e}`:"10-more"}(n)))}callAdServer(e){w(`${ot} preparing call to GAM for ${e.map((e=>e.divId)).join(",")}`,e);const t=this.pubstackWindow.googletag.pubads().getSlots(),i=e.map((e=>({adUnit:e,slot:t.find((t=>t.getSlotElementId()===e.divId))}))).filter((e=>!!e.slot));i.forEach((({adUnit:e,slot:t})=>yt(e,t)));const n=i.map((({slot:e})=>e));C(`${ot} calling GAM with ${n.length} slots`,It(n)),k("googletag:refresh",{slotIds:n.map((e=>e.getSlotElementId()))}),this.refresh(n)}refresh(e){e.every((e=>this.googletagSlotsInitialized[e.getSlotElementId()]))?this.pubstackWindow.googletag.pubads().refresh(e):setTimeout((()=>this.refresh(e)),50)}executeWhenAdServerReady(e){ut?e():ft.push(e)}renderListener(e){At((()=>{this.renderListenerCallback=t=>{const i=t.slot,n=t.campaignId,s={divId:i.getSlotElementId(),creativeId:t.creativeId,lineItemId:t.lineItemId,orderId:n,size:Ct(t),isEmpty:t.isEmpty,advertiserId:t.advertiserId};if(n&&this.prebidOrderIds.includes(n)){const e=i.getTargeting(ge);e&&(s.hb_bidder=Array.isArray(e)?e[0]:e);const t=i.getTargeting(he);t&&t[0]&&(s.size=D(t[0]));const n=i.getTargeting(pe);n&&(s.hb_mediaType=Array.isArray(n)?n[0]:n)}e(s)},this.pubstackWindow.googletag.pubads().addEventListener("slotRenderEnded",this.renderListenerCallback)}))}removeRenderListener(){this.renderListenerCallback&&(w("GAM","removing render listener"),this.pubstackWindow.googletag.pubads().removeEventListener("slotRenderEnded",this.renderListenerCallback))}getSlot(e,t){const i=this.pubstackWindow.googletag.pubads().getSlots().filter((t=>t.getSlotElementId()===e.divId));if(0!==i.length)return i.length>1&&_(`${ot} multiple slot found for adunit ${e.divId} on operation ${t}`),i[0];_(`${ot} slot not found for adunit ${e.divId} on operation ${t}`)}declareGoogleSlots(e){return new Promise((t=>{At((()=>{const i=e.sort(F),n=[],s=[];i.forEach((e=>{if("interstitial"===e.outOfPageType){const t=window.googletag.defineOutOfPageSlot(e.adUnitPath,googletag.enums.OutOfPageFormat.INTERSTITIAL);t?(t.addService(googletag.pubads()),n.push(t),s.push(t),yt(e,t)):_(`${ot} unable to create interstitial slot for ${e.divId}`)}else if(document.getElementById(e.divId)){let t;if("default"===e.outOfPageType)t=window.googletag.defineOutOfPageSlot(e.adUnitPath,e.divId)?.addService(googletag.pubads());else{const i=[lt,...e.sizes,...e.extraAdServerSizes??[]];t=window.googletag.defineSlot(e.adUnitPath,i,e.divId)?.addService(googletag.pubads())}t?(w(`${ot} slot created, displaying ${e.divId}`),googletag.display(e.divId),s.push(t)):_(`${ot} unable to create slot for ${e.divId}`)}else w(`${ot} unable to display ${e.divId}, the div does not exist`)}));const a=s.map((e=>`\n${e.getSlotElementId()} (${e.getAdUnitPath()})`)).join();if(C(`${ot} slots defined for ${a}`),n.forEach((e=>{w(`${ot} calling googletag.display for interstitial slot`,e),googletag.display(e)})),n.length>0&&googletag.pubads().refresh(n),this.externalTargetingDeclarations.length>0){const e=performance.now();let i;const n=new Promise((e=>{i=setTimeout((()=>{E(`${ot} failsafe promise for external targeting declarations, some targetings may be missing`),e()}),3e3)}));Promise.race([Promise.all(this.externalTargetingDeclarations.map((e=>e(s)))).then((()=>{i&&clearTimeout(i)})),n]).then((()=>{const i=performance.now();w(`${ot} external targetings declarations took ${i-e}ms`),s.forEach((e=>{this.googletagSlotsInitialized[e.getSlotElementId()]=!0})),t()}))}else s.forEach((e=>{this.googletagSlotsInitialized[e.getSlotElementId()]=!0})),t()}))}))}}function It(e){return e.map((e=>({id:e.getSlotElementId(),path:e.getAdUnitPath()})))}function Ct(e){return e.size}const wt="[Local-AdServer]";class Et{constructor(){this.managedDivs=[],this.callbacks=[]}prebidReady(e){this.pbjs=e}callAdServer(e){this.pbjs?(C(`${wt} callAdServer`,e),e.forEach((e=>{if(this.managedDivs.includes(e.divId)){const t=this.pbjs.getHighestCpmBids(e.divId);if(t.length>0){const e=t[0];try{!function(e,t){if(C(`${wt} renderOne`,t),!t||!t.adId)throw new Error(`${wt} no winning bid or adId provided ${t}`);{const i=document.getElementById(t.adUnitCode);if(!i)throw new Error(`${wt} unable to find div ${t.adUnitCode}`);{const n=i.getElementsByTagName("iframe");C(`${wt} found ${n.length} iframe to remove`),Array.from(n).forEach((e=>e.remove()));const s=document.createElement("iframe");s.scrolling="no",s.frameBorder="0",s.marginHeight="0",s.name=`prebid_ads_iframe_${t.adUnitCode}`,s.title="3rd party ad content",s.sandbox?.add("allow-forms","allow-popups","allow-popups-to-escape-sandbox","allow-same-origin","allow-scripts","allow-top-navigation-by-user-activation"),s.setAttribute("aria-label","Advertisment"),s.style.setProperty("border","0"),s.style.setProperty("margin","0"),s.style.setProperty("overflow","hidden"),i.appendChild(s);const a=s.contentWindow?.document;if(!a)throw new Error(`${wt} error while getting document from iframe`);{e.renderAd(a,t.adId);const i="/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */button,hr,input{overflow:visible}progress,sub,sup{vertical-align:baseline}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}details,main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{padding:.35em .75em .625em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}[hidden],template{display:none}",n=a.createElement("style");n.appendChild(a.createTextNode(i)),a.head.appendChild(n)}}}}(this.pbjs,e);const t={divId:e.adUnitCode,isEmpty:!1,hb_bidder:e.adserverTargeting.bid_bidder,hb_mediaType:e.adserverTargeting.bid_mediatype,size:e.adserverTargeting.bid_size?D(e.adserverTargeting.bid_size):null,advertiserId:null,lineItemId:null,orderId:null,creativeId:null};this.renderListenerCallback(t)}catch(e){_(`${wt} unable to render: ${e}`)}}else{const t={divId:e.divId,isEmpty:!0,size:null,advertiserId:null,lineItemId:null,orderId:null,creativeId:null};this.renderListenerCallback(t)}}}))):_(`${wt} pbjs is not available`)}clean(){C(`${wt} cleanAdUnits - START`),this.managedDivs.forEach((e=>{const t=document.getElementById(e);if(t){const e=t.getElementsByTagName("iframe");C(`${wt} found ${e.length} iframe to remove`),Array.from(e).forEach((e=>e.remove()))}})),this.managedDivs=[],C(`${wt} cleanAdUnits - END`,this.managedDivs)}declareAdUnits(e){return C(`${wt} declareAdUnits (adUnits, managedDivs)`,e,this.managedDivs),e.forEach((e=>{this.managedDivs.includes(e.divId)?_(`${wt} adUnit already declared ${e.divId}`):this.managedDivs.push(e.divId)})),Promise.resolve(void 0)}executeWhenAdServerReady(e){C(`${wt} executeWhenAdServerReady`,e),e()}init(e,t,i,n){C(`${wt} init (nothing to do), this are the input params:`,e,t,i,n)}removeRenderListener(){C(`${wt} removeRenderListener`),this.callbacks=[]}renderListenerCallback(e){C(`${wt} renderListenerCallback called event:`,e),this.callbacks.forEach((t=>t(e)))}renderListener(e){C(`${wt} renderListener`,e),this.callbacks.push(e)}setApsTargetings(){}setPbjsTargetings(){}setRefreshTargeting(){}registerExternalTargetingDeclaration(){}}function _t(e,t,i,n,s){const a=`${n}_${s}`;navigator.sendBeacon(`https://intake.pbstck.com/v1/intake/gam-impression?sId=${t}&tId=${e}&c=1&s=${a}&v=${i}`)}class Tt{constructor(){this.name="AdServer",this.scriptLoaded=!1,this.loaded=!1}get adServer(){return this._adServer}isLoaded(){return this.loaded}async load(){this.loaded=!0}async onAfterConsentRefused({config:e}){if(!this._adServer)switch(e.consentlessMode){case"GAM":this._adServer=new St(window,e.globalRefreshConfig?.prebidOrderIds||[]),this._adServer.renderListener((t=>{t.isEmpty||_t(e.tagId,e.stack.scopeId,e.kleanadsVersion,e.stack.stackId,e.stackVersion)})),this.scriptLoaded||(P("https://pagead2.googlesyndication.com/tag/js/gpt.js"),this.scriptLoaded=!0);break;case"local":this._adServer=new Et;break;default:C("AdServerModule - onAfterConsentRefused - no ad server configured for consentless")}}async onAfterConsentAccepted({config:e}){this._adServer||(this._adServer=new St(window,e.globalRefreshConfig?.prebidOrderIds||[]),this._adServer.renderListener((t=>{t.isEmpty||_t(e.tagId,e.stack.scopeId,e.kleanadsVersion,e.stack.stackId,e.stackVersion)})),this.scriptLoaded||(P("https://securepubads.g.doubleclick.net/tag/js/gpt.js"),this.scriptLoaded=!0))}async onStackConfigLoad({config:e,stackConfig:t}){this._adServer?this._adServer.init(e.pageContext,t.lazyLoading,t.gamConfig,t.runningABTest):_("AdServerModule - onStackConfigLoad - no ad server configured")}async onPrepareAdUnits({toPreparedAdUnits:e}){const t=(e??[]).filter((e=>!e.mediaTypes.includes("Instream")));return this._adServer?.declareAdUnits(t)}async onAfterPrebidReady({prebid:e}){const t=e.getPbjs();this._adServer?this._adServer.prebidReady(t):_("AdServerModule - onAfterPrebidReady - no ad server configured")}async clean(){this._adServer?this._adServer.clean():_("AdServerModule - clean - no ad server configured")}}function kt(e,t,i,n,s,a){function r(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var o,d=n.kind,c="getter"===d?"get":"setter"===d?"set":"value",l=!t&&e?n.static?e:e.prototype:null,u=t||(l?Object.getOwnPropertyDescriptor(l,n.name):{}),f=!1,g=i.length-1;g>=0;g--){var h={};for(var p in n)h[p]="access"===p?{}:n[p];for(var p in n.access)h.access[p]=n.access[p];h.addInitializer=function(e){if(f)throw new TypeError("Cannot add initializers after decoration has completed");a.push(r(e||null))};var m=(0,i[g])("accessor"===d?{get:u.get,set:u.set}:u[c],h);if("accessor"===d){if(void 0===m)continue;if(null===m||"object"!=typeof m)throw new TypeError("Object expected");(o=r(m.get))&&(u.get=o),(o=r(m.set))&&(u.set=o),(o=r(m.init))&&s.unshift(o)}else(o=r(m))&&("field"===d?s.unshift(o):u[c]=o)}l&&Object.defineProperty(l,n.name,u),f=!0}function Ot(e,t,i){for(var n=arguments.length>2,s=0;s<t.length;s++)i=n?t[s].call(e,i):t[s].call(e);return n?i:void 0}function Rt(e,t,i){return"symbol"==typeof t&&(t=t.description?"[".concat(t.description,"]"):""),Object.defineProperty(e,"name",{configurable:!0,value:i?"".concat(i," ",t):t})}function $t(e){return function(t,i){return class extends t{constructor(){super(...arguments),this.deferLoadingTo=e}}}}"function"==typeof SuppressedError&&SuppressedError;let Lt=(()=>{let e,t,i=[$t("onStackConfigLoad")],n=[];return t=class{constructor(){this.name="Aps"}get aps(){return this._aps}isLoaded(){return!!this._aps}async load({stackConfig:e}){this._aps=function(e,t){if(e&&t.some((e=>e.headerBiddingEnabled&&(e.isInstream||e.canOutstream||e.sizes.some((e=>"fluid"!==e)))))){C(`${it} downloading amazon apstag`);const t=new rt(window,e);return t.load(),t}}(e.tamConfig?.apsPubId,e.adUnits)}async onStackConfigLoad({config:e,stackConfig:t}){const i=t.tamConfig?.disableSchain,n=i?void 0:t.prebidConfig?.pbjsConfig.schain;this._aps?.initAps(t.prebidConfig?.adCallTimeout??e.adCallTimeout,n)}async clean(){}},Rt(t,"ApsModule"),(()=>{const s="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;kt(null,e={value:t},i,{kind:"class",name:t.name,metadata:s},null,n),t=e.value,s&&Object.defineProperty(t,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:s}),Ot(t,n)})(),t})();const Pt="[ModuleService]";class Nt{constructor(e,t){this.modules=t,this.lifecycleState={config:e},w(Pt,`${t.length} modules registered : ${t.map((e=>e.name)).join(", ")}`)}getModules(){return this.modules}getLoadedModuleInstance(e){return this.modules.filter((e=>e.isLoaded())).find((t=>t instanceof e))}async loadModules(e){e.length&&w(Pt,`Loading modules : ${e.map((e=>e.name)).join(", ")}`);for(const t of e)try{await t.load(this.lifecycleState)}catch(e){_(Pt,`Error while loading module ${t.name}`,e)}}async loadInitialModules(){const e=this.modules.filter((e=>!e.deferLoadingTo&&!e.isLoaded()));w(Pt,`Loading initial modules. ${e.length} modules to load`),await this.loadModules(e)}async modulesDispatchEvent(e,...t){this.lifecycleState={...this.lifecycleState,...t[0]};const i=this.lifecycleState,n=this.modules.filter((t=>t.deferLoadingTo===e&&!t.isLoaded()));return w(Pt,`event call: ${e}. ${n.map((e=>e.name)).join(", ")}`),await this.loadModules(n),new Promise((t=>{const n=this.modules.filter((t=>t.isLoaded()&&t[e]&&"function"==typeof t[e]));w(Pt,`event call: ${e}. ${n.map((e=>e.name)).join(", ")}`);const s=[];for(const t of n){const n=t[e]?.(i);n instanceof Promise&&s.push(n)}t(s)}))}async modulesCleanUp(){const e=this.modules.filter((e=>e.isLoaded()));e.length&&w(Pt,`Cleaning modules : ${e.map((e=>e.name)).join(", ")}`);for(const t of e)await t.clean(this.lifecycleState);this.modules=[]}}const Ut=[];for(let e=0;e<256;++e)Ut.push((e+256).toString(16).slice(1));let xt;const Dt=new Uint8Array(16);function jt(){if(!xt){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");xt=crypto.getRandomValues.bind(crypto)}return xt(Dt)}var Bt={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function Mt(e,t,i){if(Bt.randomUUID&&!t&&!e)return Bt.randomUUID();const n=(e=e||{}).random||(e.rng||jt)();return n[6]=15&n[6]|64,n[8]=63&n[8]|128,function(e,t=0){return(Ut[e[t+0]]+Ut[e[t+1]]+Ut[e[t+2]]+Ut[e[t+3]]+"-"+Ut[e[t+4]]+Ut[e[t+5]]+"-"+Ut[e[t+6]]+Ut[e[t+7]]+"-"+Ut[e[t+8]]+Ut[e[t+9]]+"-"+Ut[e[t+10]]+Ut[e[t+11]]+Ut[e[t+12]]+Ut[e[t+13]]+Ut[e[t+14]]+Ut[e[t+15]]).toLowerCase()}(n)}const Vt="[pbjs][initPbjs][sublime]";function Ft(e,t){const i=function(e,t){const i=e.filter((e=>e.bidders.find((e=>Wt(e.bidder,t)))));if(0===i.length)return;if(i.length>1)return void E(`${Vt} Sublime bidder has multiple adUnits ${i.map((e=>e.divId)).join("")}`,i);const n=i[0].bidders.find((e=>Wt(e.bidder,t)))?.params;if(n){const e=n.zoneId;if(e&&("string"==typeof e||"number"==typeof e))return`${e}`}else E(`${Vt} unable to extract Sublime zoneId from ${i[0].divId}`,i[0])}(e,t);if(i){const e=`https://sac.ayads.co/sublime/${i}/prebid`;w(`${Vt} loading sublime script ${e}`),P(e)}}function zt(e,t){const i=function(){window.sublime=window.sublime||{};const e=window.sublime.notifyId||Mt();return window.sublime.notifyId=e,e}();return Wt(e.bidder,t)?(w(`${Vt} generate notify id`),{...e,params:{...e.params,notifyId:i}}):e}function Wt(e,t=[]){return"sublime"===e||t?.some((t=>"sublime"===t.bidderSource&&t.bidderLabel===e))}function Gt(e,t){return e.flatMap((e=>Ht(e,t)))}function Ht(e,t){return[e,...t?.filter((t=>t.bidderSource===e)).map((e=>e.bidderLabel))||[]]}const Jt=(e,t)=>e.delimiter===t.delimiter&&"|"===e.delimiter&&e.fields.length+1===t.fields.length&&e.fields.every(((e,i)=>e===t.fields[i])),Kt=1900,Yt="[pbjs]";function qt(e,t=[]){const i=t?.map((e=>e.bidderSource));return Array.from(new Set(e.flatMap((e=>e.bidders)).map((e=>e.bidder)).concat(i)))}function Xt(e,t,i,n,s){w(`${Yt}[initPbjs] Start prebid initialization`);const{currency:a,userSync:r,priceGranularity:o,bidderAdjustments:d,bidderAliases:c,bidderConfigs:l,floors:u,analytics:f,schain:g,outbrain:h,realTimeData:p,allowLocalStorage:m,fledgeForGpt:b,paapi:v,dsaConfig:y,s2sConfig:A,enableTIDs:S}=i,I=qt(t,c);if(e.setConfig(n),a&&(w(`${Yt}[initPbjs] set currency config`,a),e.setConfig({currency:a,priceGranularity:"dense"}),o&&(w(`${Yt}[initPbjs] set priceGranularity config`,o),e.setConfig({priceGranularity:o}))),A&&(w(`${Yt}[initPbjs] set prebid server config`,A),e.setConfig({s2sConfig:A})),r){const t=A?.bidders??[],i=Gt(["optidigital","richaudience","justpremium","impactify","smilewanted","onetag","connectad","adagio","appnexus"],c??[]),n=new Set(i.concat(t));if(e.installedModules?.includes("utiqIdSystem")){const e=r.userIds?.find((e=>"utiq"===e.name));e&&(e.name="utiqId")}const s={filterSettings:{iframe:{bidders:[...n],filter:"include"},image:{bidders:"*",filter:"include"}},...r};w(`${Yt}[initPbjs] set userSync config`,s),e.setConfig({userSync:s})}if(h&&(w(`${Yt}[initPbjs] set Outbrain config:`,h),e.setConfig({outbrain:h})),p&&(w(`${Yt}[initPbjs] set realTimeData config`,p),e.setConfig({realTimeData:p})),u&&(w(`${Yt}[initPbjs] set floors config`,u),e.setConfig({floors:u})),f&&(C(`${Yt}[initPbjs] enable analytics`,f),e.enableAnalytics(f)),g&&(w(`${Yt}[initPbjs] set schain config`,g),e.setConfig({schain:g})),b&&e.setConfig({fledgeForGpt:{enabled:!0}}),v&&e.setConfig({paapi:v}),l){w(`${Yt}[initPbjs] set bidder config`,l);for(const t of l)e.setBidderConfig(t)}const _={};if(d){w(`${Yt}[initPbjs] set bidder adjustments config`,d);for(const e of d)_[e.bidder]={bidCpmAdjustment:function(t){return t*e.adjustment}}}if(m)for(const e of I)_[e]={..._[e],storageAllowed:!0};if(_.standard={adserverTargeting:[{key:ge,val:function(e){return e.bidderCode}},{key:"bid_id",val:function(e){return e.adId}},{key:"bid_cpm",val:function(e){return e.pbCg}},{key:he,val:function(e){return e.size}},{key:pe,val:function(e){return e.mediaType}},{key:"bid_videoId",val:function(e){return e.videoCacheKey}}]},s&&de.getInstance().uprEnabled&&(_.standard={adserverTargeting:[..._.standard.adserverTargeting,{key:"prkv",val:e=>Qt(e,s)},{key:"ad_floor-rule",val:e=>Qt(e,s)}]}),Object.keys(_).length>0&&(e.bidderSettings=_),c){w(`${Yt}[initPbjs] set alias bidder`,c);for(const t of c)e.aliasBidder(t.bidderSource,t.bidderLabel)}if(ei(t,"sublime",c)&&Ft(t,c),e.installedModules?.includes("utiqSystem")||e.installedModules?.includes("utiqIdSystem")){const t=localStorage.getItem("utiqPass");if(t)try{const i=JSON.parse(t),n=null!==i?.connectId?.idGraph?.[0].atid;w(`${Yt}[initPbjs] set Utiq key values isUtiqPresent=`,n),e.mergeConfig({ortb2:{site:{keywords:"isUtiqPresent="+n}}})}catch(e){E(`${Yt}[initPbjs] Utiq config is not valid JSON, ${e}`,t)}}y&&(w(`${Yt}[initPbjs] set DSA config`,y),e.mergeConfig({ortb2:{regs:{ext:{dsa:y}}}})),ei(t,"criteo",c)&&e.setConfig({criteo:{fastBidVersion:"latest"}}),void 0!==S&&(w(`${Yt}[initPbjs] setting enableTIDs to`,S),e.setConfig({enableTIDs:S})),de.getInstance().disableGptPreAuction&&e.setConfig({gptPreAuction:{enabled:!1}}),_e(Ae.PREBID_READY),T("[metric] pbjs",{consentType:je,pbjsReady:$e(Ae.CMP_RESPONSE_AVAILABLE,Ae.PREBID_READY)}),C(`${Yt}[initPbjs] Prebid is initialized`)}function Qt(e,t){const i=e.cpm,n=i>0?function(e,t){let i;if(t.forEach((t=>{const n=parseFloat(t.max);n>e&&(i=!i||n<parseFloat(i.max)?t:i)})),!i)return Math.max(...t.map((e=>parseFloat(e.max))));const n=parseFloat(i.increment);return parseFloat((Math.floor(e/n)*n).toFixed(2))}(i,t):0,s=Math.max(...t.map((e=>parseFloat(e.max))));return Math.min(n,s).toFixed(2)}function Zt(e,t,i,n,s){const a=t.filter((e=>e.headerBiddingEnabled&&e.bidders.length>0));w(`${Yt} using only ad units with prebid enabled`,a);const r=a.flatMap((t=>{if(t.dynamicPrebidFloor){const i=e.getHighestCpmBids(t.divId);if(i.length>0){const e=i[0].cpm;return re(t,{newFloor:Math.floor(100*e)/100,multiformatBidders:s})}}return re(t,{multiformatBidders:s})}));if(r.length>0){const t=n?.timeout,s=n?.labels,o=function(e){const t=e.getConfig("bidderTimeout");if(t){if("number"==typeof t)return t+Kt;if(parseInt(t))return parseInt(t)+Kt}return 3e3+Kt}(e);let d=!1;setTimeout((()=>{d||(E(`${Yt} prebid requestBids did not response before ${o}ms, calling callback`),d=!0,i())}),o);const c=()=>{d||(d=!0,i())};if(!(e=>1===new Set(e.map((e=>e.floors)).filter((e=>void 0!==e)).map((e=>[...e.schema.fields,e.schema.delimiter].join("")))).size)(a)){const e=(e=>e.map((e=>e.floors)).filter((e=>void 0!==e)).map((e=>e.schema)).reduce(((e,t)=>(e?t.fields.length>e.fields.length&&(e=t):e=t,e)),void 0))(a);e&&(w(`${Yt} floors schema are not the same, unifying schema`),((e,t)=>{e.forEach((i=>{if(i.floors&&i.floors?.schema!==t){const n=i.floors.schema;if(Jt(n,t)){i.floors.schema=t;const e=i.floors.values;i.floors.values={};for(const t of Object.keys(e))i.floors.values[`${t}|*`]=e[t]}else _(`Unable to unify schema for adUnits ${e.map((e=>e.divId)).join(", ")}.`,t)}}))})(a,e))}e.requestBids({timeout:t,adUnits:r,bidsBackHandler:c,labels:s}),C(`${Yt} called requestBids`,r)}else C(`${Yt} no prebid auction to start for [${t.map((e=>e.divId)).join(",")}]`),i()}function ei(e,t,i){const n=e.flatMap((e=>e.bidders)).map((e=>e.bidder)),s=[...new Set(n)],a=[t,...i?.filter((e=>e.bidderSource===t)).map((e=>e.bidderLabel))||[]];return s.some((e=>a?.includes(e)))}class ti{constructor(e){this.pbjs=e.getPbjs()}initPbjs(e,t,i,n,s){this.multiformatBidders=s,Xt(this.pbjs,e,t,i,n)}extractUniqAdaptersName(e,t=[]){return qt(e,t)}roundUpToNearestIncrement(e,t){return function(e,t){const i=e.sort(((e,t)=>e.max<t.max?-1:1)),n=i.filter((e=>t<=e.max));if(0===n.length)return C(`${Yt}[Price granularity] round up - initial CpmValue : ${t} // rounded value : ${i[i.length-1].max} `),i[i.length-1].max.toFixed(2);const s=n[0].increment;let a=t%s==0?t:t+(s-t%s);const r=t.toString().split("."),o=r.length>1?r[1].split("").length:0;(a-s).toFixed(o)===t.toFixed(o)&&(a=t);const d=a.toFixed(2);return C(`${Yt}[Price granularity] round up - initial CpmValue : ${t} // rounded value : ${d} `),d}(e,t)}startPbjsAuction(e,t,i){Zt(this.pbjs,e,t,i,this.multiformatBidders)}getPbjs(){return this.pbjs}setContextValuesAsTargeting(e,t,i){const n={};for(const[t,i]of e)n[t]=i;for(const e in t)1===t[e].length?n[e]=t[e][0]:n[e]=t[e];this.pbjs.setBidderConfig({bidders:i,config:{ortb2:{site:{ext:{data:n}}},appnexusAuctionKeywords:n}})}}let ii=(()=>{let e,t,i=[$t("onStackConfigLoad")],n=[];return t=class{constructor(){this.name="Prebid"}get pbjs(){return this._pbjs}isLoaded(){return!!this._pbjs}async load({config:e,stackConfig:t}){this._pbjs=await async function(e,t){if(t.some((e=>e.headerBiddingEnabled&&e.bidders.length)))try{const t=await L(e);return new ti(t)}catch(e){return void _("[config] Error while loading the kleanadsPbjs module",e)}}(e.newPrebidUrl,t.adUnits),this._pbjs&&this.aliasWindowPbjs(window,this._pbjs.getPbjs())}async onStackConfigLoad({config:e,stackConfig:t}){if(!this._pbjs)throw new Error("PrebidModule is not loaded");const i=t?.prebidConfig?.adCallTimeout??e.adCallTimeout,n=t.prebidConfig.pbjsConfig,s={gdpr:{cmpApi:"iab",timeout:8e3,defaultGdprScope:!0}},a=this._pbjs.getPbjs().installedModules;a.includes("consentManagementUsp")&&(s.usp={cmpApi:"iab",timeout:8e3}),a.includes("consentManagementGpp")&&(s.gpp={cmpApi:"iab",timeout:8e3}),a.includes("anonymisedRtdProvider")&&(s.gdpr.rules=[{purpose:"storage",enforcePurpose:!0,enforceVendor:!0,vendorExceptions:["anonymised"]}]);const r={bidderTimeout:i,useBidCache:!0,maxRequestsPerOrigin:6,consentManagement:e.noCmp?void 0:s,enableSendAllBids:!1,pageUrl:document.location.href,cache:{url:"https://prebid.adnxs.com/pbc/v1/cache",ignoreBidderCacheKey:!0},timeoutBuffer:400};if(this._pbjs.initPbjs(t.adUnits,n,r,e.priceRuleBuckets,t.multiformatBidders),n?.targetingBehaviors?.sendKVTargetings){const i=d(window),s=this._pbjs.extractUniqAdaptersName(t.adUnits,n.bidderAliases).filter((e=>!n.targetingBehaviors?.biddersBlackList.includes(e)));this._pbjs.setContextValuesAsTargeting(e.pageContext,i,s)}}async clean(){this.setDefaultPbjsConfig();const e=this._pbjs?.getPbjs();e&&(e.bidderSettings={})}aliasWindowPbjs(e,t){e.pbjs=t}setDefaultPbjsConfig(){this._pbjs?.getPbjs().setConfig({bidderTimeout:3e3,enableSendAllBids:!0,useBidCache:!1,deviceAccess:!0,timeoutBuffer:400,disableAjaxTimeout:!1,maxNestedIframes:10,priceGranularity:"medium",customPriceBucket:{},mediaTypePriceGranularity:{},bidderSequence:"random",auctionOptions:{},userSync:{syncEnabled:!0,filterSettings:{image:{bidders:"*",filter:"include"}},syncsPerBidder:5,syncDelay:3e3,auctionDelay:0}})}},Rt(t,"PrebidModule"),(()=>{const s="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;kt(null,e={value:t},i,{kind:"class",name:t.name,metadata:s},null,n),t=e.value,s&&Object.defineProperty(t,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:s}),Ot(t,n)})(),t})();class ni{constructor(e,t){this.pubstackWindow=e,this.rule=t}isDivIdMatchingRule(e){const t=document.getElementById(e);if(t){const e=t.getBoundingClientRect();return this.rule(this.pubstackWindow,e)}return!1}}const si=(e,t,i)=>{if(function(e){return 0===e.top&&0===e.bottom&&0===e.left&&0===e.right&&0===e.width&&0===e.height}(t))return!1;const n=-i*e.innerHeight,s=(1+i)*e.innerHeight>t.top,a=t.bottom>n;return s&&a};function ai(e,t,i,n){const s=e.filter((e=>e.roadblock)).filter((e=>!e.mediaTypes.includes("Instream"))).filter((e=>O(e.divId))),a=e.filter((e=>!e.roadblock)).filter((e=>!e.mediaTypes.includes("Instream"))).filter((e=>O(e.divId))),r=e.filter((e=>e.mediaTypes.includes("Instream"))).filter((e=>O(e.divId)));t.executeAdCallRoadblock(s),r.length>0&&(r.length>1&&E(`cannot monetize multiple instream adunits, using only the first one ${r[0].divId}`),i?.executeAdCall(r[0]));const o=function(e){if(e&&e.lazyLoadingKleanads){const t=e.lazyLoadingKleanads.viewportPercent/100;return w(`[lazyloading] lazy loading enabled with ${t} viewports`),(e,i)=>si(e,i,t)}}(n);if(o){const e=new ni(window,o);s.length>0?setTimeout((()=>ri(a,e,t)),1e3):ri(a,e,t)}else s.length>0?setTimeout((()=>t.executeAdCall(a)),1e3):t.executeAdCall(a)}function ri(e,t,i){const n=e.filter((e=>e.anchor?.mode||e.outOfPageType||t.isDivIdMatchingRule(e.divId))).filter((e=>!i.isAlreadyMonetized(e)));i.executeAdCall(n),setTimeout((()=>ri(e,t,i)),200)}const oi="[optimization]",di=async e=>{try{const t=await ci();if(e?.prebidConfig.adCallTimeout){const i=t.getTimeout(e?.prebidConfig.adCallTimeout);w(`${oi} Ad call timeout optimized from ${e?.prebidConfig.adCallTimeout} to ${i}`),e.prebidConfig.adCallTimeout=i}}catch(e){_(`${oi} Error while loading optimization engine`,e)}return e},ci=async()=>new Promise(((e,t)=>{try{const i={env:{}};WebAssembly.instantiateStreaming(fetch("https://cdn-adm.pbstck.com/kleanads/wasm/volt.wasm"),i).then((t=>{w(`${oi} WebAssembly module loaded successfully`,t),e(t.instance.exports)})).catch((e=>{t(e)}))}catch(e){t(e)}}));var li,ui,fi,gi,hi,pi,mi,bi,vi,yi;!function(e){e.INSTREAM="instream",e.OUTSTREAM="outstream"}(li||(li={})),function(e){e[e.LINEAR=1]="LINEAR",e[e.NON_LINEAR=2]="NON_LINEAR"}(ui||(ui={})),function(e){e[e.IN_STREAM=1]="IN_STREAM",e[e.IN_BANNER=2]="IN_BANNER",e[e.IN_ARTICLE=3]="IN_ARTICLE",e[e.IN_FEED=4]="IN_FEED",e[e.INTERSTITIAL=5]="INTERSTITIAL"}(fi||(fi={})),function(e){e[e.INSTREAM=1]="INSTREAM",e[e.ACCOMPANYING_CONTENT=2]="ACCOMPANYING_CONTENT",e[e.INTERSTITIAL=3]="INTERSTITIAL",e[e.NO_CONTENT=4]="NO_CONTENT"}(gi||(gi={})),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.ABOVE_THE_FOLD=1]="ABOVE_THE_FOLD",e[e.LOCKED=2]="LOCKED",e[e.BELOW_THE_FOLD=3]="BELOW_THE_FOLD",e[e.HEADER=4]="HEADER",e[e.FOOTER=5]="FOOTER",e[e.SIDEBAR=6]="SIDEBAR",e[e.FULLSCREEN=7]="FULLSCREEN"}(hi||(hi={})),function(e){e[e.VAST_1_0=1]="VAST_1_0",e[e.VAST_2_0=2]="VAST_2_0",e[e.VAST_3_0=3]="VAST_3_0",e[e.VAST_1_0_WRAPPER=4]="VAST_1_0_WRAPPER",e[e.VAST_2_0_WRAPPER=5]="VAST_2_0_WRAPPER",e[e.VAST_3_0_WRAPPER=6]="VAST_3_0_WRAPPER",e[e.VAST_4_0=7]="VAST_4_0",e[e.VAST_4_0_WRAPPER=8]="VAST_4_0_WRAPPER",e[e.DAAST_1_0=9]="DAAST_1_0",e[e.DAAST_1_0_WRAPPER=10]="DAAST_1_0_WRAPPER",e[e.VAST_4_1=11]="VAST_4_1",e[e.VAST_4_1_WRAPPER=12]="VAST_4_1_WRAPPER",e[e.VAST_4_2=13]="VAST_4_2",e[e.VAST_4_2_WRAPPER=14]="VAST_4_2_WRAPPER"}(pi||(pi={})),function(e){e[e.VPAID_1_0=1]="VPAID_1_0",e[e.VPAID_2_0=2]="VPAID_2_0",e[e.MRAID_1_0=3]="MRAID_1_0",e[e.ORMMA=4]="ORMMA",e[e.MRAID_2_0=5]="MRAID_2_0",e[e.MRAID_3_0=6]="MRAID_3_0",e[e.OMID_1_0=7]="OMID_1_0",e[e.SIMID_1_0=8]="SIMID_1_0",e[e.SIMID_1_1=9]="SIMID_1_1"}(mi||(mi={})),function(e){e[e.AUTO_PLAY_SOUND_ON=1]="AUTO_PLAY_SOUND_ON",e[e.AUTO_PLAY_SOUND_OFF=2]="AUTO_PLAY_SOUND_OFF",e[e.CLICK_TO_PLAY=3]="CLICK_TO_PLAY",e[e.MOUSE_OVER=4]="MOUSE_OVER",e[e.INVIEW_SOUND_ON=5]="INVIEW_SOUND_ON",e[e.INVIEW_SOUND_OFF=6]="INVIEW_SOUND_OFF",e[e.CONTINUOUS_PLAYBACK=7]="CONTINUOUS_PLAYBACK"}(bi||(bi={})),function(e){e.VIDEO_MP4="video/mp4",e.VIDEO_WEBM="video/webm",e.VIDEO_OGG="video/ogg",e.VIDEO_MPEG="video/mpeg",e.APPLICATION_JAVASCRIPT="application/javascript"}(vi||(vi={})),function(e){e[e.NON_SKIPPABLE=0]="NON_SKIPPABLE",e[e.SKIPPABLE=1]="SKIPPABLE"}(yi||(yi={}));const Ai={playerSize:[[640,480]],context:li.INSTREAM,api:[mi.VPAID_1_0,mi.VPAID_2_0],linearity:ui.LINEAR,mimes:[vi.VIDEO_MP4,vi.VIDEO_MPEG,vi.APPLICATION_JAVASCRIPT],startdelay:0,minduration:0,maxduration:32,protocols:[pi.VAST_2_0,pi.VAST_2_0_WRAPPER,pi.VAST_3_0,pi.VAST_3_0_WRAPPER,pi.VAST_4_0,pi.VAST_4_0_WRAPPER],placement:fi.IN_STREAM,plcmt:gi.INSTREAM,pos:hi.ABOVE_THE_FOLD,playbackmethod:[bi.AUTO_PLAY_SOUND_ON],skipafter:0,minbitrate:0,maxbitrate:700,protocol:pi.VAST_4_0_WRAPPER},Si={playerSize:[[640,480]],context:li.INSTREAM,api:[mi.VPAID_1_0,mi.VPAID_2_0,mi.MRAID_1_0,mi.MRAID_2_0,mi.MRAID_3_0,mi.OMID_1_0],linearity:ui.LINEAR,mimes:[vi.VIDEO_MP4,vi.VIDEO_OGG,vi.VIDEO_WEBM,vi.APPLICATION_JAVASCRIPT],maxduration:30,minduration:1,protocols:[pi.VAST_1_0,pi.VAST_2_0,pi.VAST_3_0,pi.VAST_4_0,pi.VAST_1_0_WRAPPER,pi.VAST_2_0_WRAPPER,pi.VAST_3_0_WRAPPER,pi.VAST_4_0_WRAPPER,pi.VAST_4_1,pi.VAST_4_1_WRAPPER,pi.VAST_4_2,pi.VAST_4_2_WRAPPER],startdelay:0,placement:fi.IN_STREAM,plcmt:gi.INSTREAM,playbackmethod:[bi.AUTO_PLAY_SOUND_OFF,bi.CLICK_TO_PLAY,bi.MOUSE_OVER],skip:yi.SKIPPABLE,skipafter:0,pos:hi.UNKNOWN,minbitrate:1,maxbitrate:6e3},Ii={playerSize:[[640,480]],context:li.INSTREAM,mimes:[vi.VIDEO_MP4,vi.VIDEO_WEBM,vi.APPLICATION_JAVASCRIPT],minduration:0,maxduration:15,startdelay:0,protocols:[pi.VAST_2_0,pi.VAST_2_0_WRAPPER,pi.VAST_3_0,pi.VAST_3_0_WRAPPER,pi.VAST_4_0,pi.VAST_4_0_WRAPPER,pi.VAST_4_1,pi.VAST_4_1_WRAPPER,pi.VAST_4_2,pi.VAST_4_2_WRAPPER],placement:fi.IN_STREAM,plcmt:gi.INSTREAM,linearity:ui.LINEAR,skip:yi.NON_SKIPPABLE,skipmin:0,skipafter:0,minbitrate:1,maxbitrate:6e3,playbackmethod:[bi.AUTO_PLAY_SOUND_OFF],pos:hi.ABOVE_THE_FOLD,api:[mi.VPAID_2_0,mi.OMID_1_0,mi.SIMID_1_0,mi.SIMID_1_1]},Ci={pubstack:{playerSize:[640,480],mimes:[vi.VIDEO_MP4,vi.VIDEO_WEBM,vi.APPLICATION_JAVASCRIPT],context:li.INSTREAM},dailymotion:Ii,jwplayerHbv:Si,dailymotionPrsm:Ai},wi="adServerAdUnitName";function Ei(e,t,i,n){const s=[];if("number"!=typeof t&&""===t||s.push(t),i&&0!==i.length){const e=function(e,t){return e.filter((e=>e!==wi)).map((e=>t.get(e))).filter((e=>e)).join("/")}(i,n);e&&s.push(e)}else E("Ad unit path config is missing for this site");const a=`/${s.join("/")}`;return i&&i.includes(wi)?`${a}/${e}`:`${a}`}function _i(e){return new Promise(((t,i)=>{if(window.lucead_loaded)return void t();window.lucead_loaded=!0;const n=document.createElement("script");n.src=`https://s.lucead.com/prebid/${e}.js`,n.onload=()=>t(window.lucead_prebid),n.onerror=i,document.head.appendChild(n)}))}function Ti(e){return e&&"string"==typeof e?e:void 0}function ki(e){if(null!=e&&"number"==typeof e)return e}function Oi(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function Ri(e,t){if("string"!=typeof e)throw new Error(`Unable to parse JSON: the ${t} field ${e} is not a valid string`);return e}var $i,Li,Pi;function Ni(e){if(!Oi(e))throw new Error("unable to parse JSON: adUnit is not valid");const t=Ri(e.divId,"divId"),i=Ri(e.adUnitName,"adUnitName"),n=function(e,t){if(!Array.isArray(e))throw new Error(`Unable to parse JSON: the ${t} field ${e} is not a valid list of Size`);return e}(e.sizes,"sizes"),s=function(e,t){if(!Array.isArray(e))throw new Error(`Unable to parse JSON: the ${t} field ${e} is not a valid list of PrebidBidder`);for(const t of e)if("string"!=typeof t.bidder)throw new Error(`Unable to parse JSON: the bidder field ${t.bidder} (inside bidders) is not a valid bidder name`);return e}(e.bidders,"bidders"),a=Ui(e.parallax,"parallax",!1),r=Ui(e.dynamic,"dynamic",!1),o=xi(e.targeting,"targeting"),d=function(e,t){if(!e)return;if(!Array.isArray(e))throw new Error(`Unable to parse JSON: the ${t} field ${e} is not valid KeyValueTargeting list`);const i=[];for(const n of e){const e=xi(n,t);e&&i.push(e)}return i}(e.extraTargetings,"extraTargetings");if(void 0!==e.floors&&!Oi(e.floors))throw new Error("unable to parse JSON: the floors field is not valid");if(void 0!==e.floors?.currency&&"string"!=typeof e.floors?.currency)throw new Error("unable to parse JSON: the floors field is missing the currency");if(void 0!==e.floors?.schema&&!Oi(e.floors?.schema))throw new Error("unable to parse JSON: the floors field is missing the schema");if(e.floors){if("string"!=typeof e.floors.schema?.delimiter)throw new Error("unable to parse JSON: the floors schema field is missing the delimiter");if(!Array.isArray(e.floors.schema?.fields))throw new Error("unable to parse JSON: the floors field schema delimiter is not an array");for(const t of e.floors.schema.fields)if(void 0===t||"string"!=typeof t)throw new Error("unable to parse JSON: the bidder field inside bidders array is not valid")}if(void 0!==e.floors?.values&&"object"!=typeof e.floors?.values)throw new Error("unable to parse JSON: the floors field is missing the values or they are not well formed");if(void 0!==e.extraAdServerSizes&&!Array.isArray(e.extraAdServerSizes))throw new Error(`unable to parse JSON: the extraAdServerSizes field for adunit ${t} is not valid: ${e.extraAdServerSizes}`);let c,l,u,f;if(void 0!==e.canOutstream&&"boolean"!=typeof e.canOutstream)throw new Error("unable to parse JSON: the canOutstream field is not valid");if(c=e.canOutstream,void 0!==e.isInstream&&"boolean"!=typeof e.isInstream)throw new Error("unable to parse JSON: the isInstream field is not valid");if(l=e.isInstream,e.biddersOutstream){if(!Array.isArray(e.biddersOutstream))throw new Error(`unable to parse JSON: the biddersOutstream field for adunit ${t} is not valid: ${e.biddersOutstream}`);for(const t of e.biddersOutstream)if("string"!=typeof t)throw new Error("unable to parse JSON: the value inside biddersOutstream array is not valid")}switch(e.outOfPageType){case"interstitial":case"default":u=e.outOfPageType;break;default:u=void 0}switch(e.roadblock){case"master":case"master-1":case"master-2":case"master-3":case"companion":f=e.roadblock;break;default:f=void 0}return{divId:t,adUnitName:i,sizes:n,adServerAdUnitName:e.adServerAdUnitName,slotName:e.slotName,bidders:s,parallax:a,dynamic:r,targeting:o,extraTargetings:d,anchor:e.anchor,floors:e.floors,extraAdServerSizes:e.extraAdServerSizes,headerBiddingEnabled:Ui(e.headerBiddingEnabled,"headerBiddingEnabled",!0),canOutstream:c,isInstream:l,biddersOutstream:e.biddersOutstream??[],outOfPageType:u,roadblock:f}}function Ui(e,t,i){if(void 0!==e&&"boolean"!=typeof e)throw new Error(`Unable to parse JSON: the ${t} field ${e} is not a valid boolean`);return e??i}function xi(e,t){if(!e)return;if(!Oi(e))throw new Error(`Unable to parse JSON: the ${t} field ${e} is not a valid KeyValueTargeting`);const i=Ri(e.key,t),n=Ti(e.value),s=function(e){if(e&&Array.isArray(e))return e}(e.values);if(!n&&!s)throw new Error(`Unable to parse JSON: targeting.value(s) is not valid for field ${t}`);return{key:i,value:n,values:s}}function Di(e){return e.startsWith("css:")?e.replace("css:",""):void 0}!function(e){e.USE_EXISTING_DIV="useExistingDiv",e.CREATE_NEW_DIV="createNewDiv"}($i||($i={})),function(e){e.Stop="stop",e.Continue="continue",e.InstantSecondChance="instantSecondChance"}(Li||(Li={})),function(e){e.DISABLED="DISABLED",e.ENABLED_ALL_SLOTS="ENABLED_ALL_SLOTS"}(Pi||(Pi={}));const ji=(e,t,i)=>e.includes("Outstream")?i.includes(t.bidder)?[...e]:[...e.filter((e=>"Outstream"!==e))]:[...e],Bi=e=>{const t=(e=>{const t=[];return e.isInstream?["Instream"]:((e.sizes.length>0||(e.extraAdServerSizes??[]).length>0)&&t.push("Banner"),e.canOutstream&&t.push("Outstream"),e.canNative&&t.push("Native"),t)})(e);let i=e.bidders.map((i=>({mediaTypes:ji(t,i,e.biddersOutstream),bidder:i.bidder,params:i.params})));if(t.includes("Native")&&e.biddersNative?.length){i=i.map((e=>({...e,mediaTypes:e.mediaTypes.filter((e=>"Native"!==e))})));const t=e.biddersNative.map((e=>({mediaTypes:["Native"],bidder:e.bidder,params:e.params})));i.push(...t)}return{bidders:i,mediaTypes:t}};function Mi(e,t,i,n,s){return e.flatMap((e=>{const a=Ei(e.adServerAdUnitName||e.divId,i,n,t);if(e.bidders.forEach((e=>{if("lucead"===e.bidder&&e.params?.siteId){const{siteId:t,...i}=e.params;e.params={...i,loader:_i(t)}}})),e.dynamic)return function(e,t,i){return function(e){const t=Di(e.divId)||`[id^="${e.divId}"]`;try{return Array.from(document.querySelectorAll(t))}catch(e){return _(`${t} is not a valid CSS selector, ${e}`),[]}}(e).map((n=>{const s=n.id;return s||_(`Unable to find an id on DOM element for adUnit.divId ${e.divId}`),{...e,...Bi(e),divId:s,slotName:n?.attributes.getNamedItem("data-aps-slotname")?.value||e.slotName||t,dynamic:!1,adUnitPath:n?.attributes.getNamedItem("data-adunitpath")?.value||t,adServerAdUnitName:e.adServerAdUnitName??e.divId,pubstackDeclarationTargetingKeys:i??[],getTargetings:()=>[...[...e.targeting?[e.targeting]:[],...e.extraTargetings||[]],...[...Fi(n?.attributes),Vi(s)]]}}))}(e,a,s);{const t=function(e){const t=Di(e);try{return t?document.querySelector(t):document.getElementById(e)}catch(t){return _(`${e} is not a valid CSS selector, ${t}`),null}}(e.divId);if(t||"interstitial"===e.outOfPageType||e.anchor?.mode===$i.CREATE_NEW_DIV){t&&!t?.id&&_(`Unable to find an id on DOM element for adUnit.divId ${e.divId}`);const i=t?.attributes.getNamedItem("data-adunitpath")?.value||a;return[{...e,...Bi(e),divId:t?.id??e.divId,adUnitPath:i,slotName:t?.attributes.getNamedItem("data-aps-slotname")?.value||e.slotName||i,adServerAdUnitName:e.adServerAdUnitName??t?.id??e.divId,pubstackDeclarationTargetingKeys:s??[],getTargetings:()=>[...[...e.targeting?[e.targeting]:[],...e.extraTargetings||[]],...[...Fi(t?.attributes)]]}]}return w(`Div id missing for ${e.divId}, no further action on this ad unit`),[]}}))}function Vi(e){const t=new RegExp("\\D","g");return{key:"ad_index",value:e.replace(t,"")}}function Fi(e){return Array.from(e??[]).filter((e=>e.name.startsWith("data-ad-"))).map((e=>({key:e.name.replace("data-ad-",""),value:e.value})))}var zi,Wi;function Gi(e){if(!e)return;if(!Oi(e))throw new Error("unable to parse JSON: lazyLoadingGoogle field is not valid");if(0===Object.keys(e).length||!e.googleFetchMarginPercent&&!e.googleRenderMarginPercent&&!e.googleMobileScaling)return{};const t={};return"number"==typeof e.googleFetchMarginPercent&&(t.googleFetchMarginPercent=e.googleFetchMarginPercent),"number"==typeof e.googleRenderMarginPercent&&(t.googleRenderMarginPercent=e.googleRenderMarginPercent),"number"==typeof e.googleMobileScaling&&(t.googleMobileScaling=e.googleMobileScaling),t}function Hi(e){if(null==e)return;if(!Oi(e))throw new Error("unable to parse JSON: lazyLoadingKleanads field is not valid");let t;return"number"!=typeof e.viewportPercent?e.numberOfViewports&&"number"==typeof e.numberOfViewports?t=e.numberOfViewports:(E("unable to parse JSON: the lazyLoadingKleanads field is not valid, falling back to 0 viewport"),t=0):t=e.viewportPercent,{viewportPercent:t}}function Ji(e){if(null!=e){if(!Oi(e))throw new Error("unable to parse JSON: lazyLoading field is not valid");if("string"!=typeof e.configName)throw new Error("unable to parse JSON: the lazyLoading's configName field is not valid");return{configName:e.configName,lazyLoadingGoogle:Gi(e.lazyLoadingGoogle),lazyLoadingKleanads:Hi(e.lazyLoadingKleanads)}}}function Ki(e){if(!Array.isArray(e))throw new Error("unable to parse JSON: the adUnits field is not valid");const t=[];for(const i of e)try{t.push(Ni(i))}catch(e){_("Invalid ad unit configuration",e)}return t}function Yi(e){if(!e)return;if(!Oi(e))throw new Error("unable to parse JSON: the refreshConfig field is not valid");if(!Array.isArray(e.adUnitConfig))throw new Error("unable to parse JSON: the refreshConfig field is not valid");const t=[];for(const i of e.adUnitConfig)try{t.push(qi(i))}catch(e){_("Invalid refresh configuration",e)}return{adUnitConfig:t}}function qi(e){if(!Oi(e))throw new Error("unable to parse JSON: the adUnitRefreshConfig field is not valid");if(!Array.isArray(e.specificRules))throw new Error("unable to parse JSON: the adUnitRefreshConfig specificRules field is not valid");if("number"!=typeof e.timer)throw new Error("unable to parse JSON: the adUnitRefreshConfig timer field is not valid");if(void 0===e.adUnitNames)throw new Error("unable to parse JSON: the adUnitRefreshConfig adUnitNames field is missing");if(!Array.isArray(e.adUnitNames))throw new Error("unable to parse JSON: the adUnitRefreshConfig adUnitNames field is not valid");if(void 0!==e.alwaysInView&&"boolean"!=typeof e.alwaysInView)throw new Error("unable to parse JSON: the adUnitRefreshConfig alwaysInView field is not valid");let t,i;if(void 0!==e.refreshBehaviorOnEmpty)switch(e.refreshBehaviorOnEmpty){case"continue":t=Li.Continue;break;case"instantSecondChance":t=Li.InstantSecondChance;break;case"stop":t=Li.Stop;break;default:throw new Error("unable to parse JSON: the adUnitRefreshConfig refreshBehaviorOnEmpty field is not valid")}if(void 0!==e.refreshOutOfFocusConfig){if(!Oi(e.refreshOutOfFocusConfig))throw new Error("unable to parse JSON: the adUnitRefreshConfig refreshOutOfFocusConfig field is not valid");if(void 0===e.refreshOutOfFocusConfig.timerInView||"number"!=typeof e.refreshOutOfFocusConfig.timerInView)throw new Error("unable to parse JSON: the adUnitRefreshConfig refreshOutOfFocusConfig timerInView field is not valid");if(void 0!==e.refreshOutOfFocusConfig.refreshOutOfView&&"boolean"!=typeof e.refreshOutOfFocusConfig.refreshOutOfView)throw new Error("unable to parse JSON: the adUnitRefreshConfig refreshOutOfFocusConfig refreshOutOfView field is not valid");i={timerInView:e.refreshOutOfFocusConfig.timerInView,refreshOutOfView:e.refreshOutOfFocusConfig.refreshOutOfView}}return{adUnitNames:e.adUnitNames,timer:e.timer,capping:ki(e.capping),specificRules:e.specificRules,alwaysInView:e.alwaysInView,refreshBehaviorOnEmpty:t,refreshOutOfFocusConfig:i}}function Xi(e){if(!function(e){if(!e)throw new Error("unable to parse JSON: prebidConfig field is not valid");return Object.keys(e).includes("adCallTimeout")&&Object.keys(e).includes("pbjsConfig")}(e))throw new Error("unable to parse JSON: prebidConfig field is not valid");if("number"!=typeof e.adCallTimeout)throw new Error("unable to parse JSON: the prebidConfig's adCallTimeout field is not valid");return{adCallTimeout:e.adCallTimeout,pbjsConfig:an(e.pbjsConfig)}}function Qi(e){if(!e)return;if(!Array.isArray(e))throw new Error("unable to parse JSON: the abTest field is not valid");const t=e.find((e=>e.configToMerge))?.configToMerge;if(!t)throw new Error("unable to parse JSON: the abTest field is not valid");return t.adUnits?Zi(e,tn):t.lazyLoading?Zi(e,sn):t.refreshConfig?Zi(e,nn):void 0}function Zi(e,t){const i=[];for(const n of e){const e=en(n,t);i.push(e)}return i}function en(e,t){if(!Oi(e))throw new Error("unable to parse JSON: the abTest field is not valid");return{name:Ri(e.name,"name"),ratio:function(e,t){if("number"!=typeof e)throw new Error(`Unable to parse JSON: the ${t} field ${e} is not a valid number`);return e}(e.ratio,"ratio"),configToMerge:t(e.configToMerge)}}function tn(e){if(e){if(!Oi(e))throw new Error("unable to parse JSON: the configToMerge field is not valid");if(!e.adUnits)throw new Error(`unable to parse JSON: the A/B test contains an invalid variant: ${JSON.stringify(e)}`);return{adUnits:Ki(e.adUnits)}}}function nn(e){if(e){if(!Oi(e))throw new Error("unable to parse JSON: the configToMerge field is not valid");if(!e.refreshConfig)throw new Error(`unable to parse JSON: the A/B test contains an invalid variant: ${JSON.stringify(e)}`);return{refreshConfig:Yi(e.refreshConfig)}}}function sn(e){if(e){if(!Oi(e))throw new Error("unable to parse JSON: the configToMerge field is not valid");if(!e.lazyLoading)throw new Error(`unable to parse JSON: the A/B test contains an invalid variant: ${JSON.stringify(e)}`);return{lazyLoading:Ji(e.lazyLoading)}}}function an(e){if(!Oi(e))throw new Error("unable to parse JSON: pbjsConfig field is not valid");void 0===e.allowLocalStorage&&(e.allowLocalStorage=!0);const t=rn(e,"userSync"),i=rn(e,"outbrain"),n=rn(e,"realTimeData"),s=rn(e,"analytics"),a=rn(e,"currency"),r=rn(e,"bidderConfigs"),o=rn(e,"priceGranularity"),d=rn(e,"floors"),c=rn(e,"schain"),l=function(e){if(e&&Array.isArray(e))return e}(e.bidderAliases);return{...e,...l&&{bidderAliases:l},...t&&{userSync:t},...i&&{outbrain:i},...n&&{realTimeData:n},...s&&{analytics:s},...r&&{bidderConfigs:r},...a&&{currency:a},...o&&{priceGranularity:o},...d&&{floors:d},...c&&{schain:c}}}!function(e){e.firstId="firstId",e.utiqId="utiqId",e.sharedId="sharedId"}(zi||(zi={})),function(e){e.id5id="id5Id"}(Wi||(Wi={}));const rn=(e,t)=>{if(!(t in e))return;const i=Ti(e[t]);if(i)try{return JSON.parse(i)}catch(e){_(`unable to parse JSON in pbjsConfigFromPartial: ${t} `,e)}};function on(e,t){Object.keys(e??{}).some((e=>"scope"!==e&&"sites"!==e))&&_("Invalid override object",e);const i=e?.sites?.[t],n=e?.scope;return i??n}function dn(e,t){if(t)return t[e]??t.type}function cn(e){const t=("; "+document.cookie).split("; "+e+"=");if(2===t.length)return t.pop()?.split(";").shift()}class ln{constructor(e,t){this.stackLoadedConfig={...e,runningABTest:[]},this.pocOverrides=t}withConvertToInstreamAdUnit(){const e=this.pocOverrides.convertToInstreamAdUnits;let t;switch(B([25,25,25,25])){case 1:t=Ci.pubstack,this.stackLoadedConfig.runningABTest.push({name:"instreamMediaType",value:"pubstack"});break;case 2:t=Ci.dailymotion,this.stackLoadedConfig.runningABTest.push({name:"instreamMediaType",value:"dailymotion"});break;case 3:t=Ci.dailymotionPrsm,this.stackLoadedConfig.runningABTest.push({name:"instreamMediaType",value:"dailymotionPrsm"});break;case 4:t=Ci.jwplayerHbv,this.stackLoadedConfig.runningABTest.push({name:"instreamMediaType",value:"jwplayerHbv"})}return e&&this.stackLoadedConfig.adUnits.forEach((i=>{const n=e[i.adUnitName];n&&(i.isInstream=!0,i.dynamic=!1,i.parallax=!1,i.anchor=void 0,i.canOutstream=!1,i.biddersOutstream=[],i.floors=n.floors,i.instreamParams={...n.instreamParams,vast:n.instreamParams?.vast||{},mediaTypeParams:t})})),this}withConvertToNativeAdUnit(){const e=this.pocOverrides.convertToNativeAdUnits;return e&&this.stackLoadedConfig.adUnits.forEach((t=>{const i=e[t.adUnitName];if(i){if(t.canNative=!0,i.useNativeTemplate&&this.pocOverrides.nativeParamsTemplate?t.nativeParams=this.pocOverrides.nativeParamsTemplate:t.nativeParams=i.nativeParams,i.useNativeAlias){const e=e=>e.bidder.includes("native")||e.bidder.endsWith("_na");t.biddersNative=t.bidders.filter((t=>e(t))),t.bidders=t.bidders.filter((t=>!e(t)))}i.nativeOnly&&(t.sizes=[],t.extraAdServerSizes?.includes("fluid")?t.extraAdServerSizes=["fluid"]:t.extraAdServerSizes=[],t.isInstream=!1,t.parallax=!1,t.anchor=void 0,t.canOutstream=!1,t.biddersOutstream=[])}})),this}withFirstId(){if(this.pocOverrides?.firstId){const e=this.stackLoadedConfig.prebidConfig.pbjsConfig.bidderAliases||[],t=function(){const e=new RegExp("(?:(?:^|.*; *)firstid *= *([^;]*).*$)|^.*$","i"),t=document.cookie.match(e);return t&&t[1]?decodeURIComponent(t[1]):void 0}();if(t){const i=this.stackLoadedConfig.prebidConfig.pbjsConfig.userSync?.userIds??[];i.push({name:"pubProvidedId",bidders:Gt(["appnexus","pubmatic","rubicon","ix","nexx360","criteo","smartadserver","mediasquare","ogury","freewheel-ssp","outbrain","taboola","adf"],e),params:{eids:[{source:"first-id.fr",uids:[{id:t,atype:1,ext:{stype:"ppuid"}}]}]}}),this.stackLoadedConfig.prebidConfig.pbjsConfig.userSync={...this.stackLoadedConfig.prebidConfig.pbjsConfig.userSync,userIds:i}}}return this}withId5Id(){if(this.pocOverrides?.id5id){const e=localStorage.getItem(this.pocOverrides.id5id.pd);e&&(this.stackLoadedConfig.prebidConfig.pbjsConfig.userSync?.userIds??[]).forEach((t=>{"id5Id"===t.name&&(t.params||(t.params={}),t.params.pd=e)}))}return this}withConvertToInterstitialAdUnit(){const e=this.pocOverrides.convertToInterstitialAdUnits;return e&&this.stackLoadedConfig.adUnits.forEach((t=>{e.includes(t.adUnitName)&&(t.outOfPageType="interstitial",C(`Interstitial adUnit found: ${t.adUnitName}`))})),this}withSkinRenderingSettings(e,t){const i=this.pocOverrides?.skinRenderingSettings,n=i?.stackLevel?.[t],s=i?.siteLevel?.[e];return s?.disableSkinBids||n?.disableSkinBids?this.stackLoadedConfig.adUnits=this.stackLoadedConfig.adUnits.map((e=>({...e,sizes:e.sizes.filter((e=>!z(e,[1800,1e3])))}))):(s?.biddersOverride||n?.biddersOverride)&&(this.stackLoadedConfig.adUnits=this.stackLoadedConfig.adUnits.map((e=>e.sizes.some((e=>z(e,[1800,1e3])))?{...e,biddersSkin:n?.biddersOverride??s?.biddersOverride}:e))),this}withRefreshOutOfFocus(e){const t=this.pocOverrides?.refreshOutOfFocus;if(t){const i=on(t,e);i&&this.stackLoadedConfig.refreshConfig?.adUnitConfig.forEach((e=>{e.refreshOutOfFocusConfig=i}))}return this}withPpidSolution(e){const t=on(this.pocOverrides?.ppidSolutions,e);if(t){const e=Array.isArray(t.ppidSolution)?t.ppidSolution:[t.ppidSolution],{type:i,value:n}=function(e){for(const i of e)switch(i){case zi.firstId:return{type:"prebid",value:"first-id.fr"};case zi.sharedId:return{type:"prebid",value:"pubcid.org"};case zi.utiqId:return{type:"prebid",value:"utiq.com"};case Wi.id5id:{const e=localStorage.getItem("id5id");if(e)return{type:"other",value:(t=e,JSON.parse(decodeURIComponent(t)).gp)};break}default:{let e=localStorage.getItem(i);if(e)return{type:"other",value:e};if(e=cn(i)??null,e)return{type:"other",value:e}}}var t;return{type:"other",value:""}}(e);if("prebid"===i)this.stackLoadedConfig.prebidConfig.pbjsConfig.userSync={...this.stackLoadedConfig.prebidConfig.pbjsConfig.userSync,ppid:n};else this.stackLoadedConfig.gamConfig&&n&&(this.stackLoadedConfig.gamConfig.ppidValue=n)}return this}withRefreshAlwaysInView(){const e=this.pocOverrides?.refreshAlwaysInViewAdUnitNames;if(this.stackLoadedConfig.refreshConfig&&e&&e.length>0){const t=[];this.stackLoadedConfig.refreshConfig.adUnitConfig.forEach((i=>{e.forEach((e=>{i.adUnitNames?.includes(e)&&(t.push({...i,alwaysInView:!0,adUnitNames:[e]}),i.adUnitNames.splice(i.adUnitNames.indexOf(e),1))}))})),this.stackLoadedConfig.refreshConfig.adUnitConfig=[...this.stackLoadedConfig.refreshConfig.adUnitConfig.filter((e=>(e.adUnitNames||[]).length>0)),...t]}return this}withrefreshBehaviorOnEmpty(){const e=this.pocOverrides?.refreshBehaviorOnEmpty;return e&&this.stackLoadedConfig.refreshConfig?.adUnitConfig.forEach((t=>{t.refreshBehaviorOnEmpty=e})),this}withOutbrainConfig(e){if(this.pocOverrides?.outbrainConfig){const t=this.pocOverrides.outbrainConfig.find((t=>t.siteId===e)),i=this.pocOverrides.outbrainConfig.find((e=>!e.siteId)),n=t||i;n&&(this.stackLoadedConfig.prebidConfig.pbjsConfig.outbrain={bidderUrl:n.bidderUrl,usersyncUrl:n.usersyncUrl})}return this}withXplnConfig(e){const t=on(this.pocOverrides.xplnConfig,e);return t&&(this.stackLoadedConfig.xplnConfig=t),this}withFloorEnforcement(e){const t=this.pocOverrides?.floorEnforcement;if(t){const t=this.pocOverrides?.floorEnforcement?.sites?.[e],i=this.pocOverrides?.floorEnforcement?.scope;(t||i)&&(this.stackLoadedConfig.prebidConfig.pbjsConfig.floors={...this.stackLoadedConfig.prebidConfig.pbjsConfig.floors,enforcement:{...t??i}})}return this}withDynamicPrebidFloors(e){const t=this.pocOverrides?.dynamicPrebidFloors;if(t){const t=this.pocOverrides?.dynamicPrebidFloors?.sites?.[e],i=this.pocOverrides?.dynamicPrebidFloors?.scope;(t||i)&&this.stackLoadedConfig.adUnits.forEach((e=>{e.dynamicPrebidFloor=!0}))}return this}withFledgeForGpt(){if(this.pocOverrides?.fledgeForGpt){const e=Ht("criteo",this.stackLoadedConfig.prebidConfig.pbjsConfig.bidderAliases||[]);this.stackLoadedConfig.adUnits.forEach((t=>{t.bidders.find((t=>e.includes(t.bidder)))&&(t.ortb2Imp={...t.ortb2Imp,ext:{...t.ortb2Imp?.ext,ae:1}})})),this.stackLoadedConfig.prebidConfig.pbjsConfig.bidderConfigs||(this.stackLoadedConfig.prebidConfig.pbjsConfig.bidderConfigs=[]);const t=this.stackLoadedConfig.prebidConfig.pbjsConfig.bidderConfigs.find((t=>Array.isArray(t.bidders)&&t.bidders.find((t=>e.includes(t)))));t&&t.config?t.config.fledgeEnabled=!0:this.stackLoadedConfig.prebidConfig.pbjsConfig.bidderConfigs?.push({bidders:[...e],config:{fledgeEnabled:!0}}),this.stackLoadedConfig.prebidConfig.pbjsConfig={...this.stackLoadedConfig.prebidConfig.pbjsConfig,fledgeForGpt:!0}}return this}withRtbHousePaapi(){if(this.pocOverrides.rtbhousePaapi){const e=Ht("rtbhouse",this.stackLoadedConfig.prebidConfig.pbjsConfig.bidderAliases||[]);this.stackLoadedConfig.adUnits.some((t=>t.bidders.some((t=>e.includes(t.bidder)))))&&(this.stackLoadedConfig.prebidConfig.pbjsConfig={...this.stackLoadedConfig.prebidConfig.pbjsConfig,paapi:{enabled:!0,bidders:[...e],defaultForSlots:1,gpt:{autoconfig:!0}}})}return this}withSkinFloor(e){const t=this.pocOverrides?.skinFloor;if(t){const i=t.specificFloor?.[e]??t.defaultFloor;this.stackLoadedConfig.adUnits.forEach((e=>{if(e.sizes.some((e=>z(e,[1800,1e3]))))if(e.floors){const t=e.floors?.values.banner;t?e.floors={...e.floors,schema:{delimiter:"|",fields:["mediaType","size"]},values:{"banner|*":t,"banner|1800x1000":i}}:_("no banner value found in floors, skin floor cannot be applied.",e.floors)}else e.floors={currency:t.currency,schema:{delimiter:"|",fields:["mediaType","size"]},values:{"banner|1800x1000":i}}}))}return this}withDsaConfig(){return this.pocOverrides?.dsaConfig&&(this.stackLoadedConfig.prebidConfig.pbjsConfig={...this.stackLoadedConfig.prebidConfig.pbjsConfig,dsaConfig:this.pocOverrides?.dsaConfig}),this}withPrebidServerConfig(e){if(this.pocOverrides?.prebidServer&&this.pocOverrides.prebidServer.siteIds.includes(e)){if(j(this.pocOverrides.prebidServer.ratio)){C("Run ABTest hybrid monetization PBJS + PBS");const e=j(void 0!==this.stackLoadedConfig.prebidConfig.pbjsConfig?.priceGranularity&&this.pocOverrides.prebidServer.ratioPriceGranularity?this.pocOverrides.prebidServer.ratioPriceGranularity:0);this.stackLoadedConfig.prebidConfig.pbjsConfig={...this.stackLoadedConfig.prebidConfig.pbjsConfig,s2sConfig:{...this.pocOverrides.prebidServer.s2sConfig}};let t=this.pocOverrides.prebidServer.metaABTestServerSide??"rule2";e&&this.stackLoadedConfig.prebidConfig.pbjsConfig.s2sConfig?.extPrebid?.targeting&&(this.stackLoadedConfig.prebidConfig.pbjsConfig.s2sConfig.extPrebid.targeting.priceGranularity=this.stackLoadedConfig.prebidConfig.pbjsConfig.priceGranularity,t=`${t}_with_pg`,C("Run ABTest for PriceGranularity on Prebid Server side")),r(t)}else r(this.pocOverrides.prebidServer.metaABTestClientSide??"rule1")}return this}withRoadblockOrder(e){const t=on(this.pocOverrides?.roadblockOrder,e);return t&&this.stackLoadedConfig.adUnits.forEach((e=>{t[e.adUnitName]&&(e.roadblock=t[e.adUnitName])})),this}withDisableThreadYield(e){const t=window.location.search,i=new URLSearchParams(t);return(on(this.pocOverrides?.disableThreadYield,e)||i.get("disableThreadYield"))&&this.stackLoadedConfig.gamConfig&&(this.stackLoadedConfig.gamConfig.threadYieldConfig=Pi.DISABLED),this}withDisableGptPreAuction(e){return on(this.pocOverrides?.disableGptPreAuction,e)&&(de.getInstance().disableGptPreAuction=!0),this}withDisableSchainForTam(e){return on(this.pocOverrides?.disableSchainForTam,e)&&this.stackLoadedConfig.tamConfig&&(this.stackLoadedConfig.tamConfig={...this.stackLoadedConfig.tamConfig,disableSchain:!0}),this}withIASConfig(e){const t=on(this.pocOverrides.iasConfig,e);return t&&(this.stackLoadedConfig.iasConfig=t,C("[IAS Module] IAS Config override",t)),this}withDisableSingleRequest(e){const t=on(this.pocOverrides?.disableSingleRequest,e),i=this.stackLoadedConfig.adUnits.some((e=>e.roadblock));return t&&this.stackLoadedConfig.gamConfig&&!i&&(this.stackLoadedConfig.gamConfig.disableSingleRequest=!0),this}withDisableFetchLazyLoading(e){return on(this.pocOverrides?.disableFetchLazyLoading,e)&&(this.stackLoadedConfig.lazyLoading={...this.stackLoadedConfig.lazyLoading,configName:"lazyLoadingGoogle disabled",lazyLoadingGoogle:{...this.stackLoadedConfig.lazyLoading?.lazyLoadingGoogle,googleFetchMarginPercent:-1}}),this}build(){return this.stackLoadedConfig}}function un(e,t,i,n){const{pocOverrides:s,runningABTest:a}=function(e,t){const{overrideABTest:i,...n}=e,s=on(i,t);if(!s||!function(e){return"populationB"in e&&"object"==typeof e.populationB&&"ratio"in e&&"number"==typeof e.ratio||(_("ABTest populationB should be an object and ratio a number"),!1)}(s))return{pocOverrides:n,runningABTest:[]};const a=j(s.ratio),r=Object.keys(s.populationB);if(a){return{pocOverrides:Object.assign({...n},{...s.populationB}),runningABTest:[{name:"adm_ab_test",value:"poc:B",gamTargeting:!0},...r.map((e=>({name:e,value:"B"})))]}}return{pocOverrides:n,runningABTest:[{name:"adm_ab_test",value:"poc:A",gamTargeting:!0},...r.map((e=>({name:e,value:"A"})))]}}(t.pocOverrides??{},t.tagId),r=new ln(e,s).withConvertToInstreamAdUnit().withConvertToNativeAdUnit().withFirstId().withId5Id().withSkinRenderingSettings(t.tagId,n.stackId).withRefreshAlwaysInView().withrefreshBehaviorOnEmpty().withRefreshOutOfFocus(t.tagId).withXplnConfig(t.tagId).withOutbrainConfig(t.tagId).withFledgeForGpt().withRtbHousePaapi().withSkinFloor(t.tagId).withDsaConfig().withPrebidServerConfig(t.tagId).withPpidSolution(t.tagId).withConvertToInterstitialAdUnit().withFloorEnforcement(t.tagId).withDynamicPrebidFloors(t.tagId).withRoadblockOrder(t.tagId).withDisableThreadYield(t.tagId).withDisableGptPreAuction(t.tagId).withDisableSchainForTam(t.tagId).withIASConfig(t.tagId).withDisableSingleRequest(t.tagId).withDisableFetchLazyLoading(t.tagId).build();return{...r,runningABTest:[...a,...r.runningABTest]}}const fn=e=>!!e.priority&&!!e.conditions,gn=e=>!e.priority&&!e.conditions,hn=e=>"elements"in e;const pn={AND:({elements:e},t)=>e.every((e=>bn(e,t))),OR:({elements:e},t)=>e.some((e=>bn(e,t)))},mn={IN:({key:e,values:t},i)=>t.some((t=>t===i.get(e))),NOT_IN:({key:e,values:t},i)=>!t.some((t=>t===i.get(e)))};function bn(e,t){return hn(e)?pn[e.op](e,t):mn[e.op](e,t)}class vn{constructor(e,t,i){this.config=e,this.stack=t,this.stackVersion=i,this.runningABTest=[]}applyRulesABTest(){const{config:e,winner:t}=(e=>{if(e.abTest){if(!(e.abTest.length<2)){w("[A/B test] variants",e.abTest.map((e=>e.name)).join(", "));const t=B(e.abTest.map((e=>e.ratio))),i=e.abTest[t-1];return w("[A/B test] winner",i.name),{config:{...e,...i.configToMerge},winner:i.name}}_("The A/B test config is invalid: not enough variants")}return{config:e}})(this.config);return this.config=e,t&&this.runningABTest.push({name:"pbstck_ab_test",value:t,gamTargeting:!0}),this}applyEngineABTest(e){const t=[];return e.multiformat&&!e.pocOverrides?.disableMultiformat&&(this.multiformatBidders=Gt(e.multiformat.bidders,this.config.prebidConfig.pbjsConfig.bidderAliases??[]),e.multiformat.abTest&&(j(e.multiformat.abTest.ratio)?(t.push("mf:A"),this.multiformatBidders.push(...Gt(e.multiformat.abTest.bidders,this.config.prebidConfig.pbjsConfig.bidderAliases??[]))):t.push("mf:B"))),t.length&&this.runningABTest.push({name:"engine_ab_test",value:t,gamTargeting:!0}),this}applyPocOverrides(e,t){if(e.pocOverrides){const{runningABTest:t,...i}=un(this.config,e,0,this.stack);this.config=i,this.runningABTest.push(...t)}return this}applyPageLevelBidderConfig(){return this.config=function(e){const t=e.prebidConfig.pbjsConfig.bidderAliases??[];return e.adUnits.forEach((e=>{e.bidders=e.bidders.map((e=>zt(e,t)))})),e}(this.config),this}build(){return{...this.config,multiformatBidders:this.multiformatBidders,stackId:this.stack.stackId,version:this.stackVersion,runningABTest:this.runningABTest}}}async function yn(e,t,i,n){const s=function(e,t,i,n){const s=function(e,t,i,n,s){return`${e}/config/${t.scopeId.substring(0,8)}/${n.substring(0,8)}/${t.stackId}/${i}/${s}.json`}(e.configUrl,i,n,e.tagId,t);return s.replace(/([^:]\/)\/+/g,"$1")}(e,t,i,n);return new Promise((e=>{fetch(s).then((t=>{t.text().then((async t=>{const i=function(e){const t=JSON.parse(e);return{...t,lazyLoading:Ji(t.lazyLoading),adUnits:Ki(t.adUnits),prebidConfig:Xi(t.prebidConfig),refreshConfig:Yi(t.refreshConfig),abTest:Qi(t.abTest)}}(t);e(i)}))})).catch((async t=>{_(`unable to load the configuration ${t}`),e(void 0)}))}))}async function An(e){return yn(e,e.device,e.stack,e.stackVersion).then((t=>{if(t)return function(e,t,i,n,s){return new vn(e,t,i).applyRulesABTest().applyEngineABTest(n).applyPocOverrides(n,s).applyPageLevelBidderConfig().build()}(t,e.stack,e.stackVersion,e,e.pageContext)}))}const Sn={pbjsFinished:!1,apsFinished:!1},In="[executor] [buffered]";var Cn;!function(e){e[e.FirstCall=0]="FirstCall",e[e.Refresh=1]="Refresh"}(Cn||(Cn={}));class wn{constructor(e,t,i,n){this.buffer=[],this.auctionRunning=!1,this.adUnitAuctionStatus=new Map,this.adServer=e,this.pbjs=t,this.aps=i,this.kleanadsRunCount=n}executeAdCall(e){if(0===e.length)return;setTimeout((()=>{e.forEach((e=>Ve(e.divId,"executorTimeout")))}),2e4);const t=e.filter((e=>!this.adUnitAuctionStatus.has(e.divId))).sort(((e,t)=>R(e.divId)-R(t.divId)));this.logAlreadyMonetizedAdUnits(e,t),C(`${In} buffering adunits`,e),t.forEach((e=>{this.bufferAdUnits({adUnits:[e],origin:Cn.FirstCall})}))}executeAdCallRoadblock(e){if(0===e.length)return;setTimeout((()=>{e.forEach((e=>Ve(e.divId,"executorTimeout")))}),2e4);const t=e.filter((e=>!this.adUnitAuctionStatus.has(e.divId))).sort(F);this.logAlreadyMonetizedAdUnits(e,t),C(`${In} buffering adunits`,e),k("executor:roadblock",{slotIds:t.map((e=>e.divId))}),this.bufferAdUnits({adUnits:t,origin:Cn.FirstCall})}bufferAdUnits(e){switch(this.buffer.push(e),e.origin){case Cn.FirstCall:e.adUnits?.forEach((e=>{this.adUnitAuctionStatus.set(e.divId,Sn)}));break;case Cn.Refresh:this.adUnitAuctionStatus.set(e.refreshableAdUnit.adUnit.divId,Sn);break;default:_(`${In} unknown buffer entry origin`)}this.startAuctionForBufferedAdUnits()}executeRefresh(e){this.bufferAdUnits({refreshableAdUnit:e,origin:Cn.Refresh})}startAuctionForBufferedAdUnits(){if(this.auctionRunning)return void w(`${In} auction already running, not starting a new one`);const e=this.buffer.shift();if(w(`${In} adunit taken from buffer`,e),e)switch(e.origin){case Cn.FirstCall:this.startAuction(e.adUnits);break;case Cn.Refresh:this.startAuction([e.refreshableAdUnit.adUnit],{labels:["pubstackRefresh",`pubstackRefreshRank:${e.refreshableAdUnit.rank}`]});break;default:_(`${In} unknown buffer entry origin`)}else w(`${In} no more adunit to monetize in buffer`)}startAuction(e,t){this.auctionRunning=!0,e.forEach((e=>{ke(e.divId,Ie.START_AUCTION)})),C(`${In} starting header bidding for ${e.map((e=>e.divId))}`);const i=de.getInstance().kleanadsRunCount;if(this.pbjs){const n=this.pbjs.getPbjs();this.pbjs.startPbjsAuction(e,(()=>{this.kleanadsRunCount===i?this.pbjsFinished(n,e):C(`${In} kleanads run count has changed (from ${this.kleanadsRunCount} to ${i}), avoid calling pbjsFinished`)}),t)}this.aps&&this.aps.startApsAuction(e,(t=>{this.kleanadsRunCount===i?this.apsFinished(e,t):C(`${In} kleanads run count has changed (from ${this.kleanadsRunCount} to ${i}), avoid calling apsFinished`)})),this.pbjs||this.aps||this.adServer.executeWhenAdServerReady((()=>{this.kleanadsRunCount===i?this.callAdServer(e):C(`${In} kleanads run count has changed (from ${this.kleanadsRunCount} to ${i}), avoid calling AdServer`)}))}isAlreadyMonetized(e){return this.adUnitAuctionStatus.has(e.divId)}logAlreadyMonetizedAdUnits(e,t){if(e.length!==t.length){const t=e.filter((e=>this.adUnitAuctionStatus.has(e.divId)));E(`${In} cannot make a new ad call, existing one on ${t.map((e=>e.divId)).join(",")}.`)}}pbjsFinished(e,t){w(`${In} pbjs end callback for ${t.map((e=>e.divId)).join(",")}`,e.getAllPrebidWinningBids()),t.forEach((e=>{ke(e.divId,Ie.END_PBJS_AUCTION),ze(e.divId)})),this.adServer.executeWhenAdServerReady((()=>{w(`${In} pbjs end callback ad server ready ${t.map((e=>e.divId)).join(",")}`),this.adServer.setPbjsTargetings(e,t),t.forEach((e=>{const t=this.adUnitAuctionStatus.get(e.divId);t&&this.adUnitAuctionStatus.set(e.divId,{...t,pbjsFinished:!0})})),this.canCallAdServer(t)&&this.callAdServer(t)}))}apsFinished(e,t){w(`${In} aps end callback ${e.map((e=>e.divId)).join(",")}`,t),e.forEach((e=>ke(e.divId,Ie.END_APS_AUCTION))),this.adServer.executeWhenAdServerReady((()=>{w(`${In} aps end callback ad server ready ${e.map((e=>e.divId)).join(",")}`),this.adServer.setApsTargetings(e,t),e.forEach((e=>{const t=this.adUnitAuctionStatus.get(e.divId);t&&this.adUnitAuctionStatus.set(e.divId,{...t,apsFinished:!0})})),this.canCallAdServer(e)&&this.callAdServer(e)}))}canCallAdServer(e){const t=e.filter((e=>{const t=this.adUnitAuctionStatus.get(e.divId);return this.aps&&!this.pbjs?t&&t.apsFinished:this.pbjs&&!this.aps?t&&t.pbjsFinished:this.pbjs&&this.aps?t&&t.apsFinished&&t.pbjsFinished:void 0}));return t.length>0&&t.length!==e.length&&_(`${In} cannot call ad server for ${e.map((e=>e.divId)).join(",")}, some ad units are not ready`),t.length>0}callAdServer(e){if(this.auctionRunning=!1,this.startAuctionForBufferedAdUnits(),e.forEach((e=>{ke(e.divId,Ie.START_AD_SERVER_CALL)})),e.length>0){this.adServer.callAdServer(e);const t=e.map((e=>e.divId));C(`${In} ad server called ${t.join(",")}`)}}}class En{constructor(e,t,i){this.stackConfig=e,this.kleanAdsConfig=t,this.pageContext=i,this.adUnits=[],this.callbacks=[]}alreadyUsedDivIds(){return this.adUnits.map((e=>e.divId))}setConfig(e,t,i){this.stackConfig=e,this.kleanAdsConfig=t,this.pageContext=i,this.adUnits=[],this.callbacks=[]}async executeWhenAdUnitsFound(e){const t=(i=this.stackConfig,n=this.kleanAdsConfig,s=this.pageContext,_n(i.adUnits,i,n,s)).filter((e=>!this.alreadyUsedDivIds().includes(e.divId)));var i,n,s;if(this.adUnits.push(...t),await e(this.adUnits),this.callbacks.push(e),!this.adUnitObserver){const e=async e=>{const t=function(e,t,i,n){return _n([e],t,i,n)}(e,this.stackConfig,this.kleanAdsConfig,this.pageContext).filter((e=>!this.alreadyUsedDivIds().includes(e.divId))).reduce(((e,t)=>(e.find((e=>e.divId===t.divId))?_(`We tried to prepare two times the same divId, skipping adUnit ${t.adServerAdUnitName} from the list`,t):(e.push(t),w("New adUnit dynamicaly loaded",t.divId)),e)),[]);t.length>0&&(this.adUnits.push(...t),this.callbacks.forEach((async e=>{await e(t)})))};this.startAdUnitObserver(e)}}cleanObserverAndAdUnits(){this.adUnitObserver?.disconnect(),this.adUnitObserver=void 0,this.adUnits=[]}startAdUnitObserver(e){const t=this.alreadyUsedDivIds(),i=this.stackConfig.adUnits.filter((e=>!t.includes(e.divId)||e.dynamic)),n=document.body;if(!n)return void _("Body not found, cannot start observer");const s=new MutationObserver(function(e,t){return(i,n)=>{i.filter((e=>"childList"===e.type&&e.addedNodes.length>0)).forEach((i=>{Array.from(i.addedNodes).filter((e=>e.nodeType===Node.ELEMENT_NODE)).forEach((i=>{e.forEach((e=>{const n=e.divId.startsWith("css:")?e.divId.replace("css:",""):e.dynamic?`[id^="${e.divId}"]`:`[id="${e.divId}"]`;(i.matches(n)||i.querySelectorAll(n).length>0)&&t(e)}))}))}))}}(i,e));s.observe(n,{childList:!0,subtree:!0}),this.adUnitObserver=s}}function _n(e,t,i,n){const s=t?.gamConfig?.adUnitPathConfig??[];return Mi(e,n,function(e,t){const i=t?.gamConfig?.networkId??e.networkId,n=t?.gamConfig?.mcmIds&&t?.gamConfig?.mcmIds.length>0?t?.gamConfig?.mcmIds:e.mcmIds;return i?n?[i,...n].join(","):i:""}(i,t),s,i.pubstackDeclarationTargetingKeys)}let Tn=(()=>{let e,t,i=[$t("onStackConfigLoad")],n=[];return t=class{constructor(){this.name="AdUnitsManager"}get adUnitsManager(){return this._adUnitsManager}isLoaded(){return!!this._adUnitsManager}async load({config:e,stackConfig:t}){this._adUnitsManager=new En(t,e,e.pageContext)}async onStackConfigLoad({config:e,stackConfig:t}){this._adUnitsManager?.setConfig(t,e,e.pageContext)}async clean(){this._adUnitsManager?.cleanObserverAndAdUnits()}},Rt(t,"AdUnitsManagerModule"),(()=>{const s="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;kt(null,e={value:t},i,{kind:"class",name:t.name,metadata:s},null,n),t=e.value,s&&Object.defineProperty(t,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:s}),Ot(t,n)})(),t})();class kn{constructor(e,t){this.element=e,this.dateIn=0,this.pastTimeInView=0,this.isInview=!1,this.alwaysInView=t??!1,this.isTabActivated="visible"===window.document.visibilityState,this.isVisible=!window.document.hidden,this.resetAt=0,this.hasBeenReset=!1}getTimeInView(e){return this.hasBeenReset?e>=this.dateIn&&this.dateIn>0&&(this.isInview||this.alwaysInView)&&this.isTabActivated?this.pastTimeInView+(e-this.dateIn):this.pastTimeInView:0}getTimeOnPage(e){return this.hasBeenReset?e-this.resetAt:0}resetTimer(e){(this.isInview||this.alwaysInView)&&this.isTabActivated&&(this.dateIn=e),this.resetAt=e,this.hasBeenReset=!0,this.pastTimeInView=0}updateTimerOnInViewChange(e,t){this.isInview=e,this.updateTimer(t)}updateTimerOnTabStatusChange(e,t){this.isTabActivated=e,this.updateTimer(t)}updateTimerOnVisibleChange(e,t){this.isVisible=e,this.updateTimer(t)}updateTimer(e){if((this.isInview||this.alwaysInView)&&this.isTabActivated)return 0===this.dateIn?void(this.dateIn=e):this.dateIn>0?void 0:void(this.dateIn=e);this.dateIn>0&&(e>=this.dateIn&&(this.pastTimeInView=this.pastTimeInView+(e-this.dateIn)),this.dateIn=0)}}const On={root:null,rootMargin:"0px",threshold:.5},Rn="[adUnitsObserver]";class $n{constructor(e,t){this.elements={},this.observer=new IntersectionObserver((e=>{this.handleIntersect(e,this)}),On),this.configAlwaysInView=t,e.forEach((e=>{this.elements[e.id]=new kn(e,t?.[e.id]),this.observer.observe(e)})),addEventListener("visibilitychange",(()=>{w(`${Rn} visibilitychange`,window.document.visibilityState),"visible"===window.document.visibilityState?Object.keys(this.elements).forEach((e=>{this.elements[e].updateTimerOnTabStatusChange(!0,Date.now())})):Object.keys(this.elements).forEach((e=>{this.elements[e].updateTimerOnTabStatusChange(!1,Date.now())}))}))}isObserving(e){return e in this.elements}unobserve(e){this.isObserving(e)&&(this.observer.unobserve(this.elements[e].element),delete this.elements[e])}observe(e){this.isObserving(e.id)||(this.elements[e.id]=new kn(e,this.configAlwaysInView?.[e.id]),this.observer.observe(e))}getObservedDivIds(){return Object.keys(this.elements)}getTimeInView(e,t){return this.isObserving(e)?this.elements[e].getTimeInView(t):0}isInView(e){return!!this.isObserving(e)&&this.elements[e].isInview}getTimeOnPage(e,t){return this.isObserving(e)?this.elements[e].getTimeOnPage(t):0}resetTimers(e,t){e.forEach((e=>{this.isObserving(e)&&(w(`${Rn} reseting time for ${e}`),this.elements[e].resetTimer(t))}))}getAdUnitInViewTimer(e){return this.elements[e]}handleIntersect(e,t){e.forEach((e=>{const i=Date.now();t.elements[e.target.id].updateTimerOnInViewChange(e.isIntersecting,i),w(`${Rn}`,e.target.id,e.isIntersecting?"in view":"out of view")}))}}const Ln="[RefreshState]";class Pn{constructor(e,t,i){this.adUnitsObserver=new $n(e,i),this.exclusions=t,this.lastRenderInfo={},this.refreshRank={},this.hasAuctionInProgress={},this.shouldRefreshBeforeTimerEnd={},this.consecutiveSecondChanceAttempts={},e.forEach((e=>{this.refreshRank[e.id]=0,this.hasAuctionInProgress[e.id]=!1,this.shouldRefreshBeforeTimerEnd[e.id]=!1,this.consecutiveSecondChanceAttempts[e.id]=0}))}unobserve(e){w(`${Ln} refresh unobserve`,e),this.adUnitsObserver.unobserve(e)}addAdUnits(e){e.forEach((e=>{w(`${Ln} refresh addAdUnit`,e.id),this.adUnitsObserver.observe(e),this.refreshRank[e.id]=0,this.hasAuctionInProgress[e.id]=!1}))}getTimeInView(e,t){return this.adUnitsObserver.getTimeInView(e,t)}getTimeOnPage(e,t){return this.adUnitsObserver.getTimeOnPage(e,t)}isInView(e){return this.adUnitsObserver.isInView(e)}needRefresh(e,t,i){if(!this.adUnitsObserver.isObserving(e))return!1;if(this.cappingReached(e,i.capping))return!1;if(this.hasAuctionInProgress[e])return!1;if(this.shouldRefreshBeforeTimerEnd[e])return this.shouldRefreshBeforeTimerEnd[e]=!1,!0;const n=this.getTimeInView(e,t),s=this.getTimer(e,i.timer,i.refreshSpecificRules);!function(e,t,i,n,s,a){if(A()){const r=document.getElementById(t),o=r?.parentElement,d="refresh_kleanads";let c=document.getElementById(`${d}_${t}-refresh-debug`);c||(c=document.createElement("div"),c.id=`${d}_${t}-refresh-debug`,c.style.position="absolute",c.style.bottom="5px",c.style.left="5px",c.style.zIndex="99999999",c.style.backdropFilter="blur(6px)",c.style.textShadow="1px 1px 1px rgba(0, 0, 0, 0.3)",c.style.fontFamily="Arial, sans-serif",c.style.borderRadius="5px",c.style.color="white",c.style.padding="8px 16px",c.style.display="flex",c.style.flexDirection="column",c.style.gap="5px",c.style.textAlign="left",c.style.border="1px solid white",c.style.transition="background-color 250ms linear",o?.prepend(c));let l=document.getElementById(`${d}_${t}-refresh-div-id`);l||(l=document.createElement("span"),l.id=`${d}_${t}-refresh-div-id`,c.appendChild(l)),l.textContent=`${t}`,l.style.fontSize="1rem",l.style.fontWeight="bold";let u=document.getElementById(`${d}_${t}-refresh-debug-timer`);u||(u=document.createElement("span"),u.id=`${d}_${t}-refresh-debug-timer`,c.appendChild(u)),u.textContent=`Time in view : ${Math.floor(i/1e3).toString()}`,u.style.fontSize="1rem";let f=document.getElementById(`${d}_${t}-refresh-debug-refresh-rank`);f||(f=document.createElement("span"),f.id=`${d}_${t}-refresh-debug-refresh-rank`,c.appendChild(f));const g=n??"∞";f.textContent=`Refresh rank : ${e.getRefreshRank(t).toString()} / ${g}`,f.style.fontSize="1rem",c.style.backgroundColor=s&&a?"rgba(55, 110, 79, 0.7)":"rgba(140, 71, 79, 0.7)"}}(this,e,n,i.capping,this.adUnitsObserver.getAdUnitInViewTimer(e)?.isTabActivated,this.adUnitsObserver.getAdUnitInViewTimer(e)?.isInview);const a=i.refreshOutOfFocusConfig,r=i.alwaysInView,o=this.getLastWinningMediaType(e);if(a&&!r&&"video"!==o){const i=this.getTimeOnPage(e,t),r=this.isInView(e),o=1e3*a.timerInView;return a.refreshOutOfView?n>=o&&i>=s:r&&n>=o&&i>=s}return n>=s}cappingReached(e,t){return!!t&&t<this.getRefreshRank(e)}getTimer(e,t,i){if("video"===this.getLastWinningMediaType(e))return 3e4;const n=this.getLastWinningBidder(e),s=this.getLastSize(e),a=[];return i.forEach((e=>{if(!e.timer)return;const t=!!n&&e.bidders.includes(n)&&0===e.sizes.length,i=s&&e.sizes.find((e=>z(e,s)))&&0===e.bidders.length,r=n&&s&&e.bidders.includes(n)&&e.sizes.find((e=>z(e,s)));(t||i||r)&&a.push(1e3*e.timer)})),a.length>0?Math.max(...a):1e3*t}getObservedDivIds(){return this.adUnitsObserver.getObservedDivIds()}getRefreshRank(e){const t=this.refreshRank[e];return this.adUnitsObserver.isObserving(e)&&t?t:0}updateAdUnitStatus(e,t){const i=e.divId;if(this.refreshRank[i]+=1,this.lastRenderInfo[i]=e,w(`${Ln} update status ${i} new refresh rank ${this.refreshRank[i]}`),e.isEmpty){if(t.refreshBehaviorOnEmpty===Li.Continue)return;if(t.refreshBehaviorOnEmpty===Li.InstantSecondChance)return void(this.consecutiveSecondChanceAttempts[t.divId]<1&&(this.consecutiveSecondChanceAttempts[t.divId]++,this.shouldRefreshBeforeTimerEnd[t.divId]=!0));w(`${Ln} ${i} is excluded from refresh from now on (empty impression)`),this.unobserve(i)}else this.consecutiveSecondChanceAttempts[t.divId]=0;const n=t.refreshSpecificRules.filter((e=>!e.timer)),s=this.getLastWinningBidder(t.divId),a=this.getLastSize(t.divId);(!!n.find((e=>{const t=!!s&&e.bidders.includes(s),i=!!a&&!!e.sizes.find((e=>z(e,a))),n=t&&0===e.sizes.length,r=i&&0===e.bidders.length;return n||r||t&&i}))||this.isExcludedByConfig(t.divId)||this.cappingReached(i,t.capping))&&(w(`${Ln} ${i} is excluded from refresh from now on`),this.unobserve(i))}getLastSize(e){return this.lastRenderInfo[e]?.size||void 0}getLastAdvertiserId(e){return this.lastRenderInfo[e]?.advertiserId||void 0}getLastWinningBidder(e){return this.lastRenderInfo[e]?.hb_bidder}getLastWinningMediaType(e){return this.lastRenderInfo[e]?.hb_mediaType}resetTimer(e,t){this.adUnitsObserver.resetTimers([e],t),this.hasAuctionInProgress[e]=!1}setAuctionInProgress(e){this.hasAuctionInProgress[e]=!0}isExcludedByConfig(e){const t=this.getLastAdvertiserId(e),i=this.getLastWinningLineItemId(e),n=this.getLastWinningOrderId(e),s=!!t&&this.exclusions.advertisers.includes(t),a=!!n&&this.exclusions.orders.includes(n),r=!!i&&this.exclusions.lineItems.includes(i);return s||a||r}getLastWinningLineItemId(e){return this.lastRenderInfo[e]?.lineItemId||void 0}getLastWinningOrderId(e){return this.lastRenderInfo[e]?.orderId||void 0}}const Nn="[refresh]";const Un="[refresh]";async function xn(e,i,n,s,a){const r=[],o=[],d={},c=new Pn([],s,d);e.executeWhenAdUnitsFound((async e=>{C(`${Un} adUnits found for refresh`,e),function(e,t){return e.flatMap((e=>{const i=e.adUnitNames.flatMap((e=>t.filter((t=>t.adUnitName.startsWith(e))))),n=e.specificRules.map((e=>e.bidder?{bidders:[e.bidder],sizes:[],timer:e.timer}:e));return i.filter((e=>!!e)).flatMap((t=>({...t,alwaysInView:e.alwaysInView,capping:e.capping,timer:e.timer,refreshSpecificRules:n,refreshBehaviorOnEmpty:e.refreshBehaviorOnEmpty,refreshOutOfFocusConfig:e.refreshOutOfFocusConfig})))}))}(n,e).forEach((e=>{r.push(e),e.alwaysInView&&(d[e.divId]=!0);const t=document.getElementById(e.divId);t?(o.push(t),c.addAdUnits([t])):C(`${Un} element to refresh not found with id`,e.divId)}))})),a.renderListener((e=>function(e,t,i){const n=e.divId,s=t.find((e=>e.divId===n));if(s){const t=e.hb_bidder;i.resetTimer(n,Date.now()),i.updateAdUnitStatus(e,s),t&&w(`${Nn} we have a winning bidder for ${n} that is from prebid: ${t}`),w(`${Nn} render on`,n)}}(e,r,c)));const l=()=>{const e=[],t=Date.now();c.getObservedDivIds().forEach((i=>{const n=r.find((e=>e.divId===i));n&&c.needRefresh(i,t,n)&&e.push(n)})),e.length>0&&e.forEach((e=>{const t=c.getRefreshRank(e.divId);C(`${Un} refresh on ${e.divId} with rank ${t}`);const n={adUnit:e,rank:t};a.setRefreshTargeting(n),i.executeRefresh(n),c.setAuctionInProgress(e.divId)})),c.getObservedDivIds().length>=0?setTimeout((()=>{l()}),100):C("${LOG_PREFIX} There is no more adUnits observed, stop refreshCycle")};l();window.dispatchEvent(new CustomEvent(t.REFRESH_INIT,{detail:{stopRefresh:e=>{e&&Array.isArray(e)&&e?.length>0?e.forEach((e=>{c.unobserve(e)})):c.getObservedDivIds().forEach((e=>{c.unobserve(e)}))}}}));const u=()=>{window.removeEventListener(t.PAGE_CHANGE,u),C("${LOG_PREFIX} history mutation event received"),a.removeRenderListener(),o.forEach((e=>{c.resetTimer(e.id,Date.now()),c.unobserve(e.id)})),c.refreshRank={},c.lastRenderInfo={}};window.addEventListener(t.PAGE_CHANGE,u)}async function Dn(e,t){Te(Se.BEGIN_CONFIGURE),await N(e,{beforeStart:!0});const i=window;C(`Configure kleanads.js (version: ${e.kleanadsVersion}, run count: ${de.getInstance().kleanadsRunCount})`);const n=function(e,t){const i=t.sort(U);for(const t of i)if(e>=t.size)return t.device;return"desktop"}(i.innerWidth,e.screenSizeBreakpoints);!function(e,t,i,n){m=new f(e,t,i,n),b=e,v=t}(e.tagId,e.kleanadsVersion,n,on(e.pocOverrides?.traceThrottling,e.tagId)),de.getInstance().setUprState(e.pocOverrides?.uprState,e.pocOverrides?.uprRatio);const s=function(e,t){const i=qe(t),n=new Map(i.map((({key:e,defaultValue:t})=>[e,t])));e.document.querySelectorAll('meta[name^="pbstck_context:"]').forEach((e=>{const t=e.attributes.getNamedItem("name")?.value.substring(15).toLowerCase(),s=e.attributes.getNamedItem("content")?.value.toLowerCase();if(t&&s){const e=i.find((({key:e})=>e===t));e&&(function(e,t){return t.defaultValue===e||(t.otherValues??[]).includes(e)}(s,e)?n.set(t,s):E(`${Ye} Unknown ${t} value ${s}`))}}));const s=new URLSearchParams(e.location.search);for(const e of s.keys())e.startsWith("pbstck_context:")&&n.set(e.slice(15),s.get(e)||"");return n}(i,e.context);if(0===s.size)C("[context] No context set");else{let e="";s.forEach(((t,i)=>{e+=`\n${i}=>${t}`})),C(`[context] The following context will be used:${e}`,s)}const a=function(e,t){const i=e.filter(fn).sort(((e,t)=>e.priority-t.priority)),n=e.filter(gn);if(0===n.length)return void _("[stacks] Could not find default stack");n.length>1&&_("[stacks] Multiple default stacks found");const s=n[0];return i.find((e=>bn(e.conditions,t)))??s}(e.stacks,s);if(!a)return void _("No stack found, stopping monetization");C(`[stacks] served stack: ${a.stackId} ${a.priority||a.conditions?"":"(default stack)"}`);const r=Bn(a.versions).toString(),o={...e,device:n,stack:a,stackVersion:r,pageContext:s,consentlessMode:e.pocOverrides?.consentlessMode,noCmp:c(),spaMode:e.spaConfig?.[e.tagId]?.mode,pubstackWindow:i,instreamType:dn(e.tagId,e.pocOverrides?.instreamConfig)},d=new Nt(o,t);await d.loadInitialModules(),I(r);return{configPromise:An(o),kleanAdsConfig:o,moduleService:d}}async function jn(e){const{configPromise:t,kleanAdsConfig:i,moduleService:n}=e;C("Starting kleanads"),Te(Se.BEGIN_START),Ge();const s=i.noCmp||await Je(window);je!==De.UNKNOWN&&T("[metric] cmpResponseAvailable",{cmpResponseAvailable:Re(Ae.CMP_RESPONSE_AVAILABLE),fromBeginCmpResponseAvailable:$e(Ae.BEGIN_INIT,Ae.CMP_RESPONSE_AVAILABLE),consentType:je}),await n.modulesDispatchEvent("onAfterConsent"),await N(i,{beforeStart:!1});const r=i.stacks.find((e=>e.stackId===function(e){return e.pocOverrides?.consentlessStacks?.[e.tagId]}(i)));if(s){const e=await n.modulesDispatchEvent("onAfterConsentAccepted");await Promise.all(e)}else{C("Consent refused");const e=await n.modulesDispatchEvent("onAfterConsentRefused");await Promise.all(e),r&&(i.stack=r,i.stackVersion=Bn(r.versions).toString(),I(i.stackVersion),C("Using following consentless stack",r.stackId,r))}if(s||i.consentlessMode||r){await n.modulesDispatchEvent("onBeforeStackConfigLoad");const e=s?t:An(i);let a=await e;if(a&&i.pocOverrides?.optimizationModule&&(a=await di(a),w("[pocOverrides] Optimization module finished")),C("[config] kleanAdsConfig:",i),C("[config] stackLoadedConfig:",a),a){if(i.pocOverrides&&i.pocOverrides.grapeshotTargetings){w("[pocOverrides] Poc Grapeshot enabled");const e=await async function(e){return new Promise((t=>{const i=`${e}${encodeURIComponent(window.location.href)}`,n=document.createElement("script");n.async=!0,n.src=i,n.onload=()=>t(window.gs_channels),setTimeout((()=>t(void 0)),3e3),n.onerror=()=>t(void 0),document.head.append(n)}))}(i.pocOverrides.grapeshotTargetings);de.getInstance().grapeshotValues=e}await n.modulesDispatchEvent("onStackConfigLoad",{stackConfig:a});const e=n.getLoadedModuleInstance(ii)?.pbjs;e&&await n.modulesDispatchEvent("onAfterPrebidReady",{prebid:e});const t=n.getLoadedModuleInstance(Lt)?.aps,s=n.getLoadedModuleInstance(Tt)?.adServer;s&&await n.modulesDispatchEvent("onAfterAdServerReady",{adServer:s});const r=n.getLoadedModuleInstance(Tn)?.adUnitsManager;if(!s)return void _("no adServer found, stopping monetization");if(!r)return void _("no adUnitManager found, stopping monetization");Xe(window,i.context,a.gamConfig?.adUnitPathConfig??[]);const o=de.getInstance().kleanadsRunCount,d=new wn(s,e,t,o),c=a.adUnits.some((e=>e.isInstream))?new et(new be(window,i.pageContext,i.device,i.instreamType),e,t,o):void 0,u=async e=>{C("[config] adUnits to monetize:",e),await n.modulesDispatchEvent("onPrepareAdUnits",{toPreparedAdUnits:e}),ai(e,d,c,a.lazyLoading)};await r.executeWhenAdUnitsFound(u);const f=a.refreshConfig;if(i.globalRefreshConfig&&f){const e=on(i.pocOverrides?.disableRefreshExclusions,i.tagId),t=i.networkId&&!e?await zn(i.configUrl,i.networkId,i.stack.scopeId):l;xn(r,d,f.adUnitConfig,t,s)}}else _("no input configuration, stopping monetization")}else C("consent not given, no monetization");switch(i.spaMode){case"manual":w("[SPA] manual SPA enabled"),Fn((()=>{w("[SPA] manual page change requested, restarting kleanads.js"),Mn(i,n)}));break;case"auto":w("[SPA] auto SPA enabled"),a(),Vn((()=>{w("[SPA] page change detected, restarting kleanads.js"),Mn(i,n)}))}_e(Ae.MAIN_THREAD_END)}function Bn(e){const t=e.sort(((e,t)=>e.ratio-t.ratio));return j(void 0!==t[0].ratio?t[0].ratio:100)?t[0].version:t[1].version}const Mn=async(e,t)=>{Te(Se.SPA_RELOAD);const i=de.getInstance();i.setKleanadsRunCount(i.kleanadsRunCount+1);const n=t.getModules();await t.modulesCleanUp(),C("Restarting kleanads");const s=await Dn(e,n);s&&jn(s)},Vn=e=>{const i=new MutationObserver((()=>{s()})),n=e=>{const t=e,n=new URL(t.detail.referrer),s=(a=t.detail.url)?`${a}`.startsWith("http")?new URL(a).pathname:`${a}`:"";var a;n.pathname!==s&&i.observe(document.head,{attributes:!0,childList:!0,subtree:!0})};window.addEventListener(t.HISTORY_MUTATION,n);const s=()=>{window.removeEventListener(t.HISTORY_MUTATION,n),i.disconnect(),window.dispatchEvent(new CustomEvent(t.PAGE_CHANGE)),e()}},Fn=e=>{const n=()=>{s()};window.addEventListener(i.SPA_RELOAD,n);const s=()=>{window.removeEventListener(i.SPA_RELOAD,n),window.dispatchEvent(new CustomEvent(t.PAGE_CHANGE)),e()}},zn=async(e,t,i)=>await fetch(`${e}/refresh-exclusions/${t}/${i}/currentExclusions.json`).then((async e=>e.json().then((e=>e)).catch((e=>{_(`unable to extract line items with no refresh: ${e}`)})))).catch((e=>_(`unable to get line items with no refresh: ${e}`)));let Wn=(()=>{let e,t,i=[$t("onAfterConsent")],n=[];return t=class{constructor(){this.name="Collector",this._isLoaded=!1,this._scriptAdded=!1}isLoaded(){return this._isLoaded}async load(){this._isLoaded=!0}async onAfterConsent({config:e}){this._scriptAdded||(setTimeout((()=>{C("Downloading pubstack collector"),P(`https://boot.pbstck.com/v1/tag/${e.tagId}`)}),200),this._scriptAdded=!0)}async clean(){}},Rt(t,"CollectorModule"),(()=>{const s="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;kt(null,e={value:t},i,{kind:"class",name:t.name,metadata:s},null,n),t=e.value,s&&Object.defineProperty(t,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:s}),Ot(t,n)})(),t})();const Gn="[parallax]";class Hn{constructor(e,t=[]){this.id=e.divId,this.blockedBidders=Gt(Hn.BLOCKED_ADAPTERS,t);const i=document.getElementById(this.id);if(!i)throw new Error(`${Gn} container not found for adUnit ${this.id}`);const n=e.sizes.filter((e=>"fluid"!==e)).reduce(((e,[,t])=>t>e?t:e),0);this.adUnitContainerMaxHeightPx=Math.max(n,600)/2,this.minViewableHeightPx=Math.min(this.adUnitContainerMaxHeightPx+10,310),this.adUnitContainer=i;const s=this.adUnitContainer.attachShadow({mode:"open"});s.innerHTML=`\n <div id="${Hn.PARALLAX_CLIP_ID}"><slot></slot></div>\n `,this.adUnitContainerShadowRoot=s,this.cacheLatestBidWon(),this.observeMutations(),w(`${Gn} prepared parallax for adUnit ${this.id}`)}getHighestChildRect(e){const t=e.children;if(0===t.length)return;const i=(e=>e.reduce(((e,t)=>{const i=getComputedStyle(e),n=getComputedStyle(t);return parseInt(n.height)>parseInt(i.height)?t:e}),e[0]))(Array.from(t));return i.getBoundingClientRect()}cacheLatestBidWon(){const e=window?.kleanadsPbjs;if(e)try{e.onEvent("auctionEnd",(e=>{e.adUnitCodes?.includes(this.id)&&(this.latestBidWonInfo=void 0)})),e.onEvent("bidWon",(t=>{if(t.adUnitCode===this.id){const{bidderCode:i,size:n}=t,s=this.blockedBidders.some((t=>i===t||e?.aliasRegistry?.[i]===t)),a=Hn.BLOCKED_SIZES.some((e=>e===n)),r="banner"===t?.mediaType;this.latestBidWonInfo={isParallaxable:r&&!a&&!s}}}))}catch(e){E(`${Gn} unable to listen to bidWon event`,e)}else E(`${Gn} pbjs not loaded, unable to listen to bidWon event`)}observeMutations(){this.resizeObserver=new ResizeObserver((e=>{const t=e.some((e=>Array.from(e.target.parentElement?.children??[]).some((e=>e.getBoundingClientRect().height>this.adUnitContainerMaxHeightPx))));(this.latestBidWonInfo?this.latestBidWonInfo.isParallaxable&&t:t)?this.renderParallax():this.cleanUp()})),this.mutationObserver=new MutationObserver((e=>{this.mutationDebounceTimeout&&clearTimeout(this.mutationDebounceTimeout),this.mutationDebounceTimeout=setTimeout((()=>{this.mutationDebounceTimeout=void 0,e.flatMap((e=>Array.from(e.addedNodes))).forEach((e=>{e instanceof HTMLElement&&this.resizeObserver?.observe(e)})),e.flatMap((e=>Array.from(e.removedNodes))).forEach((e=>{e instanceof HTMLElement&&this.resizeObserver?.unobserve(e)}))}),Hn.MUTATION_DEBOUNCE_TIMEOUT_VALUE_MS)})),this.mutationObserver.observe(this.adUnitContainer,{childList:!0})}renderParallax(){this.adUnitContainer.classList.add(Hn.PARALLAX_ADUNIT_CONTAINER_CLASS),this.adUnitContainerShadowRoot.getElementById(Hn.PARALLAX_CLIP_ID)?.classList.add(Hn.PARALLAX_CLIP_ENABLED_CLASS);const e=this.getHighestChildRect(this.adUnitContainer),t=10+(window.innerHeight-(e?.height??0))/2,i=new CSSStyleSheet;i.insertRule(`#${Hn.PARALLAX_CLIP_ID}.${Hn.PARALLAX_CLIP_ENABLED_CLASS} { height: ${this.minViewableHeightPx}px; width: ${e?.width??0}px; clip-path: rect(0 auto ${this.minViewableHeightPx}px 0); position: relative; margin: 0 auto; } `),i.insertRule(`#${Hn.PARALLAX_CLIP_ID}.${Hn.PARALLAX_CLIP_ENABLED_CLASS} ::slotted(*) {\n position: fixed;\n top: ${t}px;\n }`),this.adUnitContainerShadowRoot.adoptedStyleSheets=[i]}cleanUp(){this.adUnitContainer.classList.remove(Hn.PARALLAX_ADUNIT_CONTAINER_CLASS),this.adUnitContainerShadowRoot.getElementById(Hn.PARALLAX_CLIP_ID)?.classList.remove(Hn.PARALLAX_CLIP_ENABLED_CLASS)}}Hn.MUTATION_DEBOUNCE_TIMEOUT_VALUE_MS=40,Hn.PARALLAX_ADUNIT_CONTAINER_CLASS="adm-parallax",Hn.PARALLAX_CLIP_ID="adm-parallax-clip",Hn.PARALLAX_CLIP_ENABLED_CLASS="adm-parallax-clip-enabled",Hn.BLOCKED_ADAPTERS=["invibes","seedtag","kargo"],Hn.BLOCKED_SIZES=["1x1"];const Jn=(e,t)=>{try{return new Hn(e,t)}catch(t){E(`${Gn} unable to prepareParallax for adUnit ${e.divId}`,t)}};var Kn;class Yn extends HTMLElement{constructor(){super();const e=window.kleanadsPbjs;if(e)try{e.onEvent("bidWon",this.winningBid.bind(this))}catch(e){E("[pbstck-sticky] unable to listen to bidWon event",e)}else E("[pbstck-sticky] pbjs not loaded, unable to listen to bidWon event");this.attachShadow({mode:"open"}),this.mutationObserver=new MutationObserver((e=>{this.isAddingCreative(e)&&(Kn.shouldDisplay=!0),this.updateShadowLayout()})),this.addEventListener("close",(()=>{w('[pbstck-sticky] event "close" caught'),this.close()}))}winningBid(e){e.adUnitCode===this.id&&Kn.biddersNotToDisplay.includes(e.bidderCode)&&(w("[pbstck-sticky] blocked bidder, preventing display",e),Kn.shouldDisplay=!1,this.updateShadowLayout())}close(){w("[pbstck-sticky] closing sticky component"),this.shadowRoot&&(this.mutationObserver.disconnect(),this.shadowRoot.innerHTML="\n <style>\n :host {\n display: none;\n }\n </style>")}isAddingCreative(e){return e[0]?.addedNodes[0]&&e[0]?.target.parentElement?.id===this.id}connectedCallback(){this.isConnected&&(this.setAttribute("data-pbstck-component","no-ad"),this.setShadowDom("<div></div>"),this.updateShadowLayout(),this.mutationObserver.observe(this,{subtree:!0,childList:!0}))}disconnectedCallback(){this.mutationObserver.disconnect()}attributeChangedCallback(){this.updateShadowLayout()}getHighestChild(){const e=Array.from(this.children);if(0!==e.length)return qn(e)}setShadowDom(e){this.shadowRoot&&(Kn.shouldDisplay?this.shadowRoot.innerHTML=`\n <style> \n :host {\n display: block;\n max-height: ${Kn.maxHeight}px;\n overflow: hidden;\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n margin: 0;\n padding: 0;\n z-index: 99999999;\n }\n .sticky-button {\n height: 28px;\n width: 28px;\n background: ${Kn.backgroundColor};\n position: absolute;\n bottom: 0;\n right: 0;\n border-radius: 5px 0 0 0;\n box-shadow: rgba(0, 0, 0, 0.2) -2px -2px 3px -1px, rgba(0, 0, 0, 0.1) -1px -1px 2px -1px !important;\n }\n .sticky-button-container {\n height: 30px;\n position: relative;\n }\n .sticky-button-text {\n display: block;\n height: 22px;\n width: 22px;\n padding: 3px;\n }\n .sticky-container {\n background: ${Kn.backgroundColor};\n padding: 8px 0;\n box-shadow: rgba(0, 0, 0, 0.2) 0px -1px 5px -1px, rgba(0, 0, 0, 0.1) 0px 1px 2px -1px !important;\n }\n .sticky-container slot > * {\n position: relative;\n }\n ::slotted(*) {\n position: relative;\n }\n .cross {\n display: block;\n }\n .sticky-container slot {\n width: fit-content;\n width: -moz-fit-content;\n block-size: fit-content;\n margin: 0 auto !important;\n display: block;\n }\n }\n </style>\n ${e}`:this.shadowRoot.innerHTML="\n <style>\n :host {\n display: block;\n width: 100%;\n height: 1px;\n background: transparent;\n position: fixed;\n bottom: 0;\n }\n </style><div></div>")}updateShadowLayout(){if(w(`[pbstck-sticky] updating element ${this.id}`),!this.shadowRoot)return;this.setAttribute("data-pbstck-component","sticky");const e=document.createElement("div");e.className="sticky-container";const t=document.createElement("slot");e.append(t),this.setShadowDom(`${e.outerHTML}`);const i=this.getHighestChild();if(i&&Kn.shouldDisplay){i.style.display="block",i.style.margin="0 auto",i.style.bottom="0",i.style.maxHeight=`${Kn.maxCreativeHeight}px`;const e=document.createElement("div");e.className="sticky-button-container";const t=document.createElement("div");t.className="sticky-button";const n=document.createElement("div");n.className="sticky-button-text",n.addEventListener("click",(()=>{w("[pbstck-sticky] Close button pressed"),this.close()}));const s=document.createElementNS("http://www.w3.org/2000/svg","path");s.setAttribute("d","M 5.3,18.7 C 5.5,18.9 5.7,19 6,19 6.3,19 6.5,18.9 6.7,18.7 l 5.3,-5.3 5.3,5.3 c 0.2,0.2 0.5,0.3 0.7,0.3 0.2,0 0.5,-0.1 0.7,-0.3 0.4,-0.4 0.4,-1 0,-1.4 L 13.4,12 18.7,6.7 c 0.4,-0.4 0.4,-1 0,-1.4 -0.4,-0.4 -1,-0.4 -1.4,0 L 12,10.6 6.7,5.3 c -0.4,-0.4 -1,-0.4 -1.4,0 -0.4,0.4 -0.4,1 0,1.4 l 5.3,5.3 -5.3,5.3 c -0.4,0.4 -0.4,1 0,1.4 z");const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("viewBox","0 0 24 24"),a.setAttribute("class","cross"),a.setAttribute("height","22px"),a.setAttribute("width","22px"),a.setAttribute("fill","#333"),a.append(s),n.append(a),t.append(n),e.append(t),this.shadowRoot.prepend(e)}}}Kn=Yn,Yn.backgroundColor="rgb(250, 250, 250)",Yn.maxCreativeHeight=216,Yn.buttonHeight=32,Yn.maxHeight=Kn.maxCreativeHeight+Kn.buttonHeight,Yn.shouldDisplay=!1,Yn.biddersNotToDisplay=["ogury","missena","seedtag","kargo","gumgum","bliink","sublime"];const qn=e=>e.reduce(((e,t)=>t.offsetHeight>e.offsetHeight?t:e),e[0]);function Xn(e){if(e.anchor){const t=e.divId,i=document.getElementById(t);if(w(`[pbstck-sticky] preparing sticky for ${e.adUnitName}`,e),"pbstck-sticky"===i?.localName)return void w(`[pbstck-sticky] div ${t} already prepared`);const n=document.createElement("pbstck-sticky");n.id=t;const s=`adm-sticky-${t}`;if(i)i.id=s,i.appendChild(n);else{const e=document.createElement("div");e.id=s,e.appendChild(n),document.body.appendChild(e)}C(`[pbstck-sticky] prepared sticky for ${e.adUnitName}`,e)}}let Qn=(()=>{let e,t,i=[$t("onStackConfigLoad")],n=[];return t=class{constructor(){this.name="ContainersModule",this.loaded=!1,this.firstStickyDefined=!1}isLoaded(){return this.loaded}async load(){if("function"==typeof customElements?.define&&"function"==typeof MutationObserver)try{customElements.define("pbstck-sticky",Yn)}catch(e){_(`[ContainersModule] unable to define custom elements, error "${e}"`)}else E('[ContainersModule] unable to define custom elements, error: "browser not compatible"');this.loaded=!0}async onPrepareAdUnits({toPreparedAdUnits:e,stackConfig:t}){for(const i of e??[]){const e=t.prebidConfig?.pbjsConfig.bidderAliases;i.parallax&&Jn(i,e),i.anchor&&!this.firstStickyDefined&&(Xn(i),this.firstStickyDefined=!0)}}async clean(){}},Rt(t,"ContainersModule"),(()=>{const s="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;kt(null,e={value:t},i,{kind:"class",name:t.name,metadata:s},null,n),t=e.value,s&&Object.defineProperty(t,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:s}),Ot(t,n)})(),t})();const Zn="adm-ad-loading",es="adm-ad-empty",ts="adm-ad-rendered",is="adm-ad-skin",ns="data-adm-skin",ss=["sublime","justpremium","gumgum","dspx"];let as=(()=>{let e,t,i=[$t("onStackConfigLoad")],n=[];return t=class{constructor(){this.name="CssClass",this._isLoaded=!1}async load(){this._isLoaded=!0}async onAfterAdServerReady({adServer:e}){e.renderListener(this.applyClassBySlotRenderEndedEvent)}async onAfterPrebidReady({prebid:e}){w("[CssClassModule] onAfterPrebidReady event received"),e.getPbjs().onEvent("bidWon",this.applyClassByBidWon)}async applyClassBySlotRenderEndedEvent(e){const t=e.divId,i=document.getElementById(t);i&&(e.isEmpty?(i.classList.replace(Zn,es),w(`[CSS Class] slot empty: ${t}`)):(i.classList.replace(Zn,ts),i.classList.replace(es,ts),e.size?.length&&1800===e.size[0]&&1e3===e.size[1]?(i.classList.add(is),i.setAttribute(ns,"gam"),w(`[CSS Class] slot rendered is skin: ${t}`)):(i.classList.remove(is),i.removeAttribute(ns)),w(`[CSS Class] slot rendered: ${t}`)))}applyClassByBidWon(e){const t=document.getElementById(e.adUnitCode);"1800x1000"===e.size&&(t?.classList.add(is),t?.setAttribute(ns,"prebid"),ss.includes(e.bidderCode)||t?.classList.add("adm-ad-skin-resizable"),w(`[CSS Class] bidWon is skin: ${e.adUnitCode}`))}async onPrepareAdUnits({toPreparedAdUnits:e}){e&&e.forEach((e=>{const t=document.getElementById(e.divId);t&&t.classList.add(Zn)}))}isLoaded(){return this._isLoaded}clean(){return this._isLoaded=!1,Promise.resolve(void 0)}},Rt(t,"CssClassModule"),(()=>{const s="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;kt(null,e={value:t},i,{kind:"class",name:t.name,metadata:s},null,n),t=e.value,s&&Object.defineProperty(t,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:s}),Ot(t,n)})(),t})();let rs=(()=>{let e,t,i=[$t("onStackConfigLoad")],n=[];return t=class{constructor(){this.name="XplnModule",this.loaded=!1}async load(){this.loaded=!0}async onStackConfigLoad({config:e,stackConfig:t}){if(t.xplnConfig?.enabled&&t.xplnConfig?.publisherId){const i=t.xplnConfig.publisherId;((e,t)=>{const i=e.document.createElement("script"),n=e.document.createElement("script");i.innerHTML=`(function(x,p,l,n,a,i) {\n a=p.createElement(l);a.async=!0;a.src=n;a.xpln=x;\n i=p.currentScript||p.getElementsByTagName(l)[0];i.parentNode.insertBefore(a,i);\n })({xid:'${t}'},document,'script','https://cdn.xpln.tech/page.js');`,n.innerHTML=`(function(x,p,l,n,a,i) {\n self.xpln_targeting=function(){};\n a=x.createElement(p);a.async=!0;\n a.src=l+'${t}'+'/'+location.hostname+'.js';\n i=x.currentScript||x.getElementsByTagName(p)[0];i.parentNode.insertBefore(a,i);\n })(document,'script','https://cdn.xpln.tech/');`,i.type="text/javascript",n.type="text/javascript",i.setAttribute("data-kleanads","true"),n.setAttribute("data-kleanads","true"),e.document.head.appendChild(i),e.document.head.appendChild(n)})(e.pubstackWindow,i)}}async onAfterAdServerReady({config:e,stackConfig:t,adServer:i}){t?.xplnConfig&&(C("XplnModule declare xpln targeting when ready"),i.registerExternalTargetingDeclaration((()=>ds(e.pubstackWindow))))}async clean(){this.loaded=!1}isLoaded(){return this.loaded}},Rt(t,"XplnModule"),(()=>{const s="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;kt(null,e={value:t},i,{kind:"class",name:t.name,metadata:s},null,n),t=e.value,s&&Object.defineProperty(t,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:s}),Ot(t,n)})(),t})();const os=(e,t,i,n)=>t>15?(E("Could not declare XPLN targetings, xpln_targeting function is undefined"),void n()):e.xpln_targeting&&e.xpln_targeting.toString().length>100?(e.xpln_targeting(),C(`XPLN targeting called after ${t} retry`),void i()):void setTimeout((()=>os(e,t+1,i,n)),300),ds=e=>new Promise(((t,i)=>os(e,0,t,i))),cs="[IAS Module]";let ls=(()=>{let e,t,i=[$t("onAfterAdServerReady")],n=[];return t=class{constructor(){this.name="IasModule",this.loaded=!1}async load(){this.loaded=!0}async onAfterAdServerReady({config:e,stackConfig:t,adServer:i}){const n=t.iasConfig?.pubId;n&&i.registerExternalTargetingDeclaration((t=>this.declareIasTargetingsWhenReady(e.pubstackWindow,n,t)))}async clean(){this.loaded=!1}isLoaded(){return this.loaded}declareIasTargetingsWhenReady(e,t,i){return new Promise(((n,s)=>this.tryDeclareIasTargetings(e,0,t,i,n,s)))}async tryDeclareIasTargetings(e,t,i,n,s,a){if(t>15)return E(`${cs} Could not declare IAS targetings because they could not be retrieved`),void a();const r=this.prepareSlots(n),o=await this.getTargetings(i,r,e);if(C(`${cs} IAS targeting called`,o),o){const e=await o.json();return n.forEach((t=>{if(e.slots[t.getSlotElementId()]&&(void 0!==e.custom["ias-kw"]&&(t.setTargeting("ias-kw",e.custom["ias-kw"]),Object.keys(e.brandSafety).forEach((i=>{t.setTargeting(i,e.brandSafety[i])}))),void 0!==e.fr&&t.setTargeting("fr",e.fr),C(`${cs} IAS targeting called for slot ${t.getSlotElementId()}`,e),t.getSlotElementId()in e.slots&&e.slots[t.getSlotElementId()].vw)){const i=e.slots[t.getSlotElementId()].vw.toString().replaceAll(",","%2C");t.setTargeting("vw",i)}})),w(`${cs} IAS targeting called${t?" after "+t+" tries":""}`),void s()}setTimeout((()=>this.tryDeclareIasTargetings(e,t+1,i,n,s,a)),300)}async getTargetings(e,t,i){let n=`https://pixel.adsafeprotected.com/services/pub?anId=${e}`;t.forEach((e=>{n=n.concat(`&slot=${e}`)})),n=n.concat(`&wr=${this.viewports(i)}&sr=${this.browserSize(i)}&sessionId=${Mt()}&url=${encodeURIComponent(i.location.href)}`),w(`${cs} URL:`,n);try{return await fetch(n.toString())}catch(e){E(`${cs} Error while fetching IAS targetings`,e)}}prepareSlots(e){const t=[];return e.length>0&&e.forEach((e=>{t.push(this.slotsToString(e))})),t}slotsToString(e){return`%7Bid:${e.getSlotElementId()},ss:[${e.getSizes().filter((e=>"fluid"!==e)).map((e=>`${e.width}.${e.height}`)).join(",")}],p:${e.getAdUnitPath()},t:display%7D`}viewports(e){return`${e.innerWidth}.${e.innerHeight}`}browserSize(e){return`${e.screen.width}.${e.screen.height}`}},Rt(t,"IasModule"),(()=>{const s="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;kt(null,e={value:t},i,{kind:"class",name:t.name,metadata:s},null,n),t=e.value,s&&Object.defineProperty(t,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:s}),Ot(t,n)})(),t})(),us=(()=>{let e,i,n=[$t("onStackConfigLoad")],s=[];return i=class{constructor(){this.name="PublicAccessModule",this._isLoaded=!1}isLoaded(){return this._isLoaded}async load({config:e,stackConfig:i}){e.pubstackWindow._pbstckKleanAds.getBootstrapConfig=()=>{const{pubstackWindow:t,...i}=e;return i},e.pubstackWindow._pbstckKleanAds.getStackConfig=()=>i,e.pubstackWindow._pbstckKleanAds.apiReady=!0,window.addEventListener(t.REFRESH_INIT,(t=>{e.pubstackWindow._pbstckKleanAds.stopRefresh=e=>{t?.detail?.stopRefresh?.(e)},e.pubstackWindow._pbstckKleanAds.refreshApiReady=!0})),this._isLoaded=!0}async clean({config:e}){e.pubstackWindow._pbstckKleanAds.apiReady=!1,e.pubstackWindow._pbstckKleanAds.getBootstrapConfig=()=>{throw new Error("Not ready yet, wait for apiLoaded.")},e.pubstackWindow._pbstckKleanAds.getStackConfig=()=>{throw new Error("Not ready yet, wait for apiLoaded.")}}},Rt(i,"PublicAccessModule"),(()=>{const t="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;kt(null,e={value:i},n,{kind:"class",name:i.name,metadata:t},null,s),i=e.value,t&&Object.defineProperty(i,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:t}),Ot(i,s)})(),i})();let fs=(()=>{let e,t,i=[$t("onStackConfigLoad")],n=[];var s=t=class{constructor(){this.name="SkinRendering",this._isLoaded=!1,this.eligibleForSkinRendering=!1}isLoaded(){return this._isLoaded}async load({config:e,stackConfig:t}){if(this.eligibleForSkinRendering=function(e,t){return!!e.pocOverrides?.skinRenderingSettings?.siteLevel?.[e.tagId]?.enabledSkinRenderAdaptation&&!e.pocOverrides?.skinRenderingSettings?.stackLevel?.[e.stack.stackId]?.disableSkinRenderAdaptation&&t.adUnits?.some((e=>e.sizes.some((e=>z(e,[1800,1e3])))))}(e,t),this.eligibleForSkinRendering){const{maxHeaderHeightPx:t,marginTopPx:i,siteContentWidthPx:n,additionalSkinRenderingCss:s}=e.pocOverrides?.skinRenderingSettings?.stackLevel?.[e.stack.stackId]?.style??e.pocOverrides?.skinRenderingSettings?.siteLevel?.[e.tagId]?.style??{};this.configuredMaxHeaderHeightPx=t,this.configuredMarginTopPx=i,this.configuredSiteContentWidthPx=n,this.configuredAdditionalSkinRenderingCss=s,this._isLoaded=!0,w("[Skin] Configuration eligible for skin rendering.")}}async onAfterPrebidReady({prebid:e,config:{pubstackWindow:t}}){this.pbjs=e,this.eligibleForSkinRendering&&(this.onBidWonHandler=this.onBidWon.bind(this),this.pbjs.getPbjs().onEvent("bidWon",this.onBidWonHandler),At((()=>{this.onSlotRenderEndedHandler=this.onSlotRenderEnded.bind(this),t.googletag.pubads().addEventListener("slotRenderEnded",this.onSlotRenderEndedHandler)})))}async clean(){this.onBidWonHandler&&(this.pbjs?.getPbjs().offEvent("bidWon",this.onBidWonHandler),this.onBidWonHandler=void 0),this.onSlotRenderEndedHandler&&(window.googletag.pubads().removeEventListener("slotRenderEnded",this.onSlotRenderEndedHandler),this.onSlotRenderEndedHandler=void 0),this._isLoaded=!1}onBidWon(e){this.shouldApplyPrebidSkinRendering(e)?this.applySkinCSS(e.adUnitCode,"prebid"):this.removeSkinRendering(e.adUnitCode)}onSlotRenderEnded(e){this.isFromGAM(e)?this.applySkinCSS(e.slot.getSlotElementId(),"gam"):e.size&&!z(e.size,[3,1])&&this.removeSkinRendering(e.slot.getSlotElementId())}removeSkinRendering(e){const t=document.getElementById(e);t&&t.classList.remove(s.SKIN_RENDERING_CSS_CLASS)}shouldApplyPrebidSkinRendering(e){const t=["sublime","justpremium","gumgum"],i=this.pbjs?.getPbjs();if(i){const n=t.some((t=>e.bidderCode===t||i.aliasRegistry[e.bidderCode]===t));return"1800x1000"===e.size&&!n}return _("shouldApplyPrebidSkinRendering: unable to get aliasRegistry: prebid is not defined"),!1}isFromGAM(e){return!!e.size?.length&&1800===e.size[0]&&1e3===e.size[1]}applySkinCSS(e,t){const i=document.getElementById(e);if(i){if("gam"===t)return;w(`[Skin] applying rendering for ${e} from ${t}`);const n=this.configuredMaxHeaderHeightPx??250,a=this.configuredMarginTopPx??0,r=this.configuredSiteContentWidthPx??1e3,o=this.configuredAdditionalSkinRenderingCss??"",d=1e3,c=(1800-r)/2,l=c+r,u=document.createElement("style");u.setAttribute("data-kleanads","true"),u.textContent=`\n #${e}.${s.SKIN_RENDERING_CSS_CLASS} {\n /* leave security margin to help display top of creative */\n height: ${n}px;\n /* set it properly in page flow */\n display: block;\n margin-top: ${a}px;\n }\n \n #${e}.${s.SKIN_RENDERING_CSS_CLASS} > div {\n /* horizontally center creative */\n transform: translateX(-50%);\n position: absolute;\n left: 50%;\n \n /* clipping out the unused part of the creative to leave content visible */\n clip-path: polygon(0 0, 0% 100%, ${c}px ${d}px, ${c}px ${n}px, ${l}px ${n}px, ${l}px 100%, 100% 100%, 100% 0%);\n }\n \n ${o}\n `,document.head.appendChild(u),i.classList.add(s.SKIN_RENDERING_CSS_CLASS)}else E(`skin rendering impossible - adUnitDiv not found for ${e}`)}};return Rt(t,"SkinRenderingModule"),(()=>{const a="function"==typeof Symbol&&Symbol.metadata?Object.create(null):void 0;kt(null,e={value:t},i,{kind:"class",name:t.name,metadata:a},null,n),s=t=e.value,a&&Object.defineProperty(t,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:a})})(),t.SKIN_RENDERING_CSS_CLASS="pbstck_skin_rendering",Ot(t,n),s=t})();const gs=[class{constructor(){this.name="Metas",this._isLoaded=!1,this.customFields=[],this.targetings=[]}async load({config:e}){o("kleanads-version",e.kleanadsVersion),this.customFields.push("kleanads-version"),de.getInstance().uprTested&&(o("xp_variant",`floor_optimization:${de.getInstance().uprEnabled}`),this.customFields.push("xp_variant")),this._isLoaded=!0}async onStackConfigLoad({stackConfig:e}){o("config-version",`${e.version}`),o("kleanads-stack-id",e.stackId),this.customFields.push("config-version","kleanads-stack-id"),function(e,t){const i=document.createElement("meta");i.setAttribute("name",`ad:${e}`),i.content=t,document.head.appendChild(i)}("adm_stack",`${e.stackId}_v${e.version}`),this.targetings.push("adm_stack"),e.runningABTest.forEach((e=>{o(e.name,Array.isArray(e.value)?e.value.join(","):e.value),this.customFields.push(e.name)}))}isLoaded(){return this._isLoaded}async clean(){this.customFields.forEach((e=>{try{!function(e){const t=document.querySelector(`meta[name="pbstck:${e}"]`);t&&t.remove()}(e)}catch(t){E(`Unable to remove CustomField meta tag ${e}`,t)}})),this.customFields=[],this.targetings.forEach((e=>{try{!function(e){const t=document.querySelector(`meta[name="ad:${e}"]`);t&&t.remove()}(e)}catch(t){E(`Unable to remove targeting meta tag ${e}`,t)}})),this.targetings=[],this._isLoaded=!1}},ii,Lt,Qn,Tt,Wn,Tn,fs,as,rs,us,ls];class hs{static getModules(){return gs}}async function ps(e){if(window._kleanadslock)return void w("kleanads.js already started");window._kleanadslock=!0,_e(Ae.BEGIN_INIT);const t=async()=>{const t=await Dn(e,hs.getModules().map((e=>new e)));t&&await jn(t)};if(e.pocOverrides?.waitForEventToInit){const i=setTimeout((()=>{_("Wait for init event is too long")}),6e4),n=()=>{window.removeEventListener(e.pocOverrides?.waitForEventToInit||"",n),clearTimeout(i),t()};w(`[INIT] wait for event ${e.pocOverrides?.waitForEventToInit} to start kleanads`),window.addEventListener(e.pocOverrides?.waitForEventToInit,n)}else await t()}return window._pbstckKleanAds={initKleanAds:ps,apiReady:!1,getBootstrapConfig:()=>{throw new Error("Not ready yet, wait for apiReady.")},getStackConfig:()=>{throw new Error("Not ready yet, wait for apiReady.")},refreshApiReady:!1,stopRefresh:()=>{throw new Error("Not ready yet, wait for refreshApiReady.")}},e.initKleanAds=ps,e}({});
; window._pbstckKleanAds.initKleanAds({"tagId":"4f1bddd4-4eb4-4afe-835e-e6ea9e7c7104","adCallTimeout":3000,"configUrl":"https://cdn-adm.pbstck.com","screenSizeBreakpoints":[{"size":0,"device":"mobile"},{"size":900,"device":"desktop"}],"metricThrottling":false,"networkId":6928793,"context":[{"key":"website","defaultValue":"pcgamesn-606d99b65a477","otherValues":["alcasthq-6012d84d6d062","discordbotlist-60f14b9e6d5c5","ffxivteamcraft-661fcccde8e76","ffxivteamcraft-desktopsite-66faaf3ea0f2d","futwiz-61d5a5c01c437","limitlesstcg-614daab26ee77","modsfire-65ae97280491d","namemc-6093bb9a4a141","nexusmods-651189ba36d9f","nintendoeverything-6228c25edf4de","pockettactics-60350d9f96d41","psnprofiles-61153fada71b1","serebii-6086a3da3eea5","steamidfinder-5fd8cfb7b8887","top.gg-6426bd8ce65ee","trueachievements-60dc74f1647e3","truesteamachievements-607edbb311af4","truetrophies-60a5219020b60","videogameschronicle-66e80c2edeb59","wargamer-6046302081e4c","wiki.gg-66b33c09a0cc8","pokellector-6114ed373f98b"]},{"key":"country","defaultValue":"us","otherValues":["ad","ae","af","ag","ai","al","am","ao","aq","ar","as","at","au","aw","ax","az","ba","bb","bd","be","bf","bg","bh","bi","bj","bm","bn","bo","br","bs","bt","bv","bw","by","bz","ca","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cu","cv","cx","cy","cz","de","dj","dk","dm","do","dz","ec","ee","eg","er","es","et","fi","fj","fk","fo","fr","ga","gb","gd","ge","gf","gg","gh","gi","gl","gm","gn","gp","gq","gr","gt","gu","gw","gy","hk","hm","hn","hr","ht","hu","id","ie","il","in","io","iq","ir","it","jo","jp","ke","kh","km","kr","kw","ky","la","lk","lt","lv","md","mv","my","nl","no","nz","pf","ph","pl","pt","ro","rs","sa","se","sg","si","sv","td","tf","th","tn","tr","tt","tw","va","vn","za","pk","is","jm","me","mm","mu","mx","np","pa","pr","py"]},{"key":"test","defaultValue":"","otherValues":["true"]},{"key":"device","defaultValue":"","otherValues":["desktop","desktop-noskins","desktop-small","mobile","desktop-large","desktop-skins"]},{"key":"up_recovery","defaultValue":"false","otherValues":["true"]}],"pubstackDeclarationTargetingKeys":["adm"],"priceRuleBuckets":[{"max":"5","increment":"0.05"}],"globalRefreshConfig":{"prebidOrderIds":[]},"pocOverrides":{"overrideABTest":{"sites":{"f360249f-6849-4deb-8596-3b84b1cd8f30":{"ratio":50,"populationB":{"dynamicPrebidFloors":{"scope":true},"floorEnforcement":{"scope":{"enforceJS":false}}}},"fddcf06f-fadc-4b68-a961-affb54507198":{"ratio":50,"populationB":{"dynamicPrebidFloors":{"scope":true},"floorEnforcement":{"scope":{"enforceJS":false}}}},"4326fc04-adce-46a1-9170-5e56e34afa5d":{"ratio":50,"populationB":{"dynamicPrebidFloors":{"scope":true},"floorEnforcement":{"scope":{"enforceJS":false}}}}},"scope":{"ratio":50,"populationB":{"consentlessMode":"local"}}},"pbjsAnalytics":{"scope":[{"provider":"atsAnalytics","options":{"pid":"1310"}}]},"consentlessMode":"GAM","fledgeForGpt":true,"rtbhousePaapi":true,"refreshOutOfFocus":{"scope":{"timerInView":2},"sites":{"2d3ab3e2-65e5-4cdf-aafc-286ac3d3de4b":{"timerInView":0,"refreshOutOfView":true},"f120c2bf-90d6-473e-9c0a-12821396b380":{"timerInView":0,"refreshOutOfView":true}}},"refreshBehaviorOnEmpty":"stop","refreshAlwaysInViewAdUnitNames":["PCGamesN - LB2","PCGamesN - Mobile LB1","LB Sticky","LB - Sticky Large","Mobile LB Sticky"],"roadblockOrder":{"scope":{"LB1":"master-1","LB Large":"master-1","LB Sticky":"master-2","LB - Sticky Large":"master-2"},"sites":{"3205376f-9b47-4743-aa18-99c6f87c8b9b":{"PCGamesN - LB1":"master-1","PCGamesN - LB2":"master-2"}}}},"stacks":[{"scopeId":"f2521fbf-96a6-4b81-8284-15bcd5ddf73b","siteId":"4f1bddd4-4eb4-4afe-835e-e6ea9e7c7104","stackId":"f239f633-0805-4d61-b925-31679cdc070a","versions":[{"version":35,"ratio":100}],"conditions":null,"priority":null},{"scopeId":"f2521fbf-96a6-4b81-8284-15bcd5ddf73b","siteId":"4f1bddd4-4eb4-4afe-835e-e6ea9e7c7104","stackId":"895f9578-4c7f-4093-86be-f9920470f73e","versions":[{"version":2,"ratio":100}],"conditions":{"op":"AND","elements":[{"op":"IN","key":"country","values":["us","ca","au","gb","de","be","fi","se","no","fr","es","it","nl","dk","ch","at","ie","pt"]}]},"priority":1}],"extraScripts":[{"scripts":["https://cdn-adm.pbstck.com/extra-scripts/basic-scripts-pool/collapse_empty_slots.js"],"tagId":"4f1bddd4-4eb4-4afe-835e-e6ea9e7c7104","synchronous":false,"beforeStart":true},{"scripts":["https://cdn-adm.pbstck.com/extra-scripts/basic-scripts-pool/inject_adm_meta.js","https://cdn-adm.pbstck.com/extra-scripts/basic-scripts-pool/inject_no_cmp_meta.js"],"tagId":"4f1bddd4-4eb4-4afe-835e-e6ea9e7c7104","synchronous":true,"beforeStart":true}],"newPrebidUrl":"https://cdn-adm.pbstck.com/kleanads-prebid/8.50.0-47023693644315314f46ae9d335424f9f644944a.js","kleanadsVersion":"2411291041"}); })();</script><script src="https://cdn-adm.pbstck.com/extra-scripts/basic-scripts-pool/collapse_empty_slots.js" async="true" data-kleanads="true"></script><style>@import url(https://fonts.googleapis.com/css2?family=Open+Sans:wght@500;600&display=swap);</style><style>#idw-plugin-container {
display: flex;
flex-direction: column;
box-sizing: content-box;
position: fixed;
left: -160px;
bottom: -160px;
z-index: 999999;
background-color: #fff;
height: auto;
max-width: 160px;
width: 160px;
min-width: 160px;
color: #171717;
line-height: 1rem;
outline: 1px solid #171717;
justify-content: flex-start;
-webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
opacity: 0;
transition: left .4s, bottom .4s, opacity .1s;
}
#idw-plugin-container.idw-open {
left: 0;
bottom: 0;
opacity: 1;
}
#idw-plugin-buttons {
display: flex;
flex-direction: column;
height: 100%;
width: auto;
}
#idw-plugin-container .pluginBtn {
border: none;
padding: 1px 5px !important;
margin: 0 !important;
width: auto !important;
height: 25px !important;
box-sizing: border-box !important;
border-radius: 0 !important;
text-align: right !important;
font-family: 'Open Sans', sans-serif !important;
line-height: normal !important;
text-transform: none !important;
letter-spacing: normal !important;
font-weight: 600 !important;
font-size: 14px !important;
background-color: #ffffff !important;
transition: background-color 0.2s;
cursor: pointer !important;
}
#idw-plugin-container .pluginBtn:hover {
outline: 1px solid #ffffff !important;
background-color: #171717 !important;
color: #ffffff !important;
}
#idw-open-trigger {
position: fixed;
width: 50px;
height: 50px;
bottom: 0;
left: 0;
z-index: 999999;
cursor: pointer;
-webkit-clip-path: polygon(100% 100%, 0 100%, 0 0);
clip-path: polygon(100% 100%, 0 100%, 0 0);
background-color: #171717 !important;
}
#idw-open-trigger img {
width: 28px;
height: 28px;
position: absolute;
/* padding: 4px; */
bottom: -2px;
left: -2px;
}</style><style>/***************/
/*MEDIA QUERIES*/
/***************/
/*
##Device: Tablets, Ipads (portrait)
##Screen: B/w 768px to 1024px
*/
@media (min-width: 768px) and (max-width: 1024px) {
}
/*
##Device: Most of the Smartphones Mobiles (Portrait)
##Screen: B/w 320px to 479px
*/
@media (min-width: 400px) and (max-width: 480px) {
}</style><meta name="ad:adm" content="1"><style>
.adm-ad-empty {
display: none;
}
</style><style type="text/css">#sp_message_iframe_1202267 { display:block; width: 100%; height: 100%; border: 0 none; } #sp_message_container_1202267 { overflow:auto;-webkit-overflow-scrolling:touch; display: none; position: fixed; z-index: 2147483647; left: 0; right: 0; bottom: 0; top: 0; height: 100%; width: 100%; max-width: 100%; max-height: 100vh;}.sp-message-open { height: 100vh !important; width: 100vw !important } .sp-message-open body { overflow: hidden !important; position: fixed !important; margin-top: 56px !important; top: 0px !important; left: 0px !important; right: 0px !important; }</style><meta name="pbstck:kleanads-version" content="2411291041"><style>
#idw-plugin-container .pluginBtn {
color: undefined !important;
}
#idw-plugin-container .pluginBtn:hover {
background-color: undefined !important;
}
#idw-open-trigger {
background-color: undefined;
}
</style></head>
<div id="eSTdHLCPsMFO" style="display: none;"></div>
<!-- Matomo -->
<!-- End Matomo Code -->
<!-- Matomo Tag Manager -->
<!-- End Matomo Tag Manager -->
<!-- Quantcast Tag -->
<body class="site-nexusmods-b scheme-theme-ReskinOrange game-theme-2927 logged-out apage modpage new-head"><noscript>
<div style="display:none;">
<img src="//pixel.quantserve.com/pixel/p-bcgV-fdjlWlQo.gif" border="0" height="1" width="1" alt="Quantcast"/>
</div>
</noscript>
<!-- End Quantcast tag -->
<!-- Google Tag Manager (EG noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-W8QDTPT"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (EG noscript) -->
<!-- Google Tag Manager (Nexus noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KCVF2WQ"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (Nexus noscript) -->
<script>
$(document).ready(function() {
if(window.innerWidth < 1920) {
$('.sidebar-sticky').remove()
}
});
</script>
<header id="head" class="new-head">
<div class="rj-header-wrap rj-active-game">
<a class="skip-to-content" href="#mainContent">Skip to content</a>
<a class="headlogo" href="/" alt="Nexus Mods" title="Nexus Mods home">
<div>
<svg xmlns="http://www.w3.org/2000/svg" style="width:135px; height:30px;" version="1.1" x="0px" y="0px" viewBox="0 0 698.3 162.5">
<g>
<g>
<g>
<path d="M44.4,162.5c-0.6,0-1.3,0-1.9-0.1c-1.5-0.2-2.9-0.5-4.5-1c-2.8-0.9-5.2-2.2-6.9-3.2c-3.8-2.2-7.7-4.9-11.8-8.3 c-1.8-1.5-3.6-3.1-5.3-4.7l-1.4-1.4c-1-0.9-1.9-1.9-2.6-3c-1.3-2-2.4-4.6-2.5-8c-0.1-1.1-0.2-2.2-0.2-3.4c0-2.4,0.1-5,0.5-7.5 c0.7-5.2,2.4-9.8,3.7-13.3c0.1-0.3,0.2-0.6,0.3-0.9c-0.4-0.9-0.7-1.9-1.1-2.9C8.9,99.6,7.7,93.8,7.1,88 c-0.6-6.1-0.4-12.3,0.5-18.4c0.2-1.3,0.4-2.6,0.7-3.8C5.9,62.3,2.9,57.3,1,51.5l0-0.1c-0.4-1.2-1.4-4.2-0.8-8 c0.2-1.4,0.5-2.8,1-4.3c0.9-2.8,2.2-5.1,3.2-6.8c2.2-3.8,4.9-7.6,8.2-11.7c1.5-1.8,3-3.6,4.6-5.2l1.4-1.4 c0.7-0.8,1.5-1.5,2.4-2.1c2-1.5,4.8-2.8,8.6-2.9c1.2-0.1,2.5-0.2,3.8-0.2h0.1c2.5,0,5.2,0.2,7.8,0.6c4,0.6,7.6,1.7,10.8,2.9 c2.1-0.9,4.3-1.7,6.6-2.5C64.1,8,69.9,6.8,75.7,6.4C81.8,5.9,88,6.2,93.9,7.2c1.4,0.2,2.8,0.5,4.2,0.8c4.7-3.2,9-5.5,13.5-6.9 l0.1,0c1-0.4,3.2-1.1,6.1-1.1c0.6,0,1.3,0,1.9,0.1c1.5,0.2,2.9,0.5,4.5,1c2.8,0.9,5.2,2.2,6.9,3.2c3.8,2.2,7.7,4.9,11.8,8.3 c1.8,1.5,3.6,3.1,5.3,4.7l1.4,1.4c0.7,0.6,1.4,1.3,1.9,2.1c1.8,2.3,3.2,5.6,3.3,10.2c0.1,1.6,0.1,3.3,0,5 c-0.2,3.7-0.7,7.2-1.6,10.4c-0.7,2.4-1.5,4.8-2.4,7.2c1.8,4.5,3.1,9.1,4,13.8c1.8,9.9,1.6,20.1-0.6,29.9c1.3,1.9,2.5,3.7,3.5,5.5 c1.7,3,3.1,6.1,4.1,9.3c0.4,1.2,1.3,4.2,0.7,8.2c-0.2,1.4-0.6,2.7-1.1,4.2c-1.8,5.1-4.6,9.3-7.1,12.8c-2.7,3.8-5.8,7.5-9,10.9 l-1.2,1.2c-0.7,0.8-1.5,1.5-2.4,2.2c-2,1.5-4.8,2.7-8.6,2.9c-1.2,0.1-2.5,0.2-3.8,0.2h-0.1c-2.7,0-5.4-0.2-8.2-0.7 c-4.5-0.7-8.5-2.1-12.1-3.5c-1.9,0.8-3.9,1.5-5.8,2.1c-5.6,1.7-11.5,2.8-17.4,3.1c-6.1,0.4-12.3-0.1-18.3-1.2 c-0.7-0.1-1.5-0.3-2.2-0.4c-5.2,3.7-9.8,6.1-14.6,7.7l-0.1,0C49.5,161.7,47.3,162.5,44.4,162.5L44.4,162.5z M24.6,134.1l10.6,3.7 c0.9-2.6,1-5.4,0.4-8c0,0.2,0,0.5,0.1,0.7c0,0.3,0.1,0.7,0.1,1.1c-0.1-2-0.8-4.6-2.6-7c-0.7-0.9-1.5-1.7-2.4-2.4l0.5,0.4l0.9,0.9 c-0.8-0.8-1.7-1.6-2.7-2.3L24.6,134.1L24.6,134.1z M123.7,129.4c-0.8,0.8-1.6,1.6-2.3,2.7l11.9,4.6l0-11.1c0,0,0,0,0,0 c-1.1,0-2.2,0.1-3.2,0.4c0.2,0,0.4,0,0.6,0c0.3,0,0.7-0.1,1.1-0.1c-1.8,0.1-4.2,0.7-6.4,2.1c-1.2,0.8-2.2,1.7-3.1,2.9l0.4-0.5 L123.7,129.4L123.7,129.4z M35.8,126.8c0.5,0.4,1,0.8,1.5,1.3c2.6,2.2,5,3.9,7.2,5.2c1.4-0.7,3-1.7,4.7-3 c0.5-0.3,0.9-0.7,1.4-1.1c0.3-0.2,0.5-0.5,0.8-0.7c0.1-0.1,0.3-0.3,0.4-0.4l6.2-6.3l8.4,2.9c0.3,0.1,0.6,0.2,0.8,0.3 c1.8,0.6,3.6,1,5.4,1.4c3.7,0.7,7.6,1,11.4,0.7c3.6-0.2,7.3-0.9,10.7-1.9c1.7-0.5,3.4-1.1,5-1.9c0.8-0.3,1.6-0.7,2.3-1.1 c2-1,4.3-1.6,6.6-1.6c3.6,0,6.3,1.3,7.6,2c0.4,0.2,0.8,0.4,1.3,0.5c2.5,1,5.4,2.2,8,2.6c0.4,0.1,0.9,0.1,1.3,0.2 c1.5-1.7,2.9-3.5,4.2-5.3c0.8-1.1,1.6-2.2,2.3-3.3c-0.1-0.2-0.2-0.4-0.4-0.7c-0.7-1.2-1.5-2.4-2.5-3.9c-0.3-0.5-0.7-0.9-1.1-1.4 c-0.2-0.2-0.3-0.4-0.5-0.6c-4.1-4-5.5-9.7-3.6-15.1c0.1-0.3,0.2-0.6,0.3-0.8c2.3-7.2,2.7-14.9,1.4-22.3c-0.7-3.5-1.7-7-3.2-10.3 c-0.1-0.3-0.3-0.6-0.4-0.9c-3.3-6.1-1.9-11.3-0.7-13.8c0.5-1,0.9-2.1,1.3-3.1c0.8-1.9,1.4-3.9,2-5.7c0.2-0.9,0.4-1.8,0.5-2.9 c-0.5-0.4-1-0.8-1.5-1.3c-2.7-2.2-5-3.9-7.2-5.2c-1.4,0.8-3,1.8-4.8,3c-0.5,0.4-1,0.8-1.5,1.2c-0.1,0.1-0.3,0.2-0.4,0.4 c-2.7,2.6-6.3,4-10,4c-1.8,0-3.5-0.3-5.2-1c-0.4-0.1-0.8-0.3-1.2-0.4c-1.8-0.5-3.6-1-5.5-1.3c-3.7-0.6-7.6-0.8-11.4-0.5 c-3.6,0.3-7.2,1-10.6,2.1c-1.7,0.5-3.3,1.2-4.9,1.9c-0.8,0.3-1.5,0.7-2.3,1.1L59.5,40c-2.1,1.2-4.6,1.8-7,1.8 c-2.2,0-4.4-0.5-6.5-1.5c-0.5-0.2-0.9-0.4-1.4-0.6c-2.4-1-5.3-2.1-7.8-2.4c-0.4-0.1-0.8-0.1-1.1-0.2c-0.4,0.5-0.8,1-1.2,1.4 c-2.2,2.7-3.9,5-5.2,7.3c0.7,1.4,1.7,2.9,2.9,4.7c0.3,0.5,0.7,1,1.1,1.4c0.2,0.3,0.5,0.5,0.7,0.8l5.8,6.1l-2.5,8 c-0.2,0.5-0.3,1-0.5,1.5c-0.5,1.8-0.9,3.7-1.2,5.6c-0.6,3.8-0.7,7.6-0.3,11.5c0.3,3.6,1.1,7.2,2.3,10.6c0.6,1.7,1.3,3.3,2,4.9 c0.1,0.2,0.2,0.4,0.3,0.6c2.1,4.3,2.1,9.1-0.1,13.4c-0.2,0.4-0.4,0.8-0.5,1.2c-0.4,1-0.9,2-1.3,3c-0.8,2.2-1.8,4.8-2.1,7.1 C35.9,126.3,35.8,126.6,35.8,126.8L35.8,126.8z M129.9,38.8c0.8,0.8,1.7,1.6,2.8,2.4l4.9-12.9L127,24.6c-0.9,2.6-1,5.4-0.4,8 c0-0.1,0-0.2,0-0.3c0-0.3,0-0.8,0-1.3v-0.1c0,1.5,0.5,4,2.1,6.4c0.8,1.1,1.7,2.1,2.8,3l-0.5-0.4L129.9,38.8L129.9,38.8z M29.3,26.3l0,11.1c1.1,0,2.2-0.1,3.2-0.4c-0.2,0-0.4,0-0.6,0c-0.3,0-0.7,0.1-1.1,0.1c1.8-0.1,4.2-0.7,6.4-2.1 c1.2-0.8,2.2-1.7,3.1-2.9l-0.4,0.5l-0.9,1c0.8-0.8,1.6-1.7,2.3-2.7L29.3,26.3L29.3,26.3z"></path>
</g>
</g>
<g>
<g>
<g>
<path class="theme-secondary" d="M56.3,88.4l0.7,28.3l-7-5.7c-7.8,12.7-10.3,25-6.6,34.1l1.3,3.2l-3.2-1.4c-7.3-3.2-13.9-7.7-19.4-13.5 l-0.3-0.3l-0.1-0.5c-0.4-3.5-0.2-7.3,0.7-11.2l0-0.1c1.3-4.9,3.2-9.8,5.6-14.7c1.5-3.1,3.3-6.2,5.3-9.2l-6.1-5L56.3,88.4z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M105.9,74.1l-0.7-28.3l7,5.7c7.8-12.7,10.3-25,6.6-34.1l-1.3-3.2l3.2,1.4c7.3,3.2,13.9,7.7,19.4,13.5 l0.3,0.3l0.1,0.5c0.4,3.5,0.2,7.3-0.7,11.2l0,0.1c-1.3,4.9-3.2,9.8-5.6,14.7c-1.5,3.1-3.3,6.2-5.3,9.2l6.1,5L105.9,74.1z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M88.5,105.4l28.3-0.7l-5.7,7c12.7,7.8,25,10.3,34.1,6.6l3.2-1.3l-1.4,3.2c-3.2,7.3-7.7,13.9-13.5,19.4 l-0.3,0.3l-0.5,0.1c-3.5,0.4-7.3,0.2-11.2-0.7l-0.1,0c-4.9-1.3-9.8-3.2-14.7-5.6c-3.1-1.5-6.2-3.3-9.2-5.3l-5,6.1L88.5,105.4z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M74.1,57.6l-28.3,0.7l5.7-7c-12.7-7.8-25-10.3-34.1-6.6L14.3,46l1.4-3.2c3.2-7.3,7.7-13.9,13.5-19.4 l0.3-0.3L30,23c3.5-0.4,7.3-0.2,11.2,0.7l0.1,0c4.9,1.3,9.8,3.2,14.7,5.6c3.1,1.5,6.2,3.3,9.2,5.3l5-6.1L74.1,57.6z"></path>
</g>
</g>
<g>
<g>
<circle class="theme-primary" cx="81.4" cy="80.8" r="60.5"></circle>
</g>
</g>
<g>
<path style="fill:#ffffff" d="M59.3,59.5c-3.5-1.6-6.1-3.2-8.7-5.1c-4-2.8-7.7-5.9-10.8-9.2c-7.6-7.7-11.6-15.6-10.5-22.1L27,25.6 c-5.5,5.8-12.8,16-12.9,20.4c0.1,0.5,0.1,0.5,0.1,0.5c1,3.4,2.6,6.8,4.9,10.1l0,0.1c3,4.8,8.9,12.7,29.9,21.9l-3.7,7l28.3-7.6 L63.5,51.5L59.3,59.5z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M103.3,103.5c3.5,1.6,6.1,3.2,8.7,5.1c4,2.8,7.7,5.9,10.8,9.2c7.6,7.7,11.6,15.6,10.5,22.1l2.3-2.4 c5.5-5.8,12.8-16,12.9-20.4c-0.1-0.5-0.1-0.5-0.1-0.5c-1-3.4-2.6-6.8-4.9-10.1l0-0.1c-3-4.8-8.9-12.7-29.9-21.9l3.7-7l-28.3,7.6 l10.2,26.2L103.3,103.5z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M104,59.3c1.6-3.5,3.2-6.1,5.1-8.7c2.8-4,5.9-7.7,9.2-10.8c7.7-7.6,15.6-11.6,22.1-10.5L138,27 c-5.8-5.5-16-12.8-20.4-12.9c-0.5,0.1-0.5,0.1-0.5,0.1c-3.4,1-6.8,2.6-10.1,4.9l-0.1,0c-4.8,3-12.7,8.9-21.9,29.9l-7-3.7 l7.6,28.3L112,63.6L104,59.3z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M58.2,103.2c-1.6,3.5-3.2,6.1-5.1,8.7c-2.8,4-5.9,7.7-9.2,10.8c-7.7,7.6-15.6,11.6-22.1,10.5l2.4,2.3 c5.8,5.5,16,12.8,20.4,12.9c0.5-0.1,0.5-0.1,0.5-0.1c3.4-1,6.8-2.6,10.1-4.9l0.1,0c4.8-3,12.7-8.9,21.9-29.9l7,3.7l-7.6-28.3 L50.3,98.9L58.2,103.2z"></path>
</g>
</g>
</g>
<g class="logo-brand-name">
<path style="fill:#ffffff" d="M198.6,131.3h-6V31.9h8.5l29.8,83.9V31.9h6v99.4h-7.2l-31.1-88.6V131.3z"></path>
<path style="fill:#ffffff" d="M281.1,77.9v6h-27.1v41.5h32.7v6h-39.2V31.9h39.2v6h-32.7v40H281.1z"></path>
<path style="fill:#ffffff" d="M321.8,85l-20.2,46.3h-6.4l22.4-51.5l-20.9-47.8h6.8l18.7,42.7l18.9-42.7h6.2l-20.9,47.8l22.3,51.5h-7 L321.8,85z"></path>
<path style="fill:#ffffff" d="M364.5,107.3c0,10.6,4,18.9,14.9,18.9s14.9-8.2,14.9-18.9V31.9h6.1V107c0,14.2-6,25.1-21.2,25.1 c-15.2,0-21.3-10.9-21.3-25.1V31.9h6.5V107.3z"></path>
<path style="fill:#ffffff" d="M452.8,55.9v2.1h-6.2v-2.6c0-10.5-4-18.5-14.8-18.5c-10.8,0-14.8,7.8-14.8,18.3c0,24.1,35.9,24.6,35.9,52 c0,14.3-6.2,24.8-21.4,24.8s-21.4-10.5-21.4-24.8v-5.1h6.2v5.5c0,10.6,4.1,18.3,15,18.3s15-7.7,15-18.3c0-23.9-35.9-24.3-35.9-52 c0-14.9,6.5-24.6,21.2-24.7C446.7,31.1,452.8,41.6,452.8,55.9z"></path>
<path class="theme-primary" d="M495.8,102.5l10.6-70.6h21.7v99.4h-14.8V60.1l-10.8,71.3h-14.8l-11.6-70.3v70.3h-13.6V31.9h21.7L495.8,102.5z"></path>
<path class="theme-primary" d="M537.6,55.8c0-15.9,8.4-25,23.7-25c15.3,0,23.7,9.1,23.7,25v51.7c0,15.9-8.4,25-23.7,25 c-15.3,0-23.7-9.1-23.7-25V55.8z M553.2,108.5c0,7.1,3.1,9.8,8.1,9.8s8.1-2.7,8.1-9.8V54.8c0-7.1-3.1-9.8-8.1-9.8s-8.1,2.7-8.1,9.8 V108.5z"></path>
<path class="theme-primary" d="M594.4,31.9h24.7c15.6,0,23.3,8.7,23.3,24.6v50.3c0,15.9-7.7,24.6-23.3,24.6h-24.7V31.9z M610,46.1v71h8.8 c5,0,7.9-2.6,7.9-9.7V55.8c0-7.1-3-9.7-7.9-9.7H610z"></path>
<path class="theme-primary" d="M672.6,30.8c15.2,0,23,9.1,23,25v3.1h-14.8v-4.1c0-7.1-2.8-9.8-7.8-9.8c-5,0-7.8,2.7-7.8,9.8 c0,20.4,30.5,24.3,30.5,52.7c0,15.9-8,25-23.3,25c-15.3,0-23.3-9.1-23.3-25v-6.1h14.8v7.1c0,7.1,3.1,9.7,8.1,9.7s8.1-2.6,8.1-9.7 c0-20.4-30.5-24.3-30.5-52.7C649.6,39.9,657.4,30.8,672.6,30.8z"></path>
</g>
</svg> </div>
</a>
<div class="rj-nav nav-alignment">
<div class="nav-current-game">
<a href="https://www.nexusmods.com/daggerfallunity" title="Daggerfall Unity">
<img alt="Daggerfall Unity" src="https://staticdelivery.nexusmods.com/images/games/4_3/tile_2927.jpg">
<span class="typography-body-md text-neutral-strong">Daggerfall Unity</span>
</a>
<a class="nav-remove-current-game-link" href="/">
<i class="material-icons">close</i>
<span class="sr-only">Clear game filter</span>
</a>
</div>
<button type="button" class="nav-tab-button" data-title="Games">Games <i class="nmicon-chevron-down"></i></button>
<div class="shadow-md nav-tab-wrapper" data-title="Games">
<div class="nav-tab"><div class="nav-links">
<ul>
<li><p class="typography-title-sm text-neutral-subdued">Games</p></li>
<li><a href="/games" class="typography-body-lg typography-link-secondary">All games <span>(3,252)</span></a></li>
<li><a href="/games?sort=new" class="typography-body-lg typography-link-secondary">Recently added <span>(63)</span></a></li>
</ul>
</div>
<div class="nav-my-games">
<p class="typography-title-sm text-neutral-subdued">My games</p>
<div class="nav-games-favourites">
<div class="nav-games-unauthenticated">
<i class="fa fa-gamepad"></i>
<p class="typography-body-md text-neutral-subdued">Your favourited games will be displayed here</p>
</div>
<script>
(function () {
GameFavouriteState.init(0, '.nav-my-games');
})();
</script>
</div>
</div>
</div>
</div> <button type="button" class="nav-tab-button" data-title="Mods">Mods <i class="nmicon-chevron-down"></i></button>
<div class="shadow-md nav-tab-wrapper" data-title="Mods">
<div class="nav-tab"><div class="nav-game-tile">
<img alt="Daggerfall Unity" src="https://staticdelivery.nexusmods.com/images/games/4_3/tile_2927.jpg">
<div></div>
</div>
<div class="nav-links">
<ul>
<li><p class="typography-title-sm text-neutral-subdued">Mods</p></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods" class="typography-body-lg typography-link-secondary">All mods</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/thisweek" class="typography-body-lg typography-link-secondary">New</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/trending" class="typography-body-lg typography-link-secondary">Trending</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/trendingalltime" class="typography-body-lg typography-link-secondary">Most endorsed</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/top" class="typography-body-lg typography-link-secondary">Top files</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/categories" class="typography-body-lg typography-link-secondary">Mod categories</a></li>
</ul>
<ul>
<li><p class="typography-title-sm text-neutral-subdued">Mod updates</p></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/newrecently" class="typography-body-lg typography-link-secondary">Recent activity</a></li>
</ul>
</div>
<div class="nav-card featured">
<div class="featured-icon">
<i class="fas fa-trophy"></i>
</div>
<h6 class="typography-title-sm text-neutral-moderate">Mods of the month</h6>
<p class="typography-body-md text-neutral-subdued">Explore this month's nominated mods.</p>
<a href="https://www.nexusmods.com/daggerfallunity/mods/motm" class="typography-body-md typography-link-primary">Discover</a>
</div>
<div class="nav-card ">
<h6 class="typography-title-sm text-neutral-moderate">Vortex mod manager</h6>
<p class="typography-body-md text-neutral-subdued">The elegant, powerful and open-source mod manager.</p>
<a href="/site/mods/1" class="typography-body-md typography-link-primary">Download</a>
</div></div>
</div> <button type="button" class="nav-tab-button" data-title="Collections">Collections <i class="nmicon-chevron-down"></i></button>
<div class="shadow-md nav-tab-wrapper" data-title="Collections">
<div class="nav-tab"><div class="nav-game-tile">
<img alt="Daggerfall Unity" src="https://staticdelivery.nexusmods.com/images/games/4_3/tile_2927.jpg">
<div></div>
</div>
<div class="nav-links">
<ul>
<li><p class="typography-title-sm text-neutral-subdued">Collections</p></li>
<li><a href="https://next.nexusmods.com/daggerfallunity/collections?sortBy=total_downloads" class="typography-body-lg typography-link-secondary">All collections</a></li>
<li><a href="https://next.nexusmods.com/daggerfallunity/collections?sortBy=listed_at" class="typography-body-lg typography-link-secondary">Recently added</a></li>
<li><a href="https://next.nexusmods.com/daggerfallunity/collections?sortBy=endorsements_count" class="typography-body-lg typography-link-secondary">Most endorsed</a></li>
<li><a href="https://next.nexusmods.com/daggerfallunity/collections?sortBy=overall_rating" class="typography-body-lg typography-link-secondary">Highest rated</a></li>
</ul>
</div>
<div class="nav-card">
<h6 class="typography-title-sm text-neutral-moderate">Collections tutorials</h6>
<p class="typography-body-md text-neutral-subdued">Learn from the community with tutorials and guides.</p>
<a href="https://modding.wiki/en/nexusmods/collections/about" class="typography-body-md typography-link-primary" target="_blank" rel="noreferrer">Explore</a>
</div>
<div class="nav-card">
<h6 class="typography-title-sm text-neutral-moderate">Vortex mod manager</h6>
<p class="typography-body-md text-neutral-subdued">The elegant, powerful and open-source mod manager.</p>
<a href="/site/mods/1" class="typography-body-md typography-link-primary">Download</a>
</div></div>
</div> <button type="button" class="nav-tab-button" data-title="Media">Media <i class="nmicon-chevron-down"></i></button>
<div class="shadow-md nav-tab-wrapper" data-title="Media">
<div class="nav-tab"><div class="nav-game-tile">
<img alt="Daggerfall Unity" src="https://staticdelivery.nexusmods.com/images/games/4_3/tile_2927.jpg">
<div></div>
</div>
<div class="nav-links">
<ul>
<li><p class="typography-title-sm text-neutral-subdued">Images</p></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/images" class="typography-body-lg typography-link-secondary">Latest</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/images/recentlyendorsed" class="typography-body-lg typography-link-secondary">Trending</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/images/mostendorsed" class="typography-body-lg typography-link-secondary">Most endorsed</a></li>
</ul>
<ul>
<li><p class="typography-title-sm text-neutral-subdued">Videos</p></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/videos" class="typography-body-lg typography-link-secondary">Latest</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/videos/recentlyendorsed" class="typography-body-lg typography-link-secondary">Trending</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/videos/mostendorsed" class="typography-body-lg typography-link-secondary">Most endorsed</a></li>
</ul>
</div>
<div class="nav-card">
<h6 class="typography-title-sm text-neutral-moderate">Supporter images</h6>
<p class="typography-body-md text-neutral-subdued">Upgrade your account to unlock all media content.</p>
<a href="https://users.nexusmods.com/account/billing/premium" class="typography-body-md typography-link-primary">Upgrade</a>
</div>
</div>
</div> <button type="button" class="nav-tab-button" data-title="Community">Community <i class="nmicon-chevron-down"></i></button>
<div class="shadow-md nav-tab-wrapper" data-title="Community">
<div class="nav-tab"><div class="nav-links-wrapper">
<div class="nav-links">
<ul>
<li><p class="typography-title-sm text-neutral-subdued">Community</p></li>
<li><a href="https://forums.nexusmods.com/forum/8406-modding-discussion" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">Forums</a></li>
<li><a href="https://wiki.nexusmods.com/index.php/Main_Page" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">Wiki</a></li>
<li><a href="https://www.patreon.com/nexusmods" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">Support authors</a></li>
</ul>
<ul>
<li><p class="typography-title-sm text-neutral-subdued">News</p></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/news" class="typography-body-lg typography-link-secondary">All news</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/news?tab=site+news" class="typography-body-lg typography-link-secondary">Site news</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/news?tab=competition" class="typography-body-lg typography-link-secondary">Competitions</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/news?tab=interviews" class="typography-body-lg typography-link-secondary">Interviews</a></li>
</ul>
</div>
<div class="nav-social-links">
<a target="_blank" rel="noreferrer" href="https://discord.gg/nexusmods" title="Join us on Discord">
<img class="icon" alt="Discord" src="/assets/images/footer/Discord.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://twitter.com/nexussites" title="Follow us on Twitter">
<img class="icon" alt="Twitter" src="/assets/images/footer/Twitter.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.tiktok.com/@nexusmodsofficial" title="Follow us on TikTok">
<img class="icon" alt="TikTok" src="/assets/images/footer/TikTok.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.twitch.tv/nexusmodsofficial" title="Follow us on Twitch">
<img class="icon" alt="Twitch" src="/assets/images/footer/Twitch.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.youtube.com/@NexusModsOfficial" title="Follow us on Youtube">
<img class="icon" alt="Youtube" src="/assets/images/footer/Youtube.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.instagram.com/nexusmodsofficial" title="Follow us on Instagram">
<img class="icon" alt="Instagram" src="/assets/images/footer/Instagram.svg">
</a>
</div>
</div>
<div class="nav-news-items">
<a class="nav-news-item" href="/news/15078" title="Helping a Settlement - Glitchfinder">
<div class="nav-news-img-wrapper">
<div class="nav-news-img">
<img onerror="imgError(this);" src="https://staticdelivery.nexusmods.com/images/News/15078_tile_1732550981.png" title="Helping a Settlement - Glitchfinder">
</div>
</div>
<div class="nav-news-title">
<div class="date">Interviews • 25 Nov 2024</div>
<div class="typography-body-md text-neutral-moderate">Helping a Settlement - Glitchfinder</div>
</div>
</a>
<a class="nav-news-item" href="/news/15129" title="Talkin' Stardew - Shannon Hobby">
<div class="nav-news-img-wrapper">
<div class="nav-news-img">
<img onerror="imgError(this);" src="https://staticdelivery.nexusmods.com/images/News/15129_tile_1731930491.png" title="Talkin' Stardew - Shannon Hobby">
</div>
</div>
<div class="nav-news-title">
<div class="date">Interviews • 18 Nov 2024</div>
<div class="typography-body-md text-neutral-moderate">Talkin' Stardew - Shannon Hobby</div>
</div>
</a>
</div></div>
</div> <button type="button" class="nav-tab-button" data-title="Support">Support <i class="nmicon-chevron-down"></i></button>
<div class="shadow-md nav-tab-wrapper" data-title="Support">
<div class="nav-tab"><div class="nav-links">
<ul>
<li><p class="typography-title-sm text-neutral-subdued">Support</p></li>
<li><a href="https://help.nexusmods.com/" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">Help</a></li>
<li><a href="https://help.nexusmods.com/article/125-contact-us" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">Contact</a></li>
<li><a href="https://help.nexusmods.com/category/26-frequently-asked-questions" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">FAQ</a></li>
</ul>
<ul>
<li><p class="typography-title-sm text-neutral-subdued">Wiki</p></li>
<li><a href="https://wiki.nexusmods.com/index.php/Games" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">Game guides</a></li>
<li><a href="https://wiki.nexusmods.com/index.php/Category:Tutorials" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">Tutorial</a></li>
<li><a href="https://modding.wiki/en/nexusmods/collections" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">Collections</a></li>
<li><a href="https://wiki.nexusmods.com/index.php/Category:Tools" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">Tools</a></li>
</ul>
<ul>
<li><p class="typography-title-sm text-neutral-subdued">Vortex</p></li>
<li><a href="https://wiki.nexusmods.com/index.php/Category:Vortex" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">Vortex help</a></li>
<li><a href="https://app.swaggerhub.com/apis-docs/NexusMods/nexus-mods_public_api_params_in_form_data/1.0#/" class="typography-body-lg typography-link-secondary" target="_blank" rel="noreferrer">API documentation</a></li>
<li><a href="https://www.nexusmods.com/about/vortex/" class="typography-body-lg typography-link-secondary">Install Vortex</a></li>
</ul>
</div>
<div class="nav-card">
<h6 class="typography-title-sm text-neutral-moderate">Give feedback</h6>
<p class="typography-body-md text-neutral-subdued">Share your ideas, discuss them with the community, and cast your vote on feedback provided.</p>
<a href="https://feedback.nexusmods.com/" class="typography-body-md typography-link-primary">Give Feedback</a>
</div></div>
</div> </div>
<form class="rj-search" method="POST" action="https://www.nexusmods.com/daggerfallunity/search/">
<input id="gsearch" class="rj-search-input" name="gsearch" data-url="https://api.nexusmods.com/mods" type="text" placeholder="Search Daggerfall Unity" autocomplete="off" aria-label="Search">
<input id="searchtype" type="hidden" name="gsearchtype" value="mods">
<!-- <i class="material-icons">search</i>-->
<div class="rj-search-category-wrapper">
<button type="button" class="rj-search-category-dropdown-toggle">
<div class="rj-search-category">
<span class="rj-search-category-name">Mods</span>
<i class="nmicon-chevron-down"></i>
</div>
</button>
<ul class="rj-search-category-dropdown">
<li class="rj-search-category-option category-selected" data-category-value="mods">Mods</li>
<li class="rj-search-category-option" data-category-value="games">Games</li>
<li class="rj-search-category-option" data-category-value="images">Images</li>
<li class="rj-search-category-option" data-category-value="videos">Videos</li>
<li class="rj-search-category-option" data-category-value="authors">Users</li>
</ul>
</div>
<div id="gsearch_results" class="hidden" style="display: none" tabindex="0"></div>
<button type="button" class="rj-search-button">
<i class="material-icons">search</i>
</button>
</form>
<div class="rj-login-nav">
<a id="login" class="rj-btn rj-btn-clear" href="https://users.nexusmods.com/auth/sign_in?redirect_url=https%3A%2F%2Fwww.nexusmods.com%2Fdaggerfallunity%2Fmods%2F117" title="Log in to Nexus Mods" tabindex="0">Log in</a>
<a class="rj-btn rj-btn-standard" href="https://users.nexusmods.com/register">Register</a>
</div>
</div>
<div class="rj-right-tray rj-upload-tray">
<div class="arrow"></div>
<ul class="rj-right-tray-content rj-upload-tray-content">
<li class="rj-tray-section section-dark link-section">
<a href="https://www.nexusmods.com/daggerfallunity/mods/add">
<div class="section-content">
<i class="material-icons">cloud_upload</i> <span>UPLOAD A <strong>MOD</strong></span>
</div>
</a>
</li>
<li class="rj-tray-section section-dark link-section">
<a href="https://www.nexusmods.com/daggerfallunity/images/add">
<div class="section-content">
<i class="material-icons">add_photo_alternate</i> <span>UPLOAD AN <strong>IMAGE</strong></span>
</div>
</a>
</li>
<li class="rj-tray-section section-dark link-section">
<a href="https://www.nexusmods.com/daggerfallunity/videos/add">
<div class="section-content">
<i class="material-icons">video_call</i> <span>ADD A <strong>VIDEO</strong></span>
</div>
</a>
</li>
</ul>
</div>
<div class="rj-right-tray rj-notifications-tray">
<div class="arrow"></div>
<div class="rj-right-tray-content rj-notifications-tray-content">
<div class="notifications-content-wrapper">
<div class="notifications-header">
<div class="notifications-header-left">
<i class="nmicon-notification"></i>
<span>Notifications</span>
</div>
<div class="notifications-header-right">
<button class="notifications-clear">Mark all as read (<span class="total-count">0</span>)</button>
<a href="https://next.nexusmods.com/settings/notifications" class="notification-preferences-button">
<img src="/assets/images/icons/notifications/preferences-cog.svg" alt="Notification preferences" title="Notification preferences">
</a>
</div>
</div>
<div id="notifications-body" class="notifications-body">
<div class="notifications-list">
<div class="notifications-error">
<button class="notifications-error__banner js-refresh-notifications custom-button" type="button">
<i class="material-icons notifications-error__icon">error_outline</i>
<div class="notifications-error__text">
<p class="notifications-error__header">Oh dear! Something has gone wrong!</p>
<p class="notifications-error__subheader">Try reloading the notifications.</p>
</div>
<i class="material-icons notifications-error__icon">refresh</i>
</button>
<i class="material-icons notifications-error__placeholder">notifications_off</i>
</div>
<ul>
</ul>
<div class="no-notifications">
<i class="nmicon-notification"></i>
<p>No unread notifications right now</p>
<span>You're up to date</span>
</div>
</div>
<div class="notification-load-more">
<a href="https://next.nexusmods.com/notifications/all" class="rj-btn rj-btn-full rj-btn-outline notifications-load-more custom-button" type="button">View All</a>
</div>
<div class="notification-up-to-date">
<p>You're up to date</p>
</div>
</div>
</div> </div>
</div>
<div class="rj-right-tray rj-profile-tray">
<div class="arrow"></div>
<ul class="rj-right-tray-content rj-profile-tray-content">
<li class="user-profile-menu-section">
<div class="section-content">
<div class="profile-pic-wrapper">
<div class="rj-profile-pic">
<img alt="Profile image" src="">
</div>
</div>
<div>
<div class="user-profile-menu-username" title="guest">guest</div>
<div>
<span class="user-profile-menu-free-user">Free plan | </span>
<a class="user-profile-menu-upgrade" href="https://users.nexusmods.com/account/billing/premium?pk_campaign=PremiumAccountDropdown">Upgrade</a>
</div>
</div>
</div>
</li>
<li class="user-profile-menu-divider"></li>
<li class="user-profile-menu-section user-profile-menu-section--link">
<a href="/users/0">
<div class="section-content">
<i class="material-icons">account_circle</i> My profile
</div>
</a>
</li>
<li class="user-profile-menu-section user-profile-menu-section--link">
<a href="https://www.nexusmods.com/daggerfallunity/users/myaccount?tab=files">
<div class="section-content">
<svg viewBox="0 0 24 24" role="presentation" class="flex-shrink-0" width="24" height="24">
<path d="M11.985 17.8656L17.6972 13.4184L18.97 12.4328L11.985 7L5 12.4328L6.26506 13.4184L11.985 17.8656Z" style="fill: currentcolor;"></path>
</svg>
My mods
</div>
</a>
</li>
<li class="user-profile-menu-section user-profile-menu-section--link">
<a href="https://next.nexusmods.com/my-collections">
<div class="section-content">
<svg viewBox="0 0 24 24" role="presentation" class="flex-shrink-0" width="24" height="24">
<path d="M11.7229 15.369L6.21146 11.084L5 12.0262L11.7304 17.261L18.4607 12.0262L17.2418 11.0765L11.7229 15.369ZM11.7229 19.1079L6.21146 14.823L5 15.7652L11.7304 20.9999L18.4607 15.7652L17.2418 14.8155L11.7229 19.1079ZM11.7304 13.4694L17.2343 9.18445L18.4607 8.23472L11.7304 3L5 8.23472L6.21894 9.18445L11.7304 13.4694Z" style="fill: currentcolor;"></path>
</svg>
My collections
</div>
</a>
</li>
<li class="user-profile-menu-section user-profile-menu-section--link">
<a href="/users/myaccount?tab=images">
<div class="section-content">
<i class="material-icons-outlined">image</i> My media
</div>
</a>
</li>
<li class="user-profile-menu-section user-profile-menu-section--link">
<a href="/modrewards#/wallet">
<div class="section-content">
<i class="material-icons">account_balance_wallet</i> My wallet
</div>
</a>
</li>
<li class="user-profile-menu-divider"></li>
<li class="user-profile-menu-section user-profile-menu-section--link">
<a href="/mods/trackingcentre">
<div class="section-content">
<svg viewBox="0 0 24 24" role="presentation" class="flex-shrink-0" width="24" height="24">
<path d="M13.7521 11.5118C13.7521 10.1394 15.7161 7.96661 17.1112 7.96661C18.5069 7.96661 20.4704 10.1412 20.4852 11.5127C20.4852 12.1302 19.9993 12.4999 19.2241 12.4999C18.7783 12.4999 18.4095 12.3774 18.0593 12.261C17.7425 12.1557 17.441 12.0555 17.1112 12.0555C16.7866 12.0555 16.4886 12.1546 16.1742 12.2593C15.8229 12.3762 15.451 12.4999 14.9984 12.4999C14.2066 12.4999 13.7366 12.1298 13.7521 11.5118ZM13.2648 6.85595C13.7767 6.73199 14.3415 7.13043 14.5237 7.74349C14.7048 8.3562 14.4395 8.95474 13.9277 9.0787C13.4158 9.20265 12.851 8.80422 12.6687 8.18974C12.4864 7.57703 12.7529 6.9799 13.2648 6.85595ZM16.6191 5.72173C16.8277 6.50568 16.5552 7.23127 16.0126 7.37515C15.4677 7.52036 14.8595 7.01213 14.6505 6.24412C14.4418 5.46018 14.7143 4.73458 15.2569 4.5907C15.8017 4.46266 16.4104 4.93778 16.6191 5.72173ZM19.7001 7.74384C19.8824 7.13078 20.4472 6.74828 20.9591 6.8563C21.4548 6.98026 21.736 7.57703 21.5545 8.19098C21.3699 8.80404 20.8074 9.18654 20.2955 9.07852C19.7836 8.95456 19.5179 8.35708 19.7001 7.74384ZM19.572 6.24412C19.3633 7.01213 18.739 7.51904 18.2099 7.37515C17.6667 7.23172 17.3942 6.48974 17.6034 5.72173C17.8121 4.95372 18.4365 4.44682 18.9656 4.5907C19.5083 4.73449 19.7807 5.47611 19.572 6.24412ZM4.75206 19.4452C4.75206 18.0728 6.71607 15.9 8.11124 15.9C9.50694 15.9 11.4704 18.0745 11.4852 19.4461C11.4852 20.0635 10.9993 20.4333 10.2241 20.4333C9.77829 20.4333 9.40952 20.3107 9.05928 20.1943C8.74255 20.0891 8.44097 19.9888 8.11124 19.9888C7.78661 19.9888 7.48864 20.088 7.17418 20.1926C6.82288 20.3095 6.45099 20.4333 5.99835 20.4333C5.20663 20.4333 4.73659 20.0632 4.75206 19.4452ZM4.2648 14.7893C4.77667 14.6653 5.34146 15.0638 5.52374 15.6768C5.7048 16.2895 5.43954 16.8881 4.92767 17.012C4.41579 17.136 3.85101 16.7376 3.66872 16.1231C3.48637 15.5104 3.75292 14.9133 4.2648 14.7893ZM7.61905 13.6551C7.82771 14.439 7.55524 15.1646 7.01261 15.3085C6.46769 15.4537 5.85948 14.9455 5.65048 14.1775C5.44183 13.3935 5.71429 12.6679 6.25692 12.524C6.80167 12.396 7.4104 12.8711 7.61905 13.6551ZM10.7001 15.6772C10.8824 15.0641 11.4472 14.6816 11.9591 14.7896C12.4548 14.9136 12.736 15.5104 12.5545 16.1243C12.3699 16.7374 11.8074 17.1199 11.2955 17.0119C10.7836 16.8879 10.5179 16.2904 10.7001 15.6772ZM10.572 14.1775C10.3634 14.9455 9.73898 15.4524 9.20987 15.3085C8.66671 15.1651 8.39425 14.4231 8.60343 13.6551C8.81208 12.8871 9.43646 12.3802 9.96556 12.524C10.5083 12.6678 10.7807 13.4095 10.572 14.1775Z" style="fill: currentcolor;"></path>
</svg>
Tracking centre
</div>
</a>
</li>
<li class="user-profile-menu-section user-profile-menu-section--link">
<a href="/users/myaccount?tab=download+history">
<div class="section-content">
<i class="material-icons">history</i> Download history
</div>
</a>
</li>
<li class="user-profile-menu-divider"></li>
<li class="user-profile-menu-section user-profile-menu-section--link">
<a href="https://feedback.nexusmods.com/" rel="noreferrer" target="_blank">
<div class="section-content">
<svg viewBox="0 0 24 24" role="presentation" class="flex-shrink-0" width="24" height="24">
<path d="M13 11H11V5H13M13 15H11V13H13M20 2H4C2.9 2 2 2.9 2 4V22L6 18H20C21.1 18 22 17.1 22 16V4C22 2.9 21.1 2 20 2Z" style="fill: currentcolor;"></path>
</svg>
Give Feedback
</div>
</a>
</li>
<li class="user-profile-menu-section user-profile-menu-section--link">
<a href="https://users.nexusmods.com">
<div class="section-content">
<i class="material-icons">settings</i> Account settings
</div>
</a>
</li>
<li class="user-profile-menu-section user-profile-menu-section--link">
<a href="https://next.nexusmods.com/settings/preferences">
<div class="section-content">
<i class="material-icons">tune</i> Site preferences
</div>
</a>
</li>
<li class="user-profile-menu-divider"></li>
<li class="user-profile-menu-section user-profile-menu-section--link">
<form method="" action="https://users.nexusmods.com/auth/sign_in?redirect_url=https%3A%2F%2Fwww.nexusmods.com%2Fdaggerfallunity%2Fmods%2F117">
<button type="submit" role="link" class="section-content">
<i class="material-icons">exit_to_app</i> Sign out
</button>
</form>
</li>
</ul>
</div>
</header><iframe name="__tcfapiLocator" style="display: none;"></iframe>
<header id="mobile-head" class="new-head">
<div class="rj-mobile-head-controls">
<div>
<button class="rj-expand-left">
<i class="material-icons">menu</i>
</button>
</div>
<div class="rj-logo-center">
<a class="headlogo" href="/" alt="Nexus Mods" title="Nexus Mods">
<svg xmlns="http://www.w3.org/2000/svg" style="width:148px; height:35px;" version="1.1" x="0px" y="0px" viewBox="0 0 698.3 162.5">
<g>
<g>
<g>
<path d="M44.4,162.5c-0.6,0-1.3,0-1.9-0.1c-1.5-0.2-2.9-0.5-4.5-1c-2.8-0.9-5.2-2.2-6.9-3.2c-3.8-2.2-7.7-4.9-11.8-8.3 c-1.8-1.5-3.6-3.1-5.3-4.7l-1.4-1.4c-1-0.9-1.9-1.9-2.6-3c-1.3-2-2.4-4.6-2.5-8c-0.1-1.1-0.2-2.2-0.2-3.4c0-2.4,0.1-5,0.5-7.5 c0.7-5.2,2.4-9.8,3.7-13.3c0.1-0.3,0.2-0.6,0.3-0.9c-0.4-0.9-0.7-1.9-1.1-2.9C8.9,99.6,7.7,93.8,7.1,88 c-0.6-6.1-0.4-12.3,0.5-18.4c0.2-1.3,0.4-2.6,0.7-3.8C5.9,62.3,2.9,57.3,1,51.5l0-0.1c-0.4-1.2-1.4-4.2-0.8-8 c0.2-1.4,0.5-2.8,1-4.3c0.9-2.8,2.2-5.1,3.2-6.8c2.2-3.8,4.9-7.6,8.2-11.7c1.5-1.8,3-3.6,4.6-5.2l1.4-1.4 c0.7-0.8,1.5-1.5,2.4-2.1c2-1.5,4.8-2.8,8.6-2.9c1.2-0.1,2.5-0.2,3.8-0.2h0.1c2.5,0,5.2,0.2,7.8,0.6c4,0.6,7.6,1.7,10.8,2.9 c2.1-0.9,4.3-1.7,6.6-2.5C64.1,8,69.9,6.8,75.7,6.4C81.8,5.9,88,6.2,93.9,7.2c1.4,0.2,2.8,0.5,4.2,0.8c4.7-3.2,9-5.5,13.5-6.9 l0.1,0c1-0.4,3.2-1.1,6.1-1.1c0.6,0,1.3,0,1.9,0.1c1.5,0.2,2.9,0.5,4.5,1c2.8,0.9,5.2,2.2,6.9,3.2c3.8,2.2,7.7,4.9,11.8,8.3 c1.8,1.5,3.6,3.1,5.3,4.7l1.4,1.4c0.7,0.6,1.4,1.3,1.9,2.1c1.8,2.3,3.2,5.6,3.3,10.2c0.1,1.6,0.1,3.3,0,5 c-0.2,3.7-0.7,7.2-1.6,10.4c-0.7,2.4-1.5,4.8-2.4,7.2c1.8,4.5,3.1,9.1,4,13.8c1.8,9.9,1.6,20.1-0.6,29.9c1.3,1.9,2.5,3.7,3.5,5.5 c1.7,3,3.1,6.1,4.1,9.3c0.4,1.2,1.3,4.2,0.7,8.2c-0.2,1.4-0.6,2.7-1.1,4.2c-1.8,5.1-4.6,9.3-7.1,12.8c-2.7,3.8-5.8,7.5-9,10.9 l-1.2,1.2c-0.7,0.8-1.5,1.5-2.4,2.2c-2,1.5-4.8,2.7-8.6,2.9c-1.2,0.1-2.5,0.2-3.8,0.2h-0.1c-2.7,0-5.4-0.2-8.2-0.7 c-4.5-0.7-8.5-2.1-12.1-3.5c-1.9,0.8-3.9,1.5-5.8,2.1c-5.6,1.7-11.5,2.8-17.4,3.1c-6.1,0.4-12.3-0.1-18.3-1.2 c-0.7-0.1-1.5-0.3-2.2-0.4c-5.2,3.7-9.8,6.1-14.6,7.7l-0.1,0C49.5,161.7,47.3,162.5,44.4,162.5L44.4,162.5z M24.6,134.1l10.6,3.7 c0.9-2.6,1-5.4,0.4-8c0,0.2,0,0.5,0.1,0.7c0,0.3,0.1,0.7,0.1,1.1c-0.1-2-0.8-4.6-2.6-7c-0.7-0.9-1.5-1.7-2.4-2.4l0.5,0.4l0.9,0.9 c-0.8-0.8-1.7-1.6-2.7-2.3L24.6,134.1L24.6,134.1z M123.7,129.4c-0.8,0.8-1.6,1.6-2.3,2.7l11.9,4.6l0-11.1c0,0,0,0,0,0 c-1.1,0-2.2,0.1-3.2,0.4c0.2,0,0.4,0,0.6,0c0.3,0,0.7-0.1,1.1-0.1c-1.8,0.1-4.2,0.7-6.4,2.1c-1.2,0.8-2.2,1.7-3.1,2.9l0.4-0.5 L123.7,129.4L123.7,129.4z M35.8,126.8c0.5,0.4,1,0.8,1.5,1.3c2.6,2.2,5,3.9,7.2,5.2c1.4-0.7,3-1.7,4.7-3 c0.5-0.3,0.9-0.7,1.4-1.1c0.3-0.2,0.5-0.5,0.8-0.7c0.1-0.1,0.3-0.3,0.4-0.4l6.2-6.3l8.4,2.9c0.3,0.1,0.6,0.2,0.8,0.3 c1.8,0.6,3.6,1,5.4,1.4c3.7,0.7,7.6,1,11.4,0.7c3.6-0.2,7.3-0.9,10.7-1.9c1.7-0.5,3.4-1.1,5-1.9c0.8-0.3,1.6-0.7,2.3-1.1 c2-1,4.3-1.6,6.6-1.6c3.6,0,6.3,1.3,7.6,2c0.4,0.2,0.8,0.4,1.3,0.5c2.5,1,5.4,2.2,8,2.6c0.4,0.1,0.9,0.1,1.3,0.2 c1.5-1.7,2.9-3.5,4.2-5.3c0.8-1.1,1.6-2.2,2.3-3.3c-0.1-0.2-0.2-0.4-0.4-0.7c-0.7-1.2-1.5-2.4-2.5-3.9c-0.3-0.5-0.7-0.9-1.1-1.4 c-0.2-0.2-0.3-0.4-0.5-0.6c-4.1-4-5.5-9.7-3.6-15.1c0.1-0.3,0.2-0.6,0.3-0.8c2.3-7.2,2.7-14.9,1.4-22.3c-0.7-3.5-1.7-7-3.2-10.3 c-0.1-0.3-0.3-0.6-0.4-0.9c-3.3-6.1-1.9-11.3-0.7-13.8c0.5-1,0.9-2.1,1.3-3.1c0.8-1.9,1.4-3.9,2-5.7c0.2-0.9,0.4-1.8,0.5-2.9 c-0.5-0.4-1-0.8-1.5-1.3c-2.7-2.2-5-3.9-7.2-5.2c-1.4,0.8-3,1.8-4.8,3c-0.5,0.4-1,0.8-1.5,1.2c-0.1,0.1-0.3,0.2-0.4,0.4 c-2.7,2.6-6.3,4-10,4c-1.8,0-3.5-0.3-5.2-1c-0.4-0.1-0.8-0.3-1.2-0.4c-1.8-0.5-3.6-1-5.5-1.3c-3.7-0.6-7.6-0.8-11.4-0.5 c-3.6,0.3-7.2,1-10.6,2.1c-1.7,0.5-3.3,1.2-4.9,1.9c-0.8,0.3-1.5,0.7-2.3,1.1L59.5,40c-2.1,1.2-4.6,1.8-7,1.8 c-2.2,0-4.4-0.5-6.5-1.5c-0.5-0.2-0.9-0.4-1.4-0.6c-2.4-1-5.3-2.1-7.8-2.4c-0.4-0.1-0.8-0.1-1.1-0.2c-0.4,0.5-0.8,1-1.2,1.4 c-2.2,2.7-3.9,5-5.2,7.3c0.7,1.4,1.7,2.9,2.9,4.7c0.3,0.5,0.7,1,1.1,1.4c0.2,0.3,0.5,0.5,0.7,0.8l5.8,6.1l-2.5,8 c-0.2,0.5-0.3,1-0.5,1.5c-0.5,1.8-0.9,3.7-1.2,5.6c-0.6,3.8-0.7,7.6-0.3,11.5c0.3,3.6,1.1,7.2,2.3,10.6c0.6,1.7,1.3,3.3,2,4.9 c0.1,0.2,0.2,0.4,0.3,0.6c2.1,4.3,2.1,9.1-0.1,13.4c-0.2,0.4-0.4,0.8-0.5,1.2c-0.4,1-0.9,2-1.3,3c-0.8,2.2-1.8,4.8-2.1,7.1 C35.9,126.3,35.8,126.6,35.8,126.8L35.8,126.8z M129.9,38.8c0.8,0.8,1.7,1.6,2.8,2.4l4.9-12.9L127,24.6c-0.9,2.6-1,5.4-0.4,8 c0-0.1,0-0.2,0-0.3c0-0.3,0-0.8,0-1.3v-0.1c0,1.5,0.5,4,2.1,6.4c0.8,1.1,1.7,2.1,2.8,3l-0.5-0.4L129.9,38.8L129.9,38.8z M29.3,26.3l0,11.1c1.1,0,2.2-0.1,3.2-0.4c-0.2,0-0.4,0-0.6,0c-0.3,0-0.7,0.1-1.1,0.1c1.8-0.1,4.2-0.7,6.4-2.1 c1.2-0.8,2.2-1.7,3.1-2.9l-0.4,0.5l-0.9,1c0.8-0.8,1.6-1.7,2.3-2.7L29.3,26.3L29.3,26.3z"></path>
</g>
</g>
<g>
<g>
<g>
<path class="theme-secondary" d="M56.3,88.4l0.7,28.3l-7-5.7c-7.8,12.7-10.3,25-6.6,34.1l1.3,3.2l-3.2-1.4c-7.3-3.2-13.9-7.7-19.4-13.5 l-0.3-0.3l-0.1-0.5c-0.4-3.5-0.2-7.3,0.7-11.2l0-0.1c1.3-4.9,3.2-9.8,5.6-14.7c1.5-3.1,3.3-6.2,5.3-9.2l-6.1-5L56.3,88.4z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M105.9,74.1l-0.7-28.3l7,5.7c7.8-12.7,10.3-25,6.6-34.1l-1.3-3.2l3.2,1.4c7.3,3.2,13.9,7.7,19.4,13.5 l0.3,0.3l0.1,0.5c0.4,3.5,0.2,7.3-0.7,11.2l0,0.1c-1.3,4.9-3.2,9.8-5.6,14.7c-1.5,3.1-3.3,6.2-5.3,9.2l6.1,5L105.9,74.1z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M88.5,105.4l28.3-0.7l-5.7,7c12.7,7.8,25,10.3,34.1,6.6l3.2-1.3l-1.4,3.2c-3.2,7.3-7.7,13.9-13.5,19.4 l-0.3,0.3l-0.5,0.1c-3.5,0.4-7.3,0.2-11.2-0.7l-0.1,0c-4.9-1.3-9.8-3.2-14.7-5.6c-3.1-1.5-6.2-3.3-9.2-5.3l-5,6.1L88.5,105.4z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M74.1,57.6l-28.3,0.7l5.7-7c-12.7-7.8-25-10.3-34.1-6.6L14.3,46l1.4-3.2c3.2-7.3,7.7-13.9,13.5-19.4 l0.3-0.3L30,23c3.5-0.4,7.3-0.2,11.2,0.7l0.1,0c4.9,1.3,9.8,3.2,14.7,5.6c3.1,1.5,6.2,3.3,9.2,5.3l5-6.1L74.1,57.6z"></path>
</g>
</g>
<g>
<g>
<circle class="theme-primary" cx="81.4" cy="80.8" r="60.5"></circle>
</g>
</g>
<g>
<path style="fill:#ffffff" d="M59.3,59.5c-3.5-1.6-6.1-3.2-8.7-5.1c-4-2.8-7.7-5.9-10.8-9.2c-7.6-7.7-11.6-15.6-10.5-22.1L27,25.6 c-5.5,5.8-12.8,16-12.9,20.4c0.1,0.5,0.1,0.5,0.1,0.5c1,3.4,2.6,6.8,4.9,10.1l0,0.1c3,4.8,8.9,12.7,29.9,21.9l-3.7,7l28.3-7.6 L63.5,51.5L59.3,59.5z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M103.3,103.5c3.5,1.6,6.1,3.2,8.7,5.1c4,2.8,7.7,5.9,10.8,9.2c7.6,7.7,11.6,15.6,10.5,22.1l2.3-2.4 c5.5-5.8,12.8-16,12.9-20.4c-0.1-0.5-0.1-0.5-0.1-0.5c-1-3.4-2.6-6.8-4.9-10.1l0-0.1c-3-4.8-8.9-12.7-29.9-21.9l3.7-7l-28.3,7.6 l10.2,26.2L103.3,103.5z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M104,59.3c1.6-3.5,3.2-6.1,5.1-8.7c2.8-4,5.9-7.7,9.2-10.8c7.7-7.6,15.6-11.6,22.1-10.5L138,27 c-5.8-5.5-16-12.8-20.4-12.9c-0.5,0.1-0.5,0.1-0.5,0.1c-3.4,1-6.8,2.6-10.1,4.9l-0.1,0c-4.8,3-12.7,8.9-21.9,29.9l-7-3.7 l7.6,28.3L112,63.6L104,59.3z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M58.2,103.2c-1.6,3.5-3.2,6.1-5.1,8.7c-2.8,4-5.9,7.7-9.2,10.8c-7.7,7.6-15.6,11.6-22.1,10.5l2.4,2.3 c5.8,5.5,16,12.8,20.4,12.9c0.5-0.1,0.5-0.1,0.5-0.1c3.4-1,6.8-2.6,10.1-4.9l0.1,0c4.8-3,12.7-8.9,21.9-29.9l7,3.7l-7.6-28.3 L50.3,98.9L58.2,103.2z"></path>
</g>
</g>
</g>
<g class="logo-brand-name">
<path style="fill:#ffffff" d="M198.6,131.3h-6V31.9h8.5l29.8,83.9V31.9h6v99.4h-7.2l-31.1-88.6V131.3z"></path>
<path style="fill:#ffffff" d="M281.1,77.9v6h-27.1v41.5h32.7v6h-39.2V31.9h39.2v6h-32.7v40H281.1z"></path>
<path style="fill:#ffffff" d="M321.8,85l-20.2,46.3h-6.4l22.4-51.5l-20.9-47.8h6.8l18.7,42.7l18.9-42.7h6.2l-20.9,47.8l22.3,51.5h-7 L321.8,85z"></path>
<path style="fill:#ffffff" d="M364.5,107.3c0,10.6,4,18.9,14.9,18.9s14.9-8.2,14.9-18.9V31.9h6.1V107c0,14.2-6,25.1-21.2,25.1 c-15.2,0-21.3-10.9-21.3-25.1V31.9h6.5V107.3z"></path>
<path style="fill:#ffffff" d="M452.8,55.9v2.1h-6.2v-2.6c0-10.5-4-18.5-14.8-18.5c-10.8,0-14.8,7.8-14.8,18.3c0,24.1,35.9,24.6,35.9,52 c0,14.3-6.2,24.8-21.4,24.8s-21.4-10.5-21.4-24.8v-5.1h6.2v5.5c0,10.6,4.1,18.3,15,18.3s15-7.7,15-18.3c0-23.9-35.9-24.3-35.9-52 c0-14.9,6.5-24.6,21.2-24.7C446.7,31.1,452.8,41.6,452.8,55.9z"></path>
<path class="theme-primary" d="M495.8,102.5l10.6-70.6h21.7v99.4h-14.8V60.1l-10.8,71.3h-14.8l-11.6-70.3v70.3h-13.6V31.9h21.7L495.8,102.5z"></path>
<path class="theme-primary" d="M537.6,55.8c0-15.9,8.4-25,23.7-25c15.3,0,23.7,9.1,23.7,25v51.7c0,15.9-8.4,25-23.7,25 c-15.3,0-23.7-9.1-23.7-25V55.8z M553.2,108.5c0,7.1,3.1,9.8,8.1,9.8s8.1-2.7,8.1-9.8V54.8c0-7.1-3.1-9.8-8.1-9.8s-8.1,2.7-8.1,9.8 V108.5z"></path>
<path class="theme-primary" d="M594.4,31.9h24.7c15.6,0,23.3,8.7,23.3,24.6v50.3c0,15.9-7.7,24.6-23.3,24.6h-24.7V31.9z M610,46.1v71h8.8 c5,0,7.9-2.6,7.9-9.7V55.8c0-7.1-3-9.7-7.9-9.7H610z"></path>
<path class="theme-primary" d="M672.6,30.8c15.2,0,23,9.1,23,25v3.1h-14.8v-4.1c0-7.1-2.8-9.8-7.8-9.8c-5,0-7.8,2.7-7.8,9.8 c0,20.4,30.5,24.3,30.5,52.7c0,15.9-8,25-23.3,25c-15.3,0-23.3-9.1-23.3-25v-6.1h14.8v7.1c0,7.1,3.1,9.7,8.1,9.7s8.1-2.6,8.1-9.7 c0-20.4-30.5-24.3-30.5-52.7C649.6,39.9,657.4,30.8,672.6,30.8z"></path>
</g>
</svg> </a>
</div>
<div class="rj-user-nav-right">
<button class="rj-expand-search">
<i class="material-icons">search</i>
</button>
<button class="rj-expand-profile">
<i class="material-icons">person</i>
</button>
</div>
</div>
<div class="rj-mobile-menu-shield" tabindex="0"></div>
<div class="nav-mobile-menu">
<div class="nav-mobile-menu-header">
<a class="headlogo" href="/" alt="Nexus Mods" title="Nexus Mods">
<svg xmlns="http://www.w3.org/2000/svg" style="width:148px; height:35px;" version="1.1" x="0px" y="0px" viewBox="0 0 698.3 162.5">
<g>
<g>
<g>
<path d="M44.4,162.5c-0.6,0-1.3,0-1.9-0.1c-1.5-0.2-2.9-0.5-4.5-1c-2.8-0.9-5.2-2.2-6.9-3.2c-3.8-2.2-7.7-4.9-11.8-8.3 c-1.8-1.5-3.6-3.1-5.3-4.7l-1.4-1.4c-1-0.9-1.9-1.9-2.6-3c-1.3-2-2.4-4.6-2.5-8c-0.1-1.1-0.2-2.2-0.2-3.4c0-2.4,0.1-5,0.5-7.5 c0.7-5.2,2.4-9.8,3.7-13.3c0.1-0.3,0.2-0.6,0.3-0.9c-0.4-0.9-0.7-1.9-1.1-2.9C8.9,99.6,7.7,93.8,7.1,88 c-0.6-6.1-0.4-12.3,0.5-18.4c0.2-1.3,0.4-2.6,0.7-3.8C5.9,62.3,2.9,57.3,1,51.5l0-0.1c-0.4-1.2-1.4-4.2-0.8-8 c0.2-1.4,0.5-2.8,1-4.3c0.9-2.8,2.2-5.1,3.2-6.8c2.2-3.8,4.9-7.6,8.2-11.7c1.5-1.8,3-3.6,4.6-5.2l1.4-1.4 c0.7-0.8,1.5-1.5,2.4-2.1c2-1.5,4.8-2.8,8.6-2.9c1.2-0.1,2.5-0.2,3.8-0.2h0.1c2.5,0,5.2,0.2,7.8,0.6c4,0.6,7.6,1.7,10.8,2.9 c2.1-0.9,4.3-1.7,6.6-2.5C64.1,8,69.9,6.8,75.7,6.4C81.8,5.9,88,6.2,93.9,7.2c1.4,0.2,2.8,0.5,4.2,0.8c4.7-3.2,9-5.5,13.5-6.9 l0.1,0c1-0.4,3.2-1.1,6.1-1.1c0.6,0,1.3,0,1.9,0.1c1.5,0.2,2.9,0.5,4.5,1c2.8,0.9,5.2,2.2,6.9,3.2c3.8,2.2,7.7,4.9,11.8,8.3 c1.8,1.5,3.6,3.1,5.3,4.7l1.4,1.4c0.7,0.6,1.4,1.3,1.9,2.1c1.8,2.3,3.2,5.6,3.3,10.2c0.1,1.6,0.1,3.3,0,5 c-0.2,3.7-0.7,7.2-1.6,10.4c-0.7,2.4-1.5,4.8-2.4,7.2c1.8,4.5,3.1,9.1,4,13.8c1.8,9.9,1.6,20.1-0.6,29.9c1.3,1.9,2.5,3.7,3.5,5.5 c1.7,3,3.1,6.1,4.1,9.3c0.4,1.2,1.3,4.2,0.7,8.2c-0.2,1.4-0.6,2.7-1.1,4.2c-1.8,5.1-4.6,9.3-7.1,12.8c-2.7,3.8-5.8,7.5-9,10.9 l-1.2,1.2c-0.7,0.8-1.5,1.5-2.4,2.2c-2,1.5-4.8,2.7-8.6,2.9c-1.2,0.1-2.5,0.2-3.8,0.2h-0.1c-2.7,0-5.4-0.2-8.2-0.7 c-4.5-0.7-8.5-2.1-12.1-3.5c-1.9,0.8-3.9,1.5-5.8,2.1c-5.6,1.7-11.5,2.8-17.4,3.1c-6.1,0.4-12.3-0.1-18.3-1.2 c-0.7-0.1-1.5-0.3-2.2-0.4c-5.2,3.7-9.8,6.1-14.6,7.7l-0.1,0C49.5,161.7,47.3,162.5,44.4,162.5L44.4,162.5z M24.6,134.1l10.6,3.7 c0.9-2.6,1-5.4,0.4-8c0,0.2,0,0.5,0.1,0.7c0,0.3,0.1,0.7,0.1,1.1c-0.1-2-0.8-4.6-2.6-7c-0.7-0.9-1.5-1.7-2.4-2.4l0.5,0.4l0.9,0.9 c-0.8-0.8-1.7-1.6-2.7-2.3L24.6,134.1L24.6,134.1z M123.7,129.4c-0.8,0.8-1.6,1.6-2.3,2.7l11.9,4.6l0-11.1c0,0,0,0,0,0 c-1.1,0-2.2,0.1-3.2,0.4c0.2,0,0.4,0,0.6,0c0.3,0,0.7-0.1,1.1-0.1c-1.8,0.1-4.2,0.7-6.4,2.1c-1.2,0.8-2.2,1.7-3.1,2.9l0.4-0.5 L123.7,129.4L123.7,129.4z M35.8,126.8c0.5,0.4,1,0.8,1.5,1.3c2.6,2.2,5,3.9,7.2,5.2c1.4-0.7,3-1.7,4.7-3 c0.5-0.3,0.9-0.7,1.4-1.1c0.3-0.2,0.5-0.5,0.8-0.7c0.1-0.1,0.3-0.3,0.4-0.4l6.2-6.3l8.4,2.9c0.3,0.1,0.6,0.2,0.8,0.3 c1.8,0.6,3.6,1,5.4,1.4c3.7,0.7,7.6,1,11.4,0.7c3.6-0.2,7.3-0.9,10.7-1.9c1.7-0.5,3.4-1.1,5-1.9c0.8-0.3,1.6-0.7,2.3-1.1 c2-1,4.3-1.6,6.6-1.6c3.6,0,6.3,1.3,7.6,2c0.4,0.2,0.8,0.4,1.3,0.5c2.5,1,5.4,2.2,8,2.6c0.4,0.1,0.9,0.1,1.3,0.2 c1.5-1.7,2.9-3.5,4.2-5.3c0.8-1.1,1.6-2.2,2.3-3.3c-0.1-0.2-0.2-0.4-0.4-0.7c-0.7-1.2-1.5-2.4-2.5-3.9c-0.3-0.5-0.7-0.9-1.1-1.4 c-0.2-0.2-0.3-0.4-0.5-0.6c-4.1-4-5.5-9.7-3.6-15.1c0.1-0.3,0.2-0.6,0.3-0.8c2.3-7.2,2.7-14.9,1.4-22.3c-0.7-3.5-1.7-7-3.2-10.3 c-0.1-0.3-0.3-0.6-0.4-0.9c-3.3-6.1-1.9-11.3-0.7-13.8c0.5-1,0.9-2.1,1.3-3.1c0.8-1.9,1.4-3.9,2-5.7c0.2-0.9,0.4-1.8,0.5-2.9 c-0.5-0.4-1-0.8-1.5-1.3c-2.7-2.2-5-3.9-7.2-5.2c-1.4,0.8-3,1.8-4.8,3c-0.5,0.4-1,0.8-1.5,1.2c-0.1,0.1-0.3,0.2-0.4,0.4 c-2.7,2.6-6.3,4-10,4c-1.8,0-3.5-0.3-5.2-1c-0.4-0.1-0.8-0.3-1.2-0.4c-1.8-0.5-3.6-1-5.5-1.3c-3.7-0.6-7.6-0.8-11.4-0.5 c-3.6,0.3-7.2,1-10.6,2.1c-1.7,0.5-3.3,1.2-4.9,1.9c-0.8,0.3-1.5,0.7-2.3,1.1L59.5,40c-2.1,1.2-4.6,1.8-7,1.8 c-2.2,0-4.4-0.5-6.5-1.5c-0.5-0.2-0.9-0.4-1.4-0.6c-2.4-1-5.3-2.1-7.8-2.4c-0.4-0.1-0.8-0.1-1.1-0.2c-0.4,0.5-0.8,1-1.2,1.4 c-2.2,2.7-3.9,5-5.2,7.3c0.7,1.4,1.7,2.9,2.9,4.7c0.3,0.5,0.7,1,1.1,1.4c0.2,0.3,0.5,0.5,0.7,0.8l5.8,6.1l-2.5,8 c-0.2,0.5-0.3,1-0.5,1.5c-0.5,1.8-0.9,3.7-1.2,5.6c-0.6,3.8-0.7,7.6-0.3,11.5c0.3,3.6,1.1,7.2,2.3,10.6c0.6,1.7,1.3,3.3,2,4.9 c0.1,0.2,0.2,0.4,0.3,0.6c2.1,4.3,2.1,9.1-0.1,13.4c-0.2,0.4-0.4,0.8-0.5,1.2c-0.4,1-0.9,2-1.3,3c-0.8,2.2-1.8,4.8-2.1,7.1 C35.9,126.3,35.8,126.6,35.8,126.8L35.8,126.8z M129.9,38.8c0.8,0.8,1.7,1.6,2.8,2.4l4.9-12.9L127,24.6c-0.9,2.6-1,5.4-0.4,8 c0-0.1,0-0.2,0-0.3c0-0.3,0-0.8,0-1.3v-0.1c0,1.5,0.5,4,2.1,6.4c0.8,1.1,1.7,2.1,2.8,3l-0.5-0.4L129.9,38.8L129.9,38.8z M29.3,26.3l0,11.1c1.1,0,2.2-0.1,3.2-0.4c-0.2,0-0.4,0-0.6,0c-0.3,0-0.7,0.1-1.1,0.1c1.8-0.1,4.2-0.7,6.4-2.1 c1.2-0.8,2.2-1.7,3.1-2.9l-0.4,0.5l-0.9,1c0.8-0.8,1.6-1.7,2.3-2.7L29.3,26.3L29.3,26.3z"></path>
</g>
</g>
<g>
<g>
<g>
<path class="theme-secondary" d="M56.3,88.4l0.7,28.3l-7-5.7c-7.8,12.7-10.3,25-6.6,34.1l1.3,3.2l-3.2-1.4c-7.3-3.2-13.9-7.7-19.4-13.5 l-0.3-0.3l-0.1-0.5c-0.4-3.5-0.2-7.3,0.7-11.2l0-0.1c1.3-4.9,3.2-9.8,5.6-14.7c1.5-3.1,3.3-6.2,5.3-9.2l-6.1-5L56.3,88.4z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M105.9,74.1l-0.7-28.3l7,5.7c7.8-12.7,10.3-25,6.6-34.1l-1.3-3.2l3.2,1.4c7.3,3.2,13.9,7.7,19.4,13.5 l0.3,0.3l0.1,0.5c0.4,3.5,0.2,7.3-0.7,11.2l0,0.1c-1.3,4.9-3.2,9.8-5.6,14.7c-1.5,3.1-3.3,6.2-5.3,9.2l6.1,5L105.9,74.1z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M88.5,105.4l28.3-0.7l-5.7,7c12.7,7.8,25,10.3,34.1,6.6l3.2-1.3l-1.4,3.2c-3.2,7.3-7.7,13.9-13.5,19.4 l-0.3,0.3l-0.5,0.1c-3.5,0.4-7.3,0.2-11.2-0.7l-0.1,0c-4.9-1.3-9.8-3.2-14.7-5.6c-3.1-1.5-6.2-3.3-9.2-5.3l-5,6.1L88.5,105.4z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M74.1,57.6l-28.3,0.7l5.7-7c-12.7-7.8-25-10.3-34.1-6.6L14.3,46l1.4-3.2c3.2-7.3,7.7-13.9,13.5-19.4 l0.3-0.3L30,23c3.5-0.4,7.3-0.2,11.2,0.7l0.1,0c4.9,1.3,9.8,3.2,14.7,5.6c3.1,1.5,6.2,3.3,9.2,5.3l5-6.1L74.1,57.6z"></path>
</g>
</g>
<g>
<g>
<circle class="theme-primary" cx="81.4" cy="80.8" r="60.5"></circle>
</g>
</g>
<g>
<path style="fill:#ffffff" d="M59.3,59.5c-3.5-1.6-6.1-3.2-8.7-5.1c-4-2.8-7.7-5.9-10.8-9.2c-7.6-7.7-11.6-15.6-10.5-22.1L27,25.6 c-5.5,5.8-12.8,16-12.9,20.4c0.1,0.5,0.1,0.5,0.1,0.5c1,3.4,2.6,6.8,4.9,10.1l0,0.1c3,4.8,8.9,12.7,29.9,21.9l-3.7,7l28.3-7.6 L63.5,51.5L59.3,59.5z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M103.3,103.5c3.5,1.6,6.1,3.2,8.7,5.1c4,2.8,7.7,5.9,10.8,9.2c7.6,7.7,11.6,15.6,10.5,22.1l2.3-2.4 c5.5-5.8,12.8-16,12.9-20.4c-0.1-0.5-0.1-0.5-0.1-0.5c-1-3.4-2.6-6.8-4.9-10.1l0-0.1c-3-4.8-8.9-12.7-29.9-21.9l3.7-7l-28.3,7.6 l10.2,26.2L103.3,103.5z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M104,59.3c1.6-3.5,3.2-6.1,5.1-8.7c2.8-4,5.9-7.7,9.2-10.8c7.7-7.6,15.6-11.6,22.1-10.5L138,27 c-5.8-5.5-16-12.8-20.4-12.9c-0.5,0.1-0.5,0.1-0.5,0.1c-3.4,1-6.8,2.6-10.1,4.9l-0.1,0c-4.8,3-12.7,8.9-21.9,29.9l-7-3.7 l7.6,28.3L112,63.6L104,59.3z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M58.2,103.2c-1.6,3.5-3.2,6.1-5.1,8.7c-2.8,4-5.9,7.7-9.2,10.8c-7.7,7.6-15.6,11.6-22.1,10.5l2.4,2.3 c5.8,5.5,16,12.8,20.4,12.9c0.5-0.1,0.5-0.1,0.5-0.1c3.4-1,6.8-2.6,10.1-4.9l0.1,0c4.8-3,12.7-8.9,21.9-29.9l7,3.7l-7.6-28.3 L50.3,98.9L58.2,103.2z"></path>
</g>
</g>
</g>
<g class="logo-brand-name">
<path style="fill:#ffffff" d="M198.6,131.3h-6V31.9h8.5l29.8,83.9V31.9h6v99.4h-7.2l-31.1-88.6V131.3z"></path>
<path style="fill:#ffffff" d="M281.1,77.9v6h-27.1v41.5h32.7v6h-39.2V31.9h39.2v6h-32.7v40H281.1z"></path>
<path style="fill:#ffffff" d="M321.8,85l-20.2,46.3h-6.4l22.4-51.5l-20.9-47.8h6.8l18.7,42.7l18.9-42.7h6.2l-20.9,47.8l22.3,51.5h-7 L321.8,85z"></path>
<path style="fill:#ffffff" d="M364.5,107.3c0,10.6,4,18.9,14.9,18.9s14.9-8.2,14.9-18.9V31.9h6.1V107c0,14.2-6,25.1-21.2,25.1 c-15.2,0-21.3-10.9-21.3-25.1V31.9h6.5V107.3z"></path>
<path style="fill:#ffffff" d="M452.8,55.9v2.1h-6.2v-2.6c0-10.5-4-18.5-14.8-18.5c-10.8,0-14.8,7.8-14.8,18.3c0,24.1,35.9,24.6,35.9,52 c0,14.3-6.2,24.8-21.4,24.8s-21.4-10.5-21.4-24.8v-5.1h6.2v5.5c0,10.6,4.1,18.3,15,18.3s15-7.7,15-18.3c0-23.9-35.9-24.3-35.9-52 c0-14.9,6.5-24.6,21.2-24.7C446.7,31.1,452.8,41.6,452.8,55.9z"></path>
<path class="theme-primary" d="M495.8,102.5l10.6-70.6h21.7v99.4h-14.8V60.1l-10.8,71.3h-14.8l-11.6-70.3v70.3h-13.6V31.9h21.7L495.8,102.5z"></path>
<path class="theme-primary" d="M537.6,55.8c0-15.9,8.4-25,23.7-25c15.3,0,23.7,9.1,23.7,25v51.7c0,15.9-8.4,25-23.7,25 c-15.3,0-23.7-9.1-23.7-25V55.8z M553.2,108.5c0,7.1,3.1,9.8,8.1,9.8s8.1-2.7,8.1-9.8V54.8c0-7.1-3.1-9.8-8.1-9.8s-8.1,2.7-8.1,9.8 V108.5z"></path>
<path class="theme-primary" d="M594.4,31.9h24.7c15.6,0,23.3,8.7,23.3,24.6v50.3c0,15.9-7.7,24.6-23.3,24.6h-24.7V31.9z M610,46.1v71h8.8 c5,0,7.9-2.6,7.9-9.7V55.8c0-7.1-3-9.7-7.9-9.7H610z"></path>
<path class="theme-primary" d="M672.6,30.8c15.2,0,23,9.1,23,25v3.1h-14.8v-4.1c0-7.1-2.8-9.8-7.8-9.8c-5,0-7.8,2.7-7.8,9.8 c0,20.4,30.5,24.3,30.5,52.7c0,15.9-8,25-23.3,25c-15.3,0-23.3-9.1-23.3-25v-6.1h14.8v7.1c0,7.1,3.1,9.7,8.1,9.7s8.1-2.6,8.1-9.7 c0-20.4-30.5-24.3-30.5-52.7C649.6,39.9,657.4,30.8,672.6,30.8z"></path>
</g>
</svg> </a>
<button type="button" class="nav-mobile-menu-close">
<i class="material-icons">close</i>
<span class="sr-only">Close navigation menu</span>
</button>
</div>
<div class="nav-mobile-menu-body">
<ul>
<li class="nav-mobile-current-game">
<a href="https://www.nexusmods.com/daggerfallunity" title="Daggerfall Unity">
<img alt="Daggerfall Unity" src="https://staticdelivery.nexusmods.com/images/games/4_3/tile_2927.jpg">
<span class="typography-body-xl text-neutral-strong">Daggerfall Unity</span>
</a>
<a href="/">
<i class="material-icons">close</i>
<span class="sr-only">Clear game filter</span>
</a>
</li>
<style></style>
<li><button class="nav-mobile-menu-item text-neutral-strong">
<p class="typography-body-xl">Games</p>
<i class="material-icons">chevron_right</i>
</button>
<div class="nav-mobile-menu-child">
<div class="nav-mobile-menu-header">
<button type="button" class="nav-mobile-menu-back">
<svg class="nav-back-icon" viewBox="0 0 24 24" role="presentation" style="width:1.5rem;height:1.5rem;">
<path d="M17.5101 3.8701L15.7301 2.1001L5.84009 12.0001L15.7401 21.9001L17.5101 20.1301L9.38009 12.0001L17.5101 3.8701Z"></path>
</svg> <span class="sr-only">Back</span>
</button>
<button type="button" class="nav-mobile-menu-close">
<i class="material-icons">close</i>
<span class="sr-only">Close navigation menu</span>
</button>
</div>
<div class="nav-mobile-menu-body">
<ul>
<li class="nav-mobile-menu-group-title"><span class="text-neutral-subdued typography-title-md">Games</span></li>
<li><a class="nav-mobile-menu-item text-neutral-strong" href="/games"><p class="typography-body-xl">All games <span class="text-neutral-subdued">(3,252)</span></p></a></li>
<li><a class="nav-mobile-menu-item text-neutral-strong" href="/games?sort=new"><p class="typography-body-xl">Recently added <span class="text-neutral-subdued">(63)</span></p></a></li>
</ul>
<ul>
<li class="nav-mobile-menu-group-title"><span class="text-neutral-subdued typography-title-md">My games</span></li>
<div class="nav-mobile-games-wrapper">
<div class="nav-games-unauthenticated">
<i class="fa fa-gamepad"></i>
<p class="typography-body-md text-neutral-subdued">Your favourited games will be displayed here</p>
</div>
<script>
(function () {
GameFavouriteState.init(0, '.nav-mobile-games-wrapper');
})();
</script>
</div>
</ul>
</div>
</div>
</li>
<li><button class="nav-mobile-menu-item text-neutral-strong">
<p class="typography-body-xl">Mods</p>
<i class="material-icons">chevron_right</i>
</button>
<div class="nav-mobile-menu-child">
<div class="nav-mobile-menu-header">
<button type="button" class="nav-mobile-menu-back">
<svg class="nav-back-icon" viewBox="0 0 24 24" role="presentation" style="width:1.5rem;height:1.5rem;">
<path d="M17.5101 3.8701L15.7301 2.1001L5.84009 12.0001L15.7401 21.9001L17.5101 20.1301L9.38009 12.0001L17.5101 3.8701Z"></path>
</svg> <span class="sr-only">Back</span>
</button>
<button type="button" class="nav-mobile-menu-close">
<i class="material-icons">close</i>
<span class="sr-only">Close navigation menu</span>
</button>
</div>
<div class="nav-mobile-menu-body">
<ul>
<li class="nav-mobile-menu-group-title"><span class="typography-title-md text-neutral-subdued">Mods</span></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">All mods</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/thisweek" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">New</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/trending" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Trending</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/trendingalltime" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Most endorsed</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/top" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Top files</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/categories" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Mod categories</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/motm" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Mods of the month</p></a></li>
</ul>
<ul>
<li class="nav-mobile-menu-group-title"><span class="typography-title-md text-neutral-subdued">Mod updates</span></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/newrecently" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Recent activity</p></a></li>
</ul>
</div>
</div></li>
<li><button class="nav-mobile-menu-item text-neutral-strong">
<p class="typography-body-xl">Collections</p>
<i class="material-icons">chevron_right</i>
</button>
<div class="nav-mobile-menu-child">
<div class="nav-mobile-menu-header">
<button type="button" class="nav-mobile-menu-back">
<svg class="nav-back-icon" viewBox="0 0 24 24" role="presentation" style="width:1.5rem;height:1.5rem;">
<path d="M17.5101 3.8701L15.7301 2.1001L5.84009 12.0001L15.7401 21.9001L17.5101 20.1301L9.38009 12.0001L17.5101 3.8701Z"></path>
</svg> <span class="sr-only">Back</span>
</button>
<button type="button" class="nav-mobile-menu-close">
<i class="material-icons">close</i>
<span class="sr-only">Close navigation menu</span>
</button>
</div>
<div class="nav-mobile-menu-body">
<ul>
<li class="nav-mobile-menu-group-title"><span class="typography-title-md text-neutral-subdued">Collections</span></li>
<li><a href="https://next.nexusmods.com/daggerfallunity/collections?sortBy=total_downloads" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">All collections</p></a></li>
<li><a href="https://next.nexusmods.com/daggerfallunity/collections?sortBy=listed_at" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Recently added</p></a></li>
<li><a href="https://next.nexusmods.com/daggerfallunity/collections?sortBy=endorsements_count" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Most endorsed</p></a></li>
<li><a href="https://next.nexusmods.com/daggerfallunity/collections?sortBy=overall_rating" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Highest rated</p></a></li>
</ul>
</div>
</div></li>
<li><button class="nav-mobile-menu-item text-neutral-strong">
<p class="typography-body-xl">Media</p>
<i class="material-icons">chevron_right</i>
</button>
<div class="nav-mobile-menu-child">
<div class="nav-mobile-menu-header">
<button type="button" class="nav-mobile-menu-back">
<svg class="nav-back-icon" viewBox="0 0 24 24" role="presentation" style="width:1.5rem;height:1.5rem;">
<path d="M17.5101 3.8701L15.7301 2.1001L5.84009 12.0001L15.7401 21.9001L17.5101 20.1301L9.38009 12.0001L17.5101 3.8701Z"></path>
</svg> <span class="sr-only">Back</span>
</button>
<button type="button" class="nav-mobile-menu-close">
<i class="material-icons">close</i>
<span class="sr-only">Close navigation menu</span>
</button>
</div>
<div class="nav-mobile-menu-body">
<ul>
<li class="nav-mobile-menu-group-title"><span class="typography-title-md text-neutral-subdued">Images</span></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/images" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Latest</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/images/recentlyendorsed" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Trending</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/images/mostendorsed" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Most endorsed</p></a></li>
</ul>
<ul>
<li class="nav-mobile-menu-group-title"><span class="typography-title-md text-neutral-subdued">Videos</span></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/videos" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Latest</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/videos/recentlyendorsed" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Trending</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/videos/mostendorsed" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Most endorsed</p></a></li>
</ul>
</div>
</div></li>
<li><button class="nav-mobile-menu-item text-neutral-strong">
<p class="typography-body-xl">Community</p>
<i class="material-icons">chevron_right</i>
</button>
<div class="nav-mobile-menu-child">
<div class="nav-mobile-menu-header">
<button type="button" class="nav-mobile-menu-back">
<svg class="nav-back-icon" viewBox="0 0 24 24" role="presentation" style="width:1.5rem;height:1.5rem;">
<path d="M17.5101 3.8701L15.7301 2.1001L5.84009 12.0001L15.7401 21.9001L17.5101 20.1301L9.38009 12.0001L17.5101 3.8701Z"></path>
</svg> <span class="sr-only">Back</span>
</button>
<button type="button" class="nav-mobile-menu-close">
<i class="material-icons">close</i>
<span class="sr-only">Close navigation menu</span>
</button>
</div>
<div class="nav-mobile-menu-body">
<ul>
<li class="nav-mobile-menu-group-title"><span class="typography-title-md text-neutral-subdued">Community</span></li>
<li><a href="https://forums.nexusmods.com/forum/8406-modding-discussion" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Forums</p></a></li>
<li><a href="https://wiki.nexusmods.com/index.php/Main_Page" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Wiki</p></a></li>
<li><a href="https://www.patreon.com/nexusmods" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Support authors</p></a></li>
</ul>
<ul>
<li class="nav-mobile-menu-group-title"><span class="typography-title-md text-neutral-subdued">News</span></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/news" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">All news</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/news?tab=site+news" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Site news</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/news?tab=competition" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Competitions</p></a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/news?tab=interviews" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Interviews</p></a></li>
</ul>
<div class="nav-social-links">
<a target="_blank" rel="noreferrer" href="https://discord.gg/nexusmods" title="Join us on Discord">
<img class="icon" alt="Discord" src="/assets/images/footer/Discord.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://twitter.com/nexussites" title="Follow us on Twitter">
<img class="icon" alt="Twitter" src="/assets/images/footer/Twitter.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.tiktok.com/@nexusmodsofficial" title="Follow us on TikTok">
<img class="icon" alt="TikTok" src="/assets/images/footer/TikTok.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.twitch.tv/nexusmodsofficial" title="Follow us on Twitch">
<img class="icon" alt="Twitch" src="/assets/images/footer/Twitch.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.youtube.com/@NexusModsOfficial" title="Follow us on Youtube">
<img class="icon" alt="Youtube" src="/assets/images/footer/Youtube.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.instagram.com/nexusmodsofficial" title="Follow us on Instagram">
<img class="icon" alt="Instagram" src="/assets/images/footer/Instagram.svg">
</a>
</div>
</div>
</div></li>
<li><button class="nav-mobile-menu-item text-neutral-strong">
<p class="typography-body-xl">Support</p>
<i class="material-icons">chevron_right</i>
</button>
<div class="nav-mobile-menu-child">
<div class="nav-mobile-menu-header">
<button type="button" class="nav-mobile-menu-back">
<svg class="nav-back-icon" viewBox="0 0 24 24" role="presentation" style="width:1.5rem;height:1.5rem;">
<path d="M17.5101 3.8701L15.7301 2.1001L5.84009 12.0001L15.7401 21.9001L17.5101 20.1301L9.38009 12.0001L17.5101 3.8701Z"></path>
</svg> <span class="sr-only">Back</span>
</button>
<button type="button" class="nav-mobile-menu-close">
<i class="material-icons">close</i>
<span class="sr-only">Close navigation menu</span>
</button>
</div>
<div class="nav-mobile-menu-body">
<ul>
<li class="nav-mobile-menu-group-title"><span class="typography-title-md text-neutral-subdued">Support</span></li>
<li><a href="https://help.nexusmods.com/" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Help</p></a></li>
<li><a href="https://help.nexusmods.com/article/125-contact-us" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Contact</p></a></li>
<li><a href="https://feedback.nexusmods.com/" rel="noreferrer" target="_blank" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Give feedback</p></a></li>
<li><a href="https://help.nexusmods.com/category/26-frequently-asked-questions" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">FAQ</p></a></li>
</ul>
<ul>
<li class="nav-mobile-menu-group-title"><span class="typography-title-md text-neutral-subdued">Wiki</span></li>
<li><a href="https://wiki.nexusmods.com/index.php/Games" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Game guides</p></a></li>
<li><a href="https://wiki.nexusmods.com/index.php/Category:Tutorials" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Tutorial</p></a></li>
<li><a href="https://modding.wiki/en/nexusmods/collections" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Collections</p></a></li>
<li><a href="https://wiki.nexusmods.com/index.php/Category:Tools" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Tools</p></a></li>
</ul>
<ul>
<li class="nav-mobile-menu-group-title"><span class="typography-title-md text-neutral-subdued">Vortex</span></li>
<li><a href="https://wiki.nexusmods.com/index.php/Category:Vortex" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Vortex help</p></a></li>
<li><a href="https://app.swaggerhub.com/apis-docs/NexusMods/nexus-mods_public_api_params_in_form_data/1.0#/" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">API documentation</p></a></li>
<li><a href="https://www.nexusmods.com/about/vortex/" class="nav-mobile-menu-item text-neutral-strong"><p class="typography-body-xl">Install Vortex</p></a></li>
</ul>
</div>
</div></li>
</ul>
</div>
</div>
<div class="nav-mobile-search">
<form class="nav-mobile-search-form" method="POST" action="https://www.nexusmods.com/daggerfallunity/search/">
<input type="hidden" name="currentgame" value="2927">
<div class="nav-mobile-search-form-input-wrapper">
<input type="text" placeholder="Search Daggerfall Unity" name="gsearch" autocomplete="off">
<div>
<button class="nav-mobile-search-button">
<i class="material-icons">search</i>
</button>
</div>
</div>
<div class="nav-scrollbar nav-mobile-search-categories-wrapper">
<input id="searchtype" type="hidden" name="gsearchtype" value="mods">
<div class="nav-mobile-search-categories" role="radiogroup">
<button type="button" class="nav-mobile-search-category" role="radio" aria-checked="true" data-category-value="mods">
<i class="material-icons">check</i>
<i class="user-profile-menu-icon-mods"></i>
<span class="typography-body-md">Mods</span>
</button>
<!-- <button type="button" class="nav-mobile-search-category" role="radio" data-category-value="collections">
<i class="material-icons">check</i>
<i class="user-profile-menu-icon-collections"></i>
<span class="typography-body-md">Collections</span>
</button> -->
<button type="button" class="nav-mobile-search-category" role="radio" data-category-value="games">
<i class="material-icons">check</i>
<i class="user-profile-menu-icon-games"></i>
<span class="typography-body-md">Games</span>
</button>
<button type="button" class="nav-mobile-search-category" role="radio" data-category-value="images">
<i class="material-icons">check</i>
<i class="material-icons">image</i>
<span class="typography-body-md">Images</span>
</button>
<button type="button" class="nav-mobile-search-category" role="radio" data-category-value="videos">
<i class="material-icons">check</i>
<i class="material-icons">video_call</i>
<span class="typography-body-md">Videos</span>
</button>
<button type="button" class="nav-mobile-search-category" role="radio" data-category-value="authors">
<i class="material-icons">check</i>
<i class="material-icons">person</i>
<span class="typography-body-md">Users</span>
</button>
</div>
</div>
</form>
</div>
<div class="nav-mobile-profile">
<div class="nav-mobile-profile-header">
<div class="rj-mobile-menu-spacer"></div>
<div class="rj-mobile-menu-game">
<div class="rj-logo-center">
<a class="headlogo" href="/" alt="Nexus Mods" title="Nexus Mods">
<svg xmlns="http://www.w3.org/2000/svg" style="width:148px; height:35px;" version="1.1" x="0px" y="0px" viewBox="0 0 698.3 162.5">
<g>
<g>
<g>
<path d="M44.4,162.5c-0.6,0-1.3,0-1.9-0.1c-1.5-0.2-2.9-0.5-4.5-1c-2.8-0.9-5.2-2.2-6.9-3.2c-3.8-2.2-7.7-4.9-11.8-8.3 c-1.8-1.5-3.6-3.1-5.3-4.7l-1.4-1.4c-1-0.9-1.9-1.9-2.6-3c-1.3-2-2.4-4.6-2.5-8c-0.1-1.1-0.2-2.2-0.2-3.4c0-2.4,0.1-5,0.5-7.5 c0.7-5.2,2.4-9.8,3.7-13.3c0.1-0.3,0.2-0.6,0.3-0.9c-0.4-0.9-0.7-1.9-1.1-2.9C8.9,99.6,7.7,93.8,7.1,88 c-0.6-6.1-0.4-12.3,0.5-18.4c0.2-1.3,0.4-2.6,0.7-3.8C5.9,62.3,2.9,57.3,1,51.5l0-0.1c-0.4-1.2-1.4-4.2-0.8-8 c0.2-1.4,0.5-2.8,1-4.3c0.9-2.8,2.2-5.1,3.2-6.8c2.2-3.8,4.9-7.6,8.2-11.7c1.5-1.8,3-3.6,4.6-5.2l1.4-1.4 c0.7-0.8,1.5-1.5,2.4-2.1c2-1.5,4.8-2.8,8.6-2.9c1.2-0.1,2.5-0.2,3.8-0.2h0.1c2.5,0,5.2,0.2,7.8,0.6c4,0.6,7.6,1.7,10.8,2.9 c2.1-0.9,4.3-1.7,6.6-2.5C64.1,8,69.9,6.8,75.7,6.4C81.8,5.9,88,6.2,93.9,7.2c1.4,0.2,2.8,0.5,4.2,0.8c4.7-3.2,9-5.5,13.5-6.9 l0.1,0c1-0.4,3.2-1.1,6.1-1.1c0.6,0,1.3,0,1.9,0.1c1.5,0.2,2.9,0.5,4.5,1c2.8,0.9,5.2,2.2,6.9,3.2c3.8,2.2,7.7,4.9,11.8,8.3 c1.8,1.5,3.6,3.1,5.3,4.7l1.4,1.4c0.7,0.6,1.4,1.3,1.9,2.1c1.8,2.3,3.2,5.6,3.3,10.2c0.1,1.6,0.1,3.3,0,5 c-0.2,3.7-0.7,7.2-1.6,10.4c-0.7,2.4-1.5,4.8-2.4,7.2c1.8,4.5,3.1,9.1,4,13.8c1.8,9.9,1.6,20.1-0.6,29.9c1.3,1.9,2.5,3.7,3.5,5.5 c1.7,3,3.1,6.1,4.1,9.3c0.4,1.2,1.3,4.2,0.7,8.2c-0.2,1.4-0.6,2.7-1.1,4.2c-1.8,5.1-4.6,9.3-7.1,12.8c-2.7,3.8-5.8,7.5-9,10.9 l-1.2,1.2c-0.7,0.8-1.5,1.5-2.4,2.2c-2,1.5-4.8,2.7-8.6,2.9c-1.2,0.1-2.5,0.2-3.8,0.2h-0.1c-2.7,0-5.4-0.2-8.2-0.7 c-4.5-0.7-8.5-2.1-12.1-3.5c-1.9,0.8-3.9,1.5-5.8,2.1c-5.6,1.7-11.5,2.8-17.4,3.1c-6.1,0.4-12.3-0.1-18.3-1.2 c-0.7-0.1-1.5-0.3-2.2-0.4c-5.2,3.7-9.8,6.1-14.6,7.7l-0.1,0C49.5,161.7,47.3,162.5,44.4,162.5L44.4,162.5z M24.6,134.1l10.6,3.7 c0.9-2.6,1-5.4,0.4-8c0,0.2,0,0.5,0.1,0.7c0,0.3,0.1,0.7,0.1,1.1c-0.1-2-0.8-4.6-2.6-7c-0.7-0.9-1.5-1.7-2.4-2.4l0.5,0.4l0.9,0.9 c-0.8-0.8-1.7-1.6-2.7-2.3L24.6,134.1L24.6,134.1z M123.7,129.4c-0.8,0.8-1.6,1.6-2.3,2.7l11.9,4.6l0-11.1c0,0,0,0,0,0 c-1.1,0-2.2,0.1-3.2,0.4c0.2,0,0.4,0,0.6,0c0.3,0,0.7-0.1,1.1-0.1c-1.8,0.1-4.2,0.7-6.4,2.1c-1.2,0.8-2.2,1.7-3.1,2.9l0.4-0.5 L123.7,129.4L123.7,129.4z M35.8,126.8c0.5,0.4,1,0.8,1.5,1.3c2.6,2.2,5,3.9,7.2,5.2c1.4-0.7,3-1.7,4.7-3 c0.5-0.3,0.9-0.7,1.4-1.1c0.3-0.2,0.5-0.5,0.8-0.7c0.1-0.1,0.3-0.3,0.4-0.4l6.2-6.3l8.4,2.9c0.3,0.1,0.6,0.2,0.8,0.3 c1.8,0.6,3.6,1,5.4,1.4c3.7,0.7,7.6,1,11.4,0.7c3.6-0.2,7.3-0.9,10.7-1.9c1.7-0.5,3.4-1.1,5-1.9c0.8-0.3,1.6-0.7,2.3-1.1 c2-1,4.3-1.6,6.6-1.6c3.6,0,6.3,1.3,7.6,2c0.4,0.2,0.8,0.4,1.3,0.5c2.5,1,5.4,2.2,8,2.6c0.4,0.1,0.9,0.1,1.3,0.2 c1.5-1.7,2.9-3.5,4.2-5.3c0.8-1.1,1.6-2.2,2.3-3.3c-0.1-0.2-0.2-0.4-0.4-0.7c-0.7-1.2-1.5-2.4-2.5-3.9c-0.3-0.5-0.7-0.9-1.1-1.4 c-0.2-0.2-0.3-0.4-0.5-0.6c-4.1-4-5.5-9.7-3.6-15.1c0.1-0.3,0.2-0.6,0.3-0.8c2.3-7.2,2.7-14.9,1.4-22.3c-0.7-3.5-1.7-7-3.2-10.3 c-0.1-0.3-0.3-0.6-0.4-0.9c-3.3-6.1-1.9-11.3-0.7-13.8c0.5-1,0.9-2.1,1.3-3.1c0.8-1.9,1.4-3.9,2-5.7c0.2-0.9,0.4-1.8,0.5-2.9 c-0.5-0.4-1-0.8-1.5-1.3c-2.7-2.2-5-3.9-7.2-5.2c-1.4,0.8-3,1.8-4.8,3c-0.5,0.4-1,0.8-1.5,1.2c-0.1,0.1-0.3,0.2-0.4,0.4 c-2.7,2.6-6.3,4-10,4c-1.8,0-3.5-0.3-5.2-1c-0.4-0.1-0.8-0.3-1.2-0.4c-1.8-0.5-3.6-1-5.5-1.3c-3.7-0.6-7.6-0.8-11.4-0.5 c-3.6,0.3-7.2,1-10.6,2.1c-1.7,0.5-3.3,1.2-4.9,1.9c-0.8,0.3-1.5,0.7-2.3,1.1L59.5,40c-2.1,1.2-4.6,1.8-7,1.8 c-2.2,0-4.4-0.5-6.5-1.5c-0.5-0.2-0.9-0.4-1.4-0.6c-2.4-1-5.3-2.1-7.8-2.4c-0.4-0.1-0.8-0.1-1.1-0.2c-0.4,0.5-0.8,1-1.2,1.4 c-2.2,2.7-3.9,5-5.2,7.3c0.7,1.4,1.7,2.9,2.9,4.7c0.3,0.5,0.7,1,1.1,1.4c0.2,0.3,0.5,0.5,0.7,0.8l5.8,6.1l-2.5,8 c-0.2,0.5-0.3,1-0.5,1.5c-0.5,1.8-0.9,3.7-1.2,5.6c-0.6,3.8-0.7,7.6-0.3,11.5c0.3,3.6,1.1,7.2,2.3,10.6c0.6,1.7,1.3,3.3,2,4.9 c0.1,0.2,0.2,0.4,0.3,0.6c2.1,4.3,2.1,9.1-0.1,13.4c-0.2,0.4-0.4,0.8-0.5,1.2c-0.4,1-0.9,2-1.3,3c-0.8,2.2-1.8,4.8-2.1,7.1 C35.9,126.3,35.8,126.6,35.8,126.8L35.8,126.8z M129.9,38.8c0.8,0.8,1.7,1.6,2.8,2.4l4.9-12.9L127,24.6c-0.9,2.6-1,5.4-0.4,8 c0-0.1,0-0.2,0-0.3c0-0.3,0-0.8,0-1.3v-0.1c0,1.5,0.5,4,2.1,6.4c0.8,1.1,1.7,2.1,2.8,3l-0.5-0.4L129.9,38.8L129.9,38.8z M29.3,26.3l0,11.1c1.1,0,2.2-0.1,3.2-0.4c-0.2,0-0.4,0-0.6,0c-0.3,0-0.7,0.1-1.1,0.1c1.8-0.1,4.2-0.7,6.4-2.1 c1.2-0.8,2.2-1.7,3.1-2.9l-0.4,0.5l-0.9,1c0.8-0.8,1.6-1.7,2.3-2.7L29.3,26.3L29.3,26.3z"></path>
</g>
</g>
<g>
<g>
<g>
<path class="theme-secondary" d="M56.3,88.4l0.7,28.3l-7-5.7c-7.8,12.7-10.3,25-6.6,34.1l1.3,3.2l-3.2-1.4c-7.3-3.2-13.9-7.7-19.4-13.5 l-0.3-0.3l-0.1-0.5c-0.4-3.5-0.2-7.3,0.7-11.2l0-0.1c1.3-4.9,3.2-9.8,5.6-14.7c1.5-3.1,3.3-6.2,5.3-9.2l-6.1-5L56.3,88.4z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M105.9,74.1l-0.7-28.3l7,5.7c7.8-12.7,10.3-25,6.6-34.1l-1.3-3.2l3.2,1.4c7.3,3.2,13.9,7.7,19.4,13.5 l0.3,0.3l0.1,0.5c0.4,3.5,0.2,7.3-0.7,11.2l0,0.1c-1.3,4.9-3.2,9.8-5.6,14.7c-1.5,3.1-3.3,6.2-5.3,9.2l6.1,5L105.9,74.1z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M88.5,105.4l28.3-0.7l-5.7,7c12.7,7.8,25,10.3,34.1,6.6l3.2-1.3l-1.4,3.2c-3.2,7.3-7.7,13.9-13.5,19.4 l-0.3,0.3l-0.5,0.1c-3.5,0.4-7.3,0.2-11.2-0.7l-0.1,0c-4.9-1.3-9.8-3.2-14.7-5.6c-3.1-1.5-6.2-3.3-9.2-5.3l-5,6.1L88.5,105.4z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M74.1,57.6l-28.3,0.7l5.7-7c-12.7-7.8-25-10.3-34.1-6.6L14.3,46l1.4-3.2c3.2-7.3,7.7-13.9,13.5-19.4 l0.3-0.3L30,23c3.5-0.4,7.3-0.2,11.2,0.7l0.1,0c4.9,1.3,9.8,3.2,14.7,5.6c3.1,1.5,6.2,3.3,9.2,5.3l5-6.1L74.1,57.6z"></path>
</g>
</g>
<g>
<g>
<circle class="theme-primary" cx="81.4" cy="80.8" r="60.5"></circle>
</g>
</g>
<g>
<path style="fill:#ffffff" d="M59.3,59.5c-3.5-1.6-6.1-3.2-8.7-5.1c-4-2.8-7.7-5.9-10.8-9.2c-7.6-7.7-11.6-15.6-10.5-22.1L27,25.6 c-5.5,5.8-12.8,16-12.9,20.4c0.1,0.5,0.1,0.5,0.1,0.5c1,3.4,2.6,6.8,4.9,10.1l0,0.1c3,4.8,8.9,12.7,29.9,21.9l-3.7,7l28.3-7.6 L63.5,51.5L59.3,59.5z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M103.3,103.5c3.5,1.6,6.1,3.2,8.7,5.1c4,2.8,7.7,5.9,10.8,9.2c7.6,7.7,11.6,15.6,10.5,22.1l2.3-2.4 c5.5-5.8,12.8-16,12.9-20.4c-0.1-0.5-0.1-0.5-0.1-0.5c-1-3.4-2.6-6.8-4.9-10.1l0-0.1c-3-4.8-8.9-12.7-29.9-21.9l3.7-7l-28.3,7.6 l10.2,26.2L103.3,103.5z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M104,59.3c1.6-3.5,3.2-6.1,5.1-8.7c2.8-4,5.9-7.7,9.2-10.8c7.7-7.6,15.6-11.6,22.1-10.5L138,27 c-5.8-5.5-16-12.8-20.4-12.9c-0.5,0.1-0.5,0.1-0.5,0.1c-3.4,1-6.8,2.6-10.1,4.9l-0.1,0c-4.8,3-12.7,8.9-21.9,29.9l-7-3.7 l7.6,28.3L112,63.6L104,59.3z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M58.2,103.2c-1.6,3.5-3.2,6.1-5.1,8.7c-2.8,4-5.9,7.7-9.2,10.8c-7.7,7.6-15.6,11.6-22.1,10.5l2.4,2.3 c5.8,5.5,16,12.8,20.4,12.9c0.5-0.1,0.5-0.1,0.5-0.1c3.4-1,6.8-2.6,10.1-4.9l0.1,0c4.8-3,12.7-8.9,21.9-29.9l7,3.7l-7.6-28.3 L50.3,98.9L58.2,103.2z"></path>
</g>
</g>
</g>
<g class="logo-brand-name">
<path style="fill:#ffffff" d="M198.6,131.3h-6V31.9h8.5l29.8,83.9V31.9h6v99.4h-7.2l-31.1-88.6V131.3z"></path>
<path style="fill:#ffffff" d="M281.1,77.9v6h-27.1v41.5h32.7v6h-39.2V31.9h39.2v6h-32.7v40H281.1z"></path>
<path style="fill:#ffffff" d="M321.8,85l-20.2,46.3h-6.4l22.4-51.5l-20.9-47.8h6.8l18.7,42.7l18.9-42.7h6.2l-20.9,47.8l22.3,51.5h-7 L321.8,85z"></path>
<path style="fill:#ffffff" d="M364.5,107.3c0,10.6,4,18.9,14.9,18.9s14.9-8.2,14.9-18.9V31.9h6.1V107c0,14.2-6,25.1-21.2,25.1 c-15.2,0-21.3-10.9-21.3-25.1V31.9h6.5V107.3z"></path>
<path style="fill:#ffffff" d="M452.8,55.9v2.1h-6.2v-2.6c0-10.5-4-18.5-14.8-18.5c-10.8,0-14.8,7.8-14.8,18.3c0,24.1,35.9,24.6,35.9,52 c0,14.3-6.2,24.8-21.4,24.8s-21.4-10.5-21.4-24.8v-5.1h6.2v5.5c0,10.6,4.1,18.3,15,18.3s15-7.7,15-18.3c0-23.9-35.9-24.3-35.9-52 c0-14.9,6.5-24.6,21.2-24.7C446.7,31.1,452.8,41.6,452.8,55.9z"></path>
<path class="theme-primary" d="M495.8,102.5l10.6-70.6h21.7v99.4h-14.8V60.1l-10.8,71.3h-14.8l-11.6-70.3v70.3h-13.6V31.9h21.7L495.8,102.5z"></path>
<path class="theme-primary" d="M537.6,55.8c0-15.9,8.4-25,23.7-25c15.3,0,23.7,9.1,23.7,25v51.7c0,15.9-8.4,25-23.7,25 c-15.3,0-23.7-9.1-23.7-25V55.8z M553.2,108.5c0,7.1,3.1,9.8,8.1,9.8s8.1-2.7,8.1-9.8V54.8c0-7.1-3.1-9.8-8.1-9.8s-8.1,2.7-8.1,9.8 V108.5z"></path>
<path class="theme-primary" d="M594.4,31.9h24.7c15.6,0,23.3,8.7,23.3,24.6v50.3c0,15.9-7.7,24.6-23.3,24.6h-24.7V31.9z M610,46.1v71h8.8 c5,0,7.9-2.6,7.9-9.7V55.8c0-7.1-3-9.7-7.9-9.7H610z"></path>
<path class="theme-primary" d="M672.6,30.8c15.2,0,23,9.1,23,25v3.1h-14.8v-4.1c0-7.1-2.8-9.8-7.8-9.8c-5,0-7.8,2.7-7.8,9.8 c0,20.4,30.5,24.3,30.5,52.7c0,15.9-8,25-23.3,25c-15.3,0-23.3-9.1-23.3-25v-6.1h14.8v7.1c0,7.1,3.1,9.7,8.1,9.7s8.1-2.6,8.1-9.7 c0-20.4-30.5-24.3-30.5-52.7C649.6,39.9,657.4,30.8,672.6,30.8z"></path>
</g>
</svg> </a>
</div>
</div>
<button type="button" class="nav-mobile-menu-close">
<i class="material-icons">close</i>
<span class="sr-only">Close navigation menu</span>
</button>
</div>
<div class="nav-mobile-menu-body">
<div class="please-log-in">
<h1>Please log in or register</h1>
<p>To enjoy the benefits of Nexus Mods, please log in or register a new account</p>
<a class="rj-btn rj-btn-outline rj-btn-full" href="https://users.nexusmods.com/auth/sign_in?redirect_url=https%3A%2F%2Fwww.nexusmods.com%2Fdaggerfallunity%2Fmods%2F117">Log in</a>
<a class="rj-btn rj-btn-standard rj-btn-full" href="https://users.nexusmods.com/register">Register</a>
</div>
</div>
</div>
<div class="nav-mobile-notifications">
<div class="nav-mobile-notifications-header">
<div></div>
<button type="button" class="nav-mobile-menu-close">
<i class="material-icons">close</i>
<span class="sr-only">Close navigation menu</span>
</button>
</div>
<div class="nav-mobile-menu-body">
<div class="notifications-content-wrapper">
<div class="notifications-header">
<div class="notifications-header-left">
<i class="nmicon-notification"></i>
<span>Notifications</span>
</div>
<div class="notifications-header-right">
<button class="notifications-clear">Mark all as read (<span class="total-count">0</span>)</button>
<a href="https://next.nexusmods.com/settings/notifications" class="notification-preferences-button">
<img src="/assets/images/icons/notifications/preferences-cog.svg" alt="Notification preferences" title="Notification preferences">
</a>
</div>
</div>
<div id="notifications-body" class="notifications-body">
<div class="notifications-list">
<div class="notifications-error">
<button class="notifications-error__banner js-refresh-notifications custom-button" type="button">
<i class="material-icons notifications-error__icon">error_outline</i>
<div class="notifications-error__text">
<p class="notifications-error__header">Oh dear! Something has gone wrong!</p>
<p class="notifications-error__subheader">Try reloading the notifications.</p>
</div>
<i class="material-icons notifications-error__icon">refresh</i>
</button>
<i class="material-icons notifications-error__placeholder">notifications_off</i>
</div>
<ul>
</ul>
<div class="no-notifications">
<i class="nmicon-notification"></i>
<p>No unread notifications right now</p>
<span>You're up to date</span>
</div>
</div>
<div class="notification-load-more">
<a href="https://next.nexusmods.com/notifications/all" class="rj-btn rj-btn-full rj-btn-outline notifications-load-more custom-button" type="button">View All</a>
</div>
<div class="notification-up-to-date">
<p>You're up to date</p>
</div>
</div>
</div> </div>
</div></header>
<script>
function setDismissedCookie(id) {
alert('If you change your mind, clear your cookies to see this banner again.');
Cookies.set(id, 'false', { expires: 90 });
document.querySelector(`#${id}`).style.display = 'none';
}
let gamesList = [];
let gamesListMap = {};
let gamesListPromise = null;
function populateGamesList() {
if (gamesListPromise === null) {
gamesListPromise = fetch('https://data.nexusmods.com/file/nexus-data/games.json').then(function (response) {
if (!response.ok) {
throw new Error();
}
return response.json();
}).catch(function () {
return fetch('/assets/files/games.json').then(function (response) {
if (!response.ok) {
return [];
}
return response.json();
}).catch(function () {
return [];
});
});
}
return gamesListPromise;
}
async function getGamesList() {
if (gamesList.length == 0) {
gamesList = await populateGamesList();
gamesListMap = gamesList.reduce(function (acc, game) {
acc[game.id] = game
return acc
}, {})
}
return gamesList;
}
async function getGamesListMap() {
await getGamesList()
return gamesListMap;
}
</script>
<script type="text/javascript">
function getIcon(notification) {
const genericIcons = {
false: {
friend_request_was_accepted: "/assets/images/icons/notifications/friendship-new.svg",
friend_request_was_sent: "/assets/images/icons/notifications/friendship-new.svg",
image_was_placed_under_review: "/assets/images/icons/notifications/moderation-icon.svg",
mod_was_placed_under_review: "/assets/images/icons/notifications/moderation-icon.svg",
article_was_published: "/assets/images/icons/notifications/nm-logo.svg",
supporter_image_was_placed_under_review: "/assets/images/icons/notifications/moderation-icon.svg",
video_was_placed_under_review: "/assets/images/icons/notifications/moderation-icon.svg",
donation_points_report_was_published: "/assets/images/icons/notifications/donation-points.svg",
donation_points_were_paid: "/assets/images/icons/notifications/donation-points.svg",
collection_was_listed: "/assets/images/icons/notifications/moderation-icon.svg",
collection_moderation_fix_was_rejected: "/assets/images/icons/notifications/moderation-icon.svg",
mod_author_reward_premium_was_given: "/assets/images/icons/notifications/party-popper.svg",
mod_author_reward_lifetime_premium_was_given: "/assets/images/icons/notifications/party-popper.svg",
},
true: { // moderated_by_admin
mod_image_was_deleted: "/assets/images/icons/notifications/moderation-icon.svg",
mod_video_was_deleted: "/assets/images/icons/notifications/moderation-icon.svg",
mod_file_was_deleted: "/assets/images/icons/notifications/moderation-icon.svg",
mod_file_was_archived: "/assets/images/icons/notifications/moderation-icon.svg",
mod_was_hidden: "/assets/images/icons/notifications/moderation-icon.svg",
mod_article_was_deleted: "/assets/images/icons/notifications/moderation-icon.svg",
mod_readme_was_removed: "/assets/images/icons/notifications/moderation-icon.svg",
}
};
const { type, moderated_by_admin = false } = notification;
let iconPath;
let iconClass;
if (Object.keys(genericIcons[moderated_by_admin]).includes(type)) {
iconPath = genericIcons[moderated_by_admin][type];
iconClass = 'notification-category-generic-icon';
}
if (notification.imageUrl) {
iconPath = notification.imageUrl;
iconClass = 'notification-category-specific-icon';
}
if (!iconPath) {
iconPath = "/assets/images/icons/notifications/nm-logo.svg";
iconClass = 'notification-category-generic-icon';
}
return `<img class='${iconClass}' src='${iconPath}' />`;
}
function renderNotificationContent(notification) {
const renderFunctions = [
window.renderSystemNotificationContent,
window.renderContentNotificationContent,
window.renderUserInteractionNotificationContent,
window.renderSiteNotificationContent,
];
for (const renderFunction of renderFunctions) {
const renderedNotification = renderFunction({ group: notification });
if (typeof renderedNotification != "undefined") {
return renderedNotification.outerHTML;
}
}
}
function getNotificationTileFromContext(notification) {
const notificationContent = renderNotificationContent(notification);
if (typeof notificationContent == "undefined") {
return;
}
const { isRead, id, updatedAt, linkUrl, notifications = [] } = notification;
const game_name = notifications.reduce((acc, curr) => {
const { context: { game_name= '' } } = curr;
if (game_name != '' && (acc == '' || game_name == acc)) {
return game_name;
}
return '';
}, '');
return `
<li class='notification-wrapper ${isRead ? 'notification-read' : 'notification-unread'}' data-notification-id='${id}'>
<div>
<div class='notification' data-notification-id='${id}'>
<a href='${linkUrl}' class='notification-link' data-notification-id='${id}'>
<div class='notification-category-icon-wrapper'>${getIcon(notification)}</div>
<div class='notification-content'>
${notificationContent}
<div class='notification-date'>
<span>${timeAgo(updatedAt)} ago</span>
${game_name != '' ? `<span>• ${game_name}</span>` : ''}
</div>
</div>
</a>
<div class='notification-menu-wrapper'>
<button id='notification-${id}-menu-button' aria-controls='notification-${id}-menu' class='notification-menu-button custom-button expanding-hover' title='Options'>
<img src='/assets/images/icons/notifications/menu-icon.svg' />
</button>
</div>
</div>
<div id='notification-${id}-menu' class='notification-menu' data-notification-id='${id}'>
<div id='notification-${id}-mark-as-read' class='notification-menu-row notification-mark-as-read' data-notification-id='${id}'>
<div class='notification-menu-icon-wrapper'>
<img class='notification-menu-icon' src='/assets/images/icons/notifications/tick.svg' />
</div>
<button class='notification-menu-text custom-button'> Mark as read </button>
</div>
<div id='notification-${id}-mark-as-unread' class='notification-menu-row notification-mark-as-unread' data-notification-id='${id}'>
<div class='notification-menu-icon-wrapper'>
<img class='notification-menu-icon' src='/assets/images/icons/notifications/tick.svg' />
</div>
<button class='notification-menu-text custom-button'> Mark as unread </button>
</div>
<div id='notification-${id}-remove' class='notification-menu-row notification-remove'>
<div class='notification-menu-icon-wrapper'>
<img class='notification-menu-icon' src='/assets/images/icons/notifications/bin-icon.svg' />
</div>
<button class='notification-menu-text custom-button'> Delete notification </button>
</div>
</div>
</div>
</li>
`;
}
</script>
<!-- Styles for all notification cards can go here -->
<style>
.notification {
display: flex;
font-size: 14px;
color: white;
width: 100%;
justify-content: space-between;
}
.notification-link {
width: 80%;
}
.notification-category-icon-wrapper {
width: 15%;
}
.notification-category-specific-icon {
border-radius: 20px;
object-fit: cover;
object-position: center;
}
.notification-category-generic-icon,
.notification-category-specific-icon {
width: 30px;
height: 30px;
}
.notification-content {
width: 85%;
}
.notifications-list ul li .notification-bold, .notifications-list ul li .text-primary, .notifications-list ul li .text-primary-moderate {
display: inline;
font-weight: 600;
color: var(--rj-orange-font);
}
.notifications-list ul li .notification-content > div:first-child {
min-height: 40px;
}
.notification-row {
margin-bottom: 10px;
}
.notification-date {
font-size: 12px;
color: rgba(255, 255, 255, 0.6);
}
.notification-icon {
border-radius: 21px;
height: 42px;
width: 42px;
background-repeat: no-repeat;
background-size: 42px 42px;
margin-right: 10px;
}
.notification-indicator-wrapper {
height: 100%;
width: 12%;
}
.notification-indicator-box {
visibility: hidden;
width: 24px;
height: 24px;
margin: auto;
display: flex;
justify-content: center;
align-items: center;
}
.expanding-hover {
position: relative;
}
.expanding-hover::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
height: 0;
width: 0;
border-radius: 100%;
background-color: var(--rj-white-30);
transition-property: height, width, top, left;
transition-duration: 0.25s;
transition-timing-function: ease-in-out;
}
.expanding-hover:hover::before {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.notification-wrapper.notification-unread .notification-indicator-box {
visibility: visible;
}
.notification-indicator {
border-radius: 4px;
width: 8px;
height: 8px;
margin: auto;
background: var(--rj-orange-font);
padding: 0;
border: 0;
}
.icons-row {
display: flex
}
.notification-menu-wrapper {
width: 8%;
display: flex;
height: 24px;
justify-content: center;
}
.notification-menu-button {
width: 24px;
background: none;
border: 0;
padding: 0;
}
.notification-menu-hidden {
display: hidden;
}
.notification-menu {
background-color: var(--rj-nexusblack-high-contrast);
display: none;
font-family: Montserrat;
text-transform: uppercase;
font-weight: 400;
font-size: 14px;
line-height: 18px;
z-index: 1;
opacity: 1;
border-radius: 4px;
border: 1px solid #3E413F;
}
.notification-menu-row {
display: flex;
height: 48px;
align-items: center;
box-sizing: border-box;
padding: 12px 10px 12px 16px;
gap: 10px;
}
.notification-menu-row.notification-remove {
margin-top: 16px;
position: relative;
}
.notification-menu-row.notification-remove:before {
content: "";
background: #3C3F44;
height: 1px;
padding: 0;
position: absolute;
top: -8px;
left: 7px;
right: 7px;
}
.notification-menu-row:hover {
background-color: var(--rj-white-05);
}
.notification-mark-as-read,
.notification-mark-as-unread {
display: none;
}
.notification-wrapper.notification-unread .notification-mark-as-read {
display: flex;
}
.notification-wrapper.notification-read .notification-mark-as-unread {
display: flex;
}
.notification-menu-icon-wrapper {
padding: 0;
margin: 0;
width: 24px;
}
.notification-menu-icon {
padding: 0;
margin: 0;
width: 24px;
}
.notification-menu-text {
background: none;
border: 0;
text-transform: uppercase;
padding: 0;
margin: 0;
letter-spacing: 1.4px;
white-space: nowrap;
}
.notification-read .notification {
opacity: 0.5;
}
@media (min-width: 1024px) {
.notification-category-generic-icon,
.notification-category-specific-icon {
width: 35px;
height: 35px;
}
.notification-wrapper:hover .notification-menu-wrapper,
.notification-wrapper:focus-within .notification-menu-wrapper {
visibility: visible;
}
.notification-menu-wrapper {
visibility: hidden;
}
}
.notification-menu {
position: absolute;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
top: 47px;
right: 20px;
}
</style><div class="wrapper" id="mainContent"><div id="nn_skinl"></div><div id="nn_skinr"></div>
<div class="clearfix" style="text-align: center;background: #2d2d2d;">
<div class="ads">
<script>
$(document).ready(function() {
if(window.innerWidth < 1012) {
$('.demo-billboard').remove()
}
if(window.innerWidth >= 1012 && window.innerWidth < 1460) {
$('.demo-mrec').remove()
}
});
</script>
<div class="ad demo-mrec ad-unit ad-unit-TOP">
<div id="nn_player"></div>
</div>
</div>
<script>
if ( areAdsBlocked() === true )
{
$('.ads').remove();
document.write('<div class="hf0cd63ea33"> <a class="hf0cd63ea33-link" href="https://users.nexusmods.com/account/billing/premium"> <img class="hf0cd63ea33-billboard" src="https://www.nexusmods.com/assets/images/premiumbanner/billboard.png" alt="Get your mods and collections faster. No ads. No waiting. Go premium now."> <img class="hf0cd63ea33-mpu" src="https://www.nexusmods.com/assets/images/premiumbanner/mpu.png" alt="Get your mods and collections faster. No ads. No waiting. Go premium now."> </a> </div> <style> .hf0cd63ea33 { height: 260px; padding: 5px 10px; width: 100%; display: flex; justify-content: center; } .hf0cd63ea33-billboard { display: none; } .hf0cd63ea33-mpu { height: 250px; width: 300px; } @media (min-width: 1024px) { .hf0cd63ea33 { } .hf0cd63ea33-mpu { display: none; } .hf0cd63ea33-billboard { display: block; height: 250px; width: 970px; } } </style>');
$('body').on('click', '.hf0cd63ea33-link', function () {
window.nexusDataLayer = window.nexusDataLayer || [];
window.nexusDataLayer.push({
event: 'premium_banner_click',
});
});
}
</script>
</div>
<script src="https://code.highcharts.com/stock/js/highstock.js"></script>
<script src="../../../assets/javascripts/highcharts.flag.grouping.js"></script>
<script>
$(function () {
fillFromModStaticStats('.modpage');
});
</script>
<input type="hidden" id="page-link" name="page-link" value="https://www.nexusmods.com/daggerfallunity/mods/117">
<section id="section" class="modpage" data-game-id="2927" data-mod-id="117">
<div class="wrap clearfix">
<div id="featured">
<div id="feature">
<div class="img-wrapper header-img"> <img src="https://staticdelivery.nexusmods.com/mods/2927/images/headers/117_1598353497.jpg" class=""> </div> <div class="gradient"></div>
<div id="pagetitle" class="clearfix">
<ul id="breadcrumb" class="clearfix mod-crumb">
<li>
<a href="https://www.nexusmods.com/">
All games </a>
</li>
<li>
<a href="https://www.nexusmods.com/daggerfallunity">
Daggerfall Unity </a>
</li>
<li>
<a href="https://www.nexusmods.com/daggerfallunity/mods/">
Mods </a>
</li>
<li>
<a href="https://www.nexusmods.com/daggerfallunity/mods/categories/15/">
Companions </a>
</li>
<li>Pet Animal Companions</li>
</ul> <h1>Pet Animal Companions</h1>
<ul class="stats clearfix">
<li class="stat-endorsements">
<svg title="" class="icon-stat icon-stat-endorsements"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-stat-endorsements"></use></svg> <div class="statitem">
<div class="titlestat">Endorsements</div>
<div class="stat"><a title="See who endorsed this mod" class="popup-btn-ajax inline-flex" href="/Core/Libs/Common/Widgets/ModEndorsersPopUp?gameId=2927&modId=117" data-effect="mfp-zoom-in">75</a></div>
</div>
</li>
<li class="stat-uniquedls">
<svg title="" class="icon-stat icon-stat-uniquedl"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-stat-uniquedl"></use></svg> <div class="statitem">
<div class="titlestat">Unique DLs</div>
<div class="stat" data-mod-id="117">1,745</div>
</div>
</li>
<li class="stat-totaldls">
<svg title="" class="icon-stat icon-stat-totaldl"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-stat-totaldl"></use></svg> <div class="statitem">
<div class="titlestat">Total DLs</div>
<div class="stat" data-mod-id="117">9,024</div>
</div>
</li>
<li class="stat-totalviews">
<svg title="" class="icon-stat icon-stat-totalviews"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-stat-totalviews"></use></svg> <div class="statitem">
<div class="titlestat">Total views</div>
<div class="stat" data-mod-id="117">26,018</div>
</div>
</li>
<li class="stat-version">
<svg title="" class="icon-stat icon-stat-version"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-stat-version"></use></svg> <div class="statitem">
<div class="titlestat">Version</div>
<div class="stat">1.20</div>
</div>
</li>
</ul>
<ul class="modactions clearfix">
</ul>
</div>
</div>
</div>
<div class="wrap flex">
<div class="col-1-1 info-details">
<div id="sidebargallery" class="clearfix modimages">
<div class="btnfullscreen btnoverlay inline-flex">
<svg title="" class="icon-fullscreen"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-fullscreen"></use></svg> </div>
<div class="btnprev btnoverlay inline-flex" style="display: none;">
<svg title="" class="icon-arrow"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-arrow"></use></svg> </div>
<div class="btnnext btnoverlay inline-flex" style="display: none;">
<svg title="" class="icon-arrow"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-arrow"></use></svg> </div>
<div class="counter">
<span class="countvalue noselect">5 items</span>
</div>
<ul class="thumbgallery gallery clearfix" style="width: 790px; height: 109px; transform: translate3d(0px, 0px, 0px);">
<li class="thumb " data-src="https://staticdelivery.nexusmods.com/mods/2927/images/117/117-1598353538-958521904.jpeg" data-sub-html="" data-exthumbimage="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353538-958521904.jpeg" id="top-thumb-714" style="width: 140px; height: 79px;">
<figure style="height: 79px;">
<a href="#">
<img src="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353538-958521904.jpeg" title="" alt="" style="max-height: 79px;">
</a>
</figure>
</li>
<li class="thumb " data-src="https://staticdelivery.nexusmods.com/mods/2927/images/117/117-1598353564-1373125196.jpeg" data-sub-html="" data-exthumbimage="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353564-1373125196.jpeg" id="top-thumb-715" style="width: 140px; height: 79px;">
<figure style="height: 79px;">
<a href="#">
<img src="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353564-1373125196.jpeg" title="" alt="" style="max-height: 79px;">
</a>
</figure>
</li>
<li class="thumb " data-src="https://staticdelivery.nexusmods.com/mods/2927/images/117/117-1598353588-1855813172.jpeg" data-sub-html="" data-exthumbimage="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353588-1855813172.jpeg" id="top-thumb-716" style="width: 140px; height: 79px;">
<figure style="height: 79px;">
<a href="#">
<img src="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353588-1855813172.jpeg" title="" alt="" style="max-height: 79px;">
</a>
</figure>
</li>
<li class="thumb " data-src="https://staticdelivery.nexusmods.com/mods/2927/images/117/117-1598353602-526822364.jpeg" data-sub-html="" data-exthumbimage="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353602-526822364.jpeg" id="top-thumb-717" style="width: 140px; height: 79px;">
<figure style="height: 79px;">
<a href="#">
<img src="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353602-526822364.jpeg" title="" alt="" style="max-height: 79px;">
</a>
</figure>
</li>
<li class="thumb " data-src="https://staticdelivery.nexusmods.com/mods/2927/images/117/117-1598353619-847159556.jpeg" data-sub-html="" data-exthumbimage="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353619-847159556.jpeg" id="top-thumb-718" style="width: 140px; height: 79px;">
<figure style="height: 79px;">
<a href="#">
<img src="https://staticdelivery.nexusmods.com/mods/2927/images/thumbnails/117/117-1598353619-847159556.jpeg" title="" alt="" style="max-height: 79px;">
</a>
</figure>
</li>
</ul>
</div>
<div id="fileinfo" class="sideitems clearfix">
<h2>File information</h2>
<div class="sideitem timestamp">
<h3>Last updated</h3>
<time datetime="2020-08-30 08:07">
<span class="date">30 August 2020</span>
<span class="time">8:07AM</span>
</time>
</div>
<div class="sideitem timestamp">
<h3>Original upload</h3>
<time datetime="2020-08-25 12:25">
<span class="date">25 August 2020</span>
<span class="time">12:25PM</span>
</time>
</div>
<div class="sideitem">
<h3>Created by</h3>
Knightwalker41 </div>
<div class="sideitem">
<h3>Uploaded by</h3>
<a href="https://www.nexusmods.com/daggerfallunity/users/131665">knightwalker410</a>
</div>
<div class="sideitem">
<h3>Virus scan</h3>
<div class="result safe inline-flex" style="height: 25px; position: relative; top: 5px;">
<!-- Icon for file expanders -->
<!-- Icon for mod page header -->
<svg title="" class="icon icon-ticksafe"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-ticksafe"></use></svg> <span class="flex-label">
Safe to use </span>
</div> </div>
</div>
<div class="sideitems side-tags">
<h2>Tags for this mod</h2>
<div class="sideitem clearfix">
<ul class="tags">
<span></span><span class="js-hidable-tags hidden"></span> </ul>
<a class="btn btnsmall popup-btn-ajax" href="/Core/Libs/Common/Widgets/ModTaggingPopUp?mod_id=117&game_id=2927" data-effect="mfp-zoom-in" tabindex="0">
<svg title="" class="icon-plus"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-plus"></use></svg> Tag this mod
</a>
</div>
</div>
</div>
<div class="col-1-1">
<div class="tabs">
<ul class="modtabs">
<li id="mod-page-tab-description">
<a class="selected" href="/daggerfallunity/mods/117?tab=description" data-target="/Core/Libs/Common/Widgets/ModDescriptionTab?id=117&game_id=2927">
<span class="tab-label">Description</span>
</a>
</li> <li id="mod-page-tab-files">
<a href="/daggerfallunity/mods/117?tab=files" data-target="/Core/Libs/Common/Widgets/ModFilesTab?id=117&game_id=2927">
<span class="tab-label">Files</span>
<span class="alert">8</span>
</a>
</li> <li id="mod-page-tab-images">
<a href="/daggerfallunity/mods/117?tab=images" data-target="/Core/Libs/Common/Widgets/ModImagesTab?id=117&game_id=2927&user_is_blocked=">
<span class="tab-label">Images</span>
<span class="alert">5</span>
</a>
</li> <li id="mod-page-tab-videos">
<a href="/daggerfallunity/mods/117?tab=videos" data-target="/Core/Libs/Common/Widgets/ModVideosTab?id=117&game_id=2927&user_is_blocked=">
<span class="tab-label">Videos</span>
<span class="alert">0</span>
</a>
</li> <li id="mod-page-tab-posts">
<a href="/daggerfallunity/mods/117?tab=posts" data-target="/Core/Libs/Common/Widgets/CommentContainer?tabbed=1&object_id=117&game_id=2927&object_type=1&thread_id=9049998&skip_opening_post=0&user_is_blocked=&searchable=true">
<span class="tab-label">Posts</span>
<span class="alert">19</span>
</a>
</li> <li id="mod-page-tab-bugs">
<a href="/daggerfallunity/mods/117?tab=bugs" data-target="/Core/Libs/Common/Widgets/ModBugsTab?id=117&game_id=2927">
<span class="tab-label">Bugs</span>
<span class="alert">0</span>
</a>
</li> <li id="mod-page-tab-actions">
<a href="/daggerfallunity/mods/117?tab=logs" data-target="/Core/Libs/Common/Widgets/ModActionLogTab?id=117&game_id=2927">
<span class="tab-label">Logs</span>
</a>
</li> <li id="mod-page-tab-stats">
<a href="/daggerfallunity/mods/117?tab=stats" data-target="/Core/Libs/Common/Widgets/ModStatsTab?id=117&game_id=2927">
<span class="tab-label">Stats</span>
</a>
</li> </ul>
<div class="mobile-tabs">
<div class="navlabel">Current section</div>
<ul class="tabs-clone">
<li>
<a href="#" class="clearfix">
<strong>Viewing:</strong> <span class="tab-view"><span class="tab-label">Description</span></span>
<svg title="" class="icon-arrow"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-arrow"></use></svg> </a>
<ul class="tabnav">
<li id="mod-page-tab-description">
<a class="selected" href="/daggerfallunity/mods/117?tab=description" data-target="/Core/Libs/Common/Widgets/ModDescriptionTab?id=117&game_id=2927">
<span class="tab-label">Description</span>
</a>
</li> <li id="mod-page-tab-files">
<a href="/daggerfallunity/mods/117?tab=files" data-target="/Core/Libs/Common/Widgets/ModFilesTab?id=117&game_id=2927">
<span class="tab-label">Files</span>
<span class="alert">8</span>
</a>
</li> <li id="mod-page-tab-images">
<a href="/daggerfallunity/mods/117?tab=images" data-target="/Core/Libs/Common/Widgets/ModImagesTab?id=117&game_id=2927&user_is_blocked=">
<span class="tab-label">Images</span>
<span class="alert">5</span>
</a>
</li> <li id="mod-page-tab-videos">
<a href="/daggerfallunity/mods/117?tab=videos" data-target="/Core/Libs/Common/Widgets/ModVideosTab?id=117&game_id=2927&user_is_blocked=">
<span class="tab-label">Videos</span>
<span class="alert">0</span>
</a>
</li> <li id="mod-page-tab-posts">
<a href="/daggerfallunity/mods/117?tab=posts" data-target="/Core/Libs/Common/Widgets/CommentContainer?tabbed=1&object_id=117&game_id=2927&object_type=1&thread_id=9049998&skip_opening_post=0&user_is_blocked=&searchable=true">
<span class="tab-label">Posts</span>
<span class="alert">19</span>
</a>
</li> <li id="mod-page-tab-bugs">
<a href="/daggerfallunity/mods/117?tab=bugs" data-target="/Core/Libs/Common/Widgets/ModBugsTab?id=117&game_id=2927">
<span class="tab-label">Bugs</span>
<span class="alert">0</span>
</a>
</li> <li id="mod-page-tab-actions">
<a href="/daggerfallunity/mods/117?tab=logs" data-target="/Core/Libs/Common/Widgets/ModActionLogTab?id=117&game_id=2927">
<span class="tab-label">Logs</span>
</a>
</li> <li id="mod-page-tab-stats">
<a href="/daggerfallunity/mods/117?tab=stats" data-target="/Core/Libs/Common/Widgets/ModStatsTab?id=117&game_id=2927">
<span class="tab-label">Stats</span>
</a>
</li> </ul></li>
</ul>
</div>
<div class="tabcontent tabcontent-mod-page" aria-live="assertive" role="status">
<div class="container tab-description" style="display: block;">
<h2 id="description_tab_h2" data-game-id="2927" data-mod-id="117">About this mod</h2>
<p>
Pet Animal Companions for Daggerfall! (imsobadatnicknames's Companion Questpack Framework)<br><br>7 different animal pets (and 1 magical pet) are waiting to be found and adopted in the Illiac Bay! </p>
<a class="btn inline-flex button-share" onclick="sharebutton1100485230.toggle()" data-tracking="["Mod Page","Share"]" tabindex="0">
<svg title="" class="icon icon-share"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-share"></use></svg> <share-button id="share-button-1100485230" onclick="sharebutton1100485230.toggle()" class="sharer-0" style="display: initial;">Share<div class="sb-social load sb-top sb-center networks-7"><ul><li class="pinterest enabled" data-network="pinterest"><a onclick="return false"></a></li><li class="twitter enabled" data-network="twitter"><a onclick="return false"></a></li><li class="facebook enabled" data-network="facebook"><a onclick="return false"></a></li><li class="whatsapp disabled" data-network="whatsapp"><a onclick="return false"></a></li><li class="googlePlus enabled" data-network="googlePlus"><a onclick="return false"></a></li><li class="reddit enabled" data-network="reddit"><a onclick="return false"></a></li><li class="linkedin enabled" data-network="linkedin"><a onclick="return false"></a></li><li class="email enabled" data-network="email"><a onclick="return false"></a></li></ul></div></share-button>
</a>
<script>
var shareConfig1100485230 =
{
url: 'https://www.nexusmods.com/daggerfallunity/mods/117',
ui: {buttonText: 'Share'}
};
var sharebutton1100485230 = new ShareButton( '#share-button-1100485230', shareConfig1100485230 );
</script>
<div class="accordionitems">
<dl class="accordion">
<dt class="clearfix " data-tracking="["Mod Page","View Permissions","Expand"]">
Permissions and credits <span class="acc-status">
<svg title="" class="icon icon-arrow"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-arrow"></use></svg> </span>
</dt>
<dd class="clearfix " style="overflow: hidden; display: none;">
<div class="tabbed-block">
<h3>Credits and distribution permission</h3>
<ul class="permissions">
<li class="inline-flex permission-yes">
<svg title="" class="icon icon-ticksafe"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-ticksafe"></use></svg> <span class="flex-copy">
<span class="permissions-title">Other user's assets</span>
<span class="permissions-desc">All the assets in this file belong to the author, or are from free-to-use modder's resources</span>
</span>
</li>
<li class="inline-flex permission-yes">
<svg title="" class="icon icon-ticksafe"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-ticksafe"></use></svg> <span class="flex-copy">
<span class="permissions-title">Upload permission</span>
<span class="permissions-desc">You can upload this file to other sites but you must credit me as the creator of the file</span>
</span>
</li>
<li class="inline-flex permission-yes">
<svg title="" class="icon icon-ticksafe"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-ticksafe"></use></svg> <span class="flex-copy">
<span class="permissions-title">Modification permission</span>
<span class="permissions-desc">You are allowed to modify my files and release bug fixes or improve on the features without permission from or credit to me</span>
</span>
</li>
<li class="inline-flex permission-yes">
<svg title="" class="icon icon-ticksafe"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-ticksafe"></use></svg> <span class="flex-copy">
<span class="permissions-title">Conversion permission</span>
<span class="permissions-desc">You can convert this file to work with other games as long as you credit me as the creator of the file</span>
</span>
</li>
<li class="inline-flex permission-yes">
<svg title="" class="icon icon-ticksafe"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-ticksafe"></use></svg> <span class="flex-copy">
<span class="permissions-title">Asset use permission</span>
<span class="permissions-desc">You are allowed to use the assets in this file without permission as long as you credit me</span>
</span>
</li>
<li class="inline-flex permission-no">
<svg title="" class="icon icon-tickunsafe"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-tickunsafe"></use></svg> <span class="flex-copy">
<span class="permissions-title">Asset use permission in mods/files that are being sold</span>
<span class="permissions-desc">You are not allowed to use assets from this file in any mods/files that are being sold, for money, on Steam Workshop or other platforms</span>
</span>
</li>
<li class="inline-flex permission-no">
<svg title="" class="icon icon-tickunsafe"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-tickunsafe"></use></svg> <span class="flex-copy">
<span class="permissions-title">Asset use permission in mods/files that earn donation points</span>
<span class="permissions-desc">You are not allowed to earn Donation Points for your mods if they use my assets</span>
</span>
</li>
</ul>
</div>
<div class="tabbed-block">
<h3>Author notes</h3>
<p>
Please see imsobadatnicknames's permissions @<br>https://forums.dfworkshop.net/viewtopic.php?f=14&t=4041<br>https://www.nexusmods.com/daggerfallunity/mods/113 </p>
</div>
<div class="tabbed-block">
<h3>File credits</h3>
<p>
imsobadatnicknames </p>
</div>
<div class="tabbed-block">
<h3>Donation Points system</h3>
<p>
Please <a href="https://users.nexusmods.com/auth/sign_in?redirect_url=https%3A%2F%2Fwww.nexusmods.com%2Fdaggerfallunity%2Fmods%2F117">log in</a> to find out whether this mod is receiving Donation Points
</p>
</div>
</dd>
<dt class="clearfix " data-tracking="["Mod Page","View Mirrors","Expand"]">
Mirrors <span class="acc-status">
<svg title="" class="icon icon-arrow"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-arrow"></use></svg> </span>
</dt>
<dd class="clearfix " style="overflow: hidden; display: none;">
<div class="tabbed-block">
<table class="table desc-table">
<thead>
<tr>
<th class="table-require-name header headerSortDown"><span class="table-header">Name</span></th>
</tr>
</thead>
<tbody>
<tr>
<td class="table-require-name">
<a target="_blank" rel="noreferrer" href="https://forums.dfworkshop.net/viewtopic.php?f=14&t=4063" data-tracking="["Mod Page","View Mirror","https:\/\/forums.dfworkshop.net\/viewtopic.php?f=14&amp;t=4063"]">
Daggerfall Workshop Forum </a>
</td>
</tr></tbody>
</table>
</div>
</dd>
<dt class="clearfix " data-tracking="["Mod Page","View Changelogs","Expand"]">
Changelogs <span class="acc-status">
<svg title="" class="icon icon-arrow"><use xlink:href="https://www.nexusmods.com/assets/images/icons/icons.svg#icon-arrow"></use></svg> </span>
</dt>
<dd class="clearfix " style="overflow: hidden; display: none;">
<div class="log-block">
<ul class="change-logs">
<li>
<h3>Version 1.20</h3>
<div class="log-change">
<ul class="arrowlist">
<li>-Found a bug I introduced with previous update causing spawning issues. Now fixed - please download and update asap!<br>-Added a Werewolf cub pet companion to make up for it.</li>
</ul>
</div>
</li>
<li>
<h3>Version 1.10</h3>
<div class="log-change">
<ul class="arrowlist">
<li>Pets catchup to player now every 6hrs to 10 days, added feature to dismiss them and send them to another location to wait indefinitely for player, made the Baby Wyvern slightly less impossible to find (but still rare), new dialogue added, some misc tweaks/fixes.</li>
</ul>
</div>
</li>
<li>
<h3>Version 1.00</h3>
<div class="log-change">
<ul class="arrowlist">
<li>First Release</li>
</ul>
</div>
</li>
</ul>
</div>
</dd>
</dl>
</div><script>$( function(){Accordion.Load();});</script></div>
<div class="container mod_description_container condensed " style="display: block;">
<font style="color: #ff7700;">*Update: I apologise for being away a long while, life + work + Covid got very busy. There's probably better mods out there now but everyone is free to edit/fix/improve/expand/re-upload whatever work I've done, just make sure to check the original Framework creator's permissions and give them credit.*</font><br><br>Original Source Mod/Companion Questpack Framework creator - imsobadatnicknames<br><br><strong><font size="4">Pet Animal Companions <strong>v1.20</strong></font></strong><br><br>6 different animal pets (and 1 magical pet) are waiting to be found and adopted in the Illiac Bay!<br><br><div align="center"><font style="color: #ea9999;"><font size="3"><strong>*Please update to v1.20 asap, I found a bug introduced with previous update causing spawning issues.*</strong></font></font></div><br><br><strong>Details:</strong><br><br>There are 8 optional questpacks available, each containing a different pet animal. You can mix and match whichever questpacks you want to install or install all 8 if you like, or just 1!<br><br>*Rat Pet Companion - found randomly in General Stores (Existing save: "startquest RAT000")<br><br>*Spider Pet Companion - found randomly in Pawn Shops (Existing save: "startquest SPIDER000")<br><br>*Cat Pet Companion - found randomly in General Stores (Existing save "startquest CAT000")<br><br>*Scorpion Pet Companion - found randomly in Pawn Shops (Existing save "startquest STINGER000")<br><br>*Bear Pet Companion - found randomly in General Stores (Existing save "startquest BEAR000")<br><br>*Bat Pet Companion - found randomly in General Stores (Existing save "startquest BAT000")<br><br>*Baby Wyvern (RARE!) Pet Companion - found randomly in Alchemist/Herb/Apothecary Stores. <br> It has a rare chance of appearing (Existing save "startquest BABYWYV000" )<br><br>Bonus: *Werewolf Cub Pet Companion - found randomly in Alchemist/Herb/Apothecary Stores. (Existing save "startquest WWCUB000")<br><br>Specific spawn details <div class="bbc_spoiler">Spoiler: <div class="bbc_spoiler_show">Show</div><div class="bbc_spoiler_content"> They have a cooldown timer with a random value between 1 and 10 days, which starts running once the mod is activated. If the timer reaches 0 while you're inside a city, they'll appear at a random store (see above) in whatever city you're at. If the timer reaches 0 while you're in any place other than a city, they'll spawn at a random store (see above) in the next city you visit. Once they spawn, they'll remain there for 24 hours. If 24 hours go by and you haven't activated them yet, they'll despawn and the random cooldown timer will start again.<br>The Baby Wyvern has a cooldown timer with a random value between 10 and 30 days. </div></div> <br><em>....more creatures will be coming soon! </em>(I have more mods in the works for the more exotic beasts and beings of Daggerfall ;) )<br><br><br>The adorable critters are FREE!!! and there's no huge quest as such to adopt them, you just need to find them and click on them. If you choose not to adopt - the animal is gone for good (can't restart the questpack, you'll have to reload to an earlier save).<br><br>Once adopted, your pet will start randomly showing up in dungeons, cities, villages, and hamlets for a couple of in-game hours to explore or help fight... or you can choose to tell them to come back later... or choose to dismiss them and tell them to go and wait indefinitely for you at another safe location in the region (also recorded in Journal).<br><br>Each time they appear you can click on them for a pet related activity (message).<br><br><br><strong>Caveats:<br></strong><br>Look for them in Cities, not towns (no walls), farmsteads, or inns etc.<br><br>Make sure "Enemy infighting" is turned ON in the DFU Advanced>Enhancement screen or they won't be able to help fight.<br><br>Unfortunately the game classifies all Companions as "Enemies" so this will impact your ability to Rest in the short time they are with you.<br><br>Your pets likely won't attack specific quest enemies, depending on how the quest was written.<br><br>There's a chance all of your pets will turn up at the same time, but remember you can dismiss any of them and tell them to go and wait for you someplace else.<br><br>Having a lot of companion questpacks installed could impact performance on low spec machines (I'm running pretty much every mod and questpack I can download for Daggerfall and haven't had issues yet, but your mileage may vary).<br><br>Occasionally when resting/sleeping, due to the game fast forwarding time and not pausing the rest menu quick enough, when your pet visits you could get a doppelganger pet. Treat this as if your pet brought a friend along.<br><br>**If there are any major issues please let me know and I'll do my best to fix asap.**<br><br><br><strong>Installation:</strong><br><br>(These are questpacks so should be compatible with any version of Daggerfall Unity)<br><br>1. Download the file (also available @ <a href="https://forums.dfworkshop.net/viewtopic.php?f=14&t=4063" rel="nofollow">https://forums.dfworkshop.net/viewtopic.php?f=14&t=4063</a> )<br><br>2. Unzip the file inside StreamingAssets/Questpacks<br><br>3. If you're starting a new game, it should start working right away. If you're using it on a game you already started, you'll need to open up the console and type one of the above existing save codes (ONCE ONLY) to get it running. If this doesn't work, your version of DFU might only be able to start quests inside StreamingAssets/Quests from the console, so try moving the contents of the folder to StreamingAssets/Quests and try again.<br><br><br><strong>Updating:<br><br></strong>Replace the previous folder (within StreamingAssets/Questpacks) and all files with the new one you downloaded and unzipped. <br>Make sure all files are overwritten.<br><br><br><strong>Permissions:</strong><br><br>Please see imsobadatnicknames's permissions @<br><br>https://forums.dfworkshop.net/viewtopic.php?f=14&t=4041<br><br>https://www.nexusmods.com/daggerfallunity/mods/113</div>
</div>
</div>
</div>
</div>
</div>
</section>
<script>
$(document).ready(function() {
if(window.innerWidth < 900) {
$('.video-ad').remove()
}
});
</script>
<div class="clearfix" style="text-align: center;background: #2d2d2d;">
<div class="ads">
<script>
$(document).ready(function() {
if(window.innerWidth < 1012) {
$('.demo-billboard').remove()
}
if(window.innerWidth >= 1012 && window.innerWidth < 1460) {
$('.demo-mrec').remove()
}
});
</script>
<div class="ad demo-mrec ad-unit ad-unit-BTF">
<div id="nn_mpu1"></div>
<div id="nn_mobile_mpu1"></div>
</div>
</div>
<script>
if ( areAdsBlocked() === true )
{
$('.ads').remove();
document.write('<div class="hf0cd63ea33"> <a class="hf0cd63ea33-link" href="https://users.nexusmods.com/account/billing/premium"> <img class="hf0cd63ea33-billboard" src="https://www.nexusmods.com/assets/images/premiumbanner/billboard.png" alt="Get your mods and collections faster. No ads. No waiting. Go premium now."> <img class="hf0cd63ea33-mpu" src="https://www.nexusmods.com/assets/images/premiumbanner/mpu.png" alt="Get your mods and collections faster. No ads. No waiting. Go premium now."> </a> </div> <style> .hf0cd63ea33 { height: 260px; padding: 5px 10px; width: 100%; display: flex; justify-content: center; } .hf0cd63ea33-billboard { display: none; } .hf0cd63ea33-mpu { height: 250px; width: 300px; } @media (min-width: 1024px) { .hf0cd63ea33 { } .hf0cd63ea33-mpu { display: none; } .hf0cd63ea33-billboard { display: block; height: 250px; width: 970px; } } </style>');
$('body').on('click', '.hf0cd63ea33-link', function () {
window.nexusDataLayer = window.nexusDataLayer || [];
window.nexusDataLayer.push({
event: 'premium_banner_click',
});
});
}
</script>
</div>
<div id="rj-back-to-top" title="Back to top"><i class="fa fa-chevron-up"></i></div></div><footer id="rj-footer">
<section id="rj-vortex">
<div class="content rj-grid-12">
<div class="rj-vortex-icon-wrapper col-md-6-12 col-md-pad-2-12 col-lg-4-12 col-lg-pad-3-12">
<img class="rj-vortex-icon icon" alt="Vortex" src="/assets/images/footer/Vortex.svg">
<span class="rj-vortex-name">VORTEX</span>
<div class="rj-vortex-description">The powerful open-source mod manager from Nexus Mods.</div>
</div>
<div class="col-md-2-12 col-md-pad-8-12 col-lg-pad-7-12">
<form action="/about/vortex" class="rj-button-form">
<button class="rj-vortex-button">Learn more</button>
</form>
</div>
</div>
</section>
<section id="rj-sitemap">
<div class="content rj-grid-12">
<div class="rj-sitemap-category col-sm-3-12 col-md-2-12">
<h3>Nexus Mods <i class="rj-chevron fa fa-chevron-down"></i></h3>
<ul>
<li><a href="https://www.nexusmods.com/daggerfallunity/news">News</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/about/stats">Statistics</a></li>
<li><a href="https://www.nexusmods.com/about#current-positions">Careers</a></li>
<li><a href="https://www.nexusmods.com/about">About us</a></li>
<li><a href="https://next.nexusmods.com/premium">Premium features</a></li>
</ul>
</div>
<div class="rj-sitemap-category col-sm-pad-3-12 col-sm-3-12 col-md-pad-2-12 col-md-2-12">
<h3>Discover <i class="rj-chevron fa fa-chevron-down"></i></h3>
<ul>
<li><a href="https://www.nexusmods.com/daggerfallunity/games">All games</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods">All mods</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/today">New mods</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/trendingalltime">Popular mods</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/mods/trending">Trending mods</a></li>
<li><a href="https://next.nexusmods.com">All collections</a></li>
<li><a href="https://www.nexusmods.com/daggerfallunity/images">All images</a></li>
</ul>
</div>
<div class="rj-sitemap-category col-sm-pad-6-12 col-sm-3-12 col-md-pad-4-12 col-md-2-12">
<h3>Support <i class="rj-chevron fa fa-chevron-down"></i></h3>
<ul>
<li><a target="_blank" rel="noreferrer" href="https://help.nexusmods.com">Help</a></li>
<li><a target="_blank" rel="noreferrer" href="https://wiki.nexusmods.com/index.php/Main_Page">Wiki</a></li>
<li><a target="_blank" rel="noreferrer" href="https://app.swaggerhub.com/apis-docs/NexusMods/nexus-mods_public_api_params_in_form_data/1.0#/">API reference</a></li>
<li><a target="_blank" rel="noreferrer" href="https://feedback.nexusmods.com">Give feedback</a></li>
<li><a target="_blank" rel="noreferrer" href="https://forums.nexusmods.com/index.php?/forum/8394-website-bug-report/">Report a bug</a></li>
<li><a target="_blank" rel="noreferrer" href="https://help.nexusmods.com/article/33-what-can-i-do-if-my-account-has-been-banned">Unban requests</a></li>
<li><a target="_blank" rel="noreferrer" href="https://www.cognitoforms.com/NexusMods/NexusModsDMCAForm">DMCA</a></li>
<li><a class="nn-cmp-show" href="#">Manage cookie settings</a></li>
</ul>
</div>
<div class="rj-sitemap-category rj-sitemap-category-no-border col-sm-pad-9-12 col-sm-3-12 col-md-pad-6-12 col-md-2-12 col-xl-3-12">
<h3>Community <i class="rj-chevron fa fa-chevron-down"></i></h3>
<ul>
<li><a target="_blank" rel="noreferrer" href="https://forums.nexusmods.com">Forums</a></li>
<li><a target="_blank" rel="noreferrer" href="https://discord.gg/nexusmods">Discord</a></li>
<li><a target="_blank" rel="noreferrer" href="https://www.patreon.com/nexusmods">Support authors</a></li>
<li><a target="_blank" rel="noreferrer" href="https://help.nexusmods.com/article/125-contact-us">Contact us</a></li>
</ul>
</div>
<div class="col-sm-pad-3-12 col-sm-6-12 col-md-pad-8-12 col-md-4-12 col-xl-pad-9-12 col-xl-3-12">
<div class="rj-supporter-wrapper">
<h3>Support Nexus Mods</h3>
<ul id="footbtn" class="clearfix">
<li><a href="https://users.nexusmods.com/account/billing/premium" class="rj-standard-button">Go premium</a></li>
</ul>
</div>
<div class="rj-network-stats">
<h3>Network Stats</h3>
<ul id="networkstats" class="rj-grid-12 rj-grid-small-gap">
<li class="col-md-6-12 col-lg-4-12">
<h4>Members</h4>
<div class="stat total_members">56,530,316</div>
</li>
<li class="col-md-pad-6-12 col-md-6-12 col-lg-pad-4-12 col-lg-4-12">
<h4>Mods</h4>
<div class="stat total_mods">637,955</div>
</li>
<li class="row-md-2 col-md-6-12 row-lg-1 col-lg-pad-8-12 col-lg-4-12">
<h4>Kudos given</h4>
<div class="stat total_kudos">2,907,692</div>
</li>
<li class="row-md-3 col-md-6-12 col-lg-12-12">
<h4>Page served in</h4>
<div class="stat served_time" title="Build: 1522408735">0.132s [nexusmods-59c4875cc7-8srzx]</div>
</li>
</ul>
<script>
// Get site stats
fetch('https://data.nexusmods.com/file/nexus-data/site-stats.json', {
mode: 'cors',
})
.then(function (data) {
return data.json();
})
.then(function (data) {
$('#networkstats .total_mods').text(longFormat(data.mods_count));
$('#networkstats .total_members').text(longFormat(data.users_count));
$('#networkstats .total_kudos').text(longFormat(data.kudos_count));
});
</script>
</div>
</div>
</div>
</section>
<section id="rj-logo-social">
<div class="content rj-grid-12">
<div class="rj-logo-wrapper col-xs-1-12 col-sm-6-12">
<a class="headlogo" href="https://www.nexusmods.com/daggerfallunity" title="Nexus Mods">
<svg xmlns="http://www.w3.org/2000/svg" style="width:148px; height:35px;" version="1.1" x="0px" y="0px" viewBox="0 0 698.3 162.5">
<g>
<g>
<g>
<path d="M44.4,162.5c-0.6,0-1.3,0-1.9-0.1c-1.5-0.2-2.9-0.5-4.5-1c-2.8-0.9-5.2-2.2-6.9-3.2c-3.8-2.2-7.7-4.9-11.8-8.3 c-1.8-1.5-3.6-3.1-5.3-4.7l-1.4-1.4c-1-0.9-1.9-1.9-2.6-3c-1.3-2-2.4-4.6-2.5-8c-0.1-1.1-0.2-2.2-0.2-3.4c0-2.4,0.1-5,0.5-7.5 c0.7-5.2,2.4-9.8,3.7-13.3c0.1-0.3,0.2-0.6,0.3-0.9c-0.4-0.9-0.7-1.9-1.1-2.9C8.9,99.6,7.7,93.8,7.1,88 c-0.6-6.1-0.4-12.3,0.5-18.4c0.2-1.3,0.4-2.6,0.7-3.8C5.9,62.3,2.9,57.3,1,51.5l0-0.1c-0.4-1.2-1.4-4.2-0.8-8 c0.2-1.4,0.5-2.8,1-4.3c0.9-2.8,2.2-5.1,3.2-6.8c2.2-3.8,4.9-7.6,8.2-11.7c1.5-1.8,3-3.6,4.6-5.2l1.4-1.4 c0.7-0.8,1.5-1.5,2.4-2.1c2-1.5,4.8-2.8,8.6-2.9c1.2-0.1,2.5-0.2,3.8-0.2h0.1c2.5,0,5.2,0.2,7.8,0.6c4,0.6,7.6,1.7,10.8,2.9 c2.1-0.9,4.3-1.7,6.6-2.5C64.1,8,69.9,6.8,75.7,6.4C81.8,5.9,88,6.2,93.9,7.2c1.4,0.2,2.8,0.5,4.2,0.8c4.7-3.2,9-5.5,13.5-6.9 l0.1,0c1-0.4,3.2-1.1,6.1-1.1c0.6,0,1.3,0,1.9,0.1c1.5,0.2,2.9,0.5,4.5,1c2.8,0.9,5.2,2.2,6.9,3.2c3.8,2.2,7.7,4.9,11.8,8.3 c1.8,1.5,3.6,3.1,5.3,4.7l1.4,1.4c0.7,0.6,1.4,1.3,1.9,2.1c1.8,2.3,3.2,5.6,3.3,10.2c0.1,1.6,0.1,3.3,0,5 c-0.2,3.7-0.7,7.2-1.6,10.4c-0.7,2.4-1.5,4.8-2.4,7.2c1.8,4.5,3.1,9.1,4,13.8c1.8,9.9,1.6,20.1-0.6,29.9c1.3,1.9,2.5,3.7,3.5,5.5 c1.7,3,3.1,6.1,4.1,9.3c0.4,1.2,1.3,4.2,0.7,8.2c-0.2,1.4-0.6,2.7-1.1,4.2c-1.8,5.1-4.6,9.3-7.1,12.8c-2.7,3.8-5.8,7.5-9,10.9 l-1.2,1.2c-0.7,0.8-1.5,1.5-2.4,2.2c-2,1.5-4.8,2.7-8.6,2.9c-1.2,0.1-2.5,0.2-3.8,0.2h-0.1c-2.7,0-5.4-0.2-8.2-0.7 c-4.5-0.7-8.5-2.1-12.1-3.5c-1.9,0.8-3.9,1.5-5.8,2.1c-5.6,1.7-11.5,2.8-17.4,3.1c-6.1,0.4-12.3-0.1-18.3-1.2 c-0.7-0.1-1.5-0.3-2.2-0.4c-5.2,3.7-9.8,6.1-14.6,7.7l-0.1,0C49.5,161.7,47.3,162.5,44.4,162.5L44.4,162.5z M24.6,134.1l10.6,3.7 c0.9-2.6,1-5.4,0.4-8c0,0.2,0,0.5,0.1,0.7c0,0.3,0.1,0.7,0.1,1.1c-0.1-2-0.8-4.6-2.6-7c-0.7-0.9-1.5-1.7-2.4-2.4l0.5,0.4l0.9,0.9 c-0.8-0.8-1.7-1.6-2.7-2.3L24.6,134.1L24.6,134.1z M123.7,129.4c-0.8,0.8-1.6,1.6-2.3,2.7l11.9,4.6l0-11.1c0,0,0,0,0,0 c-1.1,0-2.2,0.1-3.2,0.4c0.2,0,0.4,0,0.6,0c0.3,0,0.7-0.1,1.1-0.1c-1.8,0.1-4.2,0.7-6.4,2.1c-1.2,0.8-2.2,1.7-3.1,2.9l0.4-0.5 L123.7,129.4L123.7,129.4z M35.8,126.8c0.5,0.4,1,0.8,1.5,1.3c2.6,2.2,5,3.9,7.2,5.2c1.4-0.7,3-1.7,4.7-3 c0.5-0.3,0.9-0.7,1.4-1.1c0.3-0.2,0.5-0.5,0.8-0.7c0.1-0.1,0.3-0.3,0.4-0.4l6.2-6.3l8.4,2.9c0.3,0.1,0.6,0.2,0.8,0.3 c1.8,0.6,3.6,1,5.4,1.4c3.7,0.7,7.6,1,11.4,0.7c3.6-0.2,7.3-0.9,10.7-1.9c1.7-0.5,3.4-1.1,5-1.9c0.8-0.3,1.6-0.7,2.3-1.1 c2-1,4.3-1.6,6.6-1.6c3.6,0,6.3,1.3,7.6,2c0.4,0.2,0.8,0.4,1.3,0.5c2.5,1,5.4,2.2,8,2.6c0.4,0.1,0.9,0.1,1.3,0.2 c1.5-1.7,2.9-3.5,4.2-5.3c0.8-1.1,1.6-2.2,2.3-3.3c-0.1-0.2-0.2-0.4-0.4-0.7c-0.7-1.2-1.5-2.4-2.5-3.9c-0.3-0.5-0.7-0.9-1.1-1.4 c-0.2-0.2-0.3-0.4-0.5-0.6c-4.1-4-5.5-9.7-3.6-15.1c0.1-0.3,0.2-0.6,0.3-0.8c2.3-7.2,2.7-14.9,1.4-22.3c-0.7-3.5-1.7-7-3.2-10.3 c-0.1-0.3-0.3-0.6-0.4-0.9c-3.3-6.1-1.9-11.3-0.7-13.8c0.5-1,0.9-2.1,1.3-3.1c0.8-1.9,1.4-3.9,2-5.7c0.2-0.9,0.4-1.8,0.5-2.9 c-0.5-0.4-1-0.8-1.5-1.3c-2.7-2.2-5-3.9-7.2-5.2c-1.4,0.8-3,1.8-4.8,3c-0.5,0.4-1,0.8-1.5,1.2c-0.1,0.1-0.3,0.2-0.4,0.4 c-2.7,2.6-6.3,4-10,4c-1.8,0-3.5-0.3-5.2-1c-0.4-0.1-0.8-0.3-1.2-0.4c-1.8-0.5-3.6-1-5.5-1.3c-3.7-0.6-7.6-0.8-11.4-0.5 c-3.6,0.3-7.2,1-10.6,2.1c-1.7,0.5-3.3,1.2-4.9,1.9c-0.8,0.3-1.5,0.7-2.3,1.1L59.5,40c-2.1,1.2-4.6,1.8-7,1.8 c-2.2,0-4.4-0.5-6.5-1.5c-0.5-0.2-0.9-0.4-1.4-0.6c-2.4-1-5.3-2.1-7.8-2.4c-0.4-0.1-0.8-0.1-1.1-0.2c-0.4,0.5-0.8,1-1.2,1.4 c-2.2,2.7-3.9,5-5.2,7.3c0.7,1.4,1.7,2.9,2.9,4.7c0.3,0.5,0.7,1,1.1,1.4c0.2,0.3,0.5,0.5,0.7,0.8l5.8,6.1l-2.5,8 c-0.2,0.5-0.3,1-0.5,1.5c-0.5,1.8-0.9,3.7-1.2,5.6c-0.6,3.8-0.7,7.6-0.3,11.5c0.3,3.6,1.1,7.2,2.3,10.6c0.6,1.7,1.3,3.3,2,4.9 c0.1,0.2,0.2,0.4,0.3,0.6c2.1,4.3,2.1,9.1-0.1,13.4c-0.2,0.4-0.4,0.8-0.5,1.2c-0.4,1-0.9,2-1.3,3c-0.8,2.2-1.8,4.8-2.1,7.1 C35.9,126.3,35.8,126.6,35.8,126.8L35.8,126.8z M129.9,38.8c0.8,0.8,1.7,1.6,2.8,2.4l4.9-12.9L127,24.6c-0.9,2.6-1,5.4-0.4,8 c0-0.1,0-0.2,0-0.3c0-0.3,0-0.8,0-1.3v-0.1c0,1.5,0.5,4,2.1,6.4c0.8,1.1,1.7,2.1,2.8,3l-0.5-0.4L129.9,38.8L129.9,38.8z M29.3,26.3l0,11.1c1.1,0,2.2-0.1,3.2-0.4c-0.2,0-0.4,0-0.6,0c-0.3,0-0.7,0.1-1.1,0.1c1.8-0.1,4.2-0.7,6.4-2.1 c1.2-0.8,2.2-1.7,3.1-2.9l-0.4,0.5l-0.9,1c0.8-0.8,1.6-1.7,2.3-2.7L29.3,26.3L29.3,26.3z"></path>
</g>
</g>
<g>
<g>
<g>
<path class="theme-secondary" d="M56.3,88.4l0.7,28.3l-7-5.7c-7.8,12.7-10.3,25-6.6,34.1l1.3,3.2l-3.2-1.4c-7.3-3.2-13.9-7.7-19.4-13.5 l-0.3-0.3l-0.1-0.5c-0.4-3.5-0.2-7.3,0.7-11.2l0-0.1c1.3-4.9,3.2-9.8,5.6-14.7c1.5-3.1,3.3-6.2,5.3-9.2l-6.1-5L56.3,88.4z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M105.9,74.1l-0.7-28.3l7,5.7c7.8-12.7,10.3-25,6.6-34.1l-1.3-3.2l3.2,1.4c7.3,3.2,13.9,7.7,19.4,13.5 l0.3,0.3l0.1,0.5c0.4,3.5,0.2,7.3-0.7,11.2l0,0.1c-1.3,4.9-3.2,9.8-5.6,14.7c-1.5,3.1-3.3,6.2-5.3,9.2l6.1,5L105.9,74.1z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M88.5,105.4l28.3-0.7l-5.7,7c12.7,7.8,25,10.3,34.1,6.6l3.2-1.3l-1.4,3.2c-3.2,7.3-7.7,13.9-13.5,19.4 l-0.3,0.3l-0.5,0.1c-3.5,0.4-7.3,0.2-11.2-0.7l-0.1,0c-4.9-1.3-9.8-3.2-14.7-5.6c-3.1-1.5-6.2-3.3-9.2-5.3l-5,6.1L88.5,105.4z"></path>
</g>
</g>
<g>
<g>
<path class="theme-secondary" d="M74.1,57.6l-28.3,0.7l5.7-7c-12.7-7.8-25-10.3-34.1-6.6L14.3,46l1.4-3.2c3.2-7.3,7.7-13.9,13.5-19.4 l0.3-0.3L30,23c3.5-0.4,7.3-0.2,11.2,0.7l0.1,0c4.9,1.3,9.8,3.2,14.7,5.6c3.1,1.5,6.2,3.3,9.2,5.3l5-6.1L74.1,57.6z"></path>
</g>
</g>
<g>
<g>
<circle class="theme-primary" cx="81.4" cy="80.8" r="60.5"></circle>
</g>
</g>
<g>
<path style="fill:#ffffff" d="M59.3,59.5c-3.5-1.6-6.1-3.2-8.7-5.1c-4-2.8-7.7-5.9-10.8-9.2c-7.6-7.7-11.6-15.6-10.5-22.1L27,25.6 c-5.5,5.8-12.8,16-12.9,20.4c0.1,0.5,0.1,0.5,0.1,0.5c1,3.4,2.6,6.8,4.9,10.1l0,0.1c3,4.8,8.9,12.7,29.9,21.9l-3.7,7l28.3-7.6 L63.5,51.5L59.3,59.5z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M103.3,103.5c3.5,1.6,6.1,3.2,8.7,5.1c4,2.8,7.7,5.9,10.8,9.2c7.6,7.7,11.6,15.6,10.5,22.1l2.3-2.4 c5.5-5.8,12.8-16,12.9-20.4c-0.1-0.5-0.1-0.5-0.1-0.5c-1-3.4-2.6-6.8-4.9-10.1l0-0.1c-3-4.8-8.9-12.7-29.9-21.9l3.7-7l-28.3,7.6 l10.2,26.2L103.3,103.5z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M104,59.3c1.6-3.5,3.2-6.1,5.1-8.7c2.8-4,5.9-7.7,9.2-10.8c7.7-7.6,15.6-11.6,22.1-10.5L138,27 c-5.8-5.5-16-12.8-20.4-12.9c-0.5,0.1-0.5,0.1-0.5,0.1c-3.4,1-6.8,2.6-10.1,4.9l-0.1,0c-4.8,3-12.7,8.9-21.9,29.9l-7-3.7 l7.6,28.3L112,63.6L104,59.3z"></path>
</g>
<g>
<path style="fill:#ffffff" d="M58.2,103.2c-1.6,3.5-3.2,6.1-5.1,8.7c-2.8,4-5.9,7.7-9.2,10.8c-7.7,7.6-15.6,11.6-22.1,10.5l2.4,2.3 c5.8,5.5,16,12.8,20.4,12.9c0.5-0.1,0.5-0.1,0.5-0.1c3.4-1,6.8-2.6,10.1-4.9l0.1,0c4.8-3,12.7-8.9,21.9-29.9l7,3.7l-7.6-28.3 L50.3,98.9L58.2,103.2z"></path>
</g>
</g>
</g>
<g class="logo-brand-name">
<path style="fill:#ffffff" d="M198.6,131.3h-6V31.9h8.5l29.8,83.9V31.9h6v99.4h-7.2l-31.1-88.6V131.3z"></path>
<path style="fill:#ffffff" d="M281.1,77.9v6h-27.1v41.5h32.7v6h-39.2V31.9h39.2v6h-32.7v40H281.1z"></path>
<path style="fill:#ffffff" d="M321.8,85l-20.2,46.3h-6.4l22.4-51.5l-20.9-47.8h6.8l18.7,42.7l18.9-42.7h6.2l-20.9,47.8l22.3,51.5h-7 L321.8,85z"></path>
<path style="fill:#ffffff" d="M364.5,107.3c0,10.6,4,18.9,14.9,18.9s14.9-8.2,14.9-18.9V31.9h6.1V107c0,14.2-6,25.1-21.2,25.1 c-15.2,0-21.3-10.9-21.3-25.1V31.9h6.5V107.3z"></path>
<path style="fill:#ffffff" d="M452.8,55.9v2.1h-6.2v-2.6c0-10.5-4-18.5-14.8-18.5c-10.8,0-14.8,7.8-14.8,18.3c0,24.1,35.9,24.6,35.9,52 c0,14.3-6.2,24.8-21.4,24.8s-21.4-10.5-21.4-24.8v-5.1h6.2v5.5c0,10.6,4.1,18.3,15,18.3s15-7.7,15-18.3c0-23.9-35.9-24.3-35.9-52 c0-14.9,6.5-24.6,21.2-24.7C446.7,31.1,452.8,41.6,452.8,55.9z"></path>
<path class="theme-primary" d="M495.8,102.5l10.6-70.6h21.7v99.4h-14.8V60.1l-10.8,71.3h-14.8l-11.6-70.3v70.3h-13.6V31.9h21.7L495.8,102.5z"></path>
<path class="theme-primary" d="M537.6,55.8c0-15.9,8.4-25,23.7-25c15.3,0,23.7,9.1,23.7,25v51.7c0,15.9-8.4,25-23.7,25 c-15.3,0-23.7-9.1-23.7-25V55.8z M553.2,108.5c0,7.1,3.1,9.8,8.1,9.8s8.1-2.7,8.1-9.8V54.8c0-7.1-3.1-9.8-8.1-9.8s-8.1,2.7-8.1,9.8 V108.5z"></path>
<path class="theme-primary" d="M594.4,31.9h24.7c15.6,0,23.3,8.7,23.3,24.6v50.3c0,15.9-7.7,24.6-23.3,24.6h-24.7V31.9z M610,46.1v71h8.8 c5,0,7.9-2.6,7.9-9.7V55.8c0-7.1-3-9.7-7.9-9.7H610z"></path>
<path class="theme-primary" d="M672.6,30.8c15.2,0,23,9.1,23,25v3.1h-14.8v-4.1c0-7.1-2.8-9.8-7.8-9.8c-5,0-7.8,2.7-7.8,9.8 c0,20.4,30.5,24.3,30.5,52.7c0,15.9-8,25-23.3,25c-15.3,0-23.3-9.1-23.3-25v-6.1h14.8v7.1c0,7.1,3.1,9.7,8.1,9.7s8.1-2.6,8.1-9.7 c0-20.4-30.5-24.3-30.5-52.7C649.6,39.9,657.4,30.8,672.6,30.8z"></path>
</g>
</svg> </a>
</div>
<div class="rj-social-wrapper col-xs-1-12 col-sm-6-12 col-sm-pad-6-12">
<div class="rj-social-links">
<a target="_blank" rel="noreferrer" href="https://discord.gg/nexusmods" title="Join us on Discord">
<img class="icon" alt="Discord" src="/assets/images/footer/Discord.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://twitter.com/nexussites" title="Follow us on Twitter">
<img class="icon" alt="Twitter" src="/assets/images/footer/Twitter.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.tiktok.com/@nexusmodsofficial" title="Follow us on TikTok">
<img class="icon" alt="TikTok" src="/assets/images/footer/TikTok.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.twitch.tv/nexusmodsofficial" title="Follow us on Twitch">
<img class="icon" alt="Twitch" src="/assets/images/footer/Twitch.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.youtube.com/@NexusModsOfficial" title="Follow us on Youtube">
<img class="icon" alt="Youtube" src="/assets/images/footer/Youtube.svg">
</a>
<a target="_blank" rel="noreferrer" href="https://www.instagram.com/nexusmodsofficial" title="Follow us on Instagram">
<img class="icon" alt="Instagram" src="/assets/images/footer/Instagram.svg">
</a>
</div>
</div>
</div>
</section>
<section id="rj-foot">
<div class="content">
<span class="rj-copyright">Copyright © 2024 Black Tree Gaming Ltd. All rights reserved.</span>
<div class="rj-foot-links">
<a target="_blank" rel="noreferrer" href="https://help.nexusmods.com/article/18-terms-of-service">Terms of Service</a> | <a target="_blank" rel="noreferrer" href="https://help.nexusmods.com/article/20-privacy-policy">Privacy Policy</a>
</div>
</div>
</section>
</footer>
<div id="nn_mobile_lb1"></div>
<div id="nn_lb2"></div>
<!--
) ( |
) ( / .-
_ ,---. _ ( / /
(~-| . . |-~) V /
\._ 0 _,/ /
/ `-^-'`-._ /
' `-. (
: )E
: ,---' (
. )E (
gpyy '._____,---' (
) (
) (
) (
) (
-->
<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8ea814706b822fc3',t:'MTczMjk0MDc5Mi4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script><iframe height="1" width="1" style="position: absolute; top: 0px; left: 0px; border: none; visibility: hidden;"></iframe><script defer="" src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon="{"rayId":"8ea814706b822fc3","version":"2024.10.5","serverTiming":{"name":{"cfExtPri":true,"cfL4":true,"cfSpeedBrain":true,"cfCacheStatus":true}},"token":"84b8a5c923d14b3dbc931e18bd6ef281","b":1}" crossorigin="anonymous"></script>
<iframe id="_hjSafeContext_8735115" title="_hjSafeContext" tabindex="-1" aria-hidden="true" src="about:blank" style="display: none !important; width: 1px !important; height: 1px !important; opacity: 0 !important; pointer-events: none !important;"></iframe><iframe name="__uspapiLocator" style="display: none;"></iframe><iframe name="__gppLocator" style="display: none;"></iframe><img src="https://ad-delivery.net/px.gif?ch=2" style="display: none !important; width: 1px !important; height: 1px !important;"><img src="https://ad.doubleclick.net/favicon.ico?ad=300x250&ad_box_=1&adnet=1&showad=1&size=250x250" style="display: none !important; width: 1px !important; height: 1px !important;"><img src="https://ad-delivery.net/px.gif?ch=1&e=0.06716409742940721" style="display: none !important; width: 1px !important; height: 1px !important;"><div id="sp_message_container_1202267" style="display: block;"><iframe src="https://cdn.privacy-mgmt.com/index.html?hasCsp=true&message_id=1202267&consentUUID=null&consent_origin=https%3A%2F%2Fcdn.privacy-mgmt.com%2Fconsent%2Ftcfv2&preload_message=true&version=v1" id="sp_message_iframe_1202267" title="SP Consent Message"></iframe></div></body></html>