Audison Bit One HD Virtuoso Hi-Res Signal Processor
  • Audison Bit One HD Virtuoso Hi-Res Signal Processor

Аудиопроцессор Audison Bit One HD Virtuoso Hi-Res Signal Processor

207,000 руб.

  • Описание
  • Отзывы (0)

Описание товара

Elettromedia продолжает последовательно развивать направление цифровой аудиотехники и представляет новый High Definition Signal Processor Audison bit One HD Virtuoso.Термин “виртуозный” имеет итальянские корни и одним из его определений является выдающееся владение инструментом и техническое мастерство исполнителя музыкального произведения. Новейший аудиопроцессор Audison bit One HD Virtuoso представляет уникальное сочетание возможностей для настройки бескомпромиссных автомобильных High-End аудиосистем для виртуозного исполнения музыки, с исчерпывающими возможностями в плане подключений и ОЕМ интеграции. Это стало возможным благодаря инновационным возможностям нового программного обеспечения и апгрейду ключевых элементов сигнального тракта в сравнении с предшественником. Процессор Audison bit One HD Virtuoso также может стать центральным элементом системы Audison Full DA HD (Full Digital Audio High Definition) в которой аудио сигнал передается от Hi-Res источника к усилителям Audison оснащенным интерфейсом AC / AD Link в цифровом виде, с максимальным сохранением качества и разрешения.

ЦИФРОВОЙ СИГНАЛЬНЫЙ ПРОЦЕССОР DSP SHARC И FIR ФИЛЬТРЫ

Акустические свойства салона автомобиля несовершенны и основной задачей аудиопроцессора является идеальное сведение волновых фронтов от разных динамиков в точке прослушивания. Сведение начинается с того, что исходный музыкальный сигнал с помощью кроссовера делится на отдельные частотные диапазоны соответствующие характеристикам громкоговорителей и заканчивается процессом точной эквализации. Существуют различные модели активных цифровых фильтров программных модулей кроссоверов и эквалайзеров, с математической точки зрения их можно разделить на IIR (Infinite Impulse Response)  и FIR (Finite Impulse Response) фильтры. FIR-фильтры, или фильтры с конечным импульсным откликом, очень популярны в профессиональной аудиотехнике поскольку оказывают минимальное влияние на фазовую характеристику сигнала при изменении его амплитуды, электрическая фаза сигнала не “вертится” в точках коррекции и сведения сложных многополосных систем. Недостатком FIR-фильтров – можно назвать сложность их математического расчета, которая напрямую влияет на выбор элементной базы разработку программного обеспечения для пользователей.

“Сердце” bit One HD Virtuoso – высокопроизводительный цифровой сигнальный процессор (DSP) Analog Devices SHARC ADSP-21489 из семейства SHARC® (SHARC – Super Harvard ARchitecture Computer). Процессоры этого семейства отличаются высокой производительностью арифметических операций с 32-разрядными числами в формате с плавающей точкой до 450 МГц / 2700 MFLOPs (миллионов операций с плавающей точкой в секунду). Программирование функций процессора осуществляется с помощью операционной среды SigmaStudio® for SHARC предоставляемой разработчиком – Analog Devices. B отличие от менее производительных процессоров семейства SigmaDSP того же производителя операционная среда SHARC имеет предустановленные кодеки  c FIR-фильтрацией.  Глубокое понимание алгоритмов программирования, опыт накопленный командой разработчиков Audison начиная с 2006 и первого SHARC процессора – bit One, многочисленные объективные тесты и прослушивания, все это позволило достичь с платформой bit One HD Virtuoso нового уровня качества звука с новыми возможностями. Bit One HD Virtuoso это один из немногих и единственный автомобильный аудиопроцессор в серийном производстве который может работать в двух разных режимах: 9-канальный режим с FIR-кроссоверами и эквалайзерами и “стандартный” 13-канальный IIR.

АУДИОФИЛЬСКИЕ КОМПОНЕНТЫ

Процессор имеет сложную модульную архитектуру с применением нескольких печатных плат, которые изолированы друг от друга и от воздействия извне электромагнитными экранами для защиты от шумов и помех. Плата аналоговых входов (Analog Input) оснащена высококачественными аналого-цифровыми конверторами (ADC) Cirrus Logic CS5366 c разрешением 192 кГц / 24 бита. На основной  материнской плате (Mother Board) по сравнению с предшественником доработаны характеристики блока питания, чтобы сократить риск отключения при просадке напряжения. Также используются аудиофильские компоненты в ключевых элементах аналогового сигнального тракта.
1.    Миниатюрные электролитические конденсаторы ELNA серии SILMIC в которых используется уникальный диэлектрик – целлюлоза с шелковыми волокнами для снижения влияния механических вибраций.
2.    Высококачественные конденсаторы  WIMA с металлизированной полипропиленовой пленкой имеющие низкий фактор рассеивания (DF – Dissipation Factor) в том числе и в области высоких частот.
3.    Высококачественные операционные усилители Texas Instruments OPAx134 серии SoundPlus ™ которые отличаются превосходным качеством звука благодаря сверхнизкому уровню искажений, низкому уровню собственного шума, широким частотным диапазоном и сверхбыстрым уровнем нарастания сигнала.
4.    За цифро-аналоговое преобразование аудиосигнала отвечают высококлассные многоканальные конверторы (DAC) Cirrus Logic CS4365 и CS4385 с разрешением 192 кГц / 24 бита и динамическим диапазоном 114 дБ.

ПОДКЛЮЧЕНИЯ

Audison bit One HD Virtuoso оснащен двумя оптическими цифровыми входами Optical IN TOSLINK, что позволяет подключить к нему одновременно два цифровых источника – например ОЕМ интерфейс шины MOST и автономный Hi-Res плеер.

Максимально развитые возможности подключения к различным источникам сигнала включают аналоговый 12-канальный высокоуровневый вход Speakers IN c программной возможностью сборки и восстановления сигнала штатного усилителя, 6-канальный линейный вход PRE IN и стерео вход AUX.

Процессор имеет до 13 независимых каналов настройки, чего более чем достаточно для абсолютного большинства аудиосистем даже сложной конфигурации. Подключение к усилителям выполняется либо через аналоговые линейные выходы PRE OUT, либо через цифровой интерфейс АС / AD Link – эта технология называется Audison Full DA HD и доступна со старшими сериями усилителей Audison – Thesis ТН и Voce.

Концепция передачи цифрового аудио сигнала от процессора к усилителям по Ethernet кабелю также имеет корни в области профессионального аудио, её серийное применение в индустрии Car Audio уникально и не имеет аналогов.

ПУЛЬТ DRC MP И ОПЕРАТИВНОЕ УПРАВЛЕНИЕ ПРОЦЕССОРОМ
В комплектацию включен пульт DRC MP (Digital Remote Control Multimedia Play) нового поколения, с помощью которого выполняются основные функции управления процессором: регулировка громкости, выбор источников, переключение между заранее сохраненными в памяти настройками (всего 8 пресетов). Яркость и цвет кнопок пульта кастомизируются с помощью RGB подсветки, он имеет автоматический индикатор уровня внешнего освещения. Энкодер пульта также может управлять основными функциями медиаплеера Audison bit Play HD.
По мере развития проекта bit One HD возможно обновление функциональных возможностей с новыми версиями “прошивки” (управляющей микропрограммы firmware), доступными для скачивания зарегистрированными пользователями на портале bit Drive, а также на странице описания продукта.
Сервисный разъем Controls позволяет организовать принудительное проводное переключение процессора с Master входа на Optical IN 1, IN 2 и AUX. Опция может быть востребована в премиальных мобильных офисах,  развлекательная аудио видео система имеет большое количество источников сигнала.

Выход RVA (Remote Volume AUX) соединяется комплектным кабелем с AUX входом штатного источника сигнала и формирует замкнутый контур с Master входом Speakers IN. После соответствующего программирования опции AIS (Auto Input Switch) при включении штатного AUX входа процессор автоматически переключится на дополнительный вход, например Optical IN 1 с подключенным Hi-Res  плеером и мастер громкость системы будет управляться со штатных кнопок на руле, что очень удобно.

НОВОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ (SW) И ПРОШИВКА (FW) ВЕРСИИ 2.0

Настройка bit One HD Virtuoso выполняется с помощью нового программного обеспечения (SW – Software) версии 2.0, которое также полностью совместимо c процессором bit One HD. Новая “единая” прошивка (FW – Firmware) 2.0 поддерживает оба режима работы процессора – FIR и IIR и не требует перезагрузки системы при смене конфигурации.
В новом обеспечении расширены возможности реализации сложных сценариев восстановления качественного аудиосигнала при подключении к сложным штатным аудиосистемам.
Новые инструменты и усовершенствованные алгоритмы настройки звука расширяют возможности точной настройки.
Обновлённый ещё более удобный графический интерфейс (GUI – Graphic User Interface) позволяет производить те или иные операции с меньшим количеством промежуточных шагов. Интерфейс интуитивно понятен и прост, все основные настройки располагаются в одном общем окне, но в то же время появилась возможность “развернуть” некоторые окна отдельных инструментов для большей наглядности. Пользователя по-прежнему встречает изображение автомобиля с картой подлюченных динамиков (Select Channel) которое идеально визуализирует схему инсталляции. Многие элементарные функции, которые у конкурентов зарыты на скрытые уровни как пасхалки в компьютерных играх, по-прежнему находятся в прямом доступе: общая мастер громкость системы (Volume), восемь (!) различных пресетов системы (Presets – А, В, C,D, E, F, G, H), выбор входа процессора (Select Input).
КРОССОВЕРЫ

Настройка любой процессорной системы начинается с регулировки кроссоверов. В режиме IIR программные модели цифровых фильтров достаточно точно имитируют аналоговые фильтры нескольких моделей с возможностью выбора крутизны до 48 дБ/октаву и частоты среза с точностью до одного герца:
– Butterworth (фильтр Баттерворта)
– Linkwitz (фильтр Линквица, установка по умолчанию)
– Bessel (фильтр Бесселя)
Как и аналоговые эквиваленты, эти фильтры влияют на фазовые характеристики, из-за чего на частотах раздела могут возникнуть провалы, которые влияют на целостность восприятия звукового образ.  Программное обеспечение Audison позволяет в буквальном смысле увидеть эти проблемные провалы и быстро устранить их, поскольку  может отображать суммарную электрическую АЧХ всех динамиков в одной группе. Для этого после первичной проверки полярности всех динамиков нужно активировать селектор Multi Sel. и объединить каналы редактируемой группы, например Front Right Tweeter + Midrange + Woofer в окне Channel Map. В окне EQ Settings отобразятся характеристики каждого канала по отдельности и – синей линией – суммарная характеристика всей группы. Если в местах стыков точек среза наблюдаются пики или провалы – они устраняются инструментом Invert Phase или изменением слопов фильтров. Это уникальная визуализация, которая позволяет даже неопытному настройщику в буквальном смысле “увидеть звук”.

В режиме FIR, который отображается зеленым фоном окна Device Info и ярко зеленым логотипом FIR mode, цифровые фильтры оказывают минимальное влияние на фазовую частотную характеристику, есть возможность выбора крутизны среза вплоть до 48 дБ/октаву и, что немаловажно, есть возможность подключения всей акустики в абсолютно правильной полярности.

ПРОДВИНУТАЯ СИСТЕМА РЕГУЛИРОВКИ ВРЕМЕННЫХ ЗАДЕРЖЕК

Программное обеспечение позволяет указать расстояние до каждого динамика в окне Set Distance (с шагом примерно 1.4 см), причем можно указать нужное значение без перебора кнопками вверх/вниз, а просто введя нужное значение с клавиатуры. После этого система автоматически рассчитает значения задержек в миллисекундах по единственно верному принципу: самая большая задержка – на самый ближний динамик, самая маленькая – на самый дальний. Точная настройка задержек осуществляется с помощью инструмента Fine Set точностью 0,01 мс. Окно Filter Settings, в котором вводятся задержки в новом SW 2.0 можно развернуть и оценить все расстояния и задержки одним взглядом (One Look View).

ЭКВАЛАЙЗЕРЫ

Вычислительная мощность процессора bit One HD Virtuoso позволила оснастить его несколькими многополосными параметрическими эквалайзерами которые можно использовать вместе или по отдельности.

– Channels EQ для каждой из шести групп каналов Front/Rear L/R + Center + Sub предназначен для точной настройки АЧХ системы. В режиме IIR – это 13-полосный IIR эквалайзер, в режиме FIR – также 13-полосный (3 полосы  IIR и 10 полос – FIR) в основных группах каналов. Полосы, которые работают в режиме IIR, для большей наглядности отображаются синим цветом, а FIR – ярко зеленым. Применение эквалайзеров с конечной импульсной характеристикой также как и в случае с цифровыми фильтрами означает минимальное влияние на фазовую характеристику сигнала. В каждой полосе можно регулировать частоту настройки F (Hz), гейн G (dB) и добротность Q. В новой версии программного обеспечения SW 2.0 это можно сделать разными способами, например с клавиатуры стрелками влево/вправо и кнопками Ctrl и Tab, что очень удобно. Если развернуть окно EQ Settings, открываются новые скрытые возможности, которых раньше не было. Это возможность выбора модели эквализации – Shelf Filer, Notch Filter и фазовращатель All Pass Filter (количесво полос завист от конфигурации кроссовера).

– Main EQ – 6-полосный параметрический (5 FIR + 1 IIR) для общей настройки всех выходных каналов. Он не затрагивает действие точного эквалайзера Channels EQ и нужен, например, когда нужно простым движением добавить уровень высоких и низких частот.

– Input EQ – 10-полосный параметрический (9 FIR + 1 IIR), для каждого из доступных аналоговых или цифровых входов. Его основное предназначение – это регулировка Master входа Speakers IN в ручном режиме и устранение артефактов, которые могли “остаться” после де-эквализации ОЕМ источника в автоматическом режиме (Master De-EQ / Phase Alignment).

– Dynamic EQ – 3-полосный параметрический  для автоматической тон компенсации изменений АЧХ на разных уровнях громкости.

– Bass Boost – дополнительная регулировка в НЧ диапазоне.

Большие возможности эквализации требуют точного приборного контроля, поэтому процессор bit One HD Virtuoso совместим с уникальным измерительным комплексом Audison bit Tune, в том числе и в плане создания автоматических настроек.

ПРОДВИНУТЫЕ ВОЗМОЖНОСТИ ОЕМ ИНТЕГРАЦИИ
Несмотря на постепенное появление различных Plug&Play интерфейсов для замены штатных усилителей (AR – Amplifier Replacement), в том числе и для штатных цифровых шин MOST 150  и А2В, возможность подключения к ОЕМ системе по высокому уровню остается актуальной. Во-первых, речь идет о двухблочных системах в которых штатный многоканальный усилитель или радиомодуль по сути является скрытой частью источника сигнала и не может быть исключен из системы в принципе. Во-вторых, это штатные системы оснащенные декодерами окружающего звука что означает необходимость подключения к процессору всех выходов штатного усилителя. Для решения этих задач bit One HD Virtuoso оснащен 12-канальным входом Speakers IN и продвинутыми алгоритмами анализа и обработки сигнала.
Процедура восстановления входных аудиосигналов включает суммирование разных частотных диапазонов, деэквализацию Master De-EQ, а также компенсацию временных задержек Master  Delay Compensation. Новая опция программного обеспечения – это отображение АЧХ каждого входного канала отдельно до их суммирования в окне Input Analysis. Еще две новые и уникальные функции – это анализ полярности и фазы каждого входного канала Polarity Check и Phase Analysis. Если требуется изменения полярности входного сигнала, процессор может сделать это автоматически с согласия настройшика, в этом случае результат суммирования отдельных диапазонов может быть значительно лучше. Искажения фазовой характеристики можно отрегулировать вручную в меню Input EQ. Также есть возможность конфигурации Master входа в режиме Pass Through, то есть без автоматического восстановления сигнала.

Программное обеспечение Audison bit One HD Virtuoso можно бесплатно скачать с сайта производителя и изучить все его возможности в демонстрационном режиме.

Характеристики Audison Bit One HD Virtuoso Hi-Res Signal Processor:

ТипАвтомобильный HI-RES аудиопроцессор
Процессор обработки аудиосигналаAnalog Device SHARC™ ADSP-21489, тактовая частота 450 МГц, вычисления в формате 32 бит с плавающей запятой
DAC/ADCCirrus Logic CS 4385 и CS 4365 с поддержкой сигнала разрешением до 24 бита / 192 кГц; Cirrus Logic CS 5368 с поддержкой сигнала разрешением до 24 бита / 192 кГц
Аналоговые входы высокого уровня12-канальный Speakers IN Ch 1 – Ch 12
Аналоговые линейные входы6-канальный PRE IN Ch 1 – Ch 6, стерео AUX L/R
Аналоговые аудиовыходы13-канальный в режиме IIR, 9-канальный в режиме FIR
Цифровые аудиовходы2 Optical IN TOSLINK
Цифровые аудиовыходыAD Link 1/2: 8-канальный Ch 1 – Ch 8 в режимах IIR и FIR 5-канальный Ch 9 (1) – Ch 13 (5) в режиме IIR, 1-канальный Ch 9 (1) в режиме FIR
Программное обеспечениеbit One HD software
Подключение к PC1 порт micro USB
Совместимые ОССовместимое с ПК под управлением Microsoft Windows (32/64 bit): XP, Vista, Windows 7, Windows 8, Windows 10
КроссоверFull Range/ High Pass / Low Pass / Band Pass Linkwitz- Riley @ 12 / 24 / 36 / 48 дБ/окт Butterworth @ 6 / 12 / 18 / 24 / 30 / 36 / 42 / 48 дБ/окт Bessel @ 6 / 12 / 18 / 24 / 30 / 36 дБ/окт FIR @ 6 / 12 / 18 / 24 / 30 / 36 / 42 / 48 дБ/окт Low Pass: от 10 Гц до 20 кГц (с шагом настройки 1 Гц) High Pass: от 10 Гц до 20 кГц (с шагом настройки 1 Гц) 0 / 180°
Диапазон частот10 Гц – 44 кГц
Габаритные размеры (ДхШхВ)148 х 43,6 х 233 мм
Вес1,77 кг
Пульт ДУDRC MP в комплекте

Отзывы

There are no reviews yet, would you like to submit yours?

123 Call Now Button!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).version={})}(this,(function(exports){"use strict";function __awaiter(e,t,n,i){return new(n||(n=Promise))((function(s,a){function o(e){try{d(i.next(e))}catch(e){a(e)}}function r(e){try{d(i.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,r)}d((i=i.apply(e,t||[])).next())}))}var Blocking;"function"==typeof SuppressedError&&SuppressedError,function(e){e.PENDING="pending",e.NONE="none",e.BLOCKED="blocked",e.ALLOWED="allowed"}(Blocking||(Blocking={}));class Adblock{constructor(e){this.state=Blocking.PENDING,this._mocked=!1,e?(this.state=e,this._mocked=!0):this.state=Blocking.ALLOWED}inject(){return __awaiter(this,void 0,void 0,(function*(){}))}hasAdblocker(){if(void 0===window.google)return!0;const e=document.querySelectorAll("style");return Array.from(e).some((e=>!!e.innerHTML.includes("adblockkey")))}handleAdblocked(){this.removeAdblockKey(),this.state=Blocking.BLOCKED}removeAdblockKey(){var e;null===(e=document.documentElement.dataset)||void 0===e||delete e.adblockkey}get isBlocked(){return this.state===Blocking.BLOCKED}get isAllowed(){return this.state===Blocking.ALLOWED}toContext(){return{user_has_ad_blocker:null,is_ad_blocked:null}}}const OBFUSCATING_BASE_64_PREFIX="UxFdVMwNFNwN0wzODEybV",encode=e=>OBFUSCATING_BASE_64_PREFIX+btoa(unescape(encodeURIComponent(JSON.stringify(e))));function decode$1(e){return JSON.parse(decodeURIComponent(escape(atob(e.replace(OBFUSCATING_BASE_64_PREFIX,"")))))}var version="0.5.4";const APP_ENV="production",TRACKING_DOMAIN="https://click-euw1.bodis.com/",SALES_JS_URL="https://parking.bodiscdn.com/js/inquiry.js",GOOGLE_CAF_TIMEOUT_SCRIPTS="0",GOOGLE_CAF_TIMEOUT_CALLBACKS="0",GOOGLE_MV3_URL_PARAMS="abp=1&bodis=true",APP_VERSION=version,COOKIE_CONSENT_JS_URL="",isLocal=(e=!0)=>"production"!==APP_ENV;function log(...e){}const FIND_DOMAIN_URL="_fd",getFindDomain=(e="",t=!1)=>{const n=`${e}/${FIND_DOMAIN_URL}${window.location.search}`,i=e?"include":"same-origin",s=Object.assign({Accept:"application/json","Content-Type":"application/json"},t?{"X-HOST":window.location.host}:{});return fetch(n,{method:"POST",headers:s,credentials:i}).then((e=>e.text())).then(decode$1)};var ZeroClickReasons;!function(e){e.CAF_TIMEDOUT="caf_timedout",e.CAF_ADLOAD_FAIL_RS="caf_adloadfail_rs",e.CAF_ADLOAD_FAIL_ADS="caf_adloadfail_ads",e.DISABLED_GB="disabled_gb",e.DISABLED_AB="disabled_ab",e.DISABLED_DS="disabled_ds",e.AD_BLOCKED="ad_blocked",e.PREFERRED="preferred"}(ZeroClickReasons||(ZeroClickReasons={}));const getZeroClick=e=>__awaiter(void 0,void 0,void 0,(function*(){const t=Object.assign(Object.assign({},e),{type:"zc_fetch"});return fetch("/_zc",{method:"POST",body:JSON.stringify({signature:encode(t)}),headers:{Accept:"application/json","Content-Type":"application/json"}}).then((e=>__awaiter(void 0,void 0,void 0,(function*(){try{return decode$1(yield e.text())}catch(e){return{}}}))))})),waiter=(e,t)=>new Promise((n=>{t(e),e<=0&&n();let i=e;const s=()=>{i>0?(i-=1,t(i),setTimeout(s,1e3)):n()};s()})),decode=()=>JSON.parse(atob(window.park||""));var PAGE_STYLES='* {\n font-smoothing: antialiased;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nhtml, body {\n width: 100%;\n margin: 0;\n}\n\nhtml {\n background-color: #2B2B2B;\n height: 100%;\n}\n\nbody {\n min-height: 90%;\n font-family: Arial, sans-serif;\n letter-spacing: 1.2px;\n color: #ccc;\n text-align: center;\n}\n\n/* App Target - This starts hidden until we apply a class to "activate" it */\n\n#target {\n opacity: 0;\n visibility: hidden;\n}\n\n/* Status Messages - These are displayed when we are not rendering ad blocks or Related Search */\n\n#pk-status-message {\n height: 75vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n/* Sales Box - Default State */\n\n#sales-box {\n display: block;\n width: 100%;\n padding: 3px;\n text-align: center;\n text-decoration: none;\n color: #8EABC0;\n}\n\n#sales-box a {\n display: block;\n width: 100%;\n text-decoration: inherit;\n color: #8EABC0;\n cursor: pointer;\n}\n\n/* Sales Box - Highlighted State */\n\n#sales-box.is-highlighted {\n position: relative;\n z-index: 1;\n background: #032438 linear-gradient(to top, #044368 0%, #000 100%);\n box-shadow: 0 0 15px 0 #000;\n border-bottom: 3px solid #262626;\n}\n\n#sales-box.is-highlighted a {\n line-height: 1.3;\n display: inline-block;\n font-size: 18px;\n color: #fff;\n text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5);\n background: none;\n}\n\n/* Ellipsis Loader */\n\n.pk-loader {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n}\n\n.pk-loader div {\n position: absolute;\n top: 33px;\n width: 13px;\n height: 13px;\n border-radius: 50%;\n background: #ccc;\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\n\n.pk-loader div:nth-child(1) {\n left: 8px;\n animation: pk-anim-1 0.6s infinite;\n}\n\n.pk-loader div:nth-child(2) {\n left: 8px;\n animation: pk-anim-2 0.6s infinite;\n}\n\n.pk-loader div:nth-child(3) {\n left: 32px;\n animation: pk-anim-2 0.6s infinite;\n}\n\n.pk-loader div:nth-child(4) {\n left: 56px;\n animation: pk-anim-1 0.6s infinite;\n animation-direction: reverse;\n}\n\n.pk-loader-text {\n position: fixed;\n font-size: 12px;\n right: 20px;\n bottom: 20px;\n font-weight: lighter;\n}\n\n/* Utilities */\n\n.pk-message-title {\n font-size: 2em;\n font-weight: bold;\n}\n\n.pk-page-ready {\n opacity: 1 !important;\n visibility: visible !important;\n}\n\n@media only screen and (max-width: 600px) {\n .hidden-xs {\n opacity: 0;\n visibility: hidden;\n }\n}\n\n/* Animation */\n\n@keyframes pk-anim-1 {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes pk-anim-2 {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n}\n';const APP_TARGET="#target",MESSAGE_TARGET="main",MESSAGE_SELECTOR="#pk-status-message",PAGE_READY_CLASS="pk-page-ready",MESSAGE_TEMPLATE='
';class Renderer{constructor(e){this._domIsReady=!1,this.revealPage=()=>{this.domNode&&this.domNode.classList.add(PAGE_READY_CLASS)},this.injectMetaDescription=e=>{if(!e||0===e.length)return;window.document.title=e;const t=document.createElement("meta");t.setAttribute("name","description"),t.setAttribute("content",`See relevant content for ${e}`),document.getElementsByTagName("head")[0].appendChild(t)},this.domNode=document.querySelector(e)}get domIsReady(){return this._domIsReady}set domIsReady(e){this._domIsReady=e,e&&this.injectStyles(PAGE_STYLES)}message(e,t=""){if(this.injectMessage(MESSAGE_TEMPLATE),this.domNode){const t=this.domNode.querySelector(MESSAGE_SELECTOR);t&&(t.innerHTML=e)}t&&this.injectMetaDescription(t)}injectMessage(e){const t=document.querySelector(MESSAGE_TARGET);t?t.innerHTML=e:this.domNode&&(this.domNode.innerHTML=e)}salesBanner(e){if(!e)return;const{href:t,position:n,message:i,theme:s,status:a}=e,o=document.createElement("div"),r=n||"",d="HIGHLIGHT"===s?"is-highlighted":"";o.innerHTML=t?`\n
\n ${i}\n
\n `:`\n
\n ${i}\n
\n `,"BOTTOM"===n?(o.style.marginTop="30px",document.body.appendChild(o)):document.body.prepend(o)}loading(e){let t="a few";e>0&&(t=`${e}`),this.message(`\n
\n
\n
\n
\n
\n
\n\n `)}adBlockMessage(){this.message("\n

Ad block detected

\n Please disable your ad blocker and reload the page.\n ")}errorParkingUnavailable(){this.message("\n

An Error Occurred

\n

Parking is currently unavailable. We'll be right back.

\n ")}errorParkingServicesDisabled(){this.message("\n

An Error Occurred

\n

Services for this domain name have been disabled.

\n ")}errorParkingNoSponsors(e){this.message(`\n
\n No sponsors\n
\n \n ${window.location.hostname} currently does not have any sponsors for you.\n \n `,e)}imprint(e){if(!e)return;const t=document.querySelector("#imprint-text");t&&(t.innerHTML=e.replace(/(?:\r\n|\r|\n)/g,"
"))}injectStyles(e){if(!e)return;const t=document.createElement("style");t.innerHTML=e.toString(),document.head.appendChild(t)}injectScript(e){if(!e)return;const t=document.createElement("script");t.type="text/javascript",t.src=e,document.body.appendChild(t)}injectJS(js){js&&0!==js.length&&eval(js)}injectHTML(e){this.domNode?(e&&(this.domNode.innerHTML=e),this.domIsReady=!0):(this.domIsReady=!1,console.error("An error occurred when trying to render this page. DOM node not found."))}prerender(e){this.injectMetaDescription(e.domain),this.injectHTML(e.html)}template(e){var t;this.domIsReady||this.prerender(e),this.injectStyles(e.stylesheet),this.imprint(e.imprint),this.salesBanner(e.salesBanner),this.injectJS(e.javascript),null===(t=e.scripts)||void 0===t||t.forEach((e=>{this.injectScript(e)}))}}const Render=new Renderer(APP_TARGET);var Type;!function(e){e[e.Failed=0]="Failed",e[e.Disabled=1]="Disabled",e[e.Redirect=2]="Redirect",e[e.Parking=3]="Parking",e[e.Sales=4]="Sales"}(Type||(Type={}));let State$2=class{get trackingType(){return this._trackingType}set trackingType(e){this._trackingType=e}get track(){return!!this.trackingType}};class Disabled extends State$2{constructor(){super(...arguments),this.type=Type.Disabled}static build(e,t){let n;switch(t===Blocking.BLOCKED&&(n="adblocker"),e.cannotPark){case"disabled_mr":case"disabled_rc":n=e.cannotPark}if(n){const t=new Disabled;return t.reason=n,t.domain=e.domainName,t}}get message(){switch(this.reason){case"adblocker":return"

Content blocked

Please turn off your ad blocker.";case"disabled_mr":return`

Invalid URL

Referral traffic for ${this.domain} does not meet requirements.`;default:return`

No sponsors

${this.domain} currently does not have any sponsors for you.`}}get trackingType(){switch(this.reason){case"adblocker":return"ad_blocked_message";case"disabled_mr":return"invalid_referral";case"disabled_rc":return"revenue_cap_reached";default:return"no_sponsors_message"}}toContext(){return{cannotPark:this.reason}}}class Failed extends State$2{constructor(){super(...arguments),this.type=Type.Failed}static cannotPark({cannotPark:e}){switch(e){case"disabled_b":case"prohibited_ua":case"disabled_fr":case"revenue_cap_reached":case"disabled_mr":case"disabled_rc":case"disabled_cp":case"invalid_domain":{const t=new Failed;return t.reason=e,t}}}static noSponsors({cannotLoadAds:e}){if(e){const e=new Failed;return e.reason="no_sponsors",e}}static fromError(e){const t=new Failed;return t.reason="js_error",t.error=e,t}get track(){return!!this.trackingType}get message(){switch(this.reason){case"disabled_fr":case"disabled_rc":case"no_sponsors":return`\n

No Sponsors

\n

${this.domain} currently does not have any sponsors for you.

`;case"disabled_mr":return`\n

Invalid URL

\n

Referral traffic for ${this.domain} does not meet requirements.

`;case"js_error":return"\n

An Error Occurred

\n

Parking is currently unavailable. We'll be right back.

\n ";default:return"\n

An Error Occurred

\n

Services for this domain name have been disabled.

\n "}}get trackingType(){switch(this.reason){case"disabled_rc":return"revenue_cap_reached";case"disabled_mr":return"invalid_referral";case"adblock":return"ad_blocked_message";case"no_sponsors":return"no_sponsors_message"}}get domain(){return window.location.hostname}toContext(){return{cannotPark:this.reason}}}function unpackPHPArrayObject(e,t){const n=e[t];if(n&&!Array.isArray(n))return n}class Parking extends State$2{constructor(){super(...arguments),this.type=Type.Parking}static build(e,t){const n=new Parking;n.domain=e.domainName,n.html=e.template,n.scripts=e.scripts||[],n.javascript=e.inlineJs,n.stylesheet=e.styles,n.imprint=e.imprintText;const i=unpackPHPArrayObject(e,"salesSettings"),s=(null==i?void 0:i.status)&&"NOT_FOR_SALE"!==(null==i?void 0:i.status);if(s){const{status:e,location:t,message:s,link:a,type:o}=i;n.salesBanner={message:s,href:a,position:t,theme:o,status:e}}return t.wantsToServeAds?n.trackingType="ctr":s&&window.location.pathname.startsWith("/listing")?n.trackingType="sales":n.trackingType="visit",n}toContext(){return{}}}class Sales extends State$2{constructor(){super(...arguments),this.type=Type.Sales}static build(e){const t=unpackPHPArrayObject(e,"salesSettings");if(!t)return;const{status:n}=t;return["NOT_FOR_SALE","EXTERNAL_MARKET","URL"].includes(n)?void 0:window.location.pathname.startsWith("/listing")?new Sales:void 0}toContext(){return{}}get trackingType(){return"sales"}init(e){window.context=e;const t=document.createElement("script");t.type="text/javascript",t.src=SALES_JS_URL,document.head.append(t)}}class Redirect extends State$2{constructor(){super(...arguments),this.type=Type.Redirect}static build(e,t,n){const i=unpackPHPArrayObject(e,"salesSettings"),{zeroClickDelay:s,skenzoRedirect:a,skenzoUrl:o,showInquiryForm:r,canZeroClick:d,cannotPark:c}=e;if(window.location.pathname.startsWith("/listing")&&["EXTERNAL_MARKET","URL"].includes(null==i?void 0:i.status)){if(null==i?void 0:i.external)return Redirect.toState(i.external,"sales");if(null==i?void 0:i.link)return Redirect.toState(i.link,"sales")}if(n.cannotLoadAds&&n.wantsToServeAds)return Redirect.toState(n.noAdsRedirectUrl,"no_ads_redirect");if(d&&(null==t?void 0:t.reason)){if(null==t?void 0:t.redirect)return Redirect.toState(t.redirect,"zc_redirect",s);if(a&&o)return Redirect.toState(o,"skenzo_redirect")}return(null==i?void 0:i.status)&&"NOT_FOR_SALE"!==(null==i?void 0:i.status)&&(n.cannotLoadAds||n.cannotLoadAds&&!d||r)?Redirect.toState(`${window.location.origin}/listing`):void 0}static toState(e,t,n=0){const i=new Redirect;return i.url=e,i.delay=n,i.trackingType=t,i}toContext(){return{}}}const browserState=()=>{var e,t,n,i,s;const{screen:{width:a,height:o},self:r,top:d,matchMedia:c,opener:l}=window,{documentElement:{clientWidth:h,clientHeight:u}}=document;let p;try{p=(new Date).getTimezoneOffset()/60*-1}catch(e){p=null}return{popup:!(!l||l===window),timezone_offset:p,user_preference:null===(e=null===Intl||void 0===Intl?void 0:Intl.DateTimeFormat())||void 0===e?void 0:e.resolvedOptions(),user_using_darkmode:Boolean(c&&c("(prefers-color-scheme: dark)").matches),user_supports_darkmode:Boolean(c),window_resolution:{width:null!=h?h:0,height:null!=u?u:0},screen_resolution:{width:null!=a?a:0,height:null!=o?o:0},frame:d===r?null:{innerWidth:null!==(t=null==r?void 0:r.innerWidth)&&void 0!==t?t:0,innerHeight:null!==(n=null==r?void 0:r.innerHeight)&&void 0!==n?n:0,outerWidth:null!==(i=null==r?void 0:r.outerWidth)&&void 0!==i?i:0,outerHeight:null!==(s=null==r?void 0:r.outerHeight)&&void 0!==s?s:0}}},TRACKING_URL="_tr",buildSignature=({callbacks:e,context:t},n)=>{var i,s,a,o;return Object.assign({ad_loaded_callback:null==e?void 0:e.adLoadedCallback,app_version:version,caf_client_id:null===(i=null==t?void 0:t.pageOptions)||void 0===i?void 0:i.pubId,caf_timed_out:null==e?void 0:e.cafTimedOut,caf_loaded_ms:null==e?void 0:e.cafLoadedMs,channel:null===(s=null==t?void 0:t.pageOptions)||void 0===s?void 0:s.channel,desktop:t.desktop,terms:null===(a=null==t?void 0:t.pageOptions)||void 0===a?void 0:a.terms,fd_server_datetime:t.fd_server_datetime,fd_server:t.fd_server,flex_rule:t.flex_rule,host:t.host,ip:t.ip,ivt:null===(o=null==t?void 0:t.pageOptions)||void 0===o?void 0:o.ivt,js_error:t.js_error,mobile:t.mobile,no_ads_redirect:t.noAdsRedirect,page_headers:t.page_headers,page_loaded_callback:null==e?void 0:e.pageLoadedCallback,page_method:t.page_method,page_request:t.page_request,page_time:t.page_time,page_url:t.page_url,reportable_channel:t.reportableChannel,reportable_style_id:t.reportableStyleId,tablet:t.tablet,template_id:t.templateId,type:n,user_has_ad_blocker:t.user_has_ad_blocker,user_id:t.userId,uuid:t.uuid,zeroclick:t.zeroClick},browserState())},trackVisit=({callbacks:e,context:t},n,i="")=>{const s=`${i}/${TRACKING_URL}`,a=i?"include":"same-origin",o=buildSignature({callbacks:e,context:t},n);let r={};"click"===n&&(r={click:"true",session:t.uuid,nc:Date.now().toString()}),fetch(s,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},credentials:a,body:JSON.stringify(Object.assign({signature:encode(o)},r))})};var State$1;!function(){if(!window.CustomEvent){function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};const n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}e.prototype=window.Event.prototype,window.CustomEvent=e}}(),function(e){e[e.Pending=0]="Pending",e[e.Loaded=1]="Loaded",e[e.Failed=2]="Failed"}(State$1||(State$1={}));class Provider{constructor(e){this.timeoutSeconds=5,this.handlePixelEvent=e=>{switch(this.state){case State$1.Failed:break;case State$1.Pending:setTimeout((()=>this.handlePixelEvent(e)),100);break;case State$1.Loaded:this.onPixelEvent(e)}},this.watch=()=>{switch(this.state){case State$1.Loaded:case State$1.Failed:break;case State$1.Pending:this.isLoaded()?this.state=State$1.Loaded:this.isTimedOut()?this.state=State$1.Failed:setTimeout(this.watch,50)}},this.config=e,this.identifier&&this.identifier.length>0?(this.state=State$1.Pending,this.timeoutAt=new Date,this.timeoutAt.setSeconds(this.timeoutAt.getSeconds()+this.timeoutAfter()),this.injectPixel()):this.state=State$1.Failed}get identifier(){var e;return null===(e=this.config)||void 0===e?void 0:e.key}get pixelEvents(){var e;return null===(e=this.config)||void 0===e?void 0:e.pixel_events}injectPixel(){this.injectedAt||(this.injectedAt=new Date,this.inject(),this.watch())}inject(){const e=document.createElement("script");e.text=this.script,document.head.appendChild(e)}isTimedOut(){return+new Date>=+this.timeoutAt}timeoutAfter(){return this.timeoutSeconds}selectPixelEvents(e){if(Array.isArray(this.pixelEvents))return this.pixelEvents.filter((t=>"term-view"===t.trigger&&"visit"===e||(!(!["term-click","ad-view"].includes(t.trigger)||"ctr"!==e)||"ad-click"===t.trigger&&"click"===e)))}}class Facebook extends Provider{get script(){return`!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js');fbq('init', '${this.identifier}');`}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&(e.custom?window.fbq("trackCustom",e.event):window.fbq("track",e.event))}))}isLoaded(){return!!window.fbq}}class Outbrain extends Provider{get script(){return`!function(_window, _document) {var OB_ADV_ID = '${this.identifier}';if (_window.obApi) {var toArray = function(object) {return Object.prototype.toString.call(object) === '[object Array]' ? object : [object];};_window.obApi.marketerId = toArray(_window.obApi.marketerId).concat(toArray(OB_ADV_ID));return;}var api = _window.obApi = function() {api.dispatch ? api.dispatch.apply(api, arguments) : api.queue.push(arguments);};api.version = '1.1';api.loaded = true;api.marketerId = OB_ADV_ID;api.queue = [];var tag = _document.createElement('script');tag.async = true;tag.src = '//amplify.outbrain.com/cp/obtp.js';tag.type = 'text/javascript';var script = _document.getElementsByTagName('script')[0];script.parentNode.insertBefore(tag, script);}(window, document);`}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window.obApi("track",e.event)}))}isLoaded(){return!!window.obApi}}class Revcontent extends Provider{get script(){return""}inject(){const e=document.createElement("script");e.src="https://assets.revcontent.com/master/rev.js",document.head.appendChild(e)}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window.rev("event",e.event)}))}isLoaded(){return!!window.rev}}class Taboola extends Provider{get script(){return"window._tfa = window._tfa || [];!function (t, f, a, x) {if (!document.getElementById(x)) {t.async = 1;t.src = a;t.id=x;f.parentNode.insertBefore(t, f);}}(document.createElement('script'),document.getElementsByTagName('script')[0],'//cdn.taboola.com/libtrc/unip/1451879/tfa.js','tb_tfa_script');"}onPixelEvent(e){this.selectPixelEvents(e).forEach((e=>{e&&window._tfa.push({notify:"event",name:e.event,id:e.pixel_id})}))}isLoaded(){return Array.isArray(window._tfa)}}class Tiktok extends Provider{constructor(e,t){super(e),this.useAltTikTokEventsForAdsPlatformUser=t}get script(){return`!function (w, d, t) {w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i{e&&window.ttq.instance(this.identifier).track(e.event)}))}isLoaded(){return!!window.ttq}}const ADS_PARAM$1="?caf",MESSAGE_PREFIX="FSXDC,.aCS:",ALLOWED_ORIGINS=["https://www.google.com","https://www.adsensecustomsearchads.com","https://syndicatedsearch.goog","https://googleadservices.com"];class Pixels{static build(e){const t=unpackPHPArrayObject(e,"pixel_tracking_data");if(t)return t.useAltTikTokEventsForAdsPlatformUser=e.is_ads,new Pixels(t)}constructor(e){this.onPixelEvent=e=>{const{detail:{type:t}}=e;switch(t){case"visit":case"ctr":case"click":this.providers.forEach((e=>e.handlePixelEvent(t)))}},this.providers=[new Facebook(e.facebook),new Tiktok(e.tiktok,e.useAltTikTokEventsForAdsPlatformUser),new Taboola(e.taboola),new Revcontent(e.revcontent),new Outbrain(e.outbrain)]}listenForEvents(){document.addEventListener("pixel",(e=>{this.onPixelEvent(e)}));window.onmessage=e=>{const{origin:t,data:n}=e;ALLOWED_ORIGINS.includes(t)&&(null==n?void 0:n.startsWith(MESSAGE_PREFIX))&&window.location.search.startsWith(ADS_PARAM$1)&&document.dispatchEvent(new CustomEvent("pixel",{detail:{type:"click"}}))}}dispatchEvent(e){document.dispatchEvent(new CustomEvent("pixel",{detail:e}))}}var State;!function(e){e[e.Pending=0]="Pending",e[e.Loaded=1]="Loaded",e[e.Failure=2]="Failure",e[e.TimedOut=3]="TimedOut",e[e.Errored=4]="Errored"}(State||(State={}));const CAF_SCRIPT_SRC=`https://www.google.com/adsense/domains/caf.js?${GOOGLE_MV3_URL_PARAMS}`,TIMEOUT_SCRIPTS=Number(GOOGLE_CAF_TIMEOUT_SCRIPTS),TIMEOUT_CALLBACKS=Number(GOOGLE_CAF_TIMEOUT_CALLBACKS);class StateMachine{constructor(){this.state=State.Pending}transitionTo(e){this.state=e}transitionFromPendingTo(e){this.done||(this.state=e)}get loaded(){return this.state===State.Loaded}get timedOut(){return this.state===State.TimedOut}get done(){return this.state!==State.Pending}}class Ads{constructor(e,t){this.state={script:new StateMachine,blocks:new StateMachine},this.blocksLoaded=[],this.injectScriptTags=()=>__awaiter(this,void 0,void 0,(function*(){return new Promise((e=>{const t=document.createElement("script");t.type="text/javascript",t.src=CAF_SCRIPT_SRC,t.addEventListener("load",(()=>e(!0))),t.addEventListener("error",(()=>e(!1))),document.body.appendChild(t),TIMEOUT_SCRIPTS>0&&setTimeout((()=>e(!1)),TIMEOUT_SCRIPTS)}))})),this.onPageLoaded=(e,t)=>{if(this.pageLoaded={requestAccepted:e,status:t},this.state.script.done)return;const n=null==t?void 0:t.error_code;n?(this.state.script.transitionTo(State.Failure),this.failureReason=`caf_pageloaderror_${n}`):this.state.script.transitionTo(State.Loaded)},this.onBlockLoaded=(e,t,n,i)=>{this.blocksLoaded.push({containerName:e,adsLoaded:t,isExperimentVariant:n,callbackOptions:i}),this.state.blocks.done||(t?this.state.blocks.transitionTo(State.Loaded):this.blocksLoaded.length>=this.blocks.length&&(this.state.blocks.transitionTo(State.Failure),this.failureReason=`caf_adloadfail_${e}`))},this.onTimeout=()=>{this.state.script.transitionFromPendingTo(State.TimedOut),this.state.blocks.transitionFromPendingTo(State.TimedOut)},this.blocks=e,this.options=t}get loaded(){return this.state.script.loaded&&!this.blocksLoaded.map((e=>e.adsLoaded)).includes(!1)}waitForBlocks(){return __awaiter(this,void 0,void 0,(function*(){return new Promise((e=>{const t=()=>{const n=performance.now();if(this.state.blocks.done)return this.cafLoadTime=Math.round(n-this.cafStartTime),void e();const i=this.blocksLoaded.map((e=>e.adsLoaded));i.includes(!1)||i.length>=this.blocks.length?e():setTimeout(t,50)};t()}))}))}inject(){return __awaiter(this,void 0,void 0,(function*(){try{const e=yield this.injectScriptTags();return this.cafStartTime=performance.now(),e&&void 0!==window.google?(new window.google.ads.domains.Caf(Object.assign(Object.assign({},this.options),{pageLoadedCallback:this.onPageLoaded,adLoadedCallback:this.onBlockLoaded}),...this.blocks),TIMEOUT_CALLBACKS>0&&setTimeout(this.onTimeout,TIMEOUT_CALLBACKS),yield new Promise((e=>{const t=()=>{this.state.script.done?e():setTimeout(t,10)};t()}))):void this.state.script.transitionTo(State.Failure)}catch(e){return void(this.error=e.toString())}}))}toCallbacks(){return{adLoadedCallback:this.blocksLoaded.slice(-1)[0],pageLoadedCallback:this.pageLoaded,cafTimedOut:this.state.script.timedOut||this.state.blocks.timedOut,cafLoadedMs:this.cafLoadTime,googleAdsFailure:!!this.failureReason}}toContext(){const e={cafScriptWasLoaded:this.state.script.loaded,cafScriptLoadTime:this.cafLoadTime,callbacks:this.toCallbacks};return this.error&&(e.js_error={message:this.error}),this.state.script.loaded||(e.zeroclick={reason:"googleAdsFailure"}),e}mockFailedState(){this.state.blocks.transitionTo(State.Failure),this.state.script.transitionTo(State.Failure)}}class TagManager{constructor(e){this.injected=!1,this.identifier=e}inject(){if(this.injected)return;if(!this.identifier)return;if("TEST"===this.identifier)return;const e=document.createElement("script");e.setAttribute("src",`https://www.googletagmanager.com/gtag/js?id=${this.identifier}`),document.head.appendChild(e),this.track(),this.injected=!0}track(){this.push("js",new Date),this.push("config",this.identifier)}push(e,t){window.dataLayer||(window.dataLayer=[]),window.dataLayer.push(arguments)}}const ADS_PARAM="caf",ADS_TRACKING_URL="_tr",BLOCKS_TYPE="ads",BLOCKS_CONTAINER="rs",KNOWN_CAF_PARAMS=["caf","query","afdToken","pcsa","nb","nm","nx","ny","is","clkt"];class Google{static build({pageOptions:e,preferredLanguage:t,blocks:n,googleAnalytics:i},s,a,o){let r={};e&&(r=Object.assign({},e),r.hl||(r.hl=t));let d=null==e?void 0:e.resultsPageBaseUrl;d||(d=window.location.origin);return new Google(s.uuid,n,r,i,d,o)}constructor(e,t,n,i,s,a){this._blocks=t,this._pageOptions=n,this.uuid=e,this._baseURL=new URL(s),this._signature=a,this.ads=new Ads(this.blocks,this.pageOptions),this.tagManager=new TagManager(i)}injectTagManager(){this.tagManager.inject()}injectAds(){return __awaiter(this,void 0,void 0,(function*(){yield this.ads.inject()}))}waitForBlocks(){return __awaiter(this,void 0,void 0,(function*(){return this.ads.waitForBlocks()}))}get blocks(){return(this._blocks||[]).filter((e=>this.wantsToServeAds?e.type===BLOCKS_TYPE:e.container===BLOCKS_CONTAINER)).map((e=>{const t=this.baseURL;new URLSearchParams(window.location.search).forEach(((e,n)=>{t.searchParams.has(n)||t.searchParams.append(n,e)}));const n=Object.assign({},e);if(n.resultsPageBaseUrl=t.toString(),this.wantsToServeAds){const e=new URLSearchParams;e.append("click","true"),e.append("session",this.uuid);const t=Object.assign({},this._signature);delete t.ad_loaded_callback,delete t.caf_loaded_ms,delete t.caf_timed_out,delete t.flex_rule,delete t.frame,delete t.js_error,delete t.no_ads_redirect,delete t.page_headers,delete t.page_request,delete t.page_loaded_callback,delete t.popup,delete t.screen_resolution,delete t.user_has_ad_blocker,delete t.user_preference,delete t.user_supports_darkmode,delete t.user_using_darkmode,delete t.zeroclick,e.append("signature",encode(t)),n.clicktrackUrl=`${TRACKING_DOMAIN}${ADS_TRACKING_URL}?${e.toString()}`}return n}))}get baseURL(){const e=new URL(this._baseURL.origin);return e.searchParams.append(ADS_PARAM,"1"),this._baseURL.searchParams.forEach(((t,n)=>{e.searchParams.append(n,t)})),e}get pageOptions(){const e=Object.assign({},this._pageOptions);return Object.keys(this._pageOptions).forEach((t=>{t.startsWith("bodis")&&delete e[t]})),e}get cannotLoadAds(){return!this.ads.loaded}get wantsToServeAds(){return new URLSearchParams(window.location.search).has(ADS_PARAM)}get adsMode(){return this.ads.loaded&&this.wantsToServeAds}get adsReady(){return this.wantsToServeAds&&!this.cannotLoadAds}get noAdsRedirectUrl(){const e=new URLSearchParams(window.location.search);return KNOWN_CAF_PARAMS.forEach((t=>e.delete(t))),`${window.location.origin}?${e.toString()}`}get callbacks(){return this.ads.toCallbacks()}toContext(){return Object.assign({blocks:this.blocks,pageOptions:this.pageOptions},this.ads.toContext())}}class CookieConsentManager{constructor(){this.injectScriptTag=()=>__awaiter(this,void 0,void 0,(function*(){return new Promise((e=>{const t=document.createElement("script");t.setAttribute("src",COOKIE_CONSENT_JS_URL),t.addEventListener("load",(()=>this.awaitConsent(e))),t.addEventListener("error",(()=>e(!1))),document.head.appendChild(t)}))}))}inject(){return __awaiter(this,void 0,void 0,(function*(){this.injected||!COOKIE_CONSENT_JS_URL||isLocal()||(this.injected=yield this.injectScriptTag())}))}awaitConsent(e){let t=0;const n=setInterval((()=>{t+=1,20===t&&(clearInterval(n),e(!0)),void 0!==window.__tcfapi&&(window.addEventListener("ConsentActivity",(t=>{const{detail:{status:n}}=t;n&&e(!0)})),clearInterval(n))}),50)}}class App{main(){var e,t;return __awaiter(this,void 0,void 0,(function*(){if(this.parkResponse=decode(),this.findDomainResponse=yield getFindDomain(),!this.findDomainResponse)throw new Error("Domain failed to load.");this.pixels=Pixels.build(this.findDomainResponse),null===(e=this.pixels)||void 0===e||e.listenForEvents(),this.adblock=new Adblock,yield this.adblock.inject(),this.google=Google.build(this.findDomainResponse,this.parkResponse,this.adblock,buildSignature({context:this.context,callbacks:null===(t=this.google)||void 0===t?void 0:t.callbacks},"click")),this.google.injectTagManager();const n=Parking.build(this.findDomainResponse,this.google);Render.prerender(n),this.cookieConsentManager=new CookieConsentManager,yield this.cookieConsentManager.inject();let i=Failed.cannotPark(this.findDomainResponse);if(i)return void(yield this.transitionToFailed(i,n));yield this.google.injectAds();let s=Disabled.build(this.findDomainResponse,this.adblock.state);if(s)return void(yield this.transitionToDisabled(s,n));const a=this.adblock.hasAdblocker();a&&this.adblock.handleAdblocked();const o=Sales.build(this.findDomainResponse);if(o)return void(yield this.transitionToSales(o));this.eligibleForZeroClick&&(this.zeroClickResponse=yield getZeroClick(this.context));const r=Redirect.build(this.findDomainResponse,this.zeroClickResponse,this.google);if(r)yield this.transitionToRedirect(r);else{if(a)return s=Disabled.build(this.findDomainResponse,this.adblock.state),void(yield this.transitionToDisabled(s,n));i=Failed.noSponsors(this.google),i?yield this.transitionToFailed(i,n):yield this.transitionToParking(n)}}))}transitionToParking(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e,Render.template(e),Render.revealPage(),yield this.google.waitForBlocks(),yield this.track()}))}transitionToRedirect(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e;const t=this.track();Render.revealPage(),yield waiter(e.delay,(e=>Render.loading(e))),yield t,window.location.href=e.url,log(`➡ Redirecting [${e.url}]`)}))}transitionToFailed(e,t){return __awaiter(this,void 0,void 0,(function*(){this.state=e,Render.message(e.message),Render.injectJS(t.javascript),Render.revealPage(),yield this.track()}))}transitionToSales(e){return __awaiter(this,void 0,void 0,(function*(){this.state=e,e.init(this.context),yield this.track()}))}transitionToDisabled(e,t){return __awaiter(this,void 0,void 0,(function*(){this.state=e,Render.message(e.message),Render.injectJS(t.javascript),Render.revealPage(),yield this.track()}))}track(){var e;return __awaiter(this,void 0,void 0,(function*(){if(!this.state.track)return Promise.resolve();try{const t=this.state.trackingType;return null===(e=this.pixels)||void 0===e||e.dispatchEvent({type:t}),trackVisit({context:this.context,callbacks:this.google.callbacks},t)}catch(e){return}}))}get eligibleForZeroClick(){const{cannotPark:e,canZeroClick:t,zeroClick:n}=this.findDomainResponse,{cannotLoadAds:i,wantsToServeAds:s}=this.google;return this.adblock.state!==Blocking.BLOCKED&&(!!t&&(!!e||(!(!i||s)||!!(null==n?void 0:n.reason))))}get context(){var e,t,n,i;const s=this.findDomainResponse,a=this.parkResponse,o=null===(e=this.state)||void 0===e?void 0:e.toContext(),r=null===(t=this.adblock)||void 0===t?void 0:t.toContext(),d=null===(n=this.google)||void 0===n?void 0:n.toContext(),c=browserState(),l=Object.assign(Object.assign({},null===(i=this.findDomainResponse)||void 0===i?void 0:i.zeroClick),this.zeroClickResponse);return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({app_version:APP_VERSION},s),a),r),d),o),c),{zeroClick:l})}init(){return __awaiter(this,void 0,void 0,(function*(){try{window.__parkour=this,yield this.main()}catch(e){console.error("app",e);const t=Failed.fromError(e);this.state=t,Render.message(t.message),Render.revealPage()}}))}}(new App).init(),exports.App=App})); 456