وبگاه دکتر محمد جلالی
زندگینامه

سوابق آموزشی، پژوهشی و اجرایی دکتر محمد جلالی

 

 

 

الف- سوابق تحصیلی دانشگاهی (به ترتیب تاریخ اخذ مدرک):

 

۱- دریافت مدرک دکتری در رشته « حقوق عمومی»، با کسب بالاترین رتبه، دانشگاه پاریس۱ (سوربن)، کشور فرانسه، سال ۱۳۸۷ (پایان نامه با موضوع: « مسئله تمرکززدایی در حقوق ایران»)

 

۲- دریافت مدرک کارشناسی ارشد، (DEA) « حقوق عمومی و محیط زیست » ، دانشگاه نانت، کشور فرانسه، سال ۱۳۸۱ ( پایان نامه با موضوع: « نگاهی به جنبش تمرکززدایی در حقوق ایران»)

 

۳-  دریافت مدرک کارشناسی ارشد « حقوق عمومی »، دانشکده حقوق و علوم سیاسی دانشگاه تهران، سال ۱۳۷۶ (پایان نامه با موضوع: « بررسی شرایط کار کودکان و نوجوانان در حقوق ایران، هند و اسناد بین المللی»با نمره ۱۹،۵).

 

۴- دریافت مدرک کارشناسی حقوق قضایی، دانشکده حقوق و علوم سیاسی دانشگاه تهران، سال  ۱۳۷۳٫

 

۵- دریافت مدرک دوره آموزش کوتاه مدت دانشگاه تابستانی انستیتو فدرالیسم سوییس با موضوع: فدرالیسم، تمرکززدایی و تنوع قومی و فرهنگی با ارائه ی کار پژوهشی در خصوص تنوع فرهنگی در ایران، فریبورگ، سوییس ۱۳۸۲٫

 

۶- دریافت مدرک «دوره مدیریت انتخابات»، دانشگاه پاریس ۲، پانتئون اَسَس، با ارائه پایان نامه با عنوان « بررسی انتخابات محلی در حقوق اساسی ایران» با امتیاز عالی، پاریس، فرانسه، سال ۲۰۰۷٫

 

 

 

ب- رتبه های علمی:

 

۱-      رتبه ی شش کنکور سراسری در منطقه یک  و رتبه ی ده در کل کشور.

 

۲-      رتبه ی یک کنکور کارشناسی ارشد در رشته ی حقوق عمومی در کل کشور.

 

۳-      رتبه ی عالی در پایان نامه دکتری به همراه امتیاز انتشار آن.

 

 

 

سوابق آموزشی:

 

الف– تدریس دروس حقوق عمومی (حقوق اساسی، حقوق اداری، حقوق کار در مقطع کارشناسی؛ حقوق اساسی تطبیقی، حقوق اداری تطبیقی، مبانی حقوق عمومی، حقوق و آزادی های عمومی، حقوق قراردادهای اداری، نظام های انتخاباتی در مقطع کارشناسی ارشد؛ تحقیق در متون و اسناد حقوق عمومی ، اشکال حقوق دولت در مقطع دکتری) در دانشگاههای زیر:

 

۱-     دانشگاه شهید بهشتی (از ۱۳۸۷ تا کنون)؛

 

۲-     دانشگاه تهران، پردیس قم (از ۱۳۸۸ تا ۱۳۹۱)؛

 

۳-     دانشگاه تربیت مدرس از ۱۳۹۱ تا کنون

 

۴-     دانشگاه علامه طباطبایی ( نیمسال اول تحصیلی ۱۳۸۹ ) در مقاطع کارشناسی و کارشناسی ارشد؛

 

۵-     دانشگاه علوم قضایی ۱۳۹۵-۱۳۹۴

 

۶-      دانشگاه آزاد اسلامی، واحدهای:

 

–         علوم و تحقیقات ۱۳۹۵-۱۳۹۴

 

–         کابل، افغانستان (از ۱۳۹۰) در مقطع ارشد؛

 

–         تهران مرکز (از ۱۳۸۸) در مقطع ارشد ؛

 

–         تهران، واحد جنوب ( بار اول از ۱۳۷۸ تا ۱۳۷۹ و بار دوم نیمسال اول تحصیلی ۱۳۹۰-۹۱ )؛

 

–         بندر عباس (۱۳۸۷ تا ۱۳۹۰) در مقطع ارشد؛

 

–         علوم و تحقیقات اصفهان و کرمانشاه (۱۳۹۰ ) در مقاطع ارشد و دکتری.

 

–         راهنمایی، مشاوره و داوری پایان نامه ها و رساله های دانشجویی در مقاطع ارشد و دکتری در واحدهای مختلف دانشگاه آزاد اسلامی.

 

ب– راهنمایی، مشاوره و داوری پایان نامه ها در مقطع کارشناسی ارشد و رساله ها در مقطع دکتری در دانشگاه های شهید بهشتی، تهران (پردیس قم)، تربیت مدرس، علامه طباطبایی، دانشگاه آزاد اسلامی: واحدهای علوم و تحقیقات تهران، کرمانشاه، فارس، واحد تهران مرکز، بندر عباس، اراک، کابل از ۱۳۸۷ تا کنون.

 

ج-معاونت آموزشی و نیز تدریس دروس علوم اجتماعی و ادبیات عرب در مجتمع آمورشی امام صادق(ع)؛ از ۱۳۷۳ تا ۱۳۷۷٫

 

 

 

سوابق مطالعاتی و پژوهشی:

 

الف- مقالات:

 

 

 

۱-     تحلیل تطبیقی صلاحیت های درون قوه ای رئیس مجلس در نظام حقوقی ایران، بریتانیا و فرانسه، مجله مطالعات حقوق تطبیقی دانشگاه تهران،سال ۶ شماره ۲، پاییز و زمستان ۹۴٫

 

۲-     اصول کلی راهنمایی تمرکز زدایی در حقوق فرانسه و مقایسه آنها با حقوق ایران،   فصلنامه پژوهش حقوق عمومی، دانشگاه علامه طباطبایی، سال هفدهم، شماره ۴۷، تابستان ۱۳۹۴٫

 

۳-     مولفه های رسانه آزاد در پرتو رویه قضایی، مجله تحقیقات حقوقی، دانشگاه شهید بهشتی، شماره ۶۹، تابستان ۱۳۹۴٫

 

۴-     تمایز میان  اموال اشخاص عمومی در حقوق فرانسه، نشریه مطالعات حقوق تطبیقی، دانشگاه تهران، سال پنجم، شماره ۲، پاییز و زمستان ۱۳۹۲٫

 

۵-     اصول تحدید کننده تمرکز زدایی در حقوق ایران با نگاهی تطبیقی به حقوق فرانسه، مجله تحقیقات حقوقی (دانشگاه شهید بهشتی)، علمی-پژوهشی، شماره ۶۰، سال ۱۳۹۱٫

 

۶-      نقش آمبودزمان ها در توسعه و ارتقاء مردم سالاری، مجله پژوهش حقوق عمومی (دانشگاه علامه طباطبایی)، علمی-پژوهشی، سال پانزدهم، شماره ۳۹، بهار ۱۳۹۲٫

 

۷-     حقوق سیاسی زنان از منظر اسلام و اسناد بین المللی حقوق بشر، فصلنامه علمی پژوهشی زن و فرهنگ، سال چهارم، شماره ۱۵، بهار ۱۳۹۲٫

 

۸-     پاسحگویی دولت، جایگاه، ارکان و پیش شرط ها، مجله پژوهش های حقوق تطبیقی، دانشگاه تربیت مدرس، علمی پژوهشی، گواهی پذیرش، بهار ۱۳۹۵٫

 

۹-     تاثیر تحولات نهادهای اجتماعی بر امکان دولت قانونمند در ایران، فصلنامه علمی پژوهشی راهبرد، گواهی پذیرش.

 

۱۰- تفکیک صلاحیت دیوان عدالت اداری و دادگاه عمومی در دعاوی مسئولیت مدنی علیه دولت، مجله حقوقی دادگستری، گواهی پذیرش.

 

۱۱-  نقش دیوان عدالت اداری در نظارت اساسی مقررات دولتی؛اساسی سازی حقوق اداری،اداری سازی حقوق اساسی، مجله حقوقی دادگستری، گواهی پذیرش.

 

۱۲- سازمان بازرسی کل کشور: از تحدید قدرت تا تضمین هنجارهای حقوق بشری، مجله پژوهش های حقوقی حقوق عمومی، شهر دانش، پاییز ۱۳۹۴٫

 

۱۳- صلاحیت تشخیصی و کنترل پذیری آن در حقوق اداری از منظر حقوق بنیادین و اقتضائات دولت مدرن، تازه های حقوق عمومی؛ انتشارات جنگل، ۱۳۹۳٫

 

۱۴- مفهوم و جایگاه عدم­تمرکز در نظام حقوق اساسی ایران در پرتو اندیشۀ قانونگذار اساسی، اولینیادنامه حقوق اداری دکتر منوچهر موتمنی طباطبایی، انتشارات مجد، ۱۳۹۲٫

 

۱۵- حق اعتصاب کارمندان بخش عمومی، ممنوعیت یا محدودیت، مطالعه­ی مقایسه­ای نظام­های فرانسه، انگلستان و ایران، مجله پژوهش های حقوق تطبیقی، دانشگاه تربیت مدرس، علمی پژوهشی، شماره ۷۷، پاییز ۱۳۹۱.

 

۱۶-  نقدی بر رای شعبه ۱۰دیوان عدالت اداری در خصوص استخدام اعضای هیأت علمی دانشگاه ها، مجموعه « رویه قضایی در شعب دیوان عدالت اداری»، معاونت آموزش و پژوهش دیوان عدالت اداری، نشر قضا، قم ۱۳۹۱٫

 

۱۷- مساله تقسیمات کشوری در حقوق اداری ایران ازدیدگاه عدم تراکم و عدم تمرکز سرزمینی، مجله حقوق و مصلحت، ویژه حقوق عمومی، شماره ۵، زمستان ۱۳۸۸٫

 

۱۸- بررسی مبانی اصلی تمرکززدایی در حقوق ایران ( به زبان فرانسه)، مجله حقوق اساسی، شماره ۴، زمستان ۱۳۸۴٫

 

۱۹- نقدی بر رای دیوان عدالت اداری در خصوص قابل تجدید نظر بودن آراء کمیته های انظباطی دانشگاهها،  مجله حقوق اساسی، شماره ۳، زمستان ۱۳۸۳٫

 

۲۰- نگاهی تطبیقی به شورای قانون اساسی فرانسه و دیوان عالی ایالات متحده آمریکا، مجله حقوق اساسی، شماره ۲، بهار ۱۳۸۳

 

۲۱- مروری بر اندیشه های حقوقی موریس هوریو، مجله حقوق اساسی، شماره ۱، ۱۳۸۲٫

 

 

۲۲-  L’État de la décentralisation en droit iranien, in La décentralisation et la démocratie locale dans le monde, L’Harmattan, Paris, 2008.

 

۲۳-  La double légitimité du pouvoir, un obstacle à la décentralisation en Iran ?, in État de droit et droits de l’homme, L’Harmattan, Paris, 2009.

 

 

 

ب- کتاب:

 

 

 

به زبان فارسی:

 

 

    1. ترجمه گزارش دوره کارآموزی سال ۲۰۱۱ میلادی مدرسه ی ملی علوم قضایی فرانسه، پژوهشگاه قوه قضاییه، ۱۳۹۳٫

 

    1. ترجمه کتاب حقوق اداری افغانستان، موسسه حقوق تطبیقی و بین المللی ماکس پلانک، هایدلبرگ، آلمان، تابستان ۱۳۹۱٫

 

    1. مدیریت تهیه مجموعه آرای قضایی شعب دیوان عدالت اداری، ماههای مهر ۱۳۹۱ تا اردیبهشت ۱۳۹۲، انتشارات پژوهشگاه قوه قضاییه، تهران. ۱۳۹۴-۱۳۹۳

 

    1. همکاری و مشارکت در تدوین کتاب رویه قضایی در شعب دیوان عدالت اداری، نشر قضا، ۱۳۹۱٫

 

    1. همکاری و مشارکت در تدوین کتاب غزه، جامعه جهانی و حقوق بین‌الملل: بررسی ابعاد حمله اسرائیل به کاروان آزادی، انتشارات موسسه همشهری، ۱۳۸۹٫

 

    1. همکاری در تدوین کتاب حقوق هسته ایایران، شرحی حقوقی در اثبات حقانیت جمهوری اسلامی ایران،  انتشارات موسسه همشهری، ۱۳۹۱٫

 

    1. اهتمام در انتشار مجموعه مقالات اهدایی به استاد دکتر منوچهر موتمنی طباطبایی با عنوان ” اندیشه های حقوق اداری”، انتشارت مجد، ۱۳۹۲٫

 

    1. نظارت و نگارش مقدمه بر کتاب فساد اداری و مالی در نظام بانکی، انتشارات مجد، ۱۳۹۴٫

 

    1. نظارت و نگارش مقدمه بر کتاب ” اصل تناسب در نطام حقوق اداری اتحادیه اروپایی با نگاهی به آرای دیوان عدالت اداری ایران”،انتشارات خرسندی، ۱۳۹۲٫

 

 

 

به زبان فرانسه:

 

۴ – La Question de la décentralisation en droit iranien, L’Harmattan, Paris, 2009.

 

 

و مشارکت در تدوین

 

 

 

۵ – Premier Rapport Mondial sur la décentralisation et la démocratie locale, L’Harmattan, Paris, 2009.

 

۶ – Etat de droit et droits de l’homme. Echanges de points de vue France-Iran, L’Harmattan, Paris, 2008.

 

 

 

ج- شرکت در راه اندازی، فعال‌سازی و یا عضویت در مراکز تحقیقاتی و پژوهشی:

 

 

 

۱-  عضو کمیته رویه و آراء قضایی در معاونت آموزش و پژوهش قوه قضاییه و برگزاری جلسات متعدد نقد و بررسی آرای دیوان عدالت اداری در زمینه های مختلف ( تامین اجتماعی، میراث فرهنگی، محیط زیست…)، ۱۳۹۱ تا کنون.

 

۲- برگزاری کارگاه پنج روزه آموزش حقوق اداری و حقوق کار برای کادر عالی رتبه افغان در کابل، افغانستان، وزارت عدلیه جمهوری اسلامی افغانستان، کمیسیون مستقل اصلاحات اداری جمهوری اسلامی افغانستان با همکاری موسسه حقوق عمومی تطبیقی و بین الملل ماکس پلانک آلمان و بنیاد حمیده برمکی برای حاکمیت قانون، آذر و اسفند ماه ۱۳۹۱ و تیرماه ۱۳۹۲٫

 

۳- برگزاری همایش و کارگاه آموزشی با موضوعات مرتبط با دادرسی اداری و دیوان عدالت اداری در دانشگاههای شهید بهشتی، تهران ( پردیس قم)، آزاد اسلامی، سال ۱۳۸۹-۱۳۹۰٫

 

۴-  عضو گروه دموکراسی، در کرسی حقوق بشر، صلح و دموکراسی دانشگاه شهید بهشتی، سال ۱۳۸۸-۱۳۸۹ و مشارکت در برگزاری سمینارها، همایش ها و مشارکت در انجام پروژه های پژوهشی.

 

۵- پژوهشگر، (۱۳۷۶-۱۳۷۹)، هیات پیگیری و نظارت بر اجرای قانون اساسی، انجام پژوهشهای: ۱- بررسی اصل شانزدهم قانون اساسی فرانسه ۲- بررسی حقوق مطبوعات از نقطه نظر قانون اساسی و قوانین عادی ۳- بررسی اصل بیست و ششم قانون اساسی در ارتباط با احزاب سیاسی

 

۶-  همکار پژوهشگر در اجرای طرح بررسی شیوه های الحاق ایران به مقاوله نامه های سازمان بین المللی کار، زیر نظر استاد دکتر سید عزت الله عراقی، موسسه کار و تامین اجتماعی، ۱۳۷۶

 

۷-  پژوهشگر، (۱۳۷۵)، مرکز تحقیقات شورای نگهبان، انجام پژوهشهای: « همتایان شورای نگهبان» و « بررسی ساختار، موقعییت و صلاحیت های شورای قانون اساسی فرانسه».

 

 

 

د- سخنرانی و شرکت در همایش های علمی:

 

۱-     حفظ حرمت وکلا در مراجع قضایی، بررسی تطبیقی در کشورهای عضو اتحادیه اروپا، سخنرانی در کانون وکلای دادگستری خراسان، ۱۳۹۴٫

 

۲-    آسیب شناسی مطالعات حقوق عمومی در مراکز عالی ایران، سخنرانی در دانشگاه علامه طباطبایی، ۱۳۹۳٫

 

۳-    نقد کتاب آیین های تصمیم گیری در حقوق اداری، سخنرانی در خانه اندیشمندان علوم انسانی، ۱۳۹۳٫

 

۴-    مطالعه تطبیقی جرم سیاسی در برخی نظام های حقوقی، سخنرانی در نشست تخصصی” جرم سیاسی و سرگذشت آن در جمهوری اسلامی”، کرسی حقوق بشر، صلحو دموکراسی یونسکو و گروه حقوق بشر دانشکده حقوق دانشگاه شهید بهشتی، تهران، آبان ۱۳۹۲٫

 

۲- دیوان عدالت اداری از اندیشه های حقوقی تا واقعیت های عملی، دانشکده حقوق دانشگاه شهید بهشتی، با همکاری معاونت آموزش و پژوهش دیوان عدالت اداری، تهران، ۱۳۹۱٫

 

۳- مسائلی در باب صلاحیت شعب دیوان عدالت اداری، سخنرانی به دعوت کانون وکلاء استان کرمانشاه و ایلام، کرمانشاه، ۱۳۸۹

 

۴- تفکیک قانونگذاری و وضع مقررات اجرایی، سخنرانی در نشست علمی به دعوت کرسی حقوق بشر، صلح و دموکراسی دانشگاه شهید بهشتی، دانشگاه شهید بهشتی، ۱۳۸۹

 

۵- دیوان عدالت اداری و تضمین حقوق شهروندان در نظر و عمل، سخنرانی در دوره آموزشی برگزار شده توسط گروه دموکراسی کرسی حقوق بشر، صلح و دموکراسی دانشگاه شهید بهشتی، دانشگاه شهید بهشتی، ۱۳۸۹

 

۶- مکانیزمهای افزایش مشارکت شهروندان، سخنرانی در جمع اعضای شوراهای استان بوشهر، به دعوت کمسیسون حقوق بشر اسلامی، بوشهر،  ۱۳۸۸

 

۷- راههای نظارت بر شوراها، همایش سالانهشورای عالی استانها، اسفند ماه ۱۳۸۷٫

 

۸- دور نمای تمرکز زدایی در حقوق ایران ( به زبان فرانسه)، ششمین کنگره انجمن فرانسوی حقوقدانان اساسی، مونت پلیه، فرانسه، ۱۳۸۴٫

 

۹- نگاهی مقایسه ای به وضعیت تمرکززدایی در ایران و فرانسه، سخنرانی در کنفرانس علمی- دانشجویی اتحادیه  انجمن های اسلامی دانشجویان- اروپا، یونسکو،  پاریس، فرانسه، ۱۳۸۳٫

 

۱۰- جلوه های تمرکززدایی در فرانسه، دفتر مطالعات سیاسی وزارت کشور، تهران ۱۳۸۲٫

 

 

سوابق شغلی و اجرایی:

 

 

    1. مدیر گروه دموکراسی، کرسی حقوق بشر، صلح و دوکراسی یونسکو، دانشگاه شهید بهشتی، تهران. از سال ۱۳۹۳ تا کنون.

 

    1. مدیر داخلی مجله تحقیقات حقوقی، دانشکده حقوق دانشگاه شهد بهشتی،تابستان ۱۳۹۲ تا کنون

 

    1. – دبیر گروه حقوق خانه اندیشمندان علوم انسانی، ۱۳۹۰ تا کنون

 

    1. مشاور حقوقی مدیر عامل موسسه همشهری ۱۳۹۰  تا کنون

 

    1. مدیر انتشارات همشهری، موسسه همشهری، ۱۳۸۹-۱۳۹۰

 

    1. مترجم در سفارت جمهوری اسلامی ایران در فرانسه، پاریس، فرانسه، ۱۳۸۵

 

    1. کارشناس ارشد حقوقی، نهاد ریاست جمهوری اسلامی ایران، ۱۳۷۷-۱۳۷۹

 

    1. معاون آموزشی، مجتمع آموزشی امام صادق (ع)، ۱۳۷۵-۱۳۷۷

 

 

 

 

زبان های خارجی:

 

 

 

فرانسه: آشنایی کامل ( دارای مدارک DELF  و  DALF)

 

انگلیسی: خواندن و درک مطلب: کامل، مکالمه: خوب

 

عربی : صرف و نحو آشنایی: کامل، مکالمه: متوسط


!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.5";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}));