Initial Draft of NCUC Bylaws

Initial Draft of NCUC Bylaws

Version 3.0,Drafted 31 July 2016,

I. Constitution

A. The Noncommercial Users Constituency (“Constituency”) of the Internet Corporation for Assigned Names and Numbers’(ICANN) Generic Name Supporting Organization (GNSO) is a constituency of the Non-Commercial Stakeholders Group (NCSG), which is established by Article X, Section 5 of the Bylaws of the Internet Corporation for Assigned Names and Numbers. NCUC is established as part of NCSG by Article XX, Section 5 of the Bylaws of ICANN.

B. The purpose of the Noncommercial Users Constituency is to represent, through its elected representatives and its Constituencies, the interests and concerns of noncommercial registrants and noncommercial Internet users of generic Top level Domains (gTLDs). It provides a voice and representation in ICANN processes to: non profit organizations that serve noncommercial interests; nonprofit services such as education, philanthropies, consumer protection, community organizing, promotion of the arts, public interest policy advocacy, children’s welfare, religion, scientific research, and human rights; public interest software concerns; families or individuals who register domain names for noncommercial personal use; and Internet users who are primarily concerned with the noncommercial, public interest aspects of domain name policy.

II. Organization and Structure

A. The Noncommercial Constituency shall consist of three distinct parts: the Membership, the Executive Committee and the Policy Committee.

B. The Membership shall consist of NCSG member organizations and individuals that meet the Membership criteria and complete the processes set out in Section 2.2 of the NCSG charter, and choose NCUC as their constituency. The Constituency Executive Committee reserves the right to review and approve members who were accepted by the NCSG Executive Committee before they become NCUC members.

C. The Executive Committee, directed by the Chair, shall be responsible for the administration of the Constituency, including arrangements for meetings, website communications, listserv, and teleconferences. Selection of the Executive Committee, and its powers and duties, are set out in Section IV, below.

D. The Policy Committee shall consist of the NCUC chair, any elected GNSO Council Representatives who are also NCUC members, and any active NCUC member who volunteers. The EC shall appoint a chair of the NCUC Policy Committee. The Policy Committee’s selection processes and duties are set out in Section V, below.

III. Membership

A. Eligible organizations.

Organizations meeting the following criteria are eligible for membership in the Stakeholder Group:

  1. The Organization is incorporated as a noncommercial entity (in countries that have such a provision in their commercial code) or, if unincorporated, or if operating in a country without provisions for noncommercial incorporation, that operates on a not for profit basis primarily for noncommercial purposes, and
  2. Be the exclusive user of at least one domain name. This can be verified by: (1) the member being listing as the registrant and/or administrative contact in the WHOIS data of the domain name; (2) the name resolving to a website controlled by and representing the Member Organization; or (3) other indications that prove to the NCSG-EC that the prospective Member Organization is the primary user of a domain name, and
  3. Is engaged in online activities that are primarily noncommercial, including, e.g., advocacy, educational, religious, human rights, charitable, scientific and artistic, and
  4. In the case of a membership-based organization, the organization should not only be noncommercial itself, but should have a primarily noncommercial focus, and the membership should also be primarily composed of noncommercial members. (E.g., a chamber of commerce, though it may be a noncommercial organization itself, and might even have some noncommercial members, is primarily composed of commercial organizations and has a commercial focus and would not be eligible for membership.)

B. Ineligible organizations. The membership of the NCSG specifically excludes:

  1. Political organizations whose primary purpose is to hold government office and/or elect government officials;
  2. Commercial organizations and associations that advocate for the benefit of commercial entities (even if they are non profit in form);
  3. Organizations that are represented in ICANN through another Supporting Organization specified in the ICANN Bylaws or GNSO Stakeholder Group;
  4. Organizations that provide services under contract or MoU with ICANN;
  5. Government organizations or government departments whether local, regional or national;
  6. Intergovernmental organizations composed of nation states.

C. New members shall take the following steps to notify the Constituency of their desire to join:

  1. When joining NCSG, they designate NCUC as their choice of constituency.
  2. Notify the Chair via email.
  3. Designate an Official Representative and any Additional Representatives to the Constituency.
  4. Membership shall become complete upon notification of acceptance by the Constituency Chair or his/her agent.

D. Each organizational Member, in its application, shall appoint an individual to serve as the Official Representative to the Constituency. Such individual will hold the powers of voting and speaking publicly for the Member within votes and discussions of the Constituency. The Official Representative must be formally authorized to represent the Member Organization by a responsible official of that organization. Representatives should be verified by the NCSG, but NCUC EC may also make inquiries to the Member Organization to verify their selection if necessary.

E. Member organizations can change their Official Representative in two ways: 1) the Director of the organization can notify the Chair of the change; or 2) the existing Official Representative can resign and submit to the Chair the name of the new Official Representative (the new Official Representative must also be authorized and verified). If an Official Representative holds an elective office in the NCUC, Members cannot change their Official Representative until the individual’s term of office is completed.

F. Each Member may also designate additional individuals to serve as Additional Representatives to the Constituency. Such Additional Representatives may not vote, but otherwise may participate in Constituency listservs, discussions and meetings. The Executive Committee shall, at its discretion, determine limits to the total number of Additional Representatives that an organization may appoint (provided the limit shall apply to all Constituency Members equally).

G. The Executive Committee shall create procedural rules for existing members to maintain their good standing and to review and, when justified, expel members whose status has changed in ways that no longer make them eligible for membership.

H. The Membership shall have the following participation rights in regard to the administration and policy development processes of the Constituency:

  1. Elect the Chair and Regional Representatives; nominate Members to positions elected by the general membership and by the Executive Committee, with timely notification of all elections and public posting of all names nominated to the membership email list.
  2. Initiate proposals for policy development or public comment within the constituency and obtain expressions of support for it on the public discuss list.
  3. Be given timely notice of all positions developed by the Policy Committee on the public list and afforded an opportunity to comment on them.
  4. Submit agenda items to Constituency meetings and Executive Committee meetings.
  5. Propose bylaw amendments. A petition of five (5) percent of the then-current members shall be sufficient for putting a bylaw amendment on the ballot for consideration at the next regular election.

I. Eligible Individuals. Natural persons who meet the following criteria are eligible for membership in the Constituency as an “Individual Member.” Natural persons who agree to advocate for noncommercial interests within the Constituency and who fall within one of the following three categories are eligible to join:

1.A natural person who has registered domain name(s) for personal, family or noncommercial use;

  1. An Individual Internet user who has registered domain name(s) for personal, family or other noncommercial use, is concerned with the noncommercial aspects of domain name policy, and is not represented in ICANN through membership, personally or by his or her employer, through membership in another Supporting Organisation or GNSO Stakeholder Group.

2. An individual Internet user who is primarily concerned with the noncommercial aspects of domain name policy, and is not represented in ICANN through membership in another Supporting Organization, Constituency or GNSO Stakeholder Group;

  1. An Individual Internet User who is primarily concerned with the noncommercial aspects of domain name policy, and is not represented in ICANN personally or by his or her employer through membership in another Supporting Organisation or GNSO Stakeholder Group
  2. An Individual internet user who is employed by, or a member of, a large noncommercial organization (universities, colleges, large NGOs) and it is too complicated or the individual lacks the standing to get his/her organization to join on an organizational basis.

IV. Executive Committee

A. The Constituency shall have an Executive Committee (EC).

B. The EC shall consist of the Chair, a Vice Chair, a Treasurer and Regional Representatives (one for each of the geographic regions recognized by ICANN). If the Chair of the NCSG is an NCUC member, s/he serves in an ex officio (nonvoting) capacity on the NCUC Executive Committee.

C. The Chair is elected by the membership andis responsible for the overall administration of the Constituency. Specific duties include: establishing and managing the email lists required by the charter, arranging meetings and their facilities, establishing and managing the Constituency website, and overseeing membership recruitment, processing and retention. The Chair shall also:

  1. Prepare budget requests, as necessary, for approval by the EC.
  2. Manage general communication with ICANN on matters outside the Policy Committee’s responsibility.
  3. Issue announcements to the Constituency regarding in-person meetings within 45 days of the meetings.
  4. Publish agendas within 14 days of the meeting.
  5. Issue announcement for calls within 7 days of their scheduled time.
  6. Solicit nominations from Constituency Members and appropriate non- commercial experts and representatives to be elected by the EC to fill positions that open from time to time in the ICANN process.
  7. Establish ballots for voting, for review by the EC.
  8. Organize and chair Constituency meetings and teleconferences, oversee the timely publication of meeting notes, and act as a Constituency spokesperson on matters outside the Policy Committee’s responsibility.
  9. Provide oversight of the Policy Committee’s process and good communication with the constituency membership.
  10. Manage communication to the constituency announce list. The Chair may delegate this task to one of the Regional Representatives.
  11. Whenever EC votes are required by the bylaws but inaction by other members of the EC prevents tasks and duties required by the bylaws to be executed, the Chair is empowered to act to further the interests of the constituency. In the event of a tie vote on the EC, the Chair shall act as tiebreaker.

D. Regional EC Representatives:

  1. Shall be elected on an annual basis by Constituency members in an online vote (with the exception of the Treasurer, who is appointed by the EC).
  2. Shall each serve no more than three consecutive terms on the EC.
  3. Shall consist only of individuals designated by Members as their Official Representative to the Constituency.
  4. No two EC members may be from the same organization, or be representatives of different national chapters of the same organization.

E. Responsibilities of the Regional Representatives:

  1. Recruiting new members from their regions
  2. Working with members from their region to help them understand the ICANN structure and participate in the Constituency and ICANN processes.
  3. Voting on the EC on the matters listed in section IV.F below. All EC votes called by the Chair must be responded to in seven days. Regional representatives who fail to vote within that time limit three times in a row are considered to have resigned their office as per VII.B.2 below
  4. Attend EC meetings. Regional representatives who fail to attend more than three meetings are considered to have resigned their office as per VII.B.2 below. If they send apologies for their absence, after three times, they will be treated as per E.6 below
  5. Ensure that members from their region are made aware of and respond to calls for comments by members of the Policy Committee on Working Group and other Council and other ICANN policy development activities. Regional Representatives must provide a reply to all such requests from the Policy Committee
  6. If an EC member consistently fails to meet her/his responsibilities, the other EC members shall consult the person in question with an eye to rectifying the situation. If no solution can be found, the other EC members may, on a unanimous vote, remove the member from office and appoint an interim replacement who will serve until the next election cycle.

F. The Executive Committee shall have the following duties:

  1. Hold official meetings, either in person or by teleconference, at least four times a year.
  2. Establish, revise and change procedural rules to help in the management and operation of the Constituency.
  3. Approve all ballots for online elections
  4. Review and approve by voting the budgets and expenditures submitted by the Chair.
  5. Appoint the Constituency representatives to the ICANN Nominating Committee by majority vote, with at least four members voting.
  6. Appoint Constituency representative to the Public Interest Registry Advisory Committee (.ORG) by majority vote, with at least four members voting
  7. Appoint representatives to fill any position in NCSG, GNSO or ICANN that requires Constituency representation by majority vote, with at least four members voting
  8. Fill temporary vacancies in the Chair position and oversee elections, as appropriate, for the Chair, or Regional EC Representatives for bad actions or nonparticipation.
  9. Appoint a delegate(s) to serve on the NCSG Executive Committee. Any NCSG Executive Committee delegates shall also serve in an ex-officio(nonvoting) capacity on the NCUC Policy Committee and NCUC Executive Committee.
  10. Appoint the chair of the NCUC Policy Committee.

G. The Treasurer

  1. The EC shall elect a Treasurer to assist in the management of the Constituency. The Treasurer will be nominated to the EC by the Chair, with notification to the membership, and must be approved by a majority vote with at least three members voting. If three EC members fail to vote within two weeks of the nomination, the Chair shall appoint the Treasurer.
  2. The Treasurer shall be responsible for depositing any contributions, managing the Constituency bookkeeping and accounting, and regularly reporting to the EC regarding finances and accounts.
  3. If the Treasurer is not an EC member, he or she shall be a nonvoting member of the EC, and shall be expected to participate in all EC meetings.

H. The Vice Chair

  1. A member of the EC may be designated as Vice Chair by a majority vote of the EC
  2. The Vice chair will take over the duties of the Chair when:
    • The Chair delegates those responsibilities to him or her for a temporary period
    • The Chair is incapacitated or unaccountably absent for 30 days or more
    • The Chair resigns before the term is finished

V. The Policy Committee

A. The Constituency shall have a Policy Committee (PC). The Chair of the Policy Committee shall be responsible for facilitating the formulation of Constituency positions on public comment requests, on matters of domain name policy and on ICANN corporate governance, and providing them in a timely manner to the Generic Names Supporting Organization of ICANN (the GNSO), the GNSO Council, and any other ICANN committees and working groups.

B. The chair of the Policy Committee shall be appointed by the EC and shall also serve on the NCSG Policy Committee. The PC shall include the NCUC chair, any elected NCUC GNSO Council Representatives who are also NCUC members and any NCUC member who volunteers, but will not exceed 10 members in size.

C. The Executive Coordinator appoints the NCUC members of the Policy Committees.

D. The Policy Committee Chair shall

  1. Attend and/or participate remotely in NCSG Policy Committee Meetings
  2. Organize regular meetings of the Committee at ICANN meetings and by teleconference
  3. Work with Constituency Members to find appropriate and expert members of the broader noncommercial community to serve on policy development activities initiated by ICANN’s Board, President or staff; GNSO Council committees or working groups; and any other groups open to constituency participation.
  4. Consult with the Constituency to develop policy positions. The Policy Committee may also start a NCUC working group and policy process on its own initiative or the request of a bone-fide member and with the agreement of the EC.

E. The Policy Committee Chair shall also work with the Chairman to help inform the Constituency, via listservs, announcement list, website and other appropriate communication media of:

  1. Comment periods open to the public and of general interest to Constituency members.
  2. Comment periods open to the public on matters of significant interest to Constituency members and in which Member comments might play a role in influencing policy and protecting noncommercial interests.
  3. Positions developed by the Policy Committee of the Constituency.
  4. Issues that are being or have been recently considered by the GNSO Council, and the positions taken by Constituency representatives on those issues.

F. Additionally, other individuals shall be invited to participate in the deliberations of Constituency Policy Committee, including:

  1. Members (or their Official Representatives) who are serving on GNSO Working Groups, ICANN Advisory Committees, Presidential committees and other policy bodies (standing or ad hoc) within the ICANN process; and
  2. Any NCUC delegates to the NCSG Policy Committee (in an ex officio capacity).

VI. Voting

A. The Chair shall be responsible for ballots, agendas, and meeting schedules.

  1. Announcement to the Constituency regarding elections shall take place within 45 days of their commencement.
  2. The chair shall publish the nomination, campaigning and election schedule to the EC for approval. The Chair shall submit the ballot to be used in the election to the EC for review and approval.

B. Voting Members

  1. The Chair shall publish on the web site a list of the Official representatives of each Member Organization and a list of individual members in good standing 30 days prior to the election.
  2. Representatives may review the voting lists
  3. The following individuals are ineligible to serve as the Official Representative of their organization (for the purposes of voting):
    1. An individual who holds the power to vote in another constituency or on the ICANN Board.
    2. An individual who holds any form of permanent or temporary paid position with ICANN, including independent contractors who have served ICANN in paid positions within the last six months. If such an individual is identified on the voting lists of the Constituency, then the Chair shall provide notice to the Member organization requesting a substitute official Representative. If such a substitute is not provided within 7 days of the election, the Member Organization will not be eligible to receive a ballot in that election.

C. Large and small organizations

  1. To foster full and fair representation of the both large and small organizations, as well as independent national chapters, the Constituency shall allow:
  2. Organizations that have more than 50 employees, or are membership organizations with more than 500 individual members, shall be classified as “large organizations” and shall have 4 votes.
  3. Organizations that are composed of 10 or more organizational members that qualify as “large” or small under criteria (a) and (c) above shall be classified as “large organizations” and shall have 4 votes.
  4. Organizations that do not qualify as large organizations shall be classified as “small organizations” and shall have 2 votes.
  5. Individual persons who are members in good standing shall have 1 vote

D. The Executive Committee shall, as needed, determine further procedures for nomination and voting. Such procedures shall be provided to the Constituency on the website.

E. Votes of members shall be kept confidential. The EC may appoint a trusted Constituency member who is not a candidate, or an impartial nonmember ICANN or GNSO officer to audit the votes.

VII. Leaving Office

A. An elected officer or appointed committee member of the NCUC may submit an email or notice of resignation to the Chair whenever circumstances call for such an action.

B. In the event of resignation of the Chair, the Vice chair shall finish the term of the original chair.

C. Elected or appointed officers and representatives of the Constituency can be removed for nonparticipation according to operating rules as defined by EC operating rules;

D. When EC members are deemed to resign due to nonparticipation as per section C above, the Chair, after consulting with members from the affected region, may appoint a temporary replacement to finish the remaining term of the resigning EC representative.

VIII. Changes to this Charter

A. Changes to this charter may take place by vote of the Members. Changes may be proposed by the Executive Committee or by petition of the Members. A petition of ten (10) percent of the then-current members shall be sufficient for putting a charter amendment on the ballot for consideration at the next regular election. Alternatively, the Executive Committee by majority vote may propose an amendment for consideration at the next regular election.

B. Charter amendments shall be passed if at least two thirds of the votes cast in the election favor its adoption (provided 40% or more of the eligible Voters cast a ballot in the election).

C. In the event that it appears to the Chair and the EC that there is an organized effort by one organization to control or dominate the Constituency, then the charter may be amended temporarily by a majority vote of the EC to limit, in a nondiscriminatory manner, the membership eligibility of different chapters of, or individuals affiliated with, the same organization. The amendment must be submitted to the membership for a vote at the next regularly scheduled annual election. Unlike other charter amendments, this one can pass with only a majority of those voting.

 

IX. Communications

A. The Constituency shall maintain three lists: an email discussion list, the official voting list, and an EC email list. Only Official Representatives of Members and individual members shall be put on the official voting list, which shall be used for voting and membership check-in purposes. Only Members shall have posting rights on the discuss list; participation on the discuss list shall be voluntary. The EC list is for official communications and deliberations among the Executive Committee and is restricted to EC members.

B. Archives of the all NCUC-managed lists should be available to the general public and accessible from the Constituency website. The EC list shall also be publicly archived.

C. The Chair will oversee the publication of membership lists on the Constituency website. NCUC is required to publish the list of current Members of the Constituency.

D. Only Official Representatives listed on the Constituency website membership list will receive ballots and be allowed to vote in elections. Changes to such designated Official Representatives must be received by the Chair at least one week (7 days) prior to the distribution of ballots, and must conform to the voting requirements of the charter.

E. The Chair and EC should provide a channel for nonmembers to make comments to the members and officers of the constituency.

X. Dues

A. Currently membership dues are set at $0 for all membership categories. Dues are set by 2/3 majority vote of the Executive Committee. On an annual basis, the Chair will consult with the Executive Committee regarding the appropriate level for dues. Such dues will be set for individuals and large and small organizations by a 2/3 vote of the Executive Committee, together with appropriate procedures for waiver and reduction requests. The Chair shall be authorized to hear the waiver and reduction requests and made decisions. Appeals may be made to the Executive Committee may consider the waiver of dues.

B. Altering membership dues does not constitute a charter revision as per Section VIII.

C. If dues exist, Members that fail to pay dues and whose dues have not been waived by the EC will not be eligible to vote, nor have a Representative run for election to any office.

D. Member organizations in countries with GDP per capita below US$10,000 are eligible to apply to the EC for a waiver or reduction of the membership fee. Such applications must contain information about the budget of the organization.

XI. Transparency

A. Where appropriate, feasible and not contrary to the best interests of the Constituency and its Members, the Constituency will strive to make its activities open to the public.

B. The Constituency will also strive to open its in-person meetings to the public. However, in its sole discretion, the Executive Committee may choose by prior plan to close one or more parts of a Constituency meeting to public participation and observation if such involvement is inappropriate, not feasible or contrary to the best interests of the Constituency.

C. The Chair may, in its sole discretion, suspend any nonmember’s access to NCUC Constituency meetings and deliberations for portions of, or for the entire duration of meetings and deliberations, if he/she feels that the presence is inappropriate, not feasible or contrary to the best interests of the Constituency. Any such action against a particular individual will be noted in the minutes or official record of the meeting or deliberations.

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