{"tags":[{"tagId":"487101b8-7f6f-4927-b5d2-0d9a13468748","tagTypeId":"custom_tag_type","name":"LEADERBOARD_GAMETILE_CSS","description":"Updating the CSS because of leaderboard game tile issue","config":{"beforeEndHead":"<style>\n.GameLabels__label--2e4:last-of-type {\n  display: none !important;\n}\n</style>","beforeEndBody":""},"conditionIds":["20d65c93-a18d-40f0-bb20-6c2053c29822","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"8809bde3-5ee0-434e-a84b-256bff07f6cb","tagTypeId":"custom_tag_type","name":"HIDE_SHADOW_LEADERBOARD_TILE","description":"Hides the Hero Banner top Shadow Gradient","config":{"beforeEndHead":"<style>\n  [class*=RaceListCard__mediaContent--1Xv] [class*=RaceListCard__mediaContent--1Xv]::before {\n      background: none!important;\n  }\n  </style>","beforeEndBody":""},"conditionIds":["4c81598f-2592-452e-b680-3c1eed17cba1","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"1197bbb9-78ae-48f1-be75-43b338dbe995","tagTypeId":"custom_tag_type","name":"DepositMonthlyLimitHideZero","description":"HC-12430 Hide zero from onboarding deposit limit while pending","config":{"beforeEndHead":"","beforeEndBody":"<style>\r\n  .hide-zero-monthly-limit input[name=\"monthly\"] {\r\n    font-size: 0!important;\r\n  }\r\n</style>\r\n<script>\r\n  (() => {\r\n    const adminConfigurationTagName =\r\n      \"portal/regulation/adminConfirmation_admin_action_needed\";\r\n    const requireBoundaryTagName = \"portal/regulation/requireBoundary\";\r\n\r\n    let isBoundaryRequired = false;\r\n    let monthlyLimitInputElement = null;\r\n    let monthlyLimitListener = null;\r\n\r\n    function log() {\r\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n        console.log.apply(\r\n          console,\r\n          [\"[Deposit Monthly Limit Hide Zero] \"].concat(Array.from(arguments))\r\n        );\r\n      }\r\n    }\r\n\r\n    function getPopupModalElement() {\r\n      const hasStepsCounter = document.querySelector(\r\n        \"[class*='StepsCounter__stepCounter']\"\r\n      );\r\n\r\n      if (hasStepsCounter) {\r\n        log(\"StepsCounter element found, getting form element\");\r\n        return hasStepsCounter.parentNode;\r\n      } else {\r\n        log(\"StepsCounter element not found\");\r\n        return null;\r\n      }\r\n    }\r\n\r\n    function createMonthlyLimitListener() {\r\n      if (!monthlyLimitInputElement) {\r\n        return null;\r\n      }\r\n\r\n      const focusHandler = () => {\r\n        toggleClass(false);\r\n        monthlyLimitInputElement.removeEventListener(\"focus\", focusHandler);\r\n        monthlyLimitListener = null;\r\n      };\r\n\r\n      monthlyLimitInputElement.addEventListener(\"focus\", focusHandler);\r\n      return focusHandler;\r\n    }\r\n\r\n    function getMonthlyLimitInputElement() {\r\n      const popupModalElement = getPopupModalElement();\r\n\r\n      if (!popupModalElement) {\r\n        return null;\r\n      }\r\n\r\n      monthlyLimitInputElement = popupModalElement.querySelector(\r\n        \"[class*=Control__content] [name='monthly']\"\r\n      );\r\n      return monthlyLimitInputElement;\r\n    }\r\n\r\n    function setupMonthlyLimitListener() {\r\n      if (getMonthlyLimitInputElement()) {\r\n        monthlyLimitListener = createMonthlyLimitListener();\r\n        return true;\r\n      }\r\n      return false;\r\n    }\r\n\r\n    function waitForMonthlyLimitElement() {\r\n      const intervalId = setInterval(() => {\r\n        if (setupMonthlyLimitListener()) {\r\n          clearInterval(intervalId);\r\n        }\r\n      }, 1000);\r\n    }\r\n\r\n    function toggleClass(isAddClass) {\r\n      const popupModalElement = getPopupModalElement();\r\n\r\n      if (!popupModalElement) {\r\n        return;\r\n      }\r\n\r\n      popupModalElement.classList.toggle(\"hide-zero-monthly-limit\", isAddClass);\r\n\r\n      if (isAddClass && !monthlyLimitListener) {\r\n        if (!setupMonthlyLimitListener()) {\r\n          waitForMonthlyLimitElement();\r\n        }\r\n      }\r\n    }\r\n\r\n    function handleChangePlayerTag(e) {\r\n      const { tag, value, removed } = e?.detail || {};\r\n\r\n      if (tag === requireBoundaryTagName) {\r\n        log(\"Require Boundary Tag change\", { tag, value, removed });\r\n        if (removed || value !== \"true\") {\r\n          isBoundaryRequired = false;\r\n          toggleClass(false);\r\n          return;\r\n        }\r\n        isBoundaryRequired = true;\r\n      }\r\n\r\n      if (tag === adminConfigurationTagName) {\r\n        log(\"Admin Configuration Tag change\", { tag, value, removed });\r\n        if (removed || isBoundaryRequired) {\r\n          toggleClass(false);\r\n          return;\r\n        }\r\n\r\n        toggleClass(true);\r\n      }\r\n    }\r\n\r\n    function checkRegulationTags(tags) {\r\n      if (!tags?.length) {\r\n        log(\"No regulation tags found\");\r\n        return false;\r\n      }\r\n\r\n      isBoundaryRequired = tags.some(\r\n        (tag) => tag.name === requireBoundaryTagName && tag.value === \"true\"\r\n      );\r\n\r\n      if (isBoundaryRequired) {\r\n        log(\"Require Boundary tag is true\");\r\n        return false;\r\n      }\r\n\r\n      const isAdminConfigurationTag = tags.some(\r\n        (tag) => tag.name === adminConfigurationTagName\r\n      );\r\n\r\n      log(\"Admin Configuration Tag found:\", isAdminConfigurationTag);\r\n      return isAdminConfigurationTag;\r\n    }\r\n\r\n    function getPlayerTags() {\r\n      return Playtech.API.user\r\n        .getPlayerTags()\r\n        .then(function ({ data }) {\r\n          const { tags = [] } = data;\r\n          return checkRegulationTags(tags);\r\n        })\r\n        .catch((error) => {\r\n          log(\"Error fetching player tags:\", error);\r\n          return false;\r\n        });\r\n    }\r\n\r\n    Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n      setTimeout(() => {\r\n        getPlayerTags().then(toggleClass);\r\n      }, 2000);\r\n    });\r\n\r\n    Playtech.API.events.addEventListener(\r\n      \"player-tag-change\",\r\n      handleChangePlayerTag\r\n    );\r\n\r\n    if (Playtech.API.auth.isLoggedIn) {\r\n      getPlayerTags().then(toggleClass);\r\n    }\r\n  })();\r\n</script>\r\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"38537e43-3a0e-4896-bf84-392ad93f0916","tagTypeId":"custom_logo","name":" Custom logo","description":"new logo","config":{"customDarkSiteLogo":"/library/static/custom_hc_logo/HCO-winter-logo-w.svg","customLightSiteLogo":"/library/static/custom_hc_logo/HCO-winter-logo-b.svg"},"conditionIds":["2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"ad22010b-b5a9-44d0-bd4b-fb5133e12864","tagTypeId":"custom_tag_type","name":"<3> GTM and CookieBot","description":"HC-12311 Reconfigure GTM and Cookiebot on STG2","config":{"beforeEndHead":"<!-- Google Tag Manager -->\n<script data-cookieconsent=\"ignore\">\n(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n'https://sgtm.hollandcasino.nl/hctm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-KGF9BMX');\n</script>\n\n<!-- Cookiebot CMP -->\n<!--<script id=\"Cookiebot\" src=\"https://consent.cookiebot.com/uc.js\" data-cbid=\"74529192-6709-483c-a1c9-c9b9c22221b3\" type=\"text/javascript\" async></script>-->","beforeEndBody":""},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"97ad24bd-f426-4ad9-8dcd-d69f700068ce","tagTypeId":"custom_tag_type","name":"<10> - New Checkin","description":"<10> - New Checkin","config":{"beforeEndHead":"<style>\r\n  /* start HC-11301 */\r\n  :root {\r\n    --biggestPossibleInt: 2147483647;\r\n  }\r\n\r\n  :root:has(.checkinFlow) {\r\n    --help-button-z-index: calc(var(--biggestPossibleInt)) !important;\r\n    --chat-z-index: calc(var(--biggestPossibleInt)) !important;\r\n  }\r\n\r\n  :root:has(.checkinFlow) #ada-chat-frame {\r\n    z-index: calc(var(--biggestPossibleInt)) !important;\r\n  }\r\n  /* end HC-11301 */\r\n\r\n  .checkinError {\r\n    text-align: center;\r\n    margin: 1rem 0;\r\n    color: var(--hc-red);\r\n  }\r\n  /* HC-12293 - start */\r\n  body:has(.btnDeclineCheckinPopup)\r\n    [class*=\"PopupManager__layout\"]\r\n    [class*=\"FlexButtonsBlock__flexButtonsBlock\"] {\r\n    display: none;\r\n  }\r\n  /* HC-12293 - end */\r\n</style>\r\n<script>\r\n  var checkinLoaded = Promise.withResolvers();\r\n\r\n  function onCheckinLoad(checkin) {\r\n    console.log(\"[CHECKIN] Checkin loaded\", checkin);\r\n    checkinLoaded.resolve(checkin);\r\n  }\r\n\r\n  (() => {\r\n    var isInitialized = false;\r\n\r\n    // HC-11856 - start\r\n    const pageDocUploadTagName = \"portal/registration/PageDocUpload\";\r\n    const pageExternalServiceTagName =\r\n      \"portal/registration/PageExternalService\";\r\n    const bodyElement = document.querySelector(\"body\");\r\n    const checkinFlowClassName = \"checkinFlow\";\r\n    // HC-11856 - end\r\n\r\n    function log() {\r\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n        console.log.apply(\r\n          console,\r\n          [\"[CHECKIN] \"].concat(Array.from(arguments))\r\n        );\r\n      }\r\n    }\r\n\r\n    function translate(tKey) {\r\n      try {\r\n        return Playtech.API.translation.translate(tKey);\r\n      } catch (err) {\r\n        log(\"Error getting translation\", err);\r\n        return \"Something went wrong...\";\r\n      }\r\n    }\r\n\r\n    function createError() {\r\n      var errorElement = document.createElement(\"div\");\r\n      errorElement.classList.add(\"checkinError\");\r\n      errorElement.innerHTML = translate(\r\n        \"playtech.mobile.system.error.default\"\r\n      );\r\n\r\n      return errorElement;\r\n    }\r\n\r\n    function getAwsRequestData() {\r\n      var awsApiUrl = Playtech.Variables.dynamicTags.find(\r\n        (tag) => tag.name === \"AWS_API_URL\"\r\n      ).value;\r\n      var regBsnXApiKey = Playtech.Variables.dynamicTags.find(\r\n        (tag) => tag.name === \"REG_BSN_X_API_KEY\"\r\n      ).value;\r\n\r\n      if (!awsApiUrl) {\r\n        log(\"No api url provided\");\r\n        return;\r\n      }\r\n\r\n      if (!regBsnXApiKey) {\r\n        log(\"BsnXApiKey not set\");\r\n        return;\r\n      }\r\n\r\n      return {\r\n        awsApiUrl,\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          \"x-api-key\": regBsnXApiKey,\r\n        },\r\n      };\r\n    }\r\n\r\n    // HC-11102 - start\r\n    async function sendErrorDataToAWS(error, checkinData) {\r\n      try {\r\n        var awsRequestData = getAwsRequestData();\r\n\r\n        if (awsRequestData) {\r\n          var { awsApiUrl, headers } = awsRequestData;\r\n          var email = Playtech.fetchUserDetails().email;\r\n\r\n          var options = {\r\n            method: \"POST\",\r\n            headers,\r\n            body: JSON.stringify({\r\n              email,\r\n              error,\r\n              checkinData,\r\n            }),\r\n          };\r\n\r\n          var response = await window.fetch(\r\n            `${awsApiUrl}/BSNOnboarding/Public/Anonymous/Data`,\r\n            options\r\n          );\r\n\r\n          log(\"AWS response to error case\", response); // qa can check response status\r\n        }\r\n      } catch (err) {\r\n        log(\"Could not submit error data to AWS\", err);\r\n      }\r\n    }\r\n    // HC-11102 - end\r\n\r\n    async function processCheckinData({ data, completeData }) {\r\n      try {\r\n        log(\"data, completeData\", data, completeData);\r\n        await Playtech.API.server.send({\r\n          ID: 33045,\r\n          description: \"Update player info\",\r\n          responses: [33006, 31008],\r\n          changeTimestamp: new Date()\r\n            .toISOString()\r\n            .replace(/[TZ]/g, \" \")\r\n            .trim(),\r\n          // HC-11238 - send only custom11\r\n          dataMap: {\r\n            custom11: completeData.mapped.ocrData.userData.dataMap.custom11,\r\n          },\r\n        });\r\n\r\n        await Playtech.API.server.checkInDotComListenerRequest({\r\n          // HC-11269\r\n          requestContent: btoa(\r\n            JSON.stringify({\r\n              ocrData: { signed: completeData.mapped.ocrData.signed },\r\n            })\r\n          ),\r\n        });\r\n      } catch (error) {\r\n        log(\"Error submitting checking data: \", error);\r\n        var placeholderText = document.querySelector(\".docUploadPlaceholder\");\r\n        if (placeholderText) {\r\n          placeholderText.parentNode.append(createError());\r\n          placeholderText.style.display = \"none\";\r\n        }\r\n        sendErrorDataToAWS(error, {\r\n          data,\r\n          completeData,\r\n        });\r\n      }\r\n    }\r\n\r\n    // HC-10924 - start\r\n    async function sendBSN(bsn) {\r\n      try {\r\n        var awsRequestData = getAwsRequestData();\r\n        var userId = Playtech.fetchUserDetails().userId;\r\n        var temporaryToken =\r\n          await Playtech.API.auth.getTemporaryAuthenticationToken();\r\n\r\n        if (awsRequestData && temporaryToken && userId) {\r\n          var { awsApiUrl, headers } = awsRequestData;\r\n          var bsnEndpoint = `${awsApiUrl}/BSNOnboarding/Public/Authenticated/BSN?userId=${encodeURIComponent(\r\n            userId\r\n          )}&source=checkin`;\r\n          var options = {\r\n            method: \"POST\",\r\n            headers: {\r\n              ...headers,\r\n              sessiontoken: temporaryToken,\r\n            },\r\n            body: JSON.stringify({ BSN: bsn }),\r\n          };\r\n\r\n          var response = await window.fetch(bsnEndpoint, options);\r\n          log(\"AWS BSN response\", response); // qa can check response status\r\n        }\r\n      } catch (e) {\r\n        log(`Error sending BSN: ${e}`);\r\n      }\r\n    }\r\n\r\n    function handleBSN(data, diff) {\r\n      log(\">> onUpdate diff\", {\r\n        diff,\r\n        data,\r\n      });\r\n      if (diff.user && diff.user.bsn) {\r\n        sendBSN(diff.user.bsn);\r\n      }\r\n    }\r\n\r\n    // HC-10924 - end\r\n\r\n    function initCheckin() {\r\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n        checkin.settings.enableConsoleLog();\r\n      }\r\n\r\n      checkin.dataFlow.setOnComplete(processCheckinData); // checkin will send user data in this cb in the end of the flow\r\n      checkin.dataFlow.setOnUpdate(handleBSN); // checkin will send user data in this cb when there's any new data\r\n      isInitialized = true;\r\n    }\r\n\r\n    function startCheckinFlow(tags, checkin) {\r\n      if (!isInitialized) {\r\n        initCheckin(checkin);\r\n      }\r\n      // HC-11856 - start\r\n      bodyElement.classList.add(checkinFlowClassName);\r\n      // HC-11856 - end\r\n      var playerData = Playtech.fetchUserDetails();\r\n\r\n      checkin.settings.setLang(\r\n        Playtech.API.language.getCurrentLanguage() === \"en_US\" ? \"en\" : \"nl\"\r\n      );\r\n      // HC-12160\r\n      checkin.settings.setVariant(\"fullflow\");\r\n      const recoveryAppId = getRecoveryAppId(tags);\r\n      const user = { externalId: playerData.username };\r\n      if (recoveryAppId != null) {\r\n        user.recoveryAppId = recoveryAppId;\r\n      }\r\n      log(\"Pass user data to checkin\", user);\r\n      checkin.dataFlow.setKnownData({\r\n        idscan: {\r\n          variants: [\"fullflow\"],\r\n          user: user,\r\n        },\r\n      }); // HC-11268\r\n      checkin.signUp.open(); // open Checkin popup\r\n    }\r\n\r\n    async function handlePageDocUpload() {\r\n      const checkin = await checkinLoaded.promise;\r\n      const response = await Playtech.API.user.getPlayerTags(\"\", true);\r\n      log(\"Player tags response\", response);\r\n      try {\r\n        var tags = response.data.tags;\r\n        var isCheckinFlow =\r\n          tags.some(function (tag) {\r\n            return tag.name === pageDocUploadTagName; // if it's a 2nd step of reg\r\n          }) &&\r\n          tags.some(function (tag) {\r\n            return (\r\n              tag.name === pageExternalServiceTagName &&\r\n              tag.value &&\r\n              tag.value.toLowerCase() === \"checkin\"\r\n            );\r\n          });\r\n\r\n        if (isCheckinFlow) {\r\n          startCheckinFlow(tags, checkin);\r\n        }\r\n      } catch (err) {\r\n        throw {\r\n          error: err,\r\n          code: 1,\r\n        };\r\n      }\r\n    }\r\n\r\n    // HC-12160\r\n    function getRecoveryAppId(tags) {\r\n      const processidTagName = \"checkin/processid\";\r\n      const processidTag = tags.filter(function (tag) {\r\n        return tag.name === processidTagName;\r\n      });\r\n\r\n      return (processidTag[0] && processidTag[0].value) || null;\r\n    }\r\n\r\n    // HC-11856 - start\r\n    function handleRemoveClass(isRemovedORModifiedTag) {\r\n      if (isRemovedORModifiedTag) {\r\n        log(\"Remove class\");\r\n        bodyElement.classList.remove(checkinFlowClassName);\r\n      }\r\n    }\r\n\r\n    function handleChangePlayerTag(e) {\r\n      const { tag, value, removed } = e?.detail || {};\r\n\r\n      if (tag === pageDocUploadTagName || tag === pageExternalServiceTagName) {\r\n        const isRemovedORModifiedTag =\r\n          removed ||\r\n          (tag === pageExternalServiceTagName &&\r\n            value?.toLowerCase() !== \"checkin\");\r\n        handleRemoveClass(isRemovedORModifiedTag);\r\n      }\r\n    }\r\n\r\n    Playtech.API.events.addEventListener(\r\n      \"player-tag-change\",\r\n      handleChangePlayerTag\r\n    );\r\n\r\n    // HC-11856 - end\r\n\r\n    // entry point\r\n    if (Playtech.API.auth.isLoggedIn) {\r\n      handlePageDocUpload();\r\n    }\r\n\r\n    // entry point\r\n    Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n      // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n      setTimeout(handlePageDocUpload, 2000);\r\n    });\r\n\r\n    Playtech.on(Playtech.Events.LOGGED_OUT, function () {\r\n      window.checkin?.signUp.close();\r\n    });\r\n\r\n    // the function is called by Checkin itself\r\n  })();\r\n</script>\r\n<script\r\n  src=\"https://hollandcasino-fullflow.regily.com/50fcba4f77b326fe0e1f4db038d206f9.js\"\r\n  async\r\n></script>","beforeEndBody":""},"conditionIds":["2e8f68c0-2d83-4009-bf0e-9507529535dc","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"d021aa71-c72c-4144-be1d-77880b9dafa0","tagTypeId":"custom_js","name":"Game Launch Event Tracker","description":"Only for test purpouses","config":{"code":"Playtech.on(Playtech.Events.GAME_LAUNCH, (args) => console.log('>>> GAME_LAUNCH', args));\nPlaytech.on(Playtech.Events.GAME_FAVORITES_HANDLER, (args) => console.log('>>> GAME_FAVORITES_HANDLER', args))"},"conditionIds":["10c6a1bf-bd4b-4c65-9256-45b166858b9d"]},{"tagId":"3772972c-9037-4fbf-aeeb-6d8073d6470b","tagTypeId":"page_styling","name":"Premium Style","description":"Premium Style","config":{"displayStyle":"premium"},"conditionIds":["b8cd6255-5275-430e-b4b3-34917ce3e157","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"ad5d2463-92a7-41aa-bb67-9d0f75a3c0a7","tagTypeId":"custom_tag_type","name":"ADVERTISING_PREFERENCES_FORM_EXTENSION","description":"HC-12332","config":{"beforeEndHead":"<style>\n  input:-webkit-autofill,\n  input:-webkit-autofill:hover, \n  input:-webkit-autofill:focus, \n  input:-webkit-autofill:active{\n    -webkit-text-fill-color: var(--input-font-color) !important;\n  }\n</style>\n<script>\n  // HC-12332\n(function () {\n    const API_BASE_URL = Playtech.Variables.dynamicTags.find(tag => tag.name === 'ACQ_API_BASE_URL')?.value;\n    const API_KEY = Playtech.Variables.dynamicTags.find(tag => tag.name === 'ACQ_API_KEY')?.value;\n    const TOKEN_ENDPOINT = '/v1/acqoptout/tokens';\n    const CONFIRM_ENDPOINT = '/v1/acqoptout/tokens/confirm';    function waitForElement(selector, callback, interval = 300, timeout = 10000) {\n        const start = Date.now();\n        const check = () => {\n            const element = document.querySelector(selector);\n            if (element && element.querySelectorAll('button[type=\"button\"]')?.length >= 2) {\n                callback(element);\n            } else if (Date.now() - start < timeout) {\n                setTimeout(check, interval);\n            }\n        };\n        check();\n    }    waitForElement('form[data-form-name=\"Advertising Preferences\"]', function (form) {\n        const buttons = form.querySelectorAll('button[type=\"button\"]');        const send2FAMailButton = buttons[0];\n        const confirm2FAButton = buttons[1];        const twoFAInput = form.querySelector('input[name=\"promoExclusion2FAField\"]');\n        const phoneInput = form.querySelector('input[name=\"promoExclusionPhoneField\"]');\n        const emailInput = form.querySelector('input[name=\"promoExclusionEmailField\"]');        const twoFAInputContainer = twoFAInput?.closest('[class*=Control__control]');\n        const phoneInputContainer = phoneInput?.closest('[class*=Control__control]');\n        const confirm2FAButtonContainer = confirm2FAButton.closest('.cms-form-field-name-promoExclusionConfirm2FACodeButton');        const phoneLabel = form.querySelector('label[for^=\"promoExclusionPhoneField\"]');\n        if (phoneLabel) phoneLabel.style.display = 'none';        const explanationText = form.querySelector('[class*=PlainText__text]');\n        if (explanationText) {\n            explanationText.style.display = 'none';\n        }        if (twoFAInputContainer) twoFAInputContainer.style.display = 'none';\n        if (phoneInputContainer) phoneInputContainer.style.display = 'none';\n        if (confirm2FAButtonContainer) confirm2FAButtonContainer.style.display = 'none';        let isSubmitting = false;\n        let storedEmail = '';        send2FAMailButton.addEventListener('click', function () {\n            document.getElementById('form-output')?.remove();\n            document.getElementById('form-error')?.remove();            const email = emailInput?.value.trim() || '';\n            const selectedRadio = form.querySelector('input[name=\"formType\"]:checked');\n            const selectedOption = selectedRadio?.value || '';            const hasEmail = email.length > 0;\n            const hasRadio = !!selectedOption;\n            const errorFields = form.querySelectorAll('[class*=\"Control__invalid\"], [class*=\"ErrorMessage\"]');\n            const hasVisualErrors = errorFields.length > 0;            if (!hasEmail || !hasRadio || hasVisualErrors) {\n                const error = document.createElement('div');\n                error.id = 'form-error';\n                error.style.color = 'red';\n                error.style.marginTop = '1rem';\n                error.textContent = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.required'); // 'Vul alle vereiste velden in';\n                form.parentNode.insertBefore(error, form.nextSibling);\n                return;\n            }            if (isSubmitting) return;\n            isSubmitting = true;\n            send2FAMailButton.disabled = true;\n            const currentLang = Playtech.API.language.getCurrentLanguage()?.substring(0, 2);            const queryParams = new URLSearchParams({\n                type: selectedOption,\n                email: email,\n                language_code: currentLang\n            }).toString();            fetch(`${API_BASE_URL}${TOKEN_ENDPOINT}?${queryParams}`, {\n                method: 'POST',\n                headers: { 'x-api-key': API_KEY }\n            })\n                .then(response => {\n                    isSubmitting = false;\n                    send2FAMailButton.disabled = false;                    if (!response.ok) {\n                        return response.json().then(data => {\n                            const error = document.createElement('div');\n                            error.id = 'form-error';\n                            error.style.color = 'red';\n                            error.style.marginTop = '1rem';\n                            error.textContent = data.message ||  Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.response.error'); // 'Kon het formulier niet verzenden. Controleer jouw code en probeer opnieuw';\n                            form.parentNode.insertBefore(error, form.nextSibling);\n                            throw new Error(data.message || 'Submission error');\n                        });\n                    }                    storedEmail = email;                    send2FAMailButton.style.display = 'none';\n                    if (twoFAInputContainer) twoFAInputContainer.style.display = '';\n                    if (phoneInputContainer) phoneInputContainer.style.display = '';\n                    if (confirm2FAButtonContainer) confirm2FAButtonContainer.style.display = '';                    if (explanationText) explanationText.style.display = '';\n                })\n                .catch(err => {\n                    isSubmitting = false;\n                    send2FAMailButton.disabled = false;\n                    console.error(err);\n                });\n        });        confirm2FAButton.addEventListener('click', function () {\n            document.getElementById('form-output')?.remove();\n            document.getElementById('form-error')?.remove();            const phone = phoneInput?.value.trim() || '';\n            const token = twoFAInput?.value.trim() || '';\n            const email = storedEmail;            if (!phone || !token || !email) {\n                const error = document.createElement('div');\n                error.id = 'form-error';\n                error.style.color = 'red';\n                error.style.marginTop = '1rem';\n                error.textContent = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.required'); //'Vul alle vereiste velden in'\n                form.parentNode.insertBefore(error, form.nextSibling);\n                return;\n            }            confirm2FAButton.disabled = true;            const queryParams = new URLSearchParams({\n                phone: phone,\n                token: token,\n                email: email\n            }).toString();            fetch(`${API_BASE_URL}${CONFIRM_ENDPOINT}?${queryParams}`, {\n                method: 'POST',\n                headers: { 'x-api-key': API_KEY }\n            })\n                .then(response => {\n                    confirm2FAButton.disabled = false;                    if (!response.ok) {\n                        return response.json().then(data => {\n                            const error = document.createElement('div');\n                            error.id = 'form-error';\n                            error.style.color = 'red';\n                            error.style.marginTop = '1rem';\n                            error.textContent = data.message || Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.code.error'); // 'Fout bij versturen. Controleer de ingevoerde code';\n                            form.parentNode.insertBefore(error, form.nextSibling);\n                            throw new Error(data.message || 'Confirmation error');\n                        });\n                    }                    // form.style.display = 'none';\n                    //\n                    // const successDiv = document.createElement('div');\n                    // successDiv.id = 'form-output';\n                    // successDiv.style.paddingTop = '20vh';\n                    // successDiv.style.paddingBottom = '20vh';\n                    // successDiv.style.textAlign = 'center';\n                    //\n                    // const header = document.createElement('h2');\n                    // header.textContent = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successTitle'); // 'Het is gelukt!';\n                    // header.style.marginBottom = '1rem';\n                    //\n                    // const paragraph = document.createElement('p');\n                    // paragraph.innerHTML = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successMessage'); // 'We hebben je voorkeur opgeslagen en zorgen ervoor dat je er geen omkijken meer naar hebt. Toch iets wijzigen? Vul dan het formulier opnieuw in.<br><br>Let op: het kan een paar dagen duren voordat je aan- of afmelding volledig verwerkt is. In de tussentijd kun je nog advertenties van ons tegenkomen. Bedankt voor je geduld!';\n                    // paragraph.style.margin = '0 auto';\n                    // paragraph.style.maxWidth = '100%';\n                    // paragraph.style.lineHeight = '1.6';\n                    // paragraph.style.padding = '0 1rem';\n                    //\n                    //\n                    // successDiv.appendChild(header);\n                    // successDiv.appendChild(paragraph);\n                    //\n                    // form.parentNode.insertBefore(successDiv, form.nextSibling);                    Playtech.API.common.navigate('/');\n                    Playtech.API.popup.showPopup({\n                        title: Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successTitle'),\n                        content: Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successMessage')\n                    });\n                })\n                .catch(err => {\n                    confirm2FAButton.disabled = false;\n                    console.error(err);\n                });\n        });\n    });\n})();\n</script>","beforeEndBody":""},"conditionIds":["5dfa5ec7-2f60-4ec3-a4b2-2a26294bd859","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"cb99428a-c858-4e73-b339-628ea4e3cf89","tagTypeId":"custom_tag_type","name":"<4> - BlockingModalPopup","description":"popup that blocks the entire site (HC-11939). HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"","beforeEndBody":"<style>\r\n  :root {\r\n    --biggestPossibleInt: 2147483647;\r\n  }\r\n  #blockingModalPopup .hideBtn {\r\n    display: none;\r\n  }\r\n  [class*=\"PopupManager__popups\"]:has(#blockingModalPopup) {\r\n    z-index: calc(var(--biggestPossibleInt) - 1);\r\n    position: relative; /* HC-11379 */\r\n  }\r\n  :root:has(#blockingModalPopup) {\r\n    --help-button-z-index: calc(var(--biggestPossibleInt)) !important;\r\n    --chat-z-index: calc(var(--biggestPossibleInt)) !important;\r\n  }\r\n  body:has(#blockingModalPopup) #ada-chat-frame {\r\n    z-index: calc(var(--biggestPossibleInt)) !important;\r\n  }\r\n\r\n  /* start HC-11939 */\r\n  .regily-module {\r\n    z-index: calc(var(--biggestPossibleInt) - 2);\r\n  }\r\n  /* end HC-11939 */\r\n</style>\r\n\r\n<script>\r\n  (function () {\r\n    let isPopupOpened = false;\r\n    const popupID = \"blockingModalPopup\";\r\n    const pageHoldTagName = \"portal/registration/pageHold\";\r\n\r\n    function log() {\r\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n        console.log.apply(\r\n          console,\r\n          [\"[Blocking Modal Popup] \"].concat(Array.from(arguments))\r\n        );\r\n      }\r\n    }\r\n\r\n    function showPopup(webContent) {\r\n      if (isPopupOpened) {\r\n        return;\r\n      }\r\n\r\n      Playtech.API.popup.showPopup({\r\n        id: popupID,\r\n        layer: \"VERY_HIGH_PRIORITY\",\r\n        classNames: { actionButtons: \"hideBtn\" },\r\n        articleId: webContent,\r\n        isModal: true,\r\n      });\r\n      log(\"Show Popup\");\r\n      isPopupOpened = true;\r\n    }\r\n\r\n    function closePopup() {\r\n      if (!isPopupOpened) {\r\n        return;\r\n      }\r\n\r\n      log(\"Close Popup\");\r\n      Playtech.API.popup.closePopups(popupID);\r\n      isPopupOpened = false;\r\n    }\r\n\r\n    function handleLoggedIn({ value } = {}) {\r\n      log(\"Web Content ID\", value);\r\n\r\n      if (value) {\r\n        showPopup(value);\r\n      }\r\n    }\r\n\r\n    function handleChangePlayerTag(e) {\r\n      const { tag, value, removed } = e?.detail || {};\r\n\r\n      if (tag === pageHoldTagName) {\r\n        log(\"Player tag change\");\r\n        // HC-12296 - start\r\n        closePopup();\r\n        // HC-12296 - end\r\n        if (removed) {\r\n          log(\"Close Popup\");\r\n          return;\r\n        }\r\n\r\n        if (value) {\r\n          log(\"Open Popup with new WC\");\r\n          showPopup(value);\r\n        }\r\n      }\r\n    }\r\n\r\n    function getPageHoldTagValue() {\r\n      return Playtech.API.user\r\n        .getPlayerTags(pageHoldTagName)\r\n        .then(function ({ data }) {\r\n          log(\"Get page hold tag value\", data);\r\n          if (data.tags[0]) {\r\n            return {\r\n              value: data.tags[0].value,\r\n            };\r\n          }\r\n          return {};\r\n        });\r\n    }\r\n\r\n    Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n      // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n      setTimeout(()=>getPageHoldTagValue().then(handleLoggedIn), 1000);\r\n    });\r\n    Playtech.on(Playtech.Events.LOGGED_OUT, function () {\r\n      closePopup();\r\n    });\r\n    Playtech.API.events.addEventListener(\r\n      \"player-tag-change\",\r\n      handleChangePlayerTag\r\n    );\r\n    if (Playtech.API.auth.isLoggedIn) {\r\n      getPageHoldTagValue().then(handleLoggedIn);\r\n    }\r\n  })();\r\n</script>"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"f43f9c7f-49c4-41b7-b2a2-77088092d6f7","tagTypeId":"custom_tag_type","name":"<3> [Regulation] - MessagePopupWithTimer","description":"HC-11601 [STC] 30s popup should be shown every time until user has confirmed deposit limits. HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"<!-- Tag start -->\r\n<style>\r\n  #regulationMessagePopupWithTimer .regulationBtnContainer {\r\n    display: none;\r\n  }\r\n</style>\r\n\r\n<script>\r\n  (function () {\r\n    let playerTags = [];\r\n    const POPUP_ID = \"regulationMessagePopupWithTimer\";\r\n    const WEB_CONTENT = \"REGULATIONS_MESSAGE_WITH_TIMER\";\r\n    const REQUIRE_CONFIRMATION_PLAYER_TAG_NAME =\r\n      \"portal/regulation/requireConfirmation\";\r\n    const BTN_CONTAINER_CLASS_NAME = \"regulationBtnContainer\";\r\n\r\n    function log() {\r\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n        console.log.apply(\r\n          console,\r\n          [\"[Regulation Message Popup With Timer] \"].concat(\r\n            Array.from(arguments)\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    function shouldShowBlockingPopup() {\r\n      try {\r\n        return playerTags.some(function (tag) {\r\n          return (\r\n            tag.name === REQUIRE_CONFIRMATION_PLAYER_TAG_NAME &&\r\n            tag.value === \"true\"\r\n          );\r\n        });\r\n      } catch (err) {\r\n        throw { error: err, code: 1 };\r\n      }\r\n    }\r\n\r\n    function showRegulationPopup() {\r\n      try {\r\n        if (shouldShowBlockingPopup()) {\r\n          log(\"Show Popup\");\r\n          Playtech.API.popup.showPopup({\r\n            articleId: WEB_CONTENT,\r\n            layer: \"VERY_HIGH_PRIORITY\",\r\n            classNames: { actionButtons: BTN_CONTAINER_CLASS_NAME },\r\n            id: POPUP_ID,\r\n            onClose: function () {\r\n              Playtech.API.auth.logout();\r\n              log(\"Logout user\");\r\n            },\r\n          });\r\n        }\r\n      } catch (err) {\r\n        log(\"Error\", err);\r\n      }\r\n    }\r\n\r\n    function getPlayerTags() {\r\n      return Playtech.API.user.getPlayerTags().then(function (response) {\r\n        playerTags = response.data.tags;\r\n      });\r\n    }\r\n\r\n    Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n      // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n      setTimeout(() => getPlayerTags().then(showRegulationPopup), 1000);\r\n    });\r\n\r\n    Playtech.on(Playtech.Events.LOGGED_OUT, function () {\r\n      playerTags = [];\r\n    });\r\n\r\n    if (Playtech.API.auth.isLoggedIn) {\r\n      getPlayerTags().then(showRegulationPopup);\r\n    }\r\n  })();\r\n</script>\r\n<!-- Tag end -->\r\n","beforeEndBody":""},"conditionIds":["2e8f68c0-2d83-4009-bf0e-9507529535dc","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"c61be776-0e12-4d6e-899f-0a8f25809e84","tagTypeId":"custom_tag_type","name":"<7> Onboarding - TN custom START Button","description":"HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"","beforeEndBody":"<style>\r\n  [class*=\"StepsCounter__stepCounter\"] + [class*=\"Iframe__\"],\r\n  .docUploadContainer + [class*=\"Iframe__\"] {\r\n    display: none;\r\n  }\r\n\r\n  .docUploadContainer {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    justify-content: center;\r\n  }\r\n\r\n  .docUploadContainer > * {\r\n    margin: 1rem 0;\r\n  }\r\n\r\n  .docUploadButton.inactive {\r\n    pointer-events: none;\r\n  }\r\n\r\n  .docUploadError {\r\n    font-size: 80%;\r\n    text-align: center;\r\n    margin: 1rem 0;\r\n    color: var(--hc-red);\r\n  }\r\n</style>\r\n<script>\r\n  (function () {\r\n    var playerTags = [];\r\n    var tKeys = {\r\n      captureTooltip:\r\n        \"playtech.mobile.system.step2.onboarding.docs.capture.tooltip\",\r\n      startBtnText: \"system.step2.onboarding.docs.start\",\r\n      startTooltip: \"system.step2.onboarding.docs.start.tooltip\",\r\n    };\r\n    const customDocUploadProvider = Playtech.Variables.dynamicTags.find(\r\n      ({ name }) => name === \"CUSTOM_DOC_UPLOAD_PROVIDER\"\r\n    )?.value;\r\n    // console.log('>>> customDocUploadProvider', customDocUploadProvider)\r\n    function translate(tKey) {\r\n      try {\r\n        return Playtech.API.translation.translate(tKey);\r\n      } catch (err) {\r\n        throw { error: err, code: 3 };\r\n      }\r\n    }\r\n\r\n    // start HC-11285\r\n    function isTruNarrativeFlow() {\r\n      try {\r\n        return (\r\n          playerTags.some(function (tag) {\r\n            return tag.name === \"portal/registration/PageDocUpload\";\r\n          }) &&\r\n          !playerTags.some(function (tag) {\r\n            return (\r\n              tag.name === \"portal/registration/PageExternalService\" &&\r\n              tag.value &&\r\n              tag.value.toLowerCase() === customDocUploadProvider\r\n            );\r\n          })\r\n        );\r\n      } catch (err) {\r\n        throw { error: err, code: 1 };\r\n      }\r\n    }\r\n    // end HC-11285\r\n\r\n    function observeIframe() {\r\n      return new Promise(function (resolve, reject) {\r\n        try {\r\n          var wrapper = document.querySelector(\r\n            \"[class*=Iframe__iframeWrapper]\"\r\n          );\r\n\r\n          if (\r\n            wrapper &&\r\n            wrapper.querySelector(\"iframe\") &&\r\n            wrapper.querySelector(\"iframe\").src\r\n          ) {\r\n            resolve(wrapper.querySelector(\"iframe\"));\r\n            return;\r\n          }\r\n\r\n          var popupEl = getPopupContentContainer();\r\n\r\n          new MutationObserver(function (mutationList, observer) {\r\n            try {\r\n              for (var mutation of mutationList) {\r\n                if (\r\n                  mutation.target.querySelector(\"iframe\") &&\r\n                  mutation.target.querySelector(\"iframe\").src\r\n                ) {\r\n                  resolve(mutation.target.querySelector(\"iframe\"));\r\n                  observer.disconnect();\r\n                  break;\r\n                }\r\n              }\r\n            } catch (err) {\r\n              reject(err);\r\n            }\r\n          }).observe(popupEl, {\r\n            childList: true,\r\n            subtree: true,\r\n            attributes: true,\r\n          });\r\n        } catch (err) {\r\n          reject(err);\r\n        }\r\n      });\r\n    }\r\n\r\n    function getRedirectURL() {\r\n      return observeIframe()\r\n        .then(function (iframe) {\r\n          var src = iframe.src;\r\n          iframe.src = \"about:blank\";\r\n\r\n          return src;\r\n        })\r\n        .catch(function (err) {\r\n          return Promise.reject({ error: err, code: 4 });\r\n        });\r\n    }\r\n\r\n    function getPopupContentContainer() {\r\n      try {\r\n        return document.querySelector(\"[class*=StepsCounter__stepCounter]\")\r\n          .parentNode;\r\n      } catch (err) {\r\n        throw { error: err, code: 5 };\r\n      }\r\n    }\r\n\r\n    function createDocUploadContainer() {\r\n      var div = document.createElement(\"div\");\r\n      div.classList.add(\"docUploadContainer\");\r\n\r\n      return div;\r\n    }\r\n\r\n    function createDocUploadCaptureTooltip() {\r\n      var div = document.createElement(\"div\");\r\n      div.innerHTML = translate(tKeys.captureTooltip);\r\n\r\n      return div;\r\n    }\r\n\r\n    function createDocUploadLink(src) {\r\n      var link = document.createElement(\"a\");\r\n      link.href = src;\r\n      link.target = \"_blank\";\r\n      link.classList.add(\"docUploadButton\");\r\n      link.classList.add(\"inactive\");\r\n\r\n      var btn = document.createElement(\"button\");\r\n      btn.type = \"button\";\r\n      btn.classList.add(\"btn\");\r\n      btn.innerHTML = translate(tKeys.startBtnText);\r\n      btn.disabled = true;\r\n\r\n      var disable = function (isDisabled) {\r\n        if (isDisabled) {\r\n          btn.setAttribute(\"disabled\", \"disabled\");\r\n          link.classList.add(\"inactive\");\r\n        } else {\r\n          btn.removeAttribute(\"disabled\");\r\n          link.classList.remove(\"inactive\");\r\n        }\r\n      };\r\n\r\n      btn.addEventListener(\"click\", function () {\r\n        disable(true);\r\n      });\r\n\r\n      link.append(btn);\r\n\r\n      return [link, disable];\r\n    }\r\n\r\n    function createError(err) {\r\n      var div = document.createElement(\"div\");\r\n      var error = err.error || err;\r\n      var prefix = \"Error \" + (err.code || -1) + \": \";\r\n\r\n      div.classList.add(\"docUploadError\");\r\n      div.innerHTML =\r\n        prefix +\r\n        ((error.response && (error.response.data.errorMessage || err.reason)) ||\r\n          error.message);\r\n\r\n      return div;\r\n    }\r\n\r\n    function createDocUploadLinkTooltip() {\r\n      var text = document.createElement(\"p\");\r\n      text.innerHTML = translate(tKeys.startTooltip);\r\n\r\n      return text;\r\n    }\r\n\r\n    function main() {\r\n      try {\r\n        if (isTruNarrativeFlow()) {\r\n          var docUploadContainer = createDocUploadContainer();\r\n          var capture = createDocUploadCaptureTooltip();\r\n          var [uploadLink, disable] = createDocUploadLink();\r\n          var uploadLinkTooltip = createDocUploadLinkTooltip();\r\n\r\n          docUploadContainer.append(capture);\r\n          docUploadContainer.append(uploadLink);\r\n          docUploadContainer.append(uploadLinkTooltip);\r\n          getPopupContentContainer().append(docUploadContainer);\r\n\r\n          getRedirectURL()\r\n            .then(function (url) {\r\n              uploadLink.href = url;\r\n              disable(false);\r\n            })\r\n            .catch(function (err) {\r\n              docUploadContainer.append(createError(err));\r\n            });\r\n        }\r\n      } catch (err) {\r\n        getPopupContentContainer().append(createError(err));\r\n      }\r\n    }\r\n\r\n    function getPlayerTags() {\r\n      return Playtech.API.user.getPlayerTags().then(function (response) {\r\n        playerTags = response.data.tags;\r\n      });\r\n    }\r\n\r\n    Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n      // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n      setTimeout(() => getPlayerTags().then(main), 1000);\r\n    });\r\n\r\n    Playtech.on(Playtech.Events.LOGGED_OUT, function () {\r\n      playerTags = [];\r\n    });\r\n\r\n    if (Playtech.API.auth.isLoggedIn) {\r\n      getPlayerTags().then(main);\r\n    }\r\n  })();\r\n</script>\r\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"66a336a0-8055-482b-bc26-5dcabdc66f08","tagTypeId":"custom_tag_type","name":"<6> - ADA Integration","description":"ADA Integration. HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"<style>\r\n  iframe#ada-button-frame {\r\n    display: none !important;\r\n  }\r\n</style>\r\n<script>\r\n  (function () {\r\n    let isAdaReady = false;\r\n    let isStarted = false;\r\n    let isToggled = false;\r\n    let isProactive = false;\r\n    let playerTags = [];\r\n\r\n    const proactiveTagName = \"adachatbot/proactive\";\r\n    const proactiveBubblesTagName = \"adachatbot/proactive_bubbles\";\r\n    const proactiveCampaignName = \"Holland_Casino_proactive\";\r\n\r\n    function log() {\r\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n        console.log.apply(console, [\"[ADA] \"].concat(Array.from(arguments)));\r\n      }\r\n    }\r\n\r\n    function getJWTToken() {\r\n      log(\"get JWT\");\r\n\r\n      return Playtech.API.server.getJWTToken().then(function ({ data }) {\r\n        return data.jwtToken;\r\n      });\r\n    }\r\n\r\n    function toggleCallback(isDrawerOpen) {\r\n      isToggled = isDrawerOpen;\r\n\r\n      log(\"toggleCallback received\", isToggled);\r\n\r\n      Playtech.API.events.dispatchEvent(\r\n        new CustomEvent(Playtech.Events.CHAT_WINDOW_STATUS, {\r\n          detail: {\r\n            chat: \"ada\",\r\n            isOpened: isDrawerOpen,\r\n          },\r\n        })\r\n      );\r\n    }\r\n\r\n    function onAdaEmbedLoaded() {\r\n      log(\"onAdaEmbedLoaded received\");\r\n    }\r\n\r\n    function adaReadyCallback({ isRolledOut }) {\r\n      isAdaReady = isRolledOut;\r\n      log(\"adaReadyCallback received\", isAdaReady);\r\n\r\n      if (hasProactiveBubblesTag(playerTags)) {\r\n        log(\"triggerCampaign in the starting\");\r\n        window.adaEmbed.triggerCampaign(proactiveCampaignName);\r\n      }\r\n\r\n      if (isProactive && !isToggled) {\r\n        toggleBot([{ chat: \"ada\" }]);\r\n      }\r\n    }\r\n\r\n    function getSensitiveMetaFields(token) {\r\n      return token\r\n        ? {\r\n            jwt_token: token,\r\n          }\r\n        : {};\r\n    }\r\n\r\n    function getMetaFields(extraFields) {\r\n      return {\r\n        // list of predefined vars here,\r\n        // which must be specified with empty value,\r\n        // even if they are not ready right now\r\n        userId: Playtech.fetchUserDetails().userId,\r\n        ...extraFields,\r\n      };\r\n    }\r\n\r\n    function getAdaSettings({ token, metaFields }) {\r\n      return {\r\n        cluster: \"eu\",\r\n        toggleCallback,\r\n        hideMask: false,\r\n        //language: \"NL\",\r\n        adaReadyCallback,\r\n        onAdaEmbedLoaded,\r\n        mobileOverlay: true,\r\n        handle: \"hollandcasino\",\r\n        metaFields: getMetaFields(metaFields),\r\n        greeting: \"6372813824417240bce71f1a\",\r\n        sensitiveMetaFields: getSensitiveMetaFields(token),\r\n      };\r\n    }\r\n\r\n    // for further usage\r\n    function openAnswer(answerId) {\r\n      if (!isAdaReady) {\r\n        return;\r\n      }\r\n\r\n      if (isToggled) {\r\n        log(\"triggering specific answer\", answerId);\r\n        window.adaEmbed.triggerAnswer(answerId);\r\n      } else {\r\n        log(\"toggling\");\r\n        window.adaEmbed.toggle();\r\n      }\r\n    }\r\n\r\n    async function startBot() {\r\n      if (isStarted) {\r\n        return;\r\n      }\r\n\r\n      const token = await getJWTToken();\r\n      log(\"starting\");\r\n\r\n      const metaFields = await getNextAnswerToRun();\r\n      log(\"meta fields\", { metaFields });\r\n\r\n      window.adaEmbed.start(getAdaSettings({ token, metaFields }));\r\n      isStarted = true;\r\n\r\n      if (!hasProactiveBubblesTag(playerTags)) {\r\n        isProactive = Boolean(metaFields);\r\n      }\r\n    }\r\n\r\n    // for further usage\r\n    async function resetBot(metaFields) {\r\n      if (!isAdaReady) {\r\n        return;\r\n      }\r\n\r\n      const token = await getJWTToken();\r\n      log(\"reset\", { metaFields });\r\n      window.adaEmbed.reset(getAdaSettings({ token, metaFields }));\r\n      isStarted = true;\r\n    }\r\n\r\n    function stopBot() {\r\n      if (!isStarted) {\r\n        return;\r\n      }\r\n\r\n      log(\"stopping\");\r\n      window.adaEmbed.stop();\r\n      isStarted = false;\r\n      isProactive = false;\r\n    }\r\n\r\n    function toggleBot(e) {\r\n      if (!isAdaReady || !isStarted) {\r\n        return;\r\n      }\r\n\r\n      if (e && e.length > 0 && e[0].chat === \"ada\") {\r\n        log(\"toggling\");\r\n        window.adaEmbed.toggle();\r\n      }\r\n    }\r\n\r\n    // HC-10930\r\n    async function adaChatBotProactive(e) {\r\n      const metaFields = await getNextAnswerToRun(e);\r\n\r\n      if (metaFields) {\r\n        await resetBot(metaFields);\r\n\r\n        if (!isToggled) {\r\n          toggleBot([{ chat: \"ada\" }]);\r\n        }\r\n      }\r\n    }\r\n\r\n    // HC-11188 start\r\n    async function adaChatBotProactiveBubbles(e) {\r\n      const metaFields = await getNextAnswerToRun(e);\r\n\r\n      if (metaFields) {\r\n        window.adaEmbed.setMetaFields(metaFields);\r\n        log(\"setMetaFields\", { metaFields });\r\n\r\n        window.adaEmbed.triggerCampaign(proactiveCampaignName);\r\n        log(\"triggerCampaign in the updating\");\r\n      }\r\n    }\r\n\r\n    function hasProactiveBubblesTag(tags) {\r\n      if (Array.isArray(tags)) {\r\n        return tags.some(({ name }) => name === proactiveBubblesTagName);\r\n      }\r\n      return false;\r\n    }\r\n\r\n    function handleProactiveTags(e) {\r\n      if (hasProactiveBubblesTag([{ name: e.detail?.tag }])) {\r\n        return adaChatBotProactiveBubbles(e);\r\n      }\r\n      adaChatBotProactive(e);\r\n    }\r\n    // HC-11188 end\r\n\r\n    function getSessionData() {\r\n      try {\r\n        return JSON.parse(sessionStorage.userModel);\r\n      } catch (e) {\r\n        return {};\r\n      }\r\n    }\r\n\r\n    // HC-11004\r\n    async function getNextAnswerToRun(e) {\r\n      const proactiveTagNames = [proactiveTagName, proactiveBubblesTagName];\r\n\r\n      const { authType } = getSessionData();\r\n\r\n      if (e) {\r\n        const { tag, value, removed } = e.detail;\r\n\r\n        if (proactiveTagNames.includes(tag) && !removed) {\r\n          return {\r\n            NextAnswerToRun: value,\r\n          };\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      // HC-11020 - task to add authType to sessionStorage\r\n      if (authType === \"credentials\") {\r\n        ({\r\n          data: { tags: playerTags },\r\n        } = await Playtech.API.user.getPlayerTags(proactiveTagNames.join(\",\")));\r\n        log(\"Player tags response\", playerTags);\r\n        if (Array.isArray(playerTags)) {\r\n          // HC-11188 changed\r\n          if (playerTags.length > 1) {\r\n            return {\r\n              NextAnswerToRun: playerTags.find(\r\n                ({ name }) => name === proactiveBubblesTagName\r\n              )?.value,\r\n            };\r\n          }\r\n          if (playerTags.length === 1) {\r\n            return {\r\n              NextAnswerToRun: playerTags[0].value,\r\n            };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    function onLoadBot() {\r\n      if (Playtech.API.auth.isLoggedIn) {\r\n        startBot();\r\n      }\r\n\r\n      Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n        // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n        setTimeout(startBot, 1000);\r\n      });\r\n      Playtech.on(Playtech.Events.LOGGED_OUT, stopBot);\r\n      Playtech.on(Playtech.Events.CHAT_TOGGLE, toggleBot);\r\n      Playtech.API.events.addEventListener(\r\n        \"player-tag-change\",\r\n        handleProactiveTags\r\n      );\r\n    }\r\n\r\n    window.onLoadBot = onLoadBot;\r\n  })();\r\n</script>\r\n<script\r\n  async\r\n  id=\"__ada\"\r\n  data-lazy\r\n  onload=\"onLoadBot()\"\r\n  src=\"https://static.ada.support/embed2.js\"\r\n></script>\r\n","beforeEndBody":""},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"949cb65e-cafe-4b5d-9565-205148726b40","tagTypeId":"custom_tag_type","name":"<2> IDIN Native","description":"Custom onClick handler for LaunchIDIN btn in native (PageIDINAddress). HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"<style>\r\n    button[class*=IDINAddress__btnLaunch] {\r\n        display: none !important;\r\n    }\r\n\r\n    .idinError {\r\n        font-size: 80%;\r\n        text-align: center;\r\n        margin: 1rem 0;\r\n        color: var(--hc-red);\r\n    }\r\n\r\n    .btn {\r\n        display: block;\r\n        margin: 5rem auto 3rem;\r\n    }\r\n</style>\r\n<script>\r\n    (function () {\r\n\r\n        var playerTags = [];\r\n\r\n        function translate(tKey) {\r\n            try {\r\n                return Playtech.API.translation.translate(tKey);\r\n            } catch (err) {\r\n                throw {error: err, code: 5};\r\n            }\r\n        }\r\n\r\n        function isPageIDINAddress() {\r\n            try {\r\n                return playerTags.some(function (tag) {\r\n                    return tag.name === 'portal/registration/PageIDINAddress';\r\n                });\r\n            } catch (err) {\r\n                throw {error: err, code: 1};\r\n            }\r\n        }\r\n\r\n        function getPopupContentContainer() {\r\n            try {\r\n                return document.querySelector('[class*=StepsCounter__stepCounter]').parentNode;\r\n            } catch (err) {\r\n                throw {error: err, code: 5};\r\n            }\r\n        }\r\n\r\n        function createContainer() {\r\n            var div = document.createElement('div');\r\n            div.classList.add('idinContainer')\r\n\r\n            return div;\r\n        }\r\n\r\n        function createError(err) {\r\n            var div = document.createElement('div');\r\n            var error = err.error || err;\r\n            var prefix = 'Error ' + (err.code || -1) + ': ';\r\n\r\n            div.classList.add('idinError');\r\n            div.innerHTML = prefix +\r\n                (error.response && (error.response.data.errorMessage || err.reason) || error.message);\r\n\r\n            return div;\r\n        }\r\n\r\n        function appendError(err) {\r\n            var containerEl = document.querySelector('.idinContainer') || getPopupContentContainer();\r\n            if (containerEl) {\r\n                containerEl.append(createError(err));\r\n            }\r\n        }\r\n\r\n        function createNewLaunchBtn() {\r\n            var btn = document.createElement('button');\r\n            btn.type = 'button';\r\n            btn.classList.add('btn');\r\n            btn.innerHTML = translate('playtech.mobile.system.hc-registration.IDINAddress.button.launchIDIN');\r\n\r\n            btn.addEventListener('click', function () {\r\n                btn.setAttribute('disabled', 'disabled');\r\n\r\n                var docType = playerTags && playerTags.find(tag => tag.name === 'portal/registration/PageExternalService')?.value;\r\n                if (docType) {\r\n                    Playtech.API.server.initiateDocumentUpload({\r\n                        documentType: docType,\r\n                        service: 'trunarrative'\r\n                    }).then((response) => {\r\n                        var redirectURL = response.data && response.data.redirectURL;\r\n                        btn.removeAttribute('disabled');\r\n\r\n                        Playtech.API.htcmd.sendMessage('openCustomTab', {\r\n                            path: redirectURL\r\n                        });\r\n                    }).catch((err) => {\r\n                        btn.removeAttribute('disabled');\r\n                        appendError({error: err, code: 2});\r\n                        });\r\n                } else {\r\n                    btn.removeAttribute('disabled');\r\n                    appendError({error: 'Cannot find document type', code: 3});\r\n                }\r\n            });\r\n\r\n            return btn;\r\n        }\r\n\r\n        function main() {\r\n            try {\r\n                if (isPageIDINAddress()) {\r\n                    var containerEl = createContainer();\r\n                    var newLaunchBtn = createNewLaunchBtn();\r\n\r\n                    containerEl.append(newLaunchBtn);\r\n                    getPopupContentContainer().append(containerEl);\r\n                }\r\n            } catch (err) {\r\n                getPopupContentContainer().append(createError(err));\r\n            }\r\n        }\r\n\r\n        function getPlayerTags() {\r\n            return Playtech.API.user.getPlayerTags().then(function (response) {\r\n                playerTags = response.data.tags;\r\n            });\r\n        }\r\n\r\n        Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n            // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n            setTimeout(() => getPlayerTags().then(main), 1000);\r\n        });\r\n\r\n        Playtech.on(Playtech.Events.LOGGED_OUT, function () {\r\n            playerTags = [];\r\n        });\r\n\r\n        if (Playtech.API.auth.isLoggedIn) {\r\n            getPlayerTags().then(main);\r\n        }\r\n\r\n    })();\r\n</script>\r\n","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"ec6abb72-f9db-4c0e-b880-640fc35f3f63","tagTypeId":"custom_js","name":"<2> Pre-cache IDIN url","description":"Pre-cache IDIN url. HC-12276 - temporary fix for LOGGED_IN","config":{"code":"(function () {\r\n  let wasCached = false;\r\n\r\n  async function initiateDocumentUpload(docType) {\r\n    await Playtech.API.server.initiateDocumentUpload({\r\n      documentType: docType,\r\n      service: \"trunarrative\",\r\n    });\r\n\r\n    wasCached = true;\r\n  }\r\n\r\n  async function fetchDocumentType() {\r\n    const {\r\n      data: { tags },\r\n    } = await Playtech.API.user.getPlayerTags(\r\n      \"portal/registration/PageExternalService\"\r\n    );\r\n    console.log('>>> fetchDocumentType tags:', tags);\r\n    return tags[0]?.value;\r\n  }\r\n\r\n  async function initiateDocumentUploadIfIDIN() {\r\n    if (wasCached) {\r\n      return;\r\n    }\r\n\r\n    const docType = await fetchDocumentType();\r\n\r\n    if (docType === \"IDIN\") {\r\n      initiateDocumentUpload(docType);\r\n    }\r\n  }\r\n\r\n  function playerTagChangeListener(e) {\r\n    const { tag, value, removed } = e.detail;\r\n\r\n    if (\r\n      !wasCached &&\r\n      tag === \"portal/registration/PageExternalService\" &&\r\n      !removed &&\r\n      value === \"IDIN\"\r\n    ) {\r\n      initiateDocumentUpload(value);\r\n    }\r\n  }\r\n\r\n  function subscribeOnTagChange() {\r\n    initiateDocumentUploadIfIDIN();\r\n\r\n    Playtech.API.events.addEventListener(\r\n      \"player-tag-change\",\r\n      playerTagChangeListener\r\n    );\r\n  }\r\n\r\n  function unsubscribeOnTagChange() {\r\n    Playtech.API.events.removeEventListener(\r\n      \"player-tag-change\",\r\n      playerTagChangeListener\r\n    );\r\n  }\r\n\r\n  Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n    // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n    setTimeout(subscribeOnTagChange, 1000);\r\n  });\r\n\r\n  Playtech.on(Playtech.Events.LOGGED_OUT, unsubscribeOnTagChange);\r\n\r\n  if (Playtech.API.auth.isLoggedIn) {\r\n    subscribeOnTagChange();\r\n  }\r\n})();\r\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"562972a3-58b7-479d-9dd4-7f9ea54d4fe3","tagTypeId":"custom_tag_type","name":"Premium theme","description":"Premium theme","config":{"beforeEndHead":"<style>\r\n  /* HC-12256 Premium lounge stylings - START */\r\n  :root {\r\n    --hc-premium-premium-btn-bg: linear-gradient(\r\n      130deg,\r\n      #a96b45 5.13%,\r\n      #e3a455 11.65%,\r\n      #f6dba6 27.03%,\r\n      #ffebc4 44.03%,\r\n      #f0be79 57.2%,\r\n      #ffebc3 67.74%,\r\n      #eebc70 82.38%,\r\n      #ca8846 92.1%,\r\n      #ba7f3b 92.87%,\r\n      #a96b45 94.56%\r\n    );\r\n    --hc-premium-primary-btn-border: linear-gradient(\r\n        130deg,\r\n        #a96b45 5.13%,\r\n        #e3a455 11.65%,\r\n        #f6dba6 27.03%,\r\n        #ffebc4 44.03%,\r\n        #f0be79 57.2%,\r\n        #ffebc3 67.74%,\r\n        #eebc70 82.38%,\r\n        #ca8846 92.1%,\r\n        #ba7f3b 92.87%,\r\n        #a96b45 94.56%\r\n      )\r\n      1;\r\n    --hc-premium-secondary-btn-border: conic-gradient(\r\n        from 180deg at 48.5% 50%,\r\n        #3f1f0f -28.12deg,\r\n        #e3a455 26.25deg,\r\n        #f6dba6 88.12deg,\r\n        #ffebc4 156.58deg,\r\n        #f0be79 191.74deg,\r\n        #8f653b 213.59deg,\r\n        #673d22 225.95deg,\r\n        #ba7f3b 255.19deg,\r\n        #eebc70 278.6deg,\r\n        #3f1f0f 331.88deg,\r\n        #e3a455 386.25deg\r\n      )\r\n      1;\r\n    --hc-premium-secondary-btn-border-alt: conic-gradient(\r\n        from 270deg at 48.5% 50%,\r\n        #3f1f0f -28.12deg,\r\n        #e3a455 26.25deg,\r\n        #f6dba6 88.12deg,\r\n        #ffebc4 156.58deg,\r\n        #f0be79 191.74deg,\r\n        #8f653b 213.59deg,\r\n        #673d22 225.95deg,\r\n        #ba7f3b 255.19deg,\r\n        #eebc70 278.6deg,\r\n        #3f1f0f 331.88deg,\r\n        #e3a455 386.25deg\r\n      )\r\n      1;\r\n\r\n    --hc-premium-primary-btn-disabled-bg: linear-gradient(\r\n      129.84deg,\r\n      #7f786f 6.18%,\r\n      #b9b6ad 32.41%,\r\n      #b9b6ad 69.38%,\r\n      #7f786f 88.86%\r\n    );\r\n    --hc-gold-gradient-alt: linear-gradient(\r\n      130deg,\r\n      #fde5b8 6.18%,\r\n      #eebd71 26.65%,\r\n      #a86b45 46.32%,\r\n      #dda55d 69.38%,\r\n      #fde5b8 88.86%\r\n    );\r\n  }\r\n\r\n  body {\r\n    --hc-primary-btn-background: var(--hc-premium-premium-btn-bg);\r\n    --disabled-btn-bg-color: var(--hc-premium-primary-btn-disabled-bg);\r\n  }\r\n\r\n  /* button primary and button from BB in MyHc */\r\n  body .my-hc-sidebar .btn,\r\n  body [class*=\"Button__primary\"][class*=\"Button__success\"] {\r\n    color: var(--hc-black) !important;\r\n    position: relative;\r\n    border-radius: var(--hc-border-radius);\r\n  }\r\n\r\n  body .my-hc-sidebar .btn {\r\n    background: var(--hc-primary-btn-background) !important;\r\n  }\r\n\r\n  body .my-hc-sidebar .btn::before,\r\n  body [class*=\"Button__primary\"][class*=\"Button__success\"]::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    inset: 0;\r\n    z-index: 0;\r\n    border-radius: 2px;\r\n    padding: 0;\r\n    pointer-events: none;\r\n    border: 1px solid transparent;\r\n    border-image: var(--hc-premium-primary-btn-border);\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  body .my-hc-sidebar .btn::disabled,\r\n  body [class*=\"Button__primary\"][class*=\"Button__success\"]:disabled {\r\n    color: var(--hc-gray-transparent-60) !important;\r\n  }\r\n\r\n  /* button secondary start */\r\n  body [class*=\"JoinButton__join\"]:not([class*=\"Button__primary\"]),\r\n  body [class*=\"Button__quicklink\"],\r\n  body [class*=\"Button__quicklink\"][class*=\"Button__success\"],\r\n  body [class*=\"Button__negative\"],\r\n  body [class*=\"Button__info\"],\r\n  body [class*=\"Button__generic\"],\r\n  body [class*=\"Button__revert\"],\r\n  body [class*=\"Button__secondary\"][class*=\"Button__success\"] {\r\n    position: relative;\r\n    border: 1px solid transparent !important;\r\n    border-radius: 2px;\r\n    background: var(--hc-gold-gradient) !important;\r\n    background-clip: text !important;\r\n    -webkit-text-fill-color: #0000;\r\n    box-shadow: 0px 8px 16px 0px var(--hc-black-transparent-10);\r\n  }\r\n\r\n  body [class*=\"JoinButton__join\"]:not([class*=\"Button__primary\"])::before,\r\n  body [class*=\"Button__quicklink\"]::before,\r\n  body [class*=\"Button__quicklink\"][class*=\"Button__success\"]::before,\r\n  body [class*=\"Button__negative\"]::before,\r\n  body [class*=\"Button__info\"]::before,\r\n  body [class*=\"Button__generic\"]::before,\r\n  body [class*=\"Button__revert\"]::before,\r\n  body [class*=\"Button__secondary\"][class*=\"Button__success\"]::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    inset: 0;\r\n    z-index: 0;\r\n    border-radius: 2px;\r\n    padding: 0;\r\n    pointer-events: none;\r\n    border: 1px solid transparent;\r\n    border-image: var(--hc-premium-secondary-btn-border);\r\n    box-sizing: border-box;\r\n    transition: border-image 0.3s;\r\n  }\r\n\r\n  body\r\n    [class*=\"JoinButton__join\"]:not(\r\n      [class*=\"Button__primary\"]\r\n    )[class*=\"Button__light\"],\r\n  body [class*=\"Button__quicklink\"][class*=\"Button__light\"],\r\n  body\r\n    [class*=\"Button__quicklink\"][class*=\"Button__success\"][class*=\"Button__light\"],\r\n  body [class*=\"Button__negative\"][class*=\"Button__light\"],\r\n  body [class*=\"Button__info\"][class*=\"Button__light\"],\r\n  body [class*=\"Button__generic\"][class*=\"Button__light\"],\r\n  body [class*=\"Button__revert\"][class*=\"Button__light\"],\r\n  body\r\n    [class*=\"Button__secondary\"][class*=\"Button__success\"][class*=\"Button__light\"] {\r\n    border-radius: 2px;\r\n    background: var(--hc-gold-gradient-alt) !important;\r\n    background-clip: text !important;\r\n    -webkit-text-fill-color: #0000;\r\n  }\r\n\r\n  body\r\n    [class*=\"JoinButton__join\"]:not(\r\n      [class*=\"Button__primary\"]\r\n    )[class*=\"Button__light\"]::after,\r\n  body [class*=\"Button__quicklink\"][class*=\"Button__light\"]::after,\r\n  body\r\n    [class*=\"Button__quicklink\"][class*=\"Button__success\"][class*=\"Button__light\"]::after,\r\n  body [class*=\"Button__negative\"][class*=\"Button__light\"]::after,\r\n  body [class*=\"Button__info\"][class*=\"Button__light\"]::after,\r\n  body [class*=\"Button__generic\"][class*=\"Button__light\"]::after,\r\n  body [class*=\"Button__revert\"][class*=\"Button__light\"]::after,\r\n  body\r\n    [class*=\"Button__secondary\"][class*=\"Button__success\"][class*=\"Button__light\"]::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    box-shadow: inset 0px 0px 32px 0px #ffebc4;\r\n  }\r\n\r\n  /* button secondary hover, active */\r\n  body [class*=\"Button__quicklink\"]:hover,\r\n  body [class*=\"Button__quicklink\"][class*=\"Button__success\"]:hover,\r\n  body [class*=\"Button__negative\"]:hover,\r\n  body [class*=\"Button__info\"]:hover,\r\n  body [class*=\"Button__generic\"]:hover,\r\n  body [class*=\"Button__revert\"]:hover,\r\n  body [class*=\"Button__secondary\"][class*=\"Button__success\"]:hover {\r\n    background: var(--hc-gold-gradient-alt) !important;\r\n    background-clip: text !important;\r\n    -webkit-text-fill-color: #0000;\r\n  }\r\n\r\n  body [class*=\"Button__quicklink\"]:hover::before,\r\n  body [class*=\"Button__quicklink\"][class*=\"Button__success\"]:hover::before,\r\n  body [class*=\"Button__negative\"]:hover::before,\r\n  body [class*=\"Button__info\"]:hover::before,\r\n  body [class*=\"Button__generic\"]:hover::before,\r\n  body [class*=\"Button__revert\"]:hover::before,\r\n  body [class*=\"Button__secondary\"][class*=\"Button__success\"]:hover::before {\r\n    border-image: var(--hc-premium-secondary-btn-border-alt);\r\n  }\r\n\r\n  body [class*=\"Button__quicklink\"][class*=\"Button__active\"],\r\n  body\r\n    [class*=\"Button__quicklink\"][class*=\"Button__success\"][class*=\"Button__active\"],\r\n  body [class*=\"Button__negative\"][class*=\"Button__active\"],\r\n  body [class*=\"Button__info\"][class*=\"Button__active\"],\r\n  body [class*=\"Button__generic\"][class*=\"Button__active\"],\r\n  body [class*=\"Button__revert\"][class*=\"Button__active\"],\r\n  body\r\n    [class*=\"Button__secondary\"][class*=\"Button__success\"][class*=\"Button__active\"] {\r\n    background: var(--hc-gold-gradient-alt) !important;\r\n    background-clip: text !important;\r\n    -webkit-text-fill-color: #0000;\r\n  }\r\n\r\n  body [class*=\"Button__quicklink\"][class*=\"Button__active\"]::before,\r\n  body\r\n    [class*=\"Button__quicklink\"][class*=\"Button__success\"][class*=\"Button__active\"]::before,\r\n  body [class*=\"Button__negative\"][class*=\"Button__active\"]::before,\r\n  body [class*=\"Button__info\"][class*=\"Button__active\"]::before,\r\n  body [class*=\"Button__generic\"][class*=\"Button__active\"]::before,\r\n  body [class*=\"Button__revert\"][class*=\"Button__active\"]::before,\r\n  body\r\n    [class*=\"Button__secondary\"][class*=\"Button__success\"][class*=\"Button__active\"]::before {\r\n    border-image: var(--hc-premium-secondary-btn-border-alt);\r\n  }\r\n\r\n  /* button secondary disabled */\r\n  body [class*=\"JoinButton__join\"]:not([class*=\"Button__primary\"]):disabled,\r\n  body [class*=\"Button__quicklink\"]:disabled,\r\n  body [class*=\"Button__quicklink\"][class*=\"Button__success\"]:disabled,\r\n  body [class*=\"Button__negative\"]:disabled,\r\n  body [class*=\"Button__info\"]:disabled,\r\n  body [class*=\"Button__generic\"]:disabled,\r\n  body [class*=\"Button__revert\"]:disabled,\r\n  body [class*=\"Button__secondary\"][class*=\"Button__success\"]:disabled {\r\n    border: 1px solid transparent !important;\r\n  }\r\n\r\n  body\r\n    [class*=\"JoinButton__join\"]:not([class*=\"Button__primary\"]):disabled::after,\r\n  body [class*=\"Button__quicklink\"]:disabled::after,\r\n  body [class*=\"Button__quicklink\"][class*=\"Button__success\"]:disabled::after,\r\n  body [class*=\"Button__negative\"]:disabled::after,\r\n  body [class*=\"Button__info\"]:disabled::after,\r\n  body [class*=\"Button__generic\"]:disabled::after,\r\n  body [class*=\"Button__revert\"]:disabled::after,\r\n  body [class*=\"Button__secondary\"][class*=\"Button__success\"]:disabled::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    background: var(--hc-blue-transparent-60);\r\n    right: 0;\r\n    bottom: 0;\r\n  }\r\n\r\n  body\r\n    [class*=\"JoinButton__join\"]:not(\r\n      [class*=\"Button__primary\"]\r\n    )[class*=\"Button__light\"]:disabled::after,\r\n  body [class*=\"Button__quicklink\"][class*=\"Button__light\"]:disabled::after,\r\n  body\r\n    [class*=\"Button__quicklink\"][class*=\"Button__success\"][class*=\"Button__light\"]:disabled::after,\r\n  body [class*=\"Button__negative\"][class*=\"Button__light\"]:disabled::after,\r\n  body [class*=\"Button__info\"][class*=\"Button__light\"]:disabled::after,\r\n  body [class*=\"Button__generic\"][class*=\"Button__light\"]:disabled::after,\r\n  body [class*=\"Button__revert\"][class*=\"Button__light\"]:disabled::after,\r\n  body\r\n    [class*=\"Button__secondary\"][class*=\"Button__success\"][class*=\"Button__light\"]:disabled::after {\r\n    background: var(--hc-gray-transparent-40);\r\n    box-shadow: none;\r\n  }\r\n\r\n  /* button secondary end*/\r\n\r\n  /* styling for preferences title */\r\n  /* styling for game info popup title */\r\n  body .cms-games-grid-info-game-name,\r\n  body [class*=\"PortletTitle__title\"] {\r\n    background: var(--hc-gold-gradient);\r\n    background-clip: text;\r\n    -webkit-text-fill-color: #0000;\r\n    text-align: center;\r\n  }\r\n\r\n  /* HC-12256 Premium lounge stylings - END */\r\n\r\n  /* ******\r\n  HC-12248: Premium lounge Games Grid - START\r\n  ****** */\r\n\r\n  /* category title & view more text  */\r\n  body [class*=\"GamesHeader__categoryName\"],\r\n  body [class*=\"GamesHeader__viewMore\"] {\r\n    background: var(--hc-gold-gradient);\r\n    background-clip: text;\r\n    text-align: center;\r\n    -webkit-text-fill-color: #0000;\r\n  }\r\n\r\n  /* arrow buttons - active */\r\n  body [class*=\"GamesSliderView__leftArrow\"]:focus,\r\n  body [class*=\"GamesSliderView__rightArrow\"]:focus,\r\n  body [class*=\"GamesSliderView__leftArrow\"],\r\n  body [class*=\"GamesSliderView__rightArrow\"] {\r\n    background: url(\"/library/Premium lounge/Games Grid/arrows/forward.svg\")\r\n      center no-repeat;\r\n  }\r\n\r\n  /* arrow buttons - hover */\r\n  body [class*=\"GamesSliderView__leftArrow\"]:hover,\r\n  body [class*=\"GamesSliderView__rightArrow\"]:hover {\r\n    background: url(\"/library/Premium lounge/Games Grid/arrows/forward.svg\")\r\n      center no-repeat;\r\n  }\r\n\r\n  /* arrow buttons - inactive */\r\n  body [class*=\"GamesSliderView__leftArrow\"][class*=\"Slider__disabledArrow\"],\r\n  body [class*=\"GamesSliderView__rightArrow\"][class*=\"Slider__disabledArrow\"] {\r\n    opacity: 1;\r\n    background: url(\"/library/Premium lounge/Games Grid/arrows/forward-disabled.svg\")\r\n      center no-repeat !important;\r\n  }\r\n\r\n  /* tiles border gradient */\r\n  body [class*=\"Game__gameTile\"] {\r\n    position: relative;\r\n    padding: 1px;\r\n  }\r\n\r\n  body [class*=\"Game__gameTile\"]:before {\r\n    background: linear-gradient(\r\n      130deg,\r\n      #7c4e19 6.18%,\r\n      #eec84d 32.41%,\r\n      #eec84d 69.38%,\r\n      #7c4e19 88.86%\r\n    );\r\n    border-radius: inherit;\r\n    box-sizing: border-box;\r\n    content: \"\";\r\n    inset: 0;\r\n    -webkit-mask: linear-gradient(#fff 0 0) content-box,\r\n      linear-gradient(#fff 0 0);\r\n    mask-composite: exclude;\r\n    padding: inherit;\r\n    position: absolute;\r\n    z-index: 0;\r\n  }\r\n\r\n  body [class*=\"Game__gameTile\"] [class*=\"Game__container\"] {\r\n    overflow: hidden;\r\n    border-radius: inherit;\r\n  }\r\n  /* ******\r\n  HC-12248: Premium lounge Games Grid - END\r\n  ****** */\r\n\r\n  /* HC-12265 [STC] Leaderboards Premium restyle Start*/\r\n  body [class*=\"RaceListCard__card\"] [class*=\"Card__text\"],\r\n  body [class*=\"RaceListCard__card\"] [class*=\"Card__value\"],\r\n  body [class*=\"RaceListCard__card\"] [class*=\"CountDownBadge__value\"] {\r\n    background: var(--hc-gold-gradient);\r\n    background-clip: text;\r\n    text-align: center;\r\n    -webkit-text-fill-color: #0000;\r\n  }\r\n  /* HC-12265 [STC] Leaderboards Premium restyle End*/\r\n\r\n  /* Promotion premium styles - START */\r\n  /* arrow buttons - active */\r\n  body [class*=\"CarouselControls__prevControl\"]:focus,\r\n  body [class*=\"CarouselControls__nextControl\"]:focus,\r\n  body [class*=\"CarouselControls__prevControl\"],\r\n  body [class*=\"CarouselControls__nextControl\"] {\r\n    background: url(\"/library/Premium lounge/Games Grid/arrows/forward.svg\")\r\n      center no-repeat;\r\n  }\r\n\r\n  /* arrow buttons - hover */\r\n  body [class*=\"CarouselControls__prevControl\"]:hover,\r\n  body [class*=\"CarouselControls__nextControl\"]:hover {\r\n    background: url(\"/library/Premium lounge/Games Grid/arrows/forward.svg\")\r\n      center no-repeat;\r\n  }\r\n\r\n  /* arrow buttons - inactive */\r\n  body [class*=\"CarouselControls__prevControl\"][class*=\"Slider__disabledArrow\"],\r\n  body\r\n    [class*=\"CarouselControls__nextControl\"][class*=\"Slider__disabledArrow\"] {\r\n    opacity: 1;\r\n    background: url(\"/library/Premium lounge/Games Grid/arrows/forward-disabled.svg\")\r\n      center no-repeat !important;\r\n  }\r\n  /* Status Badge active */\r\n  body\r\n    [class*=\"StartStatusBadge__container\"]\r\n    [class*=\"StartStatusBadge__active\"] {\r\n    background: var(--hc-gold-gradient);\r\n    color: var(--hc-black);\r\n  }\r\n\r\n  /* Status Badge completed, pendingReview */\r\n  body\r\n    [class*=\"StartStatusBadge__container\"]\r\n    [class*=\"StartStatusBadge__completed\"],\r\n  body\r\n    [class*=\"StartStatusBadge__container\"]\r\n    [class*=\"StartStatusBadge__pendingReview\"] {\r\n    position: relative;\r\n    border: 1px solid transparent !important;\r\n    border-radius: 2px;\r\n    background: var(--hc-gold-gradient) !important;\r\n    background-clip: text !important;\r\n    -webkit-text-fill-color: #0000;\r\n  }\r\n\r\n  body\r\n    [class*=\"StartStatusBadge__container\"]\r\n    [class*=\"StartStatusBadge__completed\"]::before,\r\n  body\r\n    [class*=\"StartStatusBadge__container\"]\r\n    [class*=\"StartStatusBadge__pendingReview\"]::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    inset: 0;\r\n    z-index: 0;\r\n    border-radius: 2px;\r\n    padding: 0;\r\n    pointer-events: none;\r\n    border: 1px solid transparent;\r\n    border-image: var(--hc-premium-secondary-btn-border);\r\n    box-sizing: border-box;\r\n    transition: border-image 0.3s;\r\n  }\r\n\r\n  /* Status Badge notStarted, cancelledByAdmin */\r\n\r\n  body\r\n    [class*=\"StartStatusBadge__container\"]\r\n    [class*=\"StartStatusBadge__cancelledByAdmin\"],\r\n  body\r\n    [class*=\"StartStatusBadge__container\"]\r\n    [class*=\"StartStatusBadge__notStarted\"] {\r\n    position: relative;\r\n    border: 1px solid transparent !important;\r\n    border-radius: 2px;\r\n    background: var(--hc-gold-gradient) !important;\r\n    background-clip: text !important;\r\n    -webkit-text-fill-color: #0000;\r\n  }\r\n  body\r\n    [class*=\"StartStatusBadge__container\"]\r\n    [class*=\"StartStatusBadge__cancelledByAdmin\"]::before,\r\n  body\r\n    [class*=\"StartStatusBadge__container\"]\r\n    [class*=\"StartStatusBadge__notStarted\"]::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    inset: 0;\r\n    z-index: 0;\r\n    border-radius: 2px;\r\n    padding: 0;\r\n    pointer-events: none;\r\n    border: 1px solid transparent;\r\n    border-image: var(--hc-premium-secondary-btn-border);\r\n    box-sizing: border-box;\r\n    transition: border-image 0.3s;\r\n  }\r\n  body\r\n    [class*=\"StartStatusBadge__container\"]\r\n    [class*=\"StartStatusBadge__cancelledByAdmin\"]::after,\r\n  body\r\n    [class*=\"StartStatusBadge__container\"]\r\n    [class*=\"StartStatusBadge__notStarted\"]::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    background: var(--hc-blue-transparent-60);\r\n    right: 0;\r\n    bottom: 0;\r\n  }\r\n\r\n  /* Promotion premium styles - END */\r\n</style>","beforeEndBody":""},"conditionIds":["b8cd6255-5275-430e-b4b3-34917ce3e157","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"2bf293bd-336d-4de2-8d33-57fa1df1c317","tagTypeId":"custom_tag_type","name":"SportsSlideGamesStyle","description":"Sports side games config","config":{"beforeEndHead":"<style>\r\n  :root {\r\n    --card-control-height: 2.5rem;\r\n    --sport-footer-height: 3rem;\r\n    --card-popup-minimized-margin: calc(\r\n      100dvh -\r\n        (\r\n          var(--header-height) + var(--sport-footer-height) +\r\n            var(--card-control-height)\r\n        )\r\n    );\r\n    /* 152px is the height sport-footer-height + card-control-height + header-height. card-popup-minimized-margin: calc(100dvh - 140px) -  it is default core value */\r\n  }\r\n\r\n  #sportsbook-side-games {\r\n    padding: 0;\r\n    margin: 0 auto;\r\n  }\r\n\r\n  .mobile-layout #sportsbook-side-games {\r\n    bottom: auto;\r\n    top: var(--header-height);\r\n    max-height: calc(\r\n      100dvh - var(--header-height) - var(--sport-footer-height)\r\n    );\r\n  }\r\n  #sportsbook-side-games [class*=\"CardPopup__category\"],\r\n  #sportsbook-side-games [class*=\"contentContainer\"] {\r\n    margin: 0;\r\n    padding: 0;\r\n  }\r\n\r\n  #sportsbook-side-games [class*=\"CardPopup__buttons\"] {\r\n    width: 100%;\r\n    text-align: right;\r\n    background: var(--light-theme-bg-color);\r\n    height: var(--card-control-height);\r\n  }\r\n\r\n  #sportsbook-side-games .game-iframe {\r\n    height: calc(\r\n      100dvh - var(--header-height) - var(--card-control-height) -\r\n        var(--sport-footer-height)\r\n    );\r\n  }\r\n\r\n  .mobile-layout\r\n    #sportsbook-side-games\r\n    [class*=\"GamesView__grid\"]\r\n    [class*=\"GamesView__slide\"]:first-child,\r\n  .tablet\r\n    #sportsbook-side-games\r\n    [class*=\"GamesView__grid\"]\r\n    [class*=\"GamesView__slide\"]:first-child {\r\n    padding: 0;\r\n  }\r\n  /* I use class \"tablet\" because the \"desktop-layout\" class is used for the iPad Pro*/\r\n\r\n  #sportsbook-side-games [class*=\"CloseButton__close\"] {\r\n    display: none;\r\n  }\r\n\r\n  @media (max-width: 400px) {\r\n    .mobile-layout #sportsbook-side-games .col-mob-4 {\r\n      width: calc(100vw - 0.5rem);\r\n    }\r\n  }\r\n</style>","beforeEndBody":""},"conditionIds":["1a66cab4-39b1-4092-a5cb-81887c12ee83","10c6a1bf-bd4b-4c65-9256-45b166858b9d"]},{"tagId":"2f8c08e0-cfd1-4da9-8ae1-9e2d86701048","tagTypeId":"custom_js","name":"Page time counter for specific RG pages","description":"HC-11165","config":{"code":"// HC-11165\n(function() {\n    if (!Playtech.API.user.isLoggedIn()) {\n        return;\n    }\n\n    var FIFTEEN_SECONDS = 15000;\n    var ONE_MINUTE = 60000;\n    var clearUrl = Playtech.API.common.getCleanUrl();\n    var notificationSession = Date.now();\n\n    setPlayerTag(clearUrl, notificationSession, 0);\n\n    var timeout = setTimeout(() => {\n        setPlayerTag(clearUrl, notificationSession, 1);\n    }, FIFTEEN_SECONDS);\n\n    let i = 2;\n    var interval = setInterval(() => {\n        if (i === 11) {\n            clearInterval(interval);\n        }\n\n        setPlayerTag(clearUrl, notificationSession, i++);\n\n    }, ONE_MINUTE);\n\n    function setPlayerTag(pageName, sessionId, increment) {\n        var currentPage = Playtech.API.common.getCleanUrl();\n        if (currentPage !== pageName) {\n            clearInterval(interval);\n            clearTimeout(timeout);\n            return;\n        }\n\n        var tagValue = { pageName, notificationSession: sessionId, timestampCount: increment };\n\n        Playtech.API.user.setPlayerTags([\n            {\n                name: 'Portal/SafeBet/ResponsibleGamingPage',\n                value: JSON.stringify(tagValue),\n                type: 'text'\n            }\n        ]);\n    }\n})();"},"conditionIds":["10c6a1bf-bd4b-4c65-9256-45b166858b9d"]},{"tagId":"2f9347a2-7cc0-4494-b31b-a07c5ea3b13b","tagTypeId":"custom_tag_type","name":"Sportsbook Styles","description":"HC-11970 Sportsbook max page width","config":{"beforeEndHead":"<style>\n  /* HC-11970 */\n  :root {\n    --layout-max-width: 1440px;\n  }\n</style>","beforeEndBody":""},"conditionIds":["1a66cab4-39b1-4092-a5cb-81887c12ee83","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"a5557c0e-b2f1-466e-b8e3-d171b0254ac3","tagTypeId":"custom_js","name":"<3> Push User Data to DataLayer","description":"HC-11951,HC-11898 ( push userId, email and ageGroup to dataLayer)","config":{"code":" (function () {\r\n    const loginEvent = \"login\";\r\n    const registrationCompletedEvent = \"Registration:online:first_login\";\r\n\r\n    async function sha256Hash(email) {\r\n      const encoder = new TextEncoder();\r\n      const emailBuffer = encoder.encode(email);\r\n      const hashBuffer = await crypto.subtle.digest(\"SHA-256\", emailBuffer);\r\n      const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n      const hashHex = hashArray\r\n        .map((byte) => byte.toString(16).padStart(2, \"0\"))\r\n        .join(\"\");\r\n      return hashHex;\r\n    }\r\n\r\n    function calculateUserAge(date) {\r\n      if (!date) return 0;\r\n\r\n      return Math.abs(\r\n        new Date(new Date() - new Date(date)).getFullYear() - 1970\r\n      );\r\n    }\r\n\r\n    function getAgeGroup(age) {\r\n      const ageGroups = [\r\n        { min: 18, max: 23, group: 1 },\r\n        { min: 24, max: 29, group: 2 },\r\n        { min: 30, max: 34, group: 3 },\r\n        { min: 35, max: 39, group: 4 },\r\n        { min: 40, max: 44, group: 5 },\r\n        { min: 45, max: 49, group: 6 },\r\n        { min: 50, max: 54, group: 7 },\r\n        { min: 55, max: 60, group: 8 },\r\n        { min: 61, max: Infinity, group: 9 },\r\n      ];\r\n\r\n      for (const ageGroup of ageGroups) {\r\n        if (age >= ageGroup.min && age <= ageGroup.max) {\r\n          return ageGroup.group;\r\n        }\r\n      }\r\n\r\n      return \"\";\r\n    }\r\n\r\n    const setUserData = (event) => {\r\n      let userDetails = {};\r\n      const user = {};\r\n\r\n      if (event === registrationCompletedEvent) {\r\n        userDetails = JSON.parse(sessionStorage.getItem(\"userModel\"));\r\n      }\r\n\r\n      const { userId, email, birthDate } =\r\n        event === loginEvent\r\n          ? Playtech.fetchUserDetails()\r\n          : {\r\n              ...userDetails,\r\n              ...userDetails?.formData,\r\n              birthDate: userDetails?.formData?.birthdate,\r\n            };\r\n\r\n      const userAge = calculateUserAge(birthDate);\r\n      const ageGroup = getAgeGroup(userAge);\r\n\r\n      user.userId = userId;\r\n      if (ageGroup) {\r\n        user.ageGroup = ageGroup;\r\n      }\r\n\r\n      sha256Hash(email)\r\n        .then((hash) => {\r\n          user.hash = hash;\r\n        })\r\n        .catch((err) => {\r\n          console.error(\"HC-11898 Error hashing email:\", err);\r\n        })\r\n        .finally((err) => {\r\n          window.dataLayer = window.dataLayer || [];\r\n\r\n          const dataLayerObject = {\r\n            event: event,\r\n            user: user,\r\n          };\r\n\r\n          if (event === registrationCompletedEvent) {\r\n            dataLayerObject.new_customer = true;\r\n          }\r\n          window.dataLayer.push(dataLayerObject);\r\n        });\r\n    };\r\n\r\n    if (Playtech.API.auth.isLoggedIn) {\r\n      setUserData(loginEvent);\r\n    }\r\n\r\n    Playtech.on(Playtech.Events.LOGGED_IN, () => {\r\n      setUserData(loginEvent);\r\n    });\r\n\r\n    Playtech.on(Playtech.Events.REGISTRATION_COMPLETED, () => {\r\n      setUserData(registrationCompletedEvent);\r\n    });\r\n  })();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"32950625-cb76-43b7-b3e7-4c5e24f0ea64","tagTypeId":"custom_js","name":"Game launch","description":"game launch","config":{"code":"(function () {\n    if (\n        Playtech.API.common.getCleanUrl() !== '/gamelaunch' ||\n        Playtech.Variables.isAdminLoggedIn\n    ) {\n        return;\n    }\n\n    var searchParams = new URLSearchParams(window.location.search);\n    var gameCodeValue = searchParams.get('gameCode');\n\n    function waitForGamesConfiguration() {\n        var delay = 1000;\n        var timeout = -1;\n        var times = 0;\n        var callback = function (res, rej) {\n            if (Playtech.Variables.games) {\n                res({ times });\n                return;\n            }\n\n            if (times >= 30) {\n                rej({ times });\n                return;\n            }\n\n            times += 1;\n\n            timeout = setTimeout(function () {\n                callback(res, rej);\n            }, delay);\n        };\n\n        return new Promise(function (resolve, reject) {\n            timeout = setTimeout(function () {\n                callback(resolve, reject);\n            }, delay);\n        });\n    }\n\n    function launchGame(code) {\n        if (Playtech.API.auth.isLoggedIn) {\n            Playtech.API.popup.showPopup({\n                content:\n                    'playtech.mobile.system.games.popup-blocker-with-confirm',\n                buttons: [\n                    {\n                        text: 'playtech.mobile.system.button.realPlay',\n\n                        onClick() {\n                            Playtech.API.game.open({ code: code });\n                        }\n                    }\n                ],\n                layer: 'HIGH_PRIORITY'\n                // closeAll: true\n            });\n        } else {\n            Playtech.API.game.open({ code: code });\n        }\n    }\n\n    if (gameCodeValue) {\n        waitForGamesConfiguration().then(function () {\n            Playtech?.API.common.navigate(\n                '/',\n                { replace: true },\n                { removeParams: ['gameCode'] }\n            );\n\n            launchGame(gameCodeValue);\n        });\n    } else {\n        Playtech.API.common.navigate('/error-page');\n    }\n})();\n"},"conditionIds":["f47bb07f-0e1a-4901-b766-673d8728d2dd","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"590a37aa-25d0-42ac-93ec-1f21f5804a7b","tagTypeId":"custom_tag_type","name":"[Regulation] - BlockAccessOnNativeApps","description":"HC-11575 - Block access on Native Apps","config":{"beforeEndHead":"<style>\n  #blockAccessOnNativeAppsPopup .hideBtn {\n    display: none;\n  }\n</style>\n<script>\n  (function () {\n    const WEB_CONTENT = \"BLOCK_ACCESS_ON_NATIVE_APPS\";\n    const POPUP_ID = \"blockAccessOnNativeAppsPopup\";\n    const REQUIRE_CONFIRMATION_PLAYER_TAG_NAME =\n      \"portal/regulation/requireConfirmation\";\n\n    function log() {\n      if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\n        console.log.apply(\n          console,\n          [\"[Block Access On Native Apps] \"].concat(Array.from(arguments))\n        );\n      }\n    }\n\n    function shouldShowBlockingPopup(tags) {\n      try {\n        return Boolean(\n          tags[0]?.name === REQUIRE_CONFIRMATION_PLAYER_TAG_NAME &&\n            tags[0]?.value === \"true\"\n        );\n      } catch (err) {\n        throw { error: err, code: 1 };\n      }\n    }\n\n    function showBlockingPopup(tags) {\n      try {\n        if (shouldShowBlockingPopup(tags)) {\n          log(\"show Popup\");\n          Playtech.API.popup.showPopup({\n            articleId: WEB_CONTENT,\n            layer: \"VERY_HIGH_PRIORITY\",\n            classNames: { actionButtons: \"hideBtn\" },\n            isModal: true,\n            id: POPUP_ID,\n          });\n        }\n      } catch (err) {\n        log(\"error\", err);\n      }\n    }\n\n    function getPlayerTags() {\n      return Playtech.API.user\n        .getPlayerTags(REQUIRE_CONFIRMATION_PLAYER_TAG_NAME)\n        .then(function (response) {\n          return response?.data?.tags || [];\n        });\n    }\n\n    Playtech.on(Playtech.Events.LOGGED_IN, function () {\n      getPlayerTags().then(showBlockingPopup);\n    });\n\n    if (Playtech.API.auth.isLoggedIn) {\n      getPlayerTags().then(showBlockingPopup);\n    }\n  })();\n</script>","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"44fb0671-95f8-4991-b22c-8a14227c68c6","tagTypeId":"custom_js","name":"Hide games for sportsbook native app","description":"Hide games for sportsbook native app","config":{"code":"(function() {\n  var params = new URLSearchParams(location.search);\n  if (params.has('additionalContext') && params.has('isNative')) {\n    var games = document.querySelectorAll('[data-portlet-type=\"responsivegames\"]');\n    if (games.length > 0) {\n      Array.from(games).forEach(function(el) {\n        el.classList.add('hidden');\n      })\n    }\n  }\n\n})();"},"conditionIds":["1a66cab4-39b1-4092-a5cb-81887c12ee83","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"7da1d382-a9c6-4904-a45b-82981b7797a0","tagTypeId":"custom_tag_type","name":"Native disable reg","description":"HC-10828 - Show a popup hiding registration for native users","config":{"beforeEndHead":"<style>\n    #disableRegPopup button {\n        display: none !important;\n    }\n</style>\n<script>\n    (function () {\n\n        var playerTags = [];\n\n        function isRegInProgress() {\n            try {\n                return playerTags.some(function (tag) {\n                    return tag.name === 'portal/registration/InProgress' && tag.value === 'true';\n                });\n            } catch (err) {\n                throw {error: err, code: 1};\n            }\n        }\n\n        function main() {\n            try {\n                if (isRegInProgress()) {\n                    Playtech.API.popup.showPopup({\n                        articleId: 'NATIVE_REG_DISABLED',\n                        layer: 'VERY_HIGH_PRIORITY',\n                        isModal: true,\n                        id: 'disableRegPopup'\n                    });\n                }\n            } catch (err) {\n                console.log('disable reg error >>>', err);\n            }\n        }\n\n        function getPlayerTags() {\n            return Playtech.API.user.getPlayerTags().then(function (response) {\n                playerTags = response.data.tags;\n            });\n        }\n\n        Playtech.on(Playtech.Events.LOGGED_IN, function () {\n            getPlayerTags().then(main);\n        });\n\n        Playtech.on(Playtech.Events.LOGGED_OUT, function () {\n            playerTags = [];\n        });\n\n        if (Playtech.API.auth.isLoggedIn) {\n            getPlayerTags().then(main);\n        }\n\n    })();\n</script>\n","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"8d3e1d2d-058d-4aba-8717-75317d98ac9a","tagTypeId":"hc_ticket_counter","name":"TicketCounterTest","description":"Ticket Counter Test","config":{"playerTagName":"Player Journey/Raffleticketcount","webContentId":"TICKETCOUNTERTEST_BRIAN","vipLevelEqual":"3-20","vipLevelNotEqual":"1, 24"},"conditionIds":["01e72e94-c3b4-4182-ba14-bf084569e3b4","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"11d2bc52-84c6-443e-926f-6a71b3c13c4c","tagTypeId":"custom_js","name":"Add VIP Level as class","description":"Add VIP Level as class","config":{"code":"(() => {\r\n   // html tag to attach CSS classes to\r\n   // needs to be #applicaion, because otherwise classes will get overwritten by Portal\r\n   const root = document.querySelector('#application');\r\n   const handler = () => {\r\n      if (!Playtech.API.auth.isLoggedIn) {\r\n         // if player is not logged in, do nothing\r\n         return;\r\n      }\r\n\r\n      const getPlayersLevel = Playtech.fetchUserDetails();\r\n      const vipLevel  = getPlayersLevel.vipLevel; //get vip status\r\n      // add viplevel1\r\n      root.classList.add(`viplevel${vipLevel}`);\r\n   };\r\n   // subscribe to login event\r\n   Playtech.on(Playtech.Events.LOGGED_IN, handler);\r\n   // subscribe to logout event\r\n   Playtech.on(Playtech.Events.LOGGED_OUT, () => {\r\n      Array.from(root.classList)\r\n         .filter((name) => name.startsWith('vipl'))\r\n         .forEach((name) => root.classList.remove(name));\r\n   });\r\n   // check on app init\r\n   handler();\r\n})();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"85cfa0d5-b430-444a-a8de-51002beb1948","tagTypeId":"custom_tag_type","name":"TN Native","description":"custom flow for Native (PageDocUpload step of reg flow)","config":{"beforeEndHead":"<style>\n    [class*=StepsCounter__stepCounter] + [class*=Iframe__] {\n        display: none;\n    }\n\n    .docUploadContainer {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n    }\n\n    .docUploadContainer > * {\n        margin: 1rem 0;\n    }\n\n    .docUploadButton.inactive {\n        pointer-events: none;\n    }\n\n    .docUploadError {\n        font-size: 80%;\n        text-align: center;\n        margin: 1rem 0;\n        color: var(--hc-red);\n    }\n</style>\n<script>\n    (function () {\n\n        var playerTags = [];\n        var docUploadUrl;\n        var tKeys = {\n            captureTooltip: 'playtech.mobile.system.step2.onboarding.docs.capture.tooltip.native',\n            startBtnText: 'playtech.mobile.system.step2.onboarding.docs.start.native',\n            startTooltip: 'playtech.mobile.system.step2.onboarding.docs.start.tooltip.native'\n        }\n\n        function translate(tKey) {\n            try {\n                return Playtech.API.translation.translate(tKey);\n            } catch (err) {\n                throw {error: err, code: 3};\n            }\n        }\n\n        function isDocUploadPresent() {\n            try {\n                return playerTags.some(function (tag) {\n                    return tag.name === 'portal/registration/PageDocUpload';\n                });\n            } catch (err) {\n                throw {error: err, code: 1};\n            }\n        }\n\n        function observeIframe() {\n            return new Promise(function (resolve, reject) {\n                try {\n                    var wrapper = document.querySelector('[class*=Iframe__iframeWrapper]');\n\n                    if (wrapper && wrapper.querySelector('iframe') && wrapper.querySelector('iframe').src) {\n                        resolve(wrapper.querySelector('iframe'));\n                        return;\n                    }\n\n                    var popupEl = document.querySelector('[class*=popup-modal__inner-content]')\n\n                    new MutationObserver(function (mutationList, observer) {\n                        try {\n                            for (var mutation of mutationList) {\n                                if (mutation.target.querySelector('iframe') && mutation.target.querySelector('iframe').src) {\n                                    resolve(mutation.target.querySelector('iframe'));\n                                    observer.disconnect();\n                                    break;\n                                }\n                            }\n                        } catch (err) {\n                            reject(err);\n                        }\n                    }).observe(popupEl, {childList: true, subtree: true, attributes: true});\n                } catch (err) {\n                    reject(err);\n                }\n            });\n        }\n\n        function getRedirectURL() {\n            return observeIframe()\n                .then(function (iframe) {\n                    var src = iframe.src;\n                    iframe.src = 'about:blank';\n\n                    return src;\n                }).catch(function (err) {\n                    return Promise.reject({error: err, code: 4})\n                })\n        }\n\n        function getPopupContentContainer() {\n            try {\n                return document.querySelector('[class*=StepsCounter__stepCounter]').parentNode;\n            } catch (err) {\n                throw {error: err, code: 5};\n            }\n        }\n\n        function createDocUploadContainer() {\n            var div = document.createElement('div');\n            div.classList.add('docUploadContainer')\n\n            return div;\n        }\n\n        function createDocUploadCaptureTooltip() {\n            var div = document.createElement('div');\n            div.innerHTML = translate(tKeys.captureTooltip);\n\n            return div;\n        }\n\n        function createDocUploadBtn() {\n            var btn = document.createElement('button');\n            btn.type = 'button';\n            btn.classList.add('btn');\n            btn.innerHTML = translate(tKeys.startBtnText);\n            btn.disabled = true;\n\n            var disable = function (isDisabled) {\n                if (isDisabled) {\n                    btn.setAttribute('disabled', 'disabled');\n                } else {\n                    btn.removeAttribute('disabled');\n                }\n            };\n\n            btn.addEventListener('click', function () {\n                Playtech.API.htcmd.sendMessage('openCustomTab', {\n                    path: docUploadUrl\n                })\n            });\n\n            return [btn, disable];\n        }\n\n        function createError(err) {\n            var div = document.createElement('div');\n            var error = err.error || err;\n            var prefix = 'Error ' + (err.code || -1) + ': ';\n\n            div.classList.add('docUploadError');\n            div.innerHTML = prefix +\n                (error.response && (error.response.data.errorMessage || err.reason) || error.message);\n\n            return div;\n        }\n\n        function createDocUploadLinkTooltip() {\n            var text = document.createElement('p');\n            text.innerHTML = translate(tKeys.startTooltip);\n\n            return text;\n        }\n\n        function main() {\n            try {\n                if (isDocUploadPresent()) {\n                    var docUploadContainer = createDocUploadContainer();\n                    var capture = createDocUploadCaptureTooltip();\n                    var [uploadBtn, disable] = createDocUploadBtn();\n                    var uploadLinkTooltip = createDocUploadLinkTooltip();\n\n                    docUploadContainer.append(capture);\n                    docUploadContainer.append(uploadBtn);\n                    docUploadContainer.append(uploadLinkTooltip);\n                    getPopupContentContainer().append(docUploadContainer);\n\n                    getRedirectURL().then(function (url) {\n                        docUploadUrl = url;\n                        disable(false);\n                    }).catch(function (err) {\n                        docUploadContainer.append(createError(err));\n                    });\n                }\n            } catch (err) {\n                getPopupContentContainer().append(createError(err));\n            }\n        }\n\n        function getPlayerTags() {\n            return Playtech.API.user.getPlayerTags().then(function (response) {\n                playerTags = response.data.tags;\n            });\n        }\n\n        Playtech.on(Playtech.Events.LOGGED_IN, function () {\n            getPlayerTags().then(main);\n        });\n\n        Playtech.on(Playtech.Events.LOGGED_OUT, function () {\n            playerTags = [];\n        });\n\n        if (Playtech.API.auth.isLoggedIn) {\n            getPlayerTags().then(main);\n        }\n\n    })();\n</script>\n","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"eee46cd0-5594-4ac6-a4bd-72feb3ea09d6","tagTypeId":"custom_tag_type","name":"HideBtnInIDINOption","description":"Hide the \"Verify my account with IDIN\" button in IDINOption registration","config":{"beforeEndHead":"<style>\r\n  button[class*=IDINOption__btn] {\r\n    display: none !important;\r\n  }\r\n  a[class*=IDINOption__btn] [class*=PlainText__text] {\r\n    font-size: 1.2rem;\r\n  }\r\n</style>","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","ffa107aa-bb77-47e8-86d3-caad97cbbf82"]},{"tagId":"372aa339-83a2-4102-aa11-e4f4e9de8759","tagTypeId":"custom_tag_type","name":"AVENT_CALENDAR_STYLES_DEC23","description":"Advent calendar styles","config":{"beforeEndHead":"<style>\r\n  .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n    max-width: 63.875rem;\r\n    margin: 0 auto;\r\n    background-size: contain;\r\n    width: 100%;\r\n    background-repeat: no-repeat;\r\n    aspect-ratio: 2.2 / 1;\r\n  }\r\n\r\n  .bannerAdventCalendar [class*=\"col-mob-4 col-dsk-10 AdventCalendar__adventCalendar\"] {\r\n    width: 100% !important;\r\n    min-width: auto !important;\r\n    padding: 0;\r\n    display: grid;\r\n    grid-template: repeat(5, 1fr) / repeat(7, 1fr);\r\n    grid-gap: 0.5rem;\r\n    margin: 5% 9.5%;\r\n  }\r\n\r\n  [class*=\"AdventItem__adventItemWrapper\"] {\r\n    width: 100% !important;\r\n    display: block;\r\n  }\r\n\r\n  [class*=\"AdventItem__adventItemWrapper\"] [class*=\"Overlay__overlay\"] {\r\n    height: 200vh;\r\n    top: -50vh;\r\n  }\r\n\r\n  [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__adventItem\"] {\r\n    margin: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    text-shadow: none;\r\n    box-shadow: none;\r\n    border: 0 !important;\r\n    transform: none !important;\r\n    font-size: 3rem;\r\n    font-weight: 800;\r\n    line-height: 0.2rem;\r\n    background-color: #18042c !important;\r\n    color: #524361;\r\n  }\r\n\r\n  [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__future\"] {\r\n    background-color: var(--hc-white) !important;\r\n    color: #fb258d;\r\n  }\r\n\r\n  [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__active\"] {\r\n    background-color: #fb258d !important;\r\n    color: var(--hc-white);\r\n    background-image: none;\r\n  }\r\n\r\n  .mobile-layout .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n    width: 74vw;\r\n  }\r\n\r\n  .mobile-layout\r\n    [class*=\"col-mob-4 col-dsk-10 AdventCalendar__adventCalendar\"] {\r\n    grid-gap: 0.188rem;\r\n    margin: 0;\r\n  }\r\n\r\n  .mobile-layout\r\n    [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__adventItem\"] {\r\n    font-size: 1.7rem;\r\n    line-height: 0.2rem;\r\n  }\r\n\r\n  @media (min-width: 1183px) {\r\n    .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n      height: 51vh;\r\n      background-position: center;\r\n      max-height: 462px;\r\n      width: auto;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 1182px) and (min-width: 1000px) {\r\n    .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n      max-width: 100%;\r\n    }\r\n\r\n    .bannerAdventCalendar [class*=\"col-mob-4 col-dsk-10 AdventCalendar__adventCalendar\"] {\r\n      margin: 8% 16%;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 500px) {\r\n    .mobile-layout\r\n      [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__adventItem\"] {\r\n      font-size: 1.2rem;\r\n    }\r\n  }\r\n\r\n  @media screen and (orientation: landscape) {\r\n    .mobile-layout .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n      max-width: 65vh;\r\n    }\r\n  }\r\n\r\n  /* hero banner */\r\n  .bannerAdventCalendar [class*=\"withHollandLayouts__wrapper\"] {\r\n    --content-height: 60vh;\r\n  }\r\n  .bannerAdventCalendar [class*=\"Banner__sliderContainer\"],\r\n  .bannerAdventCalendar [class*=\"Banner__slider\"] {\r\n    flex: 1 0 100%;\r\n  }\r\n\r\n  .bannerAdventCalendar [class*=\"Slide__wc\"][class*=\"withHollandLayouts__wc\"] {\r\n    top: 50%;\r\n    transform: translateY(-50%);\r\n    height: auto;\r\n    display: block;\r\n  }\r\n\r\n  /* popup */\r\n  .application-root [class*=\"AdventItemPopup__popup\"] {\r\n    overflow: hidden;\r\n  }\r\n\r\n  [class*=\"AdventItemPopup__popup\"] .popup-modal__inner-content {\r\n    overflow-y: auto;\r\n    height: 100%;\r\n    padding: 0 1rem;\r\n    white-space: initial;\r\n  }\r\n\r\n  .mobile-layout .bannerAdventCalendar [class*=\"Popup__close\"] {\r\n    top: 1.5rem !important;\r\n    right: 1rem !important;\r\n  }\r\n\r\n  @media (max-width: 1000px) {\r\n    .bannerAdventCalendar [class*=\"Popup__container\"] {\r\n      top: -20vh;\r\n    }\r\n\r\n    .mobile.landscape\r\n      .application-root\r\n      .bannerAdventCalendar\r\n      [class*=\"AdventItemPopup__popup\"] {\r\n      height: calc(71vh - 2rem);\r\n    }\r\n\r\n    [class*=\"AdventItemPopup__popup\"] .popup-modal__inner-content {\r\n      padding: 0 1rem 3rem;\r\n    }\r\n  }\r\n</style>\r\n","beforeEndBody":""},"conditionIds":["2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"217da009-6c1b-467b-9ed0-2b3c716a4eaa","tagTypeId":"custom_tag_type","name":"Promotions Main Page - Remove Shadow Gradient on image","description":"Promotions Main Page - Remove Shadow Gradient on image","config":{"beforeEndHead":"<style>\n  [class*=Promo__mediaWrapper--]:after {\n      content: none !important;\n  }\n</style>\n<style>\n  [class*=Promo__mediaWrapper--]:before {\n      content: none !important;\n  }\n</style>","beforeEndBody":""},"conditionIds":["4c81598f-2592-452e-b680-3c1eed17cba1","345f5466-1ecb-41f0-a758-0aa6b96e7697","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"3579f170-18b0-4c6b-8c79-73371d5d1041","tagTypeId":"custom_js","name":"Refresh page by player tag","description":"Refresh page by player tag","config":{"code":"(function () {\n    function removePlayerTags(tags) {\n        Playtech.API.server.send({\n            ID: 35553,\n            tags: [...tags],\n            responses: [35554, 35555],\n            description: 'Remove Player Tags Request'\n        })\n    }\n\n    function playerTagChangeListener(e) {\n        const { tag, removed } = e.detail;\n\n        if (tag === 'CRM/refresh' && !removed) {\n            removePlayerTags([{name: tag}])\n            window.location.reload();\n        }\n    }\n\n    function subscribeOnTagChange() {\n        Playtech.API.events.addEventListener(\n            'player-tag-change',\n            playerTagChangeListener\n        );\n    }\n\n    function unsubscribeOnTagChange() {\n        Playtech.API.events.removeEventListener(\n            'player-tag-change',\n            playerTagChangeListener\n        );\n    }\n\n    Playtech.on(Playtech.Events.LOGGED_IN, subscribeOnTagChange);\n\n    Playtech.on(Playtech.Events.LOGGED_OUT, unsubscribeOnTagChange);\n\n    if (Playtech.API.auth.isLoggedIn) {\n        subscribeOnTagChange();\n    }\n})();\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"5df800d8-4757-4c99-8f7e-4fc034847b88","tagTypeId":"vip_icons","name":"VIP Icons","description":"Configuration of avatar images by vip levels","config":{"vipIconsConfig":[{"vipLevel":"30","icon":"/library/VIP/icons/vip-premium-icon.png"},{"vipLevel":"29","icon":"/library/VIP/icons/vip-premium-icon.png"},{"vipLevel":"28","icon":"/library/VIP/icons/vip-platinum-icon.png"},{"vipLevel":"27","icon":"/library/VIP/icons/vip-gold-icon.png"},{"vipLevel":"26","icon":"/library/VIP/icons/vip-silver-icon.png"},{"vipLevel":"20","icon":"/library/VIP/icons/vip-platinum-icon.png"},{"vipLevel":"19","icon":"/library/VIP/icons/vip-premium-icon.png"},{"vipLevel":"18","icon":"/library/VIP/icons/vip-platinum-icon.png"},{"vipLevel":"17","icon":"/library/VIP/icons/vip-gold-icon.png"},{"vipLevel":"16","icon":"/library/VIP/icons/vip-silver-icon.png"}]},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"63f9918d-fde8-43ba-9680-f9505189168b","tagTypeId":"custom_js","name":"Hide unlimited for login limits","description":"Hide unlimited for login limits","config":{"code":"(function() {\n  const btnTexts = [\n      'Set Unlimited Period',\n      'Onbeperkt'\n  ];\n  \n  const config = {\n      childList: true,\n      subtree: true\n  };\n  \n  if ('MutationObserver' in window) {\n      const observer = new MutationObserver(() => {\n          const unlimitedBtn = document.querySelector('[class*=DateSpanPicker__unlimitedBtn]');\n  \n          if (unlimitedBtn && btnTexts.includes(unlimitedBtn.innerText)) {\n              unlimitedBtn.style.display = 'none';\n          }\n      });\n  \n      observer.observe(document.body, config);\n  }\n})();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"9efcb0e5-d71d-4c22-945b-92bb6260a95d","tagTypeId":"custom_js","name":" EzPush","description":" EzPush integration","config":{"code":"(function() {\n    var startEzPush = function() {\n        if (window.EzPush) {\n            return;\n        }\n\n        Playtech.API.common.getScript('https://ezpush.techonlinecorp.com/SDK/v2/ezpush-client.js').then(function() {\n            EzPush.init({\n                applicationId: '610154bd5853fced6dad05e2', // ID of application from ezpush admin\n                subscribeOnInit: true, // true by default\n                language: 'en', // taken from from window.navigator.language by default\n                logEnabled: true, // false by default\n                serviceWorkerUrl: '/library/EzPush/ezpush-sw.js'// optional, 'ezpush-sw.js' by default, Service-Worker-Allowed HTTP\n                // header required\n            }).then(function() {\n                console.log('[EzPush] You are subscribed to push notifications.');\n\n                if (window.EzPush && window.EzPush.pushToken) {\n                    var pushId = window.EzPush.pushToken;\n                    var deviceType = Playtech.API.device.browserName;\n                    var correlationId = String(Math.random()).slice(2);\n\n                    Playtech.API.server.send({\n                        ID: 35613,\n                        application: 'hollandcasino',\n                        deviceId: EzPush.hwid,\n                        pushId: pushId,\n                        deviceType: deviceType,\n                        correlationId: correlationId\n                    });\n                }\n\n            }).catch(function(error) {\n                console.log('[EzPush] Failed to subscribe to push notifications: ', error);\n            });\n        });\n    };\n\n    Playtech.on(Playtech.Events.LOGGED_IN, startEzPush);\n\n    if (Playtech.API.user.isLoggedIn()) {\n        startEzPush();\n    }\n})();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"974b3a3f-5b73-4edc-b702-ab6ddaa1df0a","tagTypeId":"custom_js","name":"PJ Initial Offer Tag Setter","description":"Impl for tag setter","config":{"code":"document.body.addEventListener('click', (event) => {\n    if (event.target.id === 'sports-offer') {\n        Playtech.API.user.setPlayerTags([{ name: 'sports-tag' }]);\n    } else if (event.target.id === 'casino-offer') {\n        Playtech.API.user.setPlayerTags([{ name: 'casino-tag' }]);\n    }\n});"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"8a61e0fa-a242-47af-b0f5-ab2a9ac236ea","tagTypeId":"custom_js","name":"reg_birthday_105","description":"reg_birthday_105","config":{"code":"(function() {\n    try {\n        var yearEl = document.querySelector('#year_birthdate');\n        var lastOption = Array.from(yearEl.children)[yearEl.length - 1];\n        var lastOptionValue = lastOption.value;\n        var fragment = document.createDocumentFragment();\n\n        for (var i = 1; i <= 5; i++) {\n            var option = document.createElement('option');\n            option.value = lastOptionValue - i;\n            option.innerHTML = option.value;\n            fragment.appendChild(option);\n        }\n\n        yearEl.appendChild(fragment);\n\n    } catch(e) {\n        console.error(e);\n    }\n}())"},"conditionIds":["10c6a1bf-bd4b-4c65-9256-45b166858b9d","07120f96-4ad3-430d-a64c-231bd2dda580"]}],"conditions":[{"conditionId":"20d65c93-a18d-40f0-bb20-6c2053c29822","conditionTypeId":"page_condition","name":"Leaderboard-page","description":"Leaderboard-pages","config":{"onPageLaunch":"/leaderboard-page","onPageNotLaunch":""}},{"conditionId":"b8cd6255-5275-430e-b4b3-34917ce3e157","conditionTypeId":"page_condition","name":"Premium pages","description":"list of premium pages","config":{"onPageLaunch":"/test-premium-components, /test-premium-components2, /test-premium-components/test-home, /premium-lounge, /premium-lounge/home, /premium-lounge/promoties, /premium-lounge/events, /test-premium-components-code","onPageNotLaunch":""}},{"conditionId":"60352a4d-5190-4f6f-8ddd-22780680eed3","conditionTypeId":"page_condition","name":"/live-casino","description":"live-casino","config":{"onPageLaunch":"/live-casino","onPageNotLaunch":""}},{"conditionId":"5dfa5ec7-2f60-4ec3-a4b2-2a26294bd859","conditionTypeId":"page_condition","name":"afmelden-advertenties/formulier","description":"afmelden-advertenties/formulier","config":{"onPageLaunch":"/afmelden-advertenties/formulier","onPageNotLaunch":""}},{"conditionId":"3a3b7ebd-924c-4201-9b64-c60367a4f411","conditionTypeId":"page_condition","name":"on poker page","description":"on poker page","config":{"onPageLaunch":"/poker","onPageNotLaunch":""}},{"conditionId":"9f733509-bbb6-4048-8901-85533034314c","conditionTypeId":"page_condition","name":"structured-data-test","description":"structured-data-test","config":{"onPageLaunch":"/structured-data-test","onPageNotLaunch":""}},{"conditionId":"2e8f68c0-2d83-4009-bf0e-9507529535dc","conditionTypeId":"native_app_condition","name":"excludeFromNative","description":"will not run in native apps","config":{"nativeAppRule":"0"}},{"conditionId":"01e72e94-c3b4-4182-ba14-bf084569e3b4","conditionTypeId":"page_condition","name":"WhiteBlackListTCount","description":"WhiteBlackListTCount","config":{"onPageLaunch":"","onPageNotLaunch":"/sportsbook"}},{"conditionId":"4c81598f-2592-452e-b680-3c1eed17cba1","conditionTypeId":"page_condition","name":"General pages","description":"Main URLs for use with custom CSS changes","config":{"onPageLaunch":"/home , /casino , /live-casino , /promoties ,/bingo , /sportsbook , /poker , /online/casino/premium , /online/casino/exclusief , /online/casino/tablegames , /online/casino/slotmachines , /online/casino/jackpots , /en/online/casino/all-games-casino , /online/veilig-en-verantwoord-spelen , /promoties/poker-welcome-2022 , /promoties/poker-welcome-offer , /live/exclusive , /live/tafelspelen , /live/roulette , /live/gameshows ,  /live/highroller , /live/ander, /promoties/casino/niet-normaal-novemberprijs, /promoties/poker-mcop-2022, /promoties/sports/HCSPBGSRV-nov22, /promoties/sports/HCSPBGSR-nov22, /promoties/sports/HCSPXmasSpecial-dec22, /TEst-Xenia-Engagement_NORMAL, /promoties/poker-irish-open, /promoties/sports/football-combo-boost, /promoties/sports/tennis-combo-boost, /promoties/sports/basketball-combi-boost, /promoties/sports/darts-combo-boost, /promoties/sports/bet-watch, /promoties/sports/cash-out, /promoties/sports/Chineesnieuwjaar, /promoties/sports/ChineesnieuwjaarV, /promoties/wpt-prime-qualifiers, /promoties/poker-leaderboard, /promoties/sports/FEBRUARIFREEBET, /promoties/sports/FebruariCombi, /promoties/sports/FebruariCombiV, /leaderboards, /inloggen, /registreren, /promoties/vip, /promoties/, /promoties/casino, /promoties/sportsbook, /promoties/poker, /promoties/bingo","onPageNotLaunch":""}},{"conditionId":"345f5466-1ecb-41f0-a758-0aa6b96e7697","conditionTypeId":"page_condition","name":"Main promo page only","description":"Main promo page only","config":{"onPageLaunch":"/promoties,/Promogrid-test-final,/promoties/casino,/promoties/sportsbook,/promoties/poker,/promoties/bingo,/promoties/vip,/prev.hollandcasino.nl/en/promoties, /prev.hollandcasino.nl/promoties","onPageNotLaunch":""}},{"conditionId":"109b8f48-da23-4e5d-8f62-b1371cf41a08","conditionTypeId":"native_app_condition","name":"inNative","description":"the tag will run only if url has param ?isNative=1","config":{"nativeAppRule":"1"}},{"conditionId":"eff80154-dd28-44c2-8dcd-9d0bc83ef6b3","conditionTypeId":"page_condition","name":"/cookie-settings","description":"/cookie-settings","config":{"onPageLaunch":"/cookie-settings","onPageNotLaunch":""}},{"conditionId":"ffa107aa-bb77-47e8-86d3-caad97cbbf82","conditionTypeId":"basic_condition","name":"OnPreloader","description":"OnPreloader","config":{"launch":"onPreloader"}},{"conditionId":"8059f1cb-fd6e-4142-8071-26a5376abe4c","conditionTypeId":"page_condition","name":"PenaltyShootout page","description":"/promoties/sports/PenaltySpel","config":{"onPageLaunch":"/promoties/sports/PenaltySpel","onPageNotLaunch":""}},{"conditionId":"00496ce8-f9cc-44f7-95cc-11d9faef1d0c","conditionTypeId":"page_condition","name":"TN docs upload page","description":"TN docs upload page","config":{"onPageLaunch":"/mijnhc/account-verificatie","onPageNotLaunch":""}},{"conditionId":"f47bb07f-0e1a-4901-b766-673d8728d2dd","conditionTypeId":"page_condition","name":"/gamelaunch","description":"/gamelaunch","config":{"onPageLaunch":"/gamelaunch","onPageNotLaunch":""}},{"conditionId":"5a613a7e-8cb1-4ad7-b227-581f8b0a392d","conditionTypeId":"page_condition","name":"Test - Brian test","description":"test page ","config":{"onPageLaunch":"/briantest","onPageNotLaunch":""}},{"conditionId":"bc0b6529-9f7a-4f6b-8c4d-15194d057ee8","conditionTypeId":"basic_condition","name":"onAppInit","description":"Application initialisation","config":{"launch":"onAppInit"}},{"conditionId":"5d6c9f1d-245e-415b-a164-2a5752005ef1","conditionTypeId":"page_condition","name":"/ada","description":"/ada","config":{"onPageLaunch":"/ada","onPageNotLaunch":""}},{"conditionId":"a7c25c7b-c02c-4d63-bd9a-4cb9c6993006","conditionTypeId":"page_condition","name":"/bingo","description":"/bingo","config":{"onPageLaunch":"/bingo","onPageNotLaunch":""}},{"conditionId":"54ecef8c-410a-4aae-935a-ae7b66a2be91","conditionTypeId":"page_condition","name":"/home_page_trigger","description":"when user visits the /home page","config":{"onPageLaunch":"/home","onPageNotLaunch":""}},{"conditionId":"3b190ea9-16dc-4436-aa2e-4e2ba3cbb820","conditionTypeId":"page_condition","name":"/casino","description":"/casino","config":{"onPageLaunch":"/casino","onPageNotLaunch":""}},{"conditionId":"1a66cab4-39b1-4092-a5cb-81887c12ee83","conditionTypeId":"page_condition","name":"/sportsbook","description":"/sportsbook","config":{"onPageLaunch":"/sportsbook","onPageNotLaunch":""}},{"conditionId":"f74d4594-d23a-483d-8da4-916549a7fe7f","conditionTypeId":"page_condition","name":"/inloggen","description":"/inloggen","config":{"onPageLaunch":"/inloggen","onPageNotLaunch":""}},{"conditionId":"2069bef2-303b-40f0-82c4-5b0178ce78ea","conditionTypeId":"basic_condition","name":"Before page rendered","description":"Before page rendered","config":{"launch":"beforePageRendered"}},{"conditionId":"d37e588d-0329-4469-8cfa-4159ff363d48","conditionTypeId":"page_condition","name":"Game results","description":"Game results","config":{"onPageLaunch":"/mijnhc/game-resultaten-hidden","onPageNotLaunch":""}},{"conditionId":"07120f96-4ad3-430d-a64c-231bd2dda580","conditionTypeId":"page_condition","name":"/registreren","description":"/registreren","config":{"onPageLaunch":"/registreren","onPageNotLaunch":""}},{"conditionId":"10c6a1bf-bd4b-4c65-9256-45b166858b9d","conditionTypeId":"basic_condition","name":"afterPageRendered","description":"afterPageRendered","config":{"launch":"afterPageRendered"}}]}