{"version":3,"file":"wpm-public.p1.min.js","mappings":"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E,MAAOxhB,GACRP,QAAQD,MAAMQ,EACf,MAEA,GAAItR,IAAO8yB,EAAQ,OAAO,EAI5B,OAAO,CAAK,EAGPE,EAASF,IAEd,MAAM,QAAC5jB,GAAWiI,EAAQ,KAE1B,OAAOjI,EAAQ4jB,EAAO,EAGjBC,EAAe,KAmiCpB,IAAIE,EAAuB,GAO3B,OAJIvzB,MAAMC,QAAQmQ,aAAaoG,QAAQgd,cAAcC,iBACpDF,EAAsBnjB,aAAaoG,QAAQgd,cAAcC,eAriCxC,GAwiCDrvB,OAniCF,CACd,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,wBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,wBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,sBACA,wBACA,wBACA,mBACA,mBACA,kBACA,iBACA,mBACA,oBACA,oBACA,mBACA,kBACA,oBACA,kBACA,mBACA,mBACA,mBACA,iBACA,mBACA,iBACA,iBACA,iBACA,kBACA,kBACA,oBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,kBACA,kBACA,iBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,mBAGgB,CAChB,iBACA,kBACA,kBACA,iBACA,iBACA,iBACA,kBACA,kBACA,kBACA,kBACA,gBACA,kBACA,gBACA,gBACA,kBACA,kBACA,kBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,kBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,gBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,kBACA,iBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,kBACA,mBACA,kBACA,mBACA,mBACA,mBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,mBACA,mBACA,mBACA,kBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,kBACA,iBACA,mBACA,iBACA,sBACA,sBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,iBACA,iBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,iBACA,iBACA,mBACA,mBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,sBACA,sBACA,sBACA,mBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,mBACA,mBACA,sBACA,sBACA,sBACA,sBACA,oBACA,mBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,oBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,yBACA,kBAGe,CACf,kBACA,kBACA,mBAGY,CACZ,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,iBACA,kBACA,mBACA,kBACA,qBACA,kBACA,kBACA,mBACA,mBACA,kBACA,mBACA,iBACA,mBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBAGiB,CACjB,gBACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,mBAGc,CACd,eACA,iBACA,iBAGa,CACb,kBACA,kBAGc,CACd,iBACA,eAGa,CACb,iBACA,kBACA,mBACA,kBACA,kBACA,kBACA,gBACA,gBACA,gBACA,kBACA,mBACA,kBACA,kBACA,oBACA,oBACA,kBACA,mBACA,mBACA,mBACA,mBACA,iBACA,kBACA,mBACA,mBACA,mBAGkB,CAClB,gBACA,eACA,gBACA,cACA,eACA,gBACA,eACA,gBACA,gBACA,eACA,gBACA,iBAGa,CACb,iBACA,eACA,iBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,iBACA,gBACA,cACA,eACA,eACA,eACA,eACA,eACA,gBACA,eACA,gBACA,kBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,mBACA,kBAGc,CA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","sources":["webpack://Pixel-Manager-for-WooCommerce/../../src/index.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/ipRange.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/ipv4.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/ipv6.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/util.ts","webpack://Pixel-Manager-for-WooCommerce/../node_modules/ipaddr.js/lib/ipaddr.js","webpack://Pixel-Manager-for-WooCommerce/../node_modules/ip6/ip6.js","webpack://Pixel-Manager-for-WooCommerce/../src/range-check.ts","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/cookie_consent.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/event_listeners_on_ready.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions_loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions_main.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/ip_check.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/wc_hooks.js","webpack://Pixel-Manager-for-WooCommerce/webpack/bootstrap","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/define property getters","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/global","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/hasOwnProperty shorthand","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/make namespace object","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/main.js"],"sourcesContent":[null,null,null,null,null,"(function() {\n var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;\n\n ipaddr = {};\n\n root = this;\n\n if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\n module.exports = ipaddr;\n } else {\n root['ipaddr'] = ipaddr;\n }\n\n matchCIDR = function(first, second, partSize, cidrBits) {\n var part, shift;\n if (first.length !== second.length) {\n throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");\n }\n part = 0;\n while (cidrBits > 0) {\n shift = partSize - cidrBits;\n if (shift < 0) {\n shift = 0;\n }\n if (first[part] >> shift !== second[part] >> shift) {\n return false;\n }\n cidrBits -= partSize;\n part += 1;\n }\n return true;\n };\n\n ipaddr.subnetMatch = function(address, rangeList, defaultName) {\n var k, len, rangeName, rangeSubnets, subnet;\n if (defaultName == null) {\n defaultName = 'unicast';\n }\n for (rangeName in rangeList) {\n rangeSubnets = rangeList[rangeName];\n if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {\n rangeSubnets = [rangeSubnets];\n }\n for (k = 0, len = rangeSubnets.length; k < len; k++) {\n subnet = rangeSubnets[k];\n if (address.kind() === subnet[0].kind()) {\n if (address.match.apply(address, subnet)) {\n return rangeName;\n }\n }\n }\n }\n return defaultName;\n };\n\n ipaddr.IPv4 = (function() {\n function IPv4(octets) {\n var k, len, octet;\n if (octets.length !== 4) {\n throw new Error(\"ipaddr: ipv4 octet count should be 4\");\n }\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");\n }\n }\n this.octets = octets;\n }\n\n IPv4.prototype.kind = function() {\n return 'ipv4';\n };\n\n IPv4.prototype.toString = function() {\n return this.octets.join(\".\");\n };\n\n IPv4.prototype.toNormalizedString = function() {\n return this.toString();\n };\n\n IPv4.prototype.toByteArray = function() {\n return this.octets.slice(0);\n };\n\n IPv4.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv4') {\n throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");\n }\n return matchCIDR(this.octets, other.octets, 8, cidrRange);\n };\n\n IPv4.prototype.SpecialRanges = {\n unspecified: [[new IPv4([0, 0, 0, 0]), 8]],\n broadcast: [[new IPv4([255, 255, 255, 255]), 32]],\n multicast: [[new IPv4([224, 0, 0, 0]), 4]],\n linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],\n loopback: [[new IPv4([127, 0, 0, 0]), 8]],\n carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],\n \"private\": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],\n reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]\n };\n\n IPv4.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv4.prototype.toIPv4MappedAddress = function() {\n return ipaddr.IPv6.parse(\"::ffff:\" + (this.toString()));\n };\n\n IPv4.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, octet, stop, zeros, zerotable;\n zerotable = {\n 0: 8,\n 128: 7,\n 192: 6,\n 224: 5,\n 240: 4,\n 248: 3,\n 252: 2,\n 254: 1,\n 255: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 3; k >= 0; i = k += -1) {\n octet = this.octets[i];\n if (octet in zerotable) {\n zeros = zerotable[octet];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 8) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 32 - cidr;\n };\n\n return IPv4;\n\n })();\n\n ipv4Part = \"(0?\\\\d+|0x[a-f0-9]+)\";\n\n ipv4Regexes = {\n fourOctet: new RegExp(\"^\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"$\", 'i'),\n longValue: new RegExp(\"^\" + ipv4Part + \"$\", 'i')\n };\n\n ipaddr.IPv4.parser = function(string) {\n var match, parseIntAuto, part, shift, value;\n parseIntAuto = function(string) {\n if (string[0] === \"0\" && string[1] !== \"x\") {\n return parseInt(string, 8);\n } else {\n return parseInt(string);\n }\n };\n if (match = string.match(ipv4Regexes.fourOctet)) {\n return (function() {\n var k, len, ref, results;\n ref = match.slice(1, 6);\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseIntAuto(part));\n }\n return results;\n })();\n } else if (match = string.match(ipv4Regexes.longValue)) {\n value = parseIntAuto(match[1]);\n if (value > 0xffffffff || value < 0) {\n throw new Error(\"ipaddr: address outside defined range\");\n }\n return ((function() {\n var k, results;\n results = [];\n for (shift = k = 0; k <= 24; shift = k += 8) {\n results.push((value >> shift) & 0xff);\n }\n return results;\n })()).reverse();\n } else {\n return null;\n }\n };\n\n ipaddr.IPv6 = (function() {\n function IPv6(parts, zoneId) {\n var i, k, l, len, part, ref;\n if (parts.length === 16) {\n this.parts = [];\n for (i = k = 0; k <= 14; i = k += 2) {\n this.parts.push((parts[i] << 8) | parts[i + 1]);\n }\n } else if (parts.length === 8) {\n this.parts = parts;\n } else {\n throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");\n }\n ref = this.parts;\n for (l = 0, len = ref.length; l < len; l++) {\n part = ref[l];\n if (!((0 <= part && part <= 0xffff))) {\n throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");\n }\n }\n if (zoneId) {\n this.zoneId = zoneId;\n }\n }\n\n IPv6.prototype.kind = function() {\n return 'ipv6';\n };\n\n IPv6.prototype.toString = function() {\n return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');\n };\n\n IPv6.prototype.toRFC5952String = function() {\n var bestMatchIndex, bestMatchLength, match, regex, string;\n regex = /((^|:)(0(:|$)){2,})/g;\n string = this.toNormalizedString();\n bestMatchIndex = 0;\n bestMatchLength = -1;\n while ((match = regex.exec(string))) {\n if (match[0].length > bestMatchLength) {\n bestMatchIndex = match.index;\n bestMatchLength = match[0].length;\n }\n }\n if (bestMatchLength < 0) {\n return string;\n }\n return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);\n };\n\n IPv6.prototype.toByteArray = function() {\n var bytes, k, len, part, ref;\n bytes = [];\n ref = this.parts;\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n bytes.push(part >> 8);\n bytes.push(part & 0xff);\n }\n return bytes;\n };\n\n IPv6.prototype.toNormalizedString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.toFixedLengthString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16).padStart(4, '0'));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv6') {\n throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");\n }\n return matchCIDR(this.parts, other.parts, 16, cidrRange);\n };\n\n IPv6.prototype.SpecialRanges = {\n unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],\n linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],\n multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],\n loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],\n uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],\n ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],\n rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],\n rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],\n '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],\n teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],\n reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]\n };\n\n IPv6.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv6.prototype.isIPv4MappedAddress = function() {\n return this.range() === 'ipv4Mapped';\n };\n\n IPv6.prototype.toIPv4Address = function() {\n var high, low, ref;\n if (!this.isIPv4MappedAddress()) {\n throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");\n }\n ref = this.parts.slice(-2), high = ref[0], low = ref[1];\n return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);\n };\n\n IPv6.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, part, stop, zeros, zerotable;\n zerotable = {\n 0: 16,\n 32768: 15,\n 49152: 14,\n 57344: 13,\n 61440: 12,\n 63488: 11,\n 64512: 10,\n 65024: 9,\n 65280: 8,\n 65408: 7,\n 65472: 6,\n 65504: 5,\n 65520: 4,\n 65528: 3,\n 65532: 2,\n 65534: 1,\n 65535: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 7; k >= 0; i = k += -1) {\n part = this.parts[i];\n if (part in zerotable) {\n zeros = zerotable[part];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 16) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 128 - cidr;\n };\n\n return IPv6;\n\n })();\n\n ipv6Part = \"(?:[0-9a-f]+::?)+\";\n\n zoneIndex = \"%[0-9a-z]{1,}\";\n\n ipv6Regexes = {\n zoneIndex: new RegExp(zoneIndex, 'i'),\n \"native\": new RegExp(\"^(::)?(\" + ipv6Part + \")?([0-9a-f]+)?(::)?(\" + zoneIndex + \")?$\", 'i'),\n transitional: new RegExp((\"^((?:\" + ipv6Part + \")|(?:::)(?:\" + ipv6Part + \")?)\") + (ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part) + (\"(\" + zoneIndex + \")?$\"), 'i')\n };\n\n expandIPv6 = function(string, parts) {\n var colonCount, lastColon, part, replacement, replacementCount, zoneId;\n if (string.indexOf('::') !== string.lastIndexOf('::')) {\n return null;\n }\n zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];\n if (zoneId) {\n zoneId = zoneId.substring(1);\n string = string.replace(/%.+$/, '');\n }\n colonCount = 0;\n lastColon = -1;\n while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {\n colonCount++;\n }\n if (string.substr(0, 2) === '::') {\n colonCount--;\n }\n if (string.substr(-2, 2) === '::') {\n colonCount--;\n }\n if (colonCount > parts) {\n return null;\n }\n replacementCount = parts - colonCount;\n replacement = ':';\n while (replacementCount--) {\n replacement += '0:';\n }\n string = string.replace('::', replacement);\n if (string[0] === ':') {\n string = string.slice(1);\n }\n if (string[string.length - 1] === ':') {\n string = string.slice(0, -1);\n }\n parts = (function() {\n var k, len, ref, results;\n ref = string.split(\":\");\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseInt(part, 16));\n }\n return results;\n })();\n return {\n parts: parts,\n zoneId: zoneId\n };\n };\n\n ipaddr.IPv6.parser = function(string) {\n var addr, k, len, match, octet, octets, zoneId;\n if (ipv6Regexes['native'].test(string)) {\n return expandIPv6(string, 8);\n } else if (match = string.match(ipv6Regexes['transitional'])) {\n zoneId = match[6] || '';\n addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);\n if (addr.parts) {\n octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n return null;\n }\n }\n addr.parts.push(octets[0] << 8 | octets[1]);\n addr.parts.push(octets[2] << 8 | octets[3]);\n return {\n parts: addr.parts,\n zoneId: addr.zoneId\n };\n }\n }\n return null;\n };\n\n ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {\n return this.parser(string) !== null;\n };\n\n ipaddr.IPv4.isValid = function(string) {\n var e;\n try {\n new this(this.parser(string));\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.isValidFourPartDecimal = function(string) {\n if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/)) {\n return true;\n } else {\n return false;\n }\n };\n\n ipaddr.IPv6.isValid = function(string) {\n var addr, e;\n if (typeof string === \"string\" && string.indexOf(\":\") === -1) {\n return false;\n }\n try {\n addr = this.parser(string);\n new this(addr.parts, addr.zoneId);\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.parse = function(string) {\n var parts;\n parts = this.parser(string);\n if (parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(parts);\n };\n\n ipaddr.IPv6.parse = function(string) {\n var addr;\n addr = this.parser(string);\n if (addr.parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(addr.parts, addr.zoneId);\n };\n\n ipaddr.IPv4.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 32) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\");\n };\n\n ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {\n var filledOctetCount, j, octets;\n prefix = parseInt(prefix);\n if (prefix < 0 || prefix > 32) {\n throw new Error('ipaddr: invalid IPv4 prefix length');\n }\n octets = [0, 0, 0, 0];\n j = 0;\n filledOctetCount = Math.floor(prefix / 8);\n while (j < filledOctetCount) {\n octets[j] = 255;\n j++;\n }\n if (filledOctetCount < 4) {\n octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8);\n }\n return new this(octets);\n };\n\n ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv4.networkAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv6.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 128) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\");\n };\n\n ipaddr.isValid = function(string) {\n return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);\n };\n\n ipaddr.parse = function(string) {\n if (ipaddr.IPv6.isValid(string)) {\n return ipaddr.IPv6.parse(string);\n } else if (ipaddr.IPv4.isValid(string)) {\n return ipaddr.IPv4.parse(string);\n } else {\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\");\n }\n };\n\n ipaddr.parseCIDR = function(string) {\n var e;\n try {\n return ipaddr.IPv6.parseCIDR(string);\n } catch (error1) {\n e = error1;\n try {\n return ipaddr.IPv4.parseCIDR(string);\n } catch (error1) {\n e = error1;\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\");\n }\n }\n };\n\n ipaddr.fromByteArray = function(bytes) {\n var length;\n length = bytes.length;\n if (length === 4) {\n return new ipaddr.IPv4(bytes);\n } else if (length === 16) {\n return new ipaddr.IPv6(bytes);\n } else {\n throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\");\n }\n };\n\n ipaddr.process = function(string) {\n var addr;\n addr = this.parse(string);\n if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {\n return addr.toIPv4Address();\n } else {\n return addr;\n }\n };\n\n}).call(this);\n","/**\n * Created by elgs on 3/5/16.\n */\nconst normalize = function (a) {\n if (!_validate(a)) {\n throw new Error('Invalid address: ' + a);\n }\n a = a.toLowerCase()\n\n const nh = a.split(/\\:\\:/g);\n if (nh.length > 2) {\n throw new Error('Invalid address: ' + a);\n }\n\n let sections = [];\n if (nh.length == 1) {\n // full mode\n sections = a.split(/\\:/g);\n if (sections.length !== 8) {\n throw new Error('Invalid address: ' + a);\n }\n } else if (nh.length == 2) {\n // compact mode\n const n = nh[0];\n const h = nh[1];\n const ns = n.split(/\\:/g);\n const hs = h.split(/\\:/g);\n for (let i in ns) {\n sections[i] = ns[i];\n }\n for (let i = hs.length; i > 0; --i) {\n sections[7 - (hs.length - i)] = hs[i - 1];\n }\n }\n for (let i = 0; i < 8; ++i) {\n if (sections[i] === undefined) {\n sections[i] = '0000';\n }\n sections[i] = _leftPad(sections[i], '0', 4);\n }\n return sections.join(':');\n};\n\nconst abbreviate = function (a) {\n if (!_validate(a)) {\n throw new Error('Invalid address: ' + a);\n }\n a = normalize(a);\n a = a.replace(/0000/g, 'g');\n a = a.replace(/\\:000/g, ':');\n a = a.replace(/\\:00/g, ':');\n a = a.replace(/\\:0/g, ':');\n a = a.replace(/g/g, '0');\n const sections = a.split(/\\:/g);\n let zPreviousFlag = false;\n let zeroStartIndex = -1;\n let zeroLength = 0;\n let zStartIndex = -1;\n let zLength = 0;\n for (let i = 0; i < 8; ++i) {\n const section = sections[i];\n let zFlag = (section === '0');\n if (zFlag && !zPreviousFlag) {\n zStartIndex = i;\n }\n if (!zFlag && zPreviousFlag) {\n zLength = i - zStartIndex;\n }\n if (zLength > 1 && zLength > zeroLength) {\n zeroStartIndex = zStartIndex;\n zeroLength = zLength;\n }\n zPreviousFlag = (section === '0');\n }\n if (zPreviousFlag) {\n zLength = 8 - zStartIndex;\n }\n if (zLength > 1 && zLength > zeroLength) {\n zeroStartIndex = zStartIndex;\n zeroLength = zLength;\n }\n //console.log(zeroStartIndex, zeroLength);\n //console.log(sections);\n if (zeroStartIndex >= 0 && zeroLength > 1) {\n sections.splice(zeroStartIndex, zeroLength, 'g');\n }\n //console.log(sections);\n a = sections.join(':');\n //console.log(a);\n a = a.replace(/\\:g\\:/g, '::');\n a = a.replace(/\\:g/g, '::');\n a = a.replace(/g\\:/g, '::');\n a = a.replace(/g/g, '::');\n //console.log(a);\n return a;\n};\n\n// Basic validation\nconst _validate = function (a) {\n return /^[a-f0-9\\\\:]+$/ig.test(a);\n};\n\nconst _leftPad = function (d, p, n) {\n const padding = p.repeat(n);\n if (d.length < padding.length) {\n d = padding.substring(0, padding.length - d.length) + d;\n }\n return d;\n};\n\nconst _hex2bin = function (hex) {\n return parseInt(hex, 16).toString(2)\n};\nconst _bin2hex = function (bin) {\n return parseInt(bin, 2).toString(16)\n};\n\nconst _addr2bin = function (addr) {\n const nAddr = normalize(addr);\n const sections = nAddr.split(\":\");\n let binAddr = '';\n for (const section of sections) {\n binAddr += _leftPad(_hex2bin(section), '0', 16);\n }\n return binAddr;\n};\n\nconst _bin2addr = function (bin) {\n const addr = [];\n for (let i = 0; i < 8; ++i) {\n const binPart = bin.substr(i * 16, 16);\n const hexSection = _leftPad(_bin2hex(binPart), '0', 4);\n addr.push(hexSection);\n }\n return addr.join(':');\n};\n\nconst divideSubnet = function (addr, mask0, mask1, limit, abbr) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask0 *= 1;\n mask1 *= 1;\n limit *= 1;\n mask1 = mask1 || 128;\n if (mask0 < 1 || mask1 < 1 || mask0 > 128 || mask1 > 128 || mask0 > mask1) {\n throw new Error('Invalid masks.');\n }\n const ret = [];\n const binAddr = _addr2bin(addr);\n const binNetPart = binAddr.substr(0, mask0);\n const binHostPart = '0'.repeat(128 - mask1);\n const numSubnets = Math.pow(2, mask1 - mask0);\n for (let i = 0; i < numSubnets; ++i) {\n if (!!limit && i >= limit) {\n break;\n }\n const binSubnet = _leftPad(i.toString(2), '0', mask1 - mask0);\n const binSubAddr = binNetPart + binSubnet + binHostPart;\n const hexAddr = _bin2addr(binSubAddr);\n if (!!abbr) {\n ret.push(abbreviate(hexAddr));\n } else {\n ret.push(hexAddr);\n }\n\n }\n // console.log(numSubnets);\n // console.log(binNetPart, binSubnetPart, binHostPart);\n // console.log(binNetPart.length, binSubnetPart.length, binHostPart.length);\n // console.log(ret.length);\n return ret;\n};\n\nconst range = function (addr, mask0, mask1, abbr) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask0 *= 1;\n mask1 *= 1;\n mask1 = mask1 || 128;\n if (mask0 < 1 || mask1 < 1 || mask0 > 128 || mask1 > 128 || mask0 > mask1) {\n throw new Error('Invalid masks.');\n }\n const binAddr = _addr2bin(addr);\n const binNetPart = binAddr.substr(0, mask0);\n const binHostPart = '0'.repeat(128 - mask1);\n const binStartAddr = binNetPart + '0'.repeat(mask1 - mask0) + binHostPart;\n const binEndAddr = binNetPart + '1'.repeat(mask1 - mask0) + binHostPart;\n if (!!abbr) {\n return {\n start: abbreviate(_bin2addr(binStartAddr)),\n end: abbreviate(_bin2addr(binEndAddr)),\n size: Math.pow(2, mask1 - mask0)\n };\n } else {\n return {\n start: _bin2addr(binStartAddr),\n end: _bin2addr(binEndAddr),\n size: Math.pow(2, mask1 - mask0)\n };\n }\n};\n\nconst randomSubnet = function (addr, mask0, mask1, limit, abbr) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask0 *= 1;\n mask1 *= 1;\n limit *= 1;\n mask1 = mask1 || 128;\n limit = limit || 1;\n if (mask0 < 1 || mask1 < 1 || mask0 > 128 || mask1 > 128 || mask0 > mask1) {\n throw new Error('Invalid masks.');\n }\n const ret = [];\n const binAddr = _addr2bin(addr);\n const binNetPart = binAddr.substr(0, mask0);\n const binHostPart = '0'.repeat(128 - mask1);\n const numSubnets = Math.pow(2, mask1 - mask0);\n for (let i = 0; i < numSubnets && i < limit; ++i) {\n // generate an binary string with length of mask1 - mask0\n let binSubnet = '';\n for (let j = 0; j < mask1 - mask0; ++j) {\n binSubnet += Math.floor(Math.random() * 2);\n }\n const binSubAddr = binNetPart + binSubnet + binHostPart;\n const hexAddr = _bin2addr(binSubAddr);\n if (!!abbr) {\n ret.push(abbreviate(hexAddr));\n } else {\n ret.push(hexAddr);\n }\n }\n // console.log(numSubnets);\n // console.log(binNetPart, binSubnetPart, binHostPart);\n // console.log(binNetPart.length, binSubnetPart.length, binHostPart.length);\n // console.log(ret.length);\n return ret;\n};\n\nconst ptr = function (addr, mask) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask *= 1;\n if (mask < 1 || mask > 128 || Math.floor(mask / 4) != mask / 4) {\n throw new Error('Invalid masks.');\n }\n const fullAddr = normalize(addr);\n const reverse = fullAddr.replace(/:/g, '').split('').reverse();\n return reverse.slice(0, (128 - mask) / 4).join('.');\n};\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n exports.normalize = normalize;\n exports.abbreviate = abbreviate;\n exports.divideSubnet = divideSubnet;\n exports.range = range;\n exports.randomSubnet = randomSubnet;\n exports.ptr = ptr;\n} else {\n window.normalize = normalize;\n window.abbreviate = abbreviate;\n window.divideSubnet = divideSubnet;\n window.range = range;\n window.randomSubnet = randomSubnet;\n window.ptr = ptr;\n}\n","import ipaddr from 'ipaddr.js';\n// @ts-ignore: Can't find a @types/ip6 package\nimport ip6 from 'ip6';\n\nexport function isIP(addr: string) {\n return ipaddr.isValid(addr);\n}\n\nexport function version(addr: string): number {\n try {\n const parse_addr = ipaddr.parse(addr);\n const kind = parse_addr.kind();\n\n if (kind === 'ipv4') {\n return 4; //IPv4\n } else if (kind === 'ipv6') {\n return 6; //IPv6\n } else {\n /* istanbul ignore next */\n return 0; //not 4 or 6\n }\n } catch (err) {\n return 0; //not 4 or 6\n }\n}\n\nexport function isV4(addr: string) {\n return version(addr) === 4;\n}\n\nexport function isV6(addr: string) {\n return version(addr) === 6;\n}\n\nexport function isRange(range: string) {\n try {\n const cidr = ipaddr.parseCIDR(range);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nexport function inRange(addr: string, range: string | string[]) {\n if (typeof range === 'string') {\n if (range.indexOf('/') !== -1) {\n try {\n const range_data = range.split('/');\n\n const parse_addr = ipaddr.parse(addr);\n const parse_range = ipaddr.parse(range_data[0]);\n\n //@ts-ignore: It works.\n return parse_addr.match(parse_range, range_data[1]);\n } catch (err) {\n return false;\n }\n } else {\n addr = isV6(addr) ? ip6.normalize(addr) : addr; //v6 normalize addr\n range = isV6(range) ? ip6.normalize(range) : range; //v6 normalize range\n\n return isIP(range as string) && addr === range;\n }\n } else if (range && typeof range === 'object') {\n //list\n for (const check_range in range) {\n if (inRange(addr, range[check_range]) === true) {\n return true;\n }\n }\n return false;\n } else {\n return false;\n }\n}\n\nexport function storeIP(addr: string) {\n try {\n var parse_addr = ipaddr.parse(addr);\n var kind = parse_addr.kind();\n\n if (kind === 'ipv4') {\n //is a plain v4 address\n return addr;\n } else if (kind === 'ipv6') {\n //@ts-ignore: it exists!\n if (parse_addr.isIPv4MappedAddress()) {\n //convert v4 mapped to v6 addresses to a v4 in it's original format\n //@ts-ignore: it exists!\n return parse_addr.toIPv4Address().toString();\n } //is a v6, abbreviate it\n else {\n return ip6.abbreviate(addr);\n }\n } else {\n return null; //invalid IP address\n }\n } catch (err) {\n return null; //invalid IP address\n }\n}\n\n// searchIP is a aliases of storeIP\nexport { storeIP as searchIP };\n\nexport function displayIP(addr: string) {\n try {\n var parse_addr = ipaddr.parse(addr);\n var kind = parse_addr.kind();\n\n if (kind === 'ipv4') {\n //is a plain v4 address\n return addr;\n } else if (kind === 'ipv6') {\n //@ts-ignore: it exists!\n if (parse_addr.isIPv4MappedAddress()) {\n //convert v4 mapped to v6 addresses to a v4 in it's original format\n //@ts-ignore: it exists!\n return parse_addr.toIPv4Address().toString();\n } //is a v6, normalize it\n else {\n return ip6.normalize(addr);\n }\n } else {\n return ''; //invalid IP address\n }\n } catch (err) {\n return ''; //invalid IP address\n }\n}\n","/**\n * All event listeners\n *\n * https://developers.facebook.com/docs/meta-pixel/reference\n * */\n\n// Load pixel event\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (\n\t\twpmDataLayer?.pixels?.facebook?.pixel_id\n\t\t&& !wpmDataLayer?.pixels?.facebook?.loaded\n\t\t&& !wpm.doesUrlContainPatterns(wpmDataLayer?.pixels?.facebook?.exclusion_patterns)\n\t) {\n\t\tif (wpm.canIFire(\"ads\", \"facebook-ads\")) wpm.loadFacebookPixel()\n\t}\n})\n\n// AddToCart event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToCart\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToCart\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// InitiateCheckout event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideBeginCheckout\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"InitiateCheckout\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// AddToWishlist event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToWishlist\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToWishlist\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// ViewContent event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideViewItem\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"ViewContent\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n\n// view search event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideSearch\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Search\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// load always event\njQuery(document).on(\"wpmLoadAlways\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\twpm.setFbUserData()\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// view order received page event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideOrderReceivedPage\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Purchase\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n","/**\n * Add functions for Facebook\n * */\n\n(function (wpm, $, undefined) {\n\n\tlet fbUserData\n\n\twpm.loadFacebookPixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.facebook.loaded = true\n\n\t\t\t// @formatter:off\n\t\t\t!function(f,b,e,v,n,t,s)\n\t\t\t{if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n\t\t\t\tn.callMethod.apply(n,arguments):n.queue.push(arguments)};\n\t\t\t\tif(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n\t\t\t\tn.queue=[];t=b.createElement(e);t.async=!0;\n\t\t\t\tt.src=v;s=b.getElementsByTagName(e)[0];\n\t\t\t\ts.parentNode.insertBefore(t,s)}(window, document,'script',\n\t\t\t\t'https://connect.facebook.net/en_US/fbevents.js');\n\t\t\t// @formatter:on\n\n\t\t\tlet data = {}\n\n\t\t\t// Add user identifiers to data,\n\t\t\t// and only if fbp was set\n\t\t\tif (wpm.isFbpSet() && wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\t\tdata = {...wpm.getUserIdentifiersForFb()}\n\t\t\t}\n\n\t\t\tfbq(\"init\", wpmDataLayer.pixels.facebook.pixel_id, data)\n\t\t\tfbq(\"track\", \"PageView\")\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// https://developers.facebook.com/docs/meta-pixel/advanced/advanced-matching\n\twpm.getUserIdentifiersForFb = () => {\n\n\t\tlet data = {}\n\n\t\t// external ID\n\t\tif (wpmDataLayer?.user?.id?.raw) data.external_id = wpmDataLayer.user.id.raw\n\t\tif (wpmDataLayer?.order?.user_id) data.external_id = wpmDataLayer.order.user_id\n\n\t\t// email\n\t\tif (wpmDataLayer?.user?.email?.facebook) data.em = wpmDataLayer.user.email.facebook\n\t\tif (wpmDataLayer?.order?.billing_email_hashed) data.em = wpmDataLayer.order.billing_email_hashed\n\n\t\t// first name\n\t\tif (wpmDataLayer?.user?.first_name?.facebook) data.fn = wpmDataLayer.user.first_name.facebook\n\t\tif (wpmDataLayer?.order?.billing_first_name) data.fn = wpmDataLayer.order.billing_first_name.toLowerCase()\n\n\t\t// last name\n\t\tif (wpmDataLayer?.user?.last_name?.facebook) data.ln = wpmDataLayer.user.last_name.facebook\n\t\tif (wpmDataLayer?.order?.billing_last_name) data.ln = wpmDataLayer.order.billing_last_name.toLowerCase()\n\n\t\t// phone\n\t\tif (wpmDataLayer?.user?.phone?.facebook) data.ph = wpmDataLayer.user.phone.facebook\n\t\tif (wpmDataLayer?.order?.billing_phone) data.ph = wpmDataLayer.order.billing_phone.replace(\"+\", \"\")\n\n\t\t// city\n\t\tif (wpmDataLayer?.user?.city?.facebook) data.ct = wpmDataLayer.user.city.facebook\n\t\tif (wpmDataLayer?.order?.billing_city) data.ct = wpmDataLayer.order.billing_city.toLowerCase().replace(/ /g, \"\")\n\n\t\t// state\n\t\tif (wpmDataLayer?.user?.state?.facebook) data.st = wpmDataLayer.user.state.facebook\n\t\tif (wpmDataLayer?.order?.billing_state) data.st = wpmDataLayer.order.billing_state.toLowerCase().replace(/[a-zA-Z]{2}-/, \"\")\n\n\t\t// postcode\n\t\tif (wpmDataLayer?.user?.postcode?.facebook) data.zp = wpmDataLayer.user.postcode.facebook\n\t\tif (wpmDataLayer?.order?.billing_postcode) data.zp = wpmDataLayer.order.billing_postcode\n\n\t\t// country\n\t\tif (wpmDataLayer?.user?.country?.facebook) data.country = wpmDataLayer.user.country.facebook\n\t\tif (wpmDataLayer?.order?.billing_country) data.country = wpmDataLayer.order.billing_country.toLowerCase()\n\n\t\treturn data\n\t}\n\n\twpm.getFbRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\twpm.getFbUserData = () => {\n\n\t\t/**\n\t\t * We need to cache the FB user data for InitiateCheckout\n\t\t * where getting the user data from the browser is too slow\n\t\t * using wpm.getCookie().\n\t\t *\n\t\t * And we need the object merge because the ViewContent hit happens too fast\n\t\t * after adding a variation to the cart because the function to cache\n\t\t * the user data is too slow.\n\t\t *\n\t\t * But we can get the user_data using wpm.getCookie()\n\t\t * because we don't move away from the page and can wait for the browser\n\t\t * to get it.\n\t\t *\n\t\t * Also, the merge ensures that new data will be added to fbUserData if new\n\t\t * data is being added later, like user ID, or fbc.\n\t\t */\n\n\t\tfbUserData = {...fbUserData, ...wpm.getFbUserDataFromBrowser()}\n\n\t\treturn fbUserData\n\t}\n\n\twpm.isFbAdvancedMatchingEnabled = () => {\n\t\tif (wpmDataLayer?.pixels?.facebook?.advanced_matching) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.setFbUserData = () => {\n\t\tfbUserData = wpm.getFbUserDataFromBrowser()\n\t}\n\n\twpm.getFbUserDataFromBrowser = () => {\n\n\t\tlet\n\t\t\tdata = {}\n\n\t\tif (wpm.getCookie(\"_fbp\") && wpm.isValidFbp(wpm.getCookie(\"_fbp\"))) {\n\t\t\tdata.fbp = wpm.getCookie(\"_fbp\")\n\t\t}\n\n\t\tif (wpm.getCookie(\"_fbc\") && wpm.isValidFbc(wpm.getCookie(\"_fbc\"))) {\n\t\t\tdata.fbc = wpm.getCookie(\"_fbc\")\n\t\t}\n\n\t\tif (wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\tif (wpmDataLayer?.user?.id?.raw) data.external_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\tif (navigator.userAgent) data.client_user_agent = navigator.userAgent\n\n\t\treturn data\n\t}\n\n\twpm.isFbpSet = () => {\n\t\treturn !!wpm.getCookie(\"_fbp\")\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbp = fbp => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.\\d{8,20}$/)\n\n\t\treturn re.test(fbp)\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbc = fbc => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.[\\da-zA-Z_-]{8,}/)\n\n\t\treturn re.test(fbc)\n\t}\n\n\t// wpm.fbViewContent = (product = null) => {\n\t//\n\t// \ttry {\n\t// \t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\t//\n\t// \t\tlet eventId = wpm.getFbRandomEventId()\n\t//\n\t// \t\tlet data = {}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tdata.content_type = \"product\"\n\t// \t\t\tdata.content_name = product.name\n\t// \t\t\t// data.content_category = product.category\n\t// \t\t\tdata.content_ids = product.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]\n\t// \t\t\tdata.currency = wpmDataLayer.shop.currency\n\t// \t\t\tdata.value = product.price\n\t// \t\t}\n\t//\n\t// \t\tfbq(\"track\", \"ViewContent\", data, {\n\t// \t\t\teventID: eventId,\n\t// \t\t})\n\t//\n\t// \t\tlet capiData = {\n\t// \t\t\tevent_name : \"ViewContent\",\n\t// \t\t\tevent_id : eventId,\n\t// \t\t\tuser_data : wpm.getFbUserData(),\n\t// \t\t\tevent_source_url: window.location.href,\n\t// \t\t}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tproduct[\"currency\"] = wpmDataLayer.shop.currency\n\t// \t\t\tcapiData.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t// \t\t}\n\t//\n\t// \t\tjQuery(document).trigger(\"wpmFbCapiEvent\", capiData)\n\t// \t} catch (e) {\n\t// \t\tconsole.error(e)\n\t// \t}\n\t// }\n\n\twpm.fbGetProductDataForCapiEvent = product => {\n\t\treturn {\n\t\t\tcontent_type: \"product\",\n\t\t\tcontent_name: product.name,\n\t\t\tcontent_ids : [\n\t\t\t\tproduct.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type],\n\t\t\t],\n\t\t\tvalue : parseFloat(product.quantity * product.price),\n\t\t\tcurrency : product.currency,\n\t\t}\n\t}\n\n\twpm.facebookContentIds = () => {\n\t\tlet prodIds = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t} else {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t}\n\t\t}\n\n\t\treturn prodIds\n\t}\n\n\twpm.trackCustomFacebookEvent = (eventName, customData = {}) => {\n\t\ttry {\n\t\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\t\tlet eventId = wpm.getFbRandomEventId()\n\n\t\t\tfbq(\"trackCustom\", eventName, customData, {\n\t\t\t\teventID: eventId,\n\t\t\t})\n\n\t\t\tjQuery(document).trigger(\"wpmFbCapiEvent\", {\n\t\t\t\tevent_name : eventName,\n\t\t\t\tevent_id : eventId,\n\t\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\t\tevent_source_url: window.location.href,\n\t\t\t\tcustom_data : customData,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fbGetContentIdsFromCart = () => {\n\n\t\tlet content_ids = []\n\n\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\tcontent_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\t\t}\n\n\t\treturn content_ids\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Facebook loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// if (wpm.canLoadPremiumFeatures()) {\n// \trequire(\"./functions_premium\")\n// \trequire(\"./event_listeners_premium\")\n// }\n// #endif\n\n","/**\n * Load Google Ads event listeners\n * */\n\n// view_item_list event\njQuery(document).on(\"wpmViewItemList\", function (event, product) {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tif (\n\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\tproduct.isVariable &&\n\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t) return\n\n\t\t// try to prevent that WC sends cached hits to Google\n\t\tif (!product) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_item_list\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add_to_cart event\njQuery(document).on(\"wpmAddToCart\", function (event, product) {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : product.quantity * product.price,\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : product.quantity,\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"add_to_cart\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view_item event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tdata.value = (product.quantity ? product.quantity : 1) * product.price\n\t\t\tdata.items = [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : (product.quantity ? product.quantity : 1),\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}]\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_item\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view search event\njQuery(document).on(\"pmwEvent:Search\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tlet products = []\n\n\t\tfor (const [key, product] of Object.entries(wpmDataLayer.products)) {\n\n\t\t\tif (\n\t\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\t\tproduct.isVariable &&\n\t\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t\t) return\n\n\t\t\tproducts.push({\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t})\n\t\t}\n\n\t\t// console.log(products);\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\t// value : 1 * product.price,\n\t\t\titems: products,\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_search_results\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view order received page event\n// TODO distinguish with or without cart data active\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\titems : wpm.getGoogleAdsDynamicRemarketingOrderItems(),\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", data)\n\t\t})\n\n\t\t// console.log(wpm.getGoogleAdsDynamicRemarketingOrderItems())\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// user log in event\njQuery(document).on(\"wpmLogin\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"login\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// conversion event\n// new_customer parameter: https://support.google.com/google-ads/answer/9917012\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel())) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data_basic = {}\n\t\tlet data_with_cart = {}\n\n\t\tdata_basic = {\n\t\t\tsend_to : wpm.getGoogleAdsConversionIdentifiersWithLabel(),\n\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tnew_customer : wpmDataLayer.order.new_customer,\n\t\t}\n\n\t\tif (wpmDataLayer?.order?.clv_order_value_filtered) {\n\t\t\tdata_basic.customer_lifetime_value = wpmDataLayer.order.clv_order_value_filtered\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata_basic.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\tif (wpmDataLayer?.order?.aw_merchant_id) {\n\t\t\tdata_with_cart = {\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\taw_merchant_id : wpmDataLayer.order.aw_merchant_id,\n\t\t\t\taw_feed_country : wpmDataLayer.order.aw_feed_country,\n\t\t\t\taw_feed_language: wpmDataLayer.order.aw_feed_language,\n\t\t\t\titems : wpm.getGoogleAdsRegularOrderItems(),\n\t\t\t}\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"conversion\", {...data_basic, ...data_with_cart})\n\t\t})\n\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load Google Ads functions\n * */\n\n(function (wpm, $, undefined) {\n\n\n\twpm.getGoogleAdsConversionIdentifiersWithLabel = function () {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds) {\n\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\tif (item) {\n\t\t\t\t\tconversionIdentifiers.push(key + \"/\" + item)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsConversionIdentifiers = function () {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\tconversionIdentifiers.push(key)\n\t\t}\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsRegularOrderItems = function () {\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n\twpm.getGoogleAdsDynamicRemarketingOrderItems = function () {\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google Ads\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load Google Universal Analytics (GA3) event listeners\n * */\n\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) return\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.mp_active) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", {\n\t\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.universal.property_id],\n\t\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tvalue : wpmDataLayer.order.value_regular,\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\t\titems : wpm.getGAUAOrderItems(),\n\t\t\t})\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Add functions for Google Analytics Universal\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getGAUAOrderItems = function () {\n\n\t\t// \"id\" : \"34\",\n\t\t// \"name\" : \"Hoodie\",\n\t\t// \"brand\" : \"\",\n\t\t// \"category\" : \"Hoodies\",\n\t\t// \"list_position\": 1,\n\t\t// \"price\" : 45,\n\t\t// \"quantity\" : 1,\n\t\t// \"variant\" : \"Color: blue | Logo: yes\"\n\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\tname : item.name,\n\t\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\t\tcategory: wpmDataLayer.products[item.id].category.join(\"/\"),\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.variant = wpmDataLayer.products[item.variation_id].variant_name\n\t\t\t\torderItem.brand = wpmDataLayer.products[item.variation_id].brand\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.brand = wpmDataLayer.products[item.id].brand\n\t\t\t}\n\n\t\t\torderItem = wpm.ga3AddListNameToProduct(orderItem)\n\n\t\t\torderItems.push(orderItem)\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n\twpm.ga3AddListNameToProduct = function (item_data, productPosition = null) {\n\n\t\t// if (wpm.ga3CanProductListBeSet(item_data.id)) {\n\t\t// \titem_data.listname = wpmDataLayer.shop.list_name\n\t\t//\n\t\t// \tif (productPosition) {\n\t\t// \t\titem_data.list_position = productPosition\n\t\t// \t}\n\t\t// }\n\n\t\titem_data.list_name = wpmDataLayer.shop.list_name\n\n\t\tif (productPosition) {\n\t\t\titem_data.list_position = productPosition\n\t\t}\n\n\t\treturn item_data\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Google Universal Analytics (GA3) loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// if (wpm.canLoadPremiumFeatures()) {\n// \trequire(\"./functions_premium\")\n// \trequire(\"./event_listeners_premium\")\n// }\n// #endif\n","/**\n * Load GA4 event listeners\n * */\n\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.mp_active) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", {\n\t\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.ga4.measurement_id],\n\t\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tvalue : wpmDataLayer.order.value_regular,\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\t\titems : wpm.getGA4OrderItems(),\n\t\t\t})\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load GA4 functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getGA4OrderItems = function () {\n\n\t\t// \"item_id\" : \"34\",\n\t\t// \"item_name\" : \"Hoodie\",\n\t\t// \"quantity\" : 1,\n\t\t// \"item_brand\" : \"\",\n\t\t// \"item_variant\" : \"Color: blue | Logo: yes\",\n\t\t// \"price\" : 45,\n\t\t// \"currency\" : \"CHF\",\n\t\t// \"item_category\": \"Hoodies\"\n\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\titem_name : item.name,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\titem_category: wpmDataLayer.products[item.id].category.join(\"/\"),\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_variant = wpmDataLayer.products[item.variation_id].variant_name\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.variation_id].brand\n\t\t\t} else {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.id].brand\n\t\t\t}\n\n\t\t\torderItems.push(orderItem)\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * GA4 loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// if (wpm.canLoadPremiumFeatures()) {\n// \trequire(\"./functions_premium\")\n// \trequire(\"./event_listeners_premium\")\n// }\n// #endif\n","/**\n * Google Analytics loader\n */\n\nrequire(\"./ga3/loader\")\nrequire(\"./ga4/loader\")\n","/**\n * Load Google base event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") {\n\t\tif (wpm.canGoogleLoad()) {\n\t\t\twpm.loadGoogle()\n\t\t} else {\n\t\t\twpm.logPreventedPixelLoading(\"google\", \"analytics / ads\")\n\t\t}\n\t}\n})\n","/**\n * Load Google base functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.googleConfigConditionsMet = (type) => {\n\n\t\t// always returns true if Google Consent Mode is active\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\t\t\treturn true\n\t\t} else if (wpm.getConsentValues().mode === \"category\") {\n\t\t\treturn wpm.getConsentValues().categories[type] === true\n\t\t} else if (wpm.getConsentValues().mode === \"pixel\") {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-\" + type)\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings = (google_consent_settings) => {\n\n\t\tif (wpm.getConsentValues().mode === \"category\") {\n\n\t\t\tif (wpm.getConsentValues().categories.analytics) google_consent_settings.analytics_storage = \"granted\"\n\t\t\tif (wpm.getConsentValues().categories.ads) google_consent_settings.ad_storage = \"granted\"\n\t\t} else if ((wpm.getConsentValues().mode === \"pixel\")) {\n\n\t\t\tgoogle_consent_settings.analytics_storage = wpm.getConsentValues().pixels.includes(\"google-analytics\") ? \"granted\" : \"denied\"\n\t\t\tgoogle_consent_settings.ad_storage = wpm.getConsentValues().pixels.includes(\"google-ads\") ? \"granted\" : \"denied\"\n\t\t}\n\n\t\treturn google_consent_settings\n\t}\n\n\twpm.updateGoogleConsentMode = (analytics = true, ads = true) => {\n\n\t\ttry {\n\t\t\tif (\n\t\t\t\t!window.gtag ||\n\t\t\t\t!wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent\n\t\t\t) return\n\n\t\t\tgtag(\"consent\", \"update\", {\n\t\t\t\tanalytics_storage: analytics ? \"granted\" : \"denied\",\n\t\t\t\tad_storage : ads ? \"granted\" : \"denied\",\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAds = () => {\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.ads.state = \"loading\"\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.enhanced_conversions?.active) {\n\t\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\t\tgtag(\"config\", key, {\"allow_enhanced_conversions\": true})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\t\tgtag(\"config\", key)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_label && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_number) {\n\t\t\t\tgtag(\"config\", Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0] + \"/\" + wpmDataLayer.pixels.google.ads.phone_conversion_label, {\n\t\t\t\t\tphone_conversion_number: wpmDataLayer.pixels.google.ads.phone_conversion_number,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// ! enhanced_conversion_data needs to set on the window object\n\t\t\t// https://support.google.com/google-ads/answer/9888145#zippy=%2Cvalidate-your-implementation-using-chrome-developer-tools\n\t\t\tif (wpmDataLayer?.shop?.page_type && \"order_received_page\" === wpmDataLayer.shop.page_type && wpmDataLayer?.order?.google?.ads?.enhanced_conversion_data) {\n\t\t\t\t// window.enhanced_conversion_data = wpmDataLayer.order.google.ads.enhanced_conversion_data\n\n\t\t\t\tgtag(\"set\", \"user_data\", wpmDataLayer.order.google.ads.enhanced_conversion_data)\n\t\t\t}\n\n\t\t\twpmDataLayer.pixels.google.ads.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAnalyticsUA = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.universal.state = \"loading\"\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.universal.property_id, wpmDataLayer.pixels.google.analytics.universal.parameters)\n\t\t\twpmDataLayer.pixels.google.analytics.universal.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAnalyticsGA4 = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"loading\"\n\n\t\t\tlet parameters = wpmDataLayer.pixels.google.analytics.ga4.parameters\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.debug_mode) {\n\t\t\t\tparameters.debug_mode = true\n\t\t\t}\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.ga4.measurement_id, parameters)\n\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.isGoogleActive = () => {\n\n\t\tif (\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.universal?.property_id ||\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id ||\n\t\t\t!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)\n\t\t) {\n\t\t\treturn true\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getGoogleGtagId = () => {\n\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) {\n\t\t\treturn wpmDataLayer.pixels.google.analytics.universal.property_id\n\t\t} else if (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) {\n\t\t\treturn wpmDataLayer.pixels.google.analytics.ga4.measurement_id\n\t\t} else {\n\t\t\treturn Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]\n\t\t}\n\t}\n\n\n\twpm.loadGoogle = () => {\n\n\t\tif (wpm.isGoogleActive()) {\n\n\t\t\twpmDataLayer.pixels.google.state = \"loading\"\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googletagmanager.com/gtag/js?id=\" + wpm.getGoogleGtagId())\n\t\t\t\t.then((script, textStatus) => {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Initiate Google dataLayer and gtag\n\t\t\t\t\t\twindow.dataLayer = window.dataLayer || []\n\t\t\t\t\t\twindow.gtag = function gtag() {\n\t\t\t\t\t\t\tdataLayer.push(arguments)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Consent Mode\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\n\t\t\t\t\t\t\tlet google_consent_settings = {\n\t\t\t\t\t\t\t\t\"ad_storage\" : wpmDataLayer.pixels.google.consent_mode.ad_storage,\n\t\t\t\t\t\t\t\t\"analytics_storage\": wpmDataLayer.pixels.google.consent_mode.analytics_storage,\n\t\t\t\t\t\t\t\t\"wait_for_update\" : wpmDataLayer.pixels.google.consent_mode.wait_for_update,\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.region) {\n\t\t\t\t\t\t\t\tgoogle_consent_settings.region = wpmDataLayer.pixels.google.consent_mode.region\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgoogle_consent_settings = wpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings(google_consent_settings)\n\n\t\t\t\t\t\t\tgtag(\"consent\", \"default\", google_consent_settings)\n\t\t\t\t\t\t\tgtag(\"set\", \"ads_data_redaction\", wpmDataLayer.pixels.google.consent_mode.ads_data_redaction)\n\t\t\t\t\t\t\tgtag(\"set\", \"url_passthrough\", wpmDataLayer.pixels.google.consent_mode.url_passthrough)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Linker\n\t\t\t\t\t\t// https://developers.google.com/gtagjs/devguide/linker\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.linker?.settings) {\n\t\t\t\t\t\t\tgtag(\"set\", \"linker\", wpmDataLayer.pixels.google.linker.settings)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgtag(\"js\", new Date())\n\n\t\t\t\t\t\t// Google Ads loader\n\t\t\t\t\t\tif (!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) { // Only run if the pixel has set up\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"ads\")) { \t\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAds()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-ads\", \"ads\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Universal Analytics loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) { \t\t// Only run if the pixel has set up\n\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"analytics\")) {\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAnalyticsUA()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-universal-analytics\", \"analytics\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// GA4 loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) { \t\t\t// Only run if the pixel has set up\n\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"analytics\")) {\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAnalyticsGA4()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"ga4\", \"analytics\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twpmDataLayer.pixels.google.state = \"ready\"\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\twpm.canGoogleLoad = () => {\n\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\t\t\treturn true\n\t\t} else if (\"category\" === wpm.getConsentValues().mode) {\n\t\t\treturn !!(wpm.getConsentValues().categories[\"ads\"] || wpm.getConsentValues().categories[\"analytics\"])\n\t\t} else if (\"pixel\" === wpm.getConsentValues().mode) {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-ads\") || wpm.getConsentValues().pixels.includes(\"google-analytics\")\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid load condition for Google mode in wpmConsentValues\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.gtagLoaded = () => {\n\t\treturn new Promise((resolve, reject) => {\n\n\t\t\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") reject()\n\n\t\t\tlet startTime = 0\n\t\t\tlet timeout = 5000\n\t\t\tlet frequency = 200;\n\n\t\t\t(function wait() {\n\t\t\t\tif (wpmDataLayer?.pixels?.google?.state === \"ready\") return resolve()\n\t\t\t\tif (startTime >= timeout) return reject()\n\t\t\t\tstartTime += frequency\n\t\t\t\tsetTimeout(wait, frequency)\n\t\t\t})()\n\t\t})\n\t}\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google base\n */\n\n// Load base\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// if (wpm.canLoadPremiumFeatures()) {\n// \trequire(\"./functions_premium\")\n// \trequire(\"./event_listeners_premium\")\n// }\n// #endif\n","/**\n * Load Google\n */\n\n// Load base\nrequire(\"./base/loader\")\n\n//Load additional Google libraries\nrequire(\"./ads/loader\")\nrequire(\"./analytics/loader\")\nrequire(\"./optimize/loader\")\n\n\n","/**\n * Load Google Optimize event listeners\n */\n\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.google?.optimize?.container_id && !wpmDataLayer?.pixels?.google?.optimize?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"google-optimize\")) wpm.load_google_optimize_pixel()\n\t}\n})\n","/**\n * Load Google Optimize functions\n */\n\n\n(function (wpm, $, undefined) {\n\n\twpm.load_google_optimize_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.optimize.loaded = true\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googleoptimize.com/optimize.js?id=\" + wpmDataLayer.pixels.google.optimize.container_id)\n\t\t\t// .then(function (script, textStatus) {\n\t\t\t// \t\tconsole.log('Google Optimize loaded')\n\t\t\t// });\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Load Google Optimize\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load Hotjar event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.hotjar?.site_id && !wpmDataLayer?.pixels?.hotjar?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"hotjar\") && !wpmDataLayer?.pixels?.hotjar?.loaded) wpm.load_hotjar_pixel()\n\t}\n})\n","/**\n * Load Hotjar functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.load_hotjar_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.hotjar.loaded = true;\n\n\t\t\t// @formatter:off\n\t\t\t(function(h,o,t,j,a,r){\n\t\t\t\th.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n\t\t\t\th._hjSettings={hjid:wpmDataLayer.pixels.hotjar.site_id,hjsv:6};\n\t\t\t\ta=o.getElementsByTagName('head')[0];\n\t\t\t\tr=o.createElement('script');r.async=1;\n\t\t\t\tr.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n\t\t\t\ta.appendChild(r);\n\t\t\t})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Hotjar loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Consent Mode functions\n */\n\n(function (wpm, $, undefined) {\n\n\t/**\n\t * Handle Cookie Management Platforms\n\t */\n\n\tlet getComplianzCookies = () => {\n\n\t\tlet cmplz_statistics = wpm.getCookie(\"cmplz_statistics\")\n\t\tlet cmplz_marketing = wpm.getCookie(\"cmplz_marketing\")\n\t\tlet cmplz_consent_status = wpm.getCookie(\"cmplz_consent_status\") || wpm.getCookie(\"cmplz_banner-status\")\n\n\t\tif (cmplz_consent_status) {\n\t\t\treturn {\n\t\t\t\tanalytics : cmplz_statistics === \"allow\",\n\t\t\t\tads : cmplz_marketing === \"allow\",\n\t\t\t\tvisitorHasChosen: true,\n\t\t\t}\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tlet getCookieLawInfoCookies = () => {\n\n\t\tlet analyticsCookie = wpm.getCookie(\"cookielawinfo-checkbox-analytics\") || wpm.getCookie(\"cookielawinfo-checkbox-analytiques\")\n\t\tlet adsCookie = wpm.getCookie(\"cookielawinfo-checkbox-advertisement\") || wpm.getCookie(\"cookielawinfo-checkbox-performance\") || wpm.getCookie(\"cookielawinfo-checkbox-publicite\")\n\t\tlet visitorHasChosen = wpm.getCookie(\"CookieLawInfoConsent\")\n\n\t\tif (analyticsCookie || adsCookie) {\n\n\t\t\treturn {\n\t\t\t\tanalytics : analyticsCookie === \"yes\",\n\t\t\t\tads : adsCookie === \"yes\",\n\t\t\t\tvisitorHasChosen: !!visitorHasChosen,\n\t\t\t}\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t/**\n\t * Initialize and set default values\n\t */\n\n\tlet\n\t\twpmConsentValues = {}\n\twpmConsentValues.categories = {}\n\twpmConsentValues.pixels = []\n\twpmConsentValues.mode = \"category\"\n\twpmConsentValues.visitorHasChosen = false\n\n\t// Return current consent values\n\twpm.getConsentValues = () => wpmConsentValues\n\n\twpm.setConsentValueCategories = (analytics = false, ads = false) => {\n\t\twpmConsentValues.categories.analytics = analytics\n\t\twpmConsentValues.categories.ads = ads\n\t}\n\n\t// Update the PMW consent values with values coming from a CMP\n\twpm.updateConsentCookieValues = (analytics = null, ads = null, explicitConsent = false) => {\n\n\t\t// ad_storage\n\t\t// analytics_storage\n\t\t// functionality_storage\n\t\t// personalization_storage\n\t\t// security_storage\n\n\t\tlet cookie\n\n\t\t/**\n\t\t * Setup defaults\n\t\t */\n\n\t\t// consentValues.categories.analytics = true\n\t\t// consentValues.categories.ads = true\n\n\t\twpmConsentValues.categories.analytics = !explicitConsent\n\t\twpmConsentValues.categories.ads = !explicitConsent\n\n\n\t\tif (analytics || ads) {\n\n\t\t\tif (analytics) {\n\t\t\t\twpmConsentValues.categories.analytics = !!analytics\n\t\t\t}\n\n\t\t\tif (ads) {\n\t\t\t\twpmConsentValues.categories.ads = !!ads\n\t\t\t}\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * PMW Cookie Consent\n\t\t *\n\t\t * Must be before every other CMP for the case that one of the included CMPs\n\t\t * decides to implement the PMW cookie consent API. In that case\n\t\t * the PMW consent cookie must take precedence.\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"pmw_cookie_consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookiebot\n\t\t * https://wordpress.org/plugins/cookiebot/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieConsent\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.indexOf(\"statistics:true\") >= 0\n\t\t\twpmConsentValues.categories.ads = cookie.indexOf(\"marketing:true\") >= 0\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Script\n\t\t * https://wordpress.org/plugins/cookie-script-com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieScriptConsent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\tif (cookie.action === \"reject\") {\n\t\t\t\twpmConsentValues.categories.analytics = false\n\t\t\t\twpmConsentValues.categories.ads = false\n\t\t\t} else if (cookie.categories.length === 2) {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t} else {\n\t\t\t\twpmConsentValues.categories.analytics = cookie.categories.indexOf(\"performance\") >= 0\n\t\t\t\twpmConsentValues.categories.ads = cookie.categories.indexOf(\"targeting\") >= 0\n\t\t\t}\n\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Borlabs Cookie\n\t\t * https://borlabs.io/borlabs-cookie/\n\t\t */\n\t\tif (cookie = wpm.getCookie(\"borlabs-cookie\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie?.consents?.statistics\n\t\t\twpmConsentValues.categories.ads = !!cookie?.consents?.marketing\n\t\t\twpmConsentValues.visitorHasChosen = true\n\t\t\twpmConsentValues.pixels = [...cookie?.consents?.statistics || [], ...cookie?.consents?.marketing || []]\n\t\t\twpmConsentValues.mode = \"pixel\"\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Complianz Cookie\n\t\t * https://wordpress.org/plugins/complianz-gdpr/\n\t\t */\n\n\t\tif (cookie = getComplianzCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (free version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"cookie_notice_accepted\")) {\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (pro version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"hu-consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie.categories[\"3\"]\n\t\t\twpmConsentValues.categories.ads = !!cookie.categories[\"4\"]\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * CookieYes, GDPR Cookie Consent (Cookie Law Info)\n\t\t * https://wordpress.org/plugins/cookie-law-info/\n\t\t */\n\n\t\tif (cookie = getCookieLawInfoCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen === true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * GDPR Cookie Compliance Plugin by Moove Agency\n\t\t * https://wordpress.org/plugins/gdpr-cookie-compliance/\n\t\t *\n\t\t * TODO write documentation on how to set up the plugin in order for this to work properly\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"moove_gdpr_popup\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.thirdparty === \"1\"\n\t\t\twpmConsentValues.categories.ads = cookie.advanced === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * WP AutoTerms\n\t\t * https://wordpress.org/plugins/auto-terms-of-service-and-privacy-policy/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"wpautoterms-cookies-notice\")) {\n\n\t\t\tif (cookie !== \"1\") return\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Usercentrics\n\t\t *\n\t\t * https://usercentrics.com/\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api?id=getservicesbaseinfo\n\t\t */\n\n\t\tif (window.localStorage && window.localStorage.getItem(\"uc_settings\")) {\n\n\t\t\tconsole.log(\"Usercentrics settings detected\")\n\n\t\t\tif (typeof UC_UI === \"undefined\") {\n\n\t\t\t\t// register event to block unblock after UC_UI library is loaded\n\t\t\t\twindow.addEventListener(\"UC_UI_INITIALIZED\", function (event) {\n\t\t\t\t\twpm.ucUiProcessConsent()\n\t\t\t\t})\n\n\t\t\t\t// Don't continue because in here the UC_UI library is not loaded yet\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\twpm.ucUiProcessConsent()\n\t\t}\n\n\t\t/**\n\t\t * OneTrust\n\t\t *\n\t\t * https://www.onetrust.com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"OptanonConsent\")) {\n\n\t\t\t// console.log(\"OneTrust settings detected\")\n\n\t\t\tlet params = new URLSearchParams(cookie)\n\t\t\tlet groups = params.get(\"groups\").split(\",\")\n\n\t\t\t// Groups is an array like this ['1:1', '2:0', '3:1', '4:1']. Make it an object with key value pairs\n\t\t\tlet groupsObject = {}\n\t\t\tgroups.forEach((group) => {\n\n\t\t\t\tlet groupArray = group.split(\":\")\n\t\t\t\tgroupsObject[groupArray[0]] = groupArray[1]\n\t\t\t})\n\n\t\t\t// group mapping\n\t\t\t// 1 = necessary\n\t\t\t// 2 = analytics\n\t\t\t// 3 = functional\n\t\t\t// 4 = ads\n\n\t\t\twpmConsentValues.categories.analytics = groubsObject[\"2\"] === \"1\"\n\t\t\twpmConsentValues.categories.ads = groupsObject[\"4\"] === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Only run after having made sure that the UC_UI library is loaded\n\twpm.ucUiProcessConsent = function () {\n\n\t\tif (typeof UC_UI === \"undefined\") return\n\n\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tconst ucStatisticsSlug = UC_UI.getSettingsLabels().categories.filter(data => data.label === \"Statistics\")[0].slug\n\n\t\tpmw.consentAdjustSelectively(\n\t\t\t{\n\t\t\t\tanalytics: !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === ucStatisticsSlug && data.consent.status === false).length > 0,\n\t\t\t\tads : !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === \"marketing\" && data.consent.status === false).length > 0,\n\t\t\t},\n\t\t)\n\t}\n\n\twpm.updateConsentCookieValues()\n\n\twpm.setConsentDefaultValuesToExplicit = () => {\n\t\twpmConsentValues.categories = {\n\t\t\tanalytics: false,\n\t\t\tads : false,\n\t\t}\n\t}\n\n\twpm.canIFire = (category, pixelName) => {\n\n\t\tlet canIFireMode\n\n\t\tif (\"category\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = !!wpmConsentValues.categories[category]\n\t\t} else if (\"pixel\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(pixelName)\n\n\t\t\t// If a user sets \"bing-ads\" in Borlabs Cookie instead of\n\t\t\t// \"microsoft-ads\" in the Borlabs settings, we need to check\n\t\t\t// for that too.\n\t\t\tif (false === canIFireMode && \"microsoft-ads\" === pixelName) {\n\t\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(\"bing-ads\")\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid consent mode in wpmConsentValues\")\n\t\t\tcanIFireMode = false\n\t\t}\n\n\t\tif (canIFireMode) {\n\t\t\treturn true\n\t\t} else {\n\t\t\tif (true || wpm.urlHasParameter(\"debugConsentMode\")) {\n\t\t\t\twpm.logPreventedPixelLoading(pixelName, category)\n\t\t\t}\n\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.logPreventedPixelLoading = (pixelName, category) => {\n\n\t\tif (wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent) {\n\t\t\tconsole.log(\"Pixel Manager for WooCommerce: The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have not given consent for it yet. (PMW is in explicit consent mode.)\")\n\t\t} else {\n\t\t\tconsole.log(\"Pixel Manager for WooCommerce: The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have removed consent for this pixel. (PMW is in implicit consent mode.)\")\n\t\t}\n\t}\n\n\t/**\n\t * Runs through each script in and blocks / unblocks it according to the plugin settings\n\t * and user consent.\n\t */\n\n\t// https://stackoverflow.com/q/65453565/4688612\n\twpm.scriptTagObserver = new MutationObserver((mutations) => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif ($(node).data(\"wpm-cookie-category\")) {\n\n\t\t\t\t\t\t// If the pixel category has been approved > unblock\n\t\t\t\t\t\t// If the pixel belongs to more than one category, then unblock if one of the categories has been approved\n\t\t\t\t\t\t// If no category has been approved, but the Google Consent Mode is active, then only unblock the Google scripts\n\n\t\t\t\t\t\tif (wpm.shouldScriptBeActive(node)) {\n\t\t\t\t\t\t\twpm.unblockScript(node)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twpm.blockScript(node)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\twpm.scriptTagObserver.observe(document.head, {childList: true, subtree: true})\n\t// jQuery(document).on(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\tdocument.addEventListener(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\n\twpm.shouldScriptBeActive = node => {\n\n\t\tif (\n\t\t\twpmDataLayer.shop.cookie_consent_mgmt.explicit_consent ||\n\t\t\twpmConsentValues.visitorHasChosen\n\t\t) {\n\n\t\t\tif (wpmConsentValues.mode === \"category\" && $(node).data(\"wpm-cookie-category\").split(\",\").some(element => wpmConsentValues.categories[element])) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && wpmConsentValues.pixels.includes($(node).data(\"wpm-pixel-name\"))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && $(node).data(\"wpm-pixel-name\") === \"google\" && [\"google-analytics\", \"google-ads\"].some(element => wpmConsentValues.pixels.includes(element))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmDataLayer?.pixels?.google?.consent_mode?.active && $(node).data(\"wpm-pixel-name\") === \"google\") {\n\t\t\t\treturn true\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\treturn true\n\t\t}\n\t}\n\n\n\twpm.unblockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tlet wpmSrc = $(scriptNode).data(\"wpm-src\")\n\t\tif (wpmSrc) $(scriptNode).attr(\"src\", wpmSrc)\n\n\t\tscriptNode.type = \"text/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.blockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tif ($(scriptNode).attr(\"src\")) $(scriptNode).removeAttr(\"src\")\n\t\tscriptNode.type = \"blocked/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\t}\n\n\twpm.unblockAllScripts = (analytics = true, ads = true) => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\twpm.setConsentValueCategories(analytics, ads)\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.unblockSelectedPixels = () => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.explicitConsentStateAlreadySet = () => {\n\n\t\tif (wpmConsentValues.explicitConsentStateAlreadySet) {\n\t\t\treturn true\n\t\t} else {\n\t\t\twpmConsentValues.explicitConsentStateAlreadySet = true\n\t\t}\n\t}\n\n\n\t/**\n\t * Block or unblock scripts for each CMP immediately after cookie consent has been updated\n\t * by the visitor.\n\t */\n\n\t/**\n\t * Borlabs Cookie\n\t * If visitor accepts cookies in Borlabs Cookie unblock the scripts\n\t */\n\tdocument.addEventListener(\"borlabs-cookie-consent-saved\", () => {\n\t\twpm.updateConsentCookieValues()\n\n\t\tif (wpmConsentValues.mode === \"pixel\") {\n\n\t\t\twpm.unblockSelectedPixels()\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.pixels.includes(\"google-analytics\"), wpmConsentValues.pixels.includes(\"google-ads\"))\n\t\t} else {\n\n\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t}\n\t})\n\n\t/**\n\t * Cookiebot\n\t * \tIf visitor accepts cookies in Cookiebot unblock the scripts\n\t * \thttps://www.cookiebot.com/en/developer/\n\t */\n\tdocument.addEventListener(\"CookiebotOnAccept\", () => {\n\t\tif (Cookiebot.consent.statistics) wpmConsentValues.categories.analytics = true\n\t\tif (Cookiebot.consent.marketing) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\n\t}, false)\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/article/20-custom-events\n\t */\n\t// jQuery(document).on(\"CookieScriptAccept\", e => {\n\tdocument.addEventListener(\"CookieScriptAccept\", e => {\n\n\t\tif (e.detail.categories.includes(\"performance\")) wpmConsentValues.categories.analytics = true\n\t\tif (e.detail.categories.includes(\"targeting\")) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/\n\t */\n\t// jQuery(document).on(\"CookieScriptAcceptAll\", () => {\n\tdocument.addEventListener(\"CookieScriptAcceptAll\", () => {\n\n\t\twpm.setConsentValueCategories(true, true)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t})\n\n\t/**\n\t * Complianz Cookie\n\t *\n\t * If visitor accepts cookies in Complianz unblock the scripts\n\t */\n\n\twpm.cmplzStatusChange = (cmplzConsentData) => {\n\n\t\tif (cmplzConsentData.detail.categories.includes(\"statistics\")) wpm.updateConsentCookieValues(true, null)\n\t\tif (cmplzConsentData.detail.categories.includes(\"marketing\")) wpm.updateConsentCookieValues(null, true)\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t}\n\n\t// jQuery(document).on(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\t// jQuery(document).on(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\n\t// Cookie Compliance by hu-manity.co (free and pro)\n\t// If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (free version)\n\t// https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t// jQuery(document).on(\"setCookieNotice\", () => {\n\tdocument.addEventListener(\"setCookieNotice\", () => {\n\t\twpm.updateConsentCookieValues()\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Compliance by hu-manity.co (free and pro)\n\t * If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (pro version)\n\t * https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t * Because Cookie Notice has no documented API or event that is being triggered on consent save or update\n\t * we have to solve this by using a mutation observer.\n\t *\n\t * @type {MutationObserver}\n\t */\n\n\twpm.huObserver = new MutationObserver(mutations => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif (node.id === \"hu\") {\n\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\").on(\"click\", function () {\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\") in pure JavaScript\n\t\t\t\t\t\tdocument.querySelector(\".hu-cookies-save\").addEventListener(\"click\", () => {\n\t\t\t\t\t\t\twpm.updateConsentCookieValues()\n\t\t\t\t\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\tif (window.hu) {\n\t\twpm.huObserver.observe(document.documentElement || document.body, {childList: true, subtree: true})\n\t}\n\n\t/**\n\t * Usercentrics Event Listeners\n\t *\n\t * https://docs.usercentrics.com/#/v2-events?id=usage-as-window-event\n\t */\n\n\twindow.addEventListener(\"ucEvent\", function (e) {\n\t\tif (e.detail && e.detail.event == \"consent_status\") {\n\t\t\t// check for consent status of service \"Google Ads Remarketing\"\n\t\t\tif (e.detail[\"Google Ads Remarketing\"] === true) {\n\t\t\t\tconsole.log(\"Google Ads Remarketing has consent\")\n\t\t\t} else {\n\t\t\t\tconsole.log(\"Google Ads Remarketing has no consent\")\n\t\t\t}\n\t\t}\n\t})\n\n\t// https://docs.usercentrics.com/#/v2-events?id=uc_ui_cmp_event\n\twindow.addEventListener(\"UC_UI_CMP_EVENT\", function (event) {\n\n\t\tif (event.detail.type === \"ACCEPT_ALL\") {\n\t\t\t// console.log('accept all');\n\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tif (event.detail.type === \"DENY_ALL\") {\n\t\t\tpmw.consentRevokeAll()\n\t\t}\n\n\t\tif (event.detail.type === \"SAVE\") {\n\t\t\tconsole.log(\"event.detail\", event.detail)\n\t\t}\n\t})\n\n\n\t/**\n\t * OneTrust Event Listeners\n\t *\n\t * CookiePro by OneTrust doesn't emit any events when the user accepts or declines cookies.\n\t */\n\n\t// There are two accept all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\"#accept-recommended-btn-handler, #onetrust-accept-btn-handler\").on(\"click\", function () {\n\n\t\t// If OneTrust is not loaded, return\n\t\tif (typeof window.OneTrust === \"undefined\") return\n\n\t\tpmw.consentAcceptAll()\n\t})\n\n\t// There are two revoke all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\".ot-pc-refuse-all-handler, #onetrust-reject-all-handler\").on(\"click\", function () {\n\t\tpmw.consentRevokeAll()\n\t})\n\n\t// There is one save button that saves mixed consent. It is in the settings window. We reload the page after saving to reflect the changes.\n\tjQuery(\".save-preference-btn-handler.onetrust-close-btn-handler\").on(\"click\", function () {\n\t\tlocation.reload()\n\n\t\t// OneTrust.OnConsentChanged(function (e) {\n\t\t// \tpmw.consentAdjustSelectively({\n\t\t// \t\tanalytics: e.detail.includes(\"2\"),\n\t\t// \t\tads : e.detail.includes(\"4\"),\n\t\t// \t})\n\t\t// })\n\t})\n\n\n}(window.wpm = window.wpm || {}, jQuery));\n\n\n(function (pmw, $, undefined) {\n\n\t/**\n\t * Pixel Manager Cookie Consent API\n\t */\n\n\t// Accept consent for all cookies\n\tpmw.consentAcceptAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\tpmw.consentSetCookie(true, true, settings.duration)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t}\n\n\t// Accept consent selectively\n\tpmw.consentAdjustSelectively = (settings) => {\n\n\t\t// If settings.analytics is set, keep it, otherwise set it to wpm.getConsentValues().categories.analytics\n\t\tsettings.analytics = settings.analytics !== undefined ? settings.analytics : wpm.getConsentValues().categories.analytics\n\t\tsettings.ads = settings.ads !== undefined ? settings.ads : wpm.getConsentValues().categories.ads\n\t\tsettings.duration = settings.duration || 365\n\n\t\tpmw.consentSetCookie(settings.analytics, settings.ads, settings.duration)\n\t\twpm.unblockAllScripts(settings.analytics, settings.ads)\n\t\twpm.updateGoogleConsentMode(settings.analytics, settings.ads)\n\t}\n\n\t// Remove consent for all cookies\n\tpmw.consentRevokeAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\twpm.setConsentValueCategories(false, false)\n\t\tpmw.consentSetCookie(false, false, settings.duration)\n\t\twpm.updateGoogleConsentMode(false, false)\n\t}\n\n\t// Set a cookie called pmw_cookie_consent with the value of pmw_cookie_consent\n\t// and set the default expiration date to 1 year from now\n\tpmw.consentSetCookie = (analytics, ads, duration = 365) => {\n\t\twpm.setCookie(\"pmw_cookie_consent\", JSON.stringify({analytics, ads}), duration)\n\t}\n\n\t// Trigger an event once the PMW consent management has been loaded\n\tjQuery(document).trigger(\"pmw_cookie_consent_management_loaded\")\n\n}(window.pmw = window.pmw || {}, jQuery))\n","/**\n * remove_from_cart event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\njQuery(document).on(\"click\", \".remove_from_cart_button, .remove\", (event) => {\n\n\t// console.log(\"remove_from_cart event\" + new Date().getTime())\n\n\ttry {\n\n\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"))\n\t\tlet productId = wpm.getProductIdByCartItemKeyUrl(url)\n\n\t\twpm.removeProductFromCart(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * begin_checkout event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\nlet checkoutButtonClasses = [\n\t\".checkout\",\n\t\".checkout-button\",\n\t\".cart-checkout-button\",\n\t\".button.checkout\",\n\t\".xoo-wsc-ft-btn-checkout\", // https://xootix.com/side-cart-for-woocommerce/\n\t\".elementor-button--checkout\",\n].join(\",\")\n\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"click init_checkout\", checkoutButtonClasses, () => {\n\n\t// console.log(\"init_checkout at: \" + new Date().getTime())\n\n\tjQuery(document).trigger(\"wpmBeginCheckout\")\n})\n\njQuery(document).on(\"updated_cart_totals\", () => {\n\tjQuery(document).trigger(\"wpmViewCart\")\n})\n\n/**\n * Set up PWM events\n */\n\n// track checkout option event: purchase click\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"wpmLoad\", (event) => {\n\tjQuery(document).on(\"payment_method_selected\", () => {\n\n\t\tif (false === wpm.paymentMethodSelected) {\n\t\t\twpm.fireCheckoutProgress(3)\n\t\t}\n\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t\twpm.paymentMethodSelected = true\n\t})\n})\n\n// populate the wpmDataLayer with the cart items\njQuery(document).on(\"wpmLoad\", () => {\n\n\ttry {\n\t\t// When a new session is initiated there are no items in the cart,\n\t\t// so we can save the call to get the cart items\n\t\tif (wpm.doesWooCommerceCartExist()) wpm.getCartItems()\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// get all add-to-cart= products from backend\njQuery(document).on(\"wpmLoad\", () => {\n\n\twpmDataLayer.products = wpmDataLayer.products || {}\n\n\t// scan page for add-to-cart= links\n\tlet productIds = wpm.getAddToCartLinkProductIds()\n\n\twpm.getProductsFromBackend(productIds)\n})\n\n/**\n * Save the referrer into a cookie\n */\n\njQuery(document).on(\"wpmLoad\", () => {\n\n\t// can't use session storage as we can't read it from the server\n\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\n\t\tif (document.referrer) {\n\t\t\tlet referrerUrl = new URL(document.referrer)\n\t\t\tlet referrerHostname = referrerUrl.hostname\n\n\t\t\tif (referrerHostname !== window.location.host) {\n\t\t\t\twpm.setCookie(\"wpmReferrer\", referrerHostname)\n\t\t\t}\n\t\t}\n\t}\n})\n\n\n/**\n * Create our own load event in order to better handle script flow execution when JS \"optimizers\" shuffle the code.\n */\njQuery(document).on(\"wpmLoad\", () => {\n\t// document.addEventListener(\"wpmLoad\", function () {\n\ttry {\n\t\tif (typeof wpmDataLayer != \"undefined\" && !wpmDataLayer?.wpmLoadFired) {\n\n\t\t\tjQuery(document).trigger(\"wpmLoadAlways\")\n\n\t\t\tif (wpmDataLayer?.shop) {\n\t\t\t\tif (\n\t\t\t\t\t\"product\" === wpmDataLayer.shop.page_type &&\n\t\t\t\t\t\"variable\" !== wpmDataLayer.shop.product_type &&\n\t\t\t\t\twpm.getMainProductIdFromProductPage()\n\t\t\t\t) {\n\t\t\t\t\tlet product = wpm.getProductDataForViewItemEvent(wpm.getMainProductIdFromProductPage())\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t\t\t\t} else if (\"product_category\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmCategory\")\n\t\t\t\t} else if (\"search\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"pmwEvent:Search\")\n\t\t\t\t} else if (\"cart\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewCart\")\n\t\t\t\t} else if (\"order_received_page\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tif (wpmDataLayer?.order && !wpm.isOrderIdStored(wpmDataLayer.order.id)) {\n\t\t\t\t\t\tjQuery(document).trigger(\"wpmOrderReceivedPage\")\n\t\t\t\t\t\twpm.writeOrderIdToStorage(wpmDataLayer.order.id, wpmDataLayer.order.key)\n\t\t\t\t\t\tif (typeof wpm.acrRemoveCookie === \"function\") wpm.acrRemoveCookie()\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.user?.id && !wpm.hasLoginEventFired()) {\n\t\t\t\tjQuery(document).trigger(\"wpmLogin\")\n\t\t\t\twpm.setLoginEventFired()\n\t\t\t}\n\n\t\t\t// /**\n\t\t\t// * Load mini cart fragments into a wpm session storage key,\n\t\t\t// * after the document load event.\n\t\t\t// */\n\t\t\t// jQuery(document).ajaxSend(function (event, jqxhr, settings) {\n\t\t\t// \t// console.log('settings.url: ' + settings.url);\n\t\t\t//\n\t\t\t// \tif (settings.url.includes(\"get_refreshed_fragments\") && sessionStorage) {\n\t\t\t// \t\tif (!sessionStorage.getItem(\"wpmMiniCartActive\")) {\n\t\t\t// \t\t\tsessionStorage.setItem(\"wpmMiniCartActive\", JSON.stringify(true))\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// })\n\n\t\t\twpmDataLayer.wpmLoadFired = true\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\njQuery(document).on(\"wpmLoad\", async () => {\n\n\tif (\n\t\twindow.sessionStorage &&\n\t\twindow.sessionStorage.getItem(\"_pmw_endpoint_available\") &&\n\t\t!JSON.parse(window.sessionStorage.getItem(\"_pmw_endpoint_available\"))\n\t) {\n\t\tconsole.error(\"Pixel Manager for WooCommerce: REST endpoint is not available. Using admin-ajax.php instead.\")\n\t}\n})\n\n\n/**\n * Load all pixels\n */\njQuery(document).on(\"wpmPreLoadPixels\", () => {\n\n\tif (wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent && !wpm.explicitConsentStateAlreadySet()) {\n\t\twpm.updateConsentCookieValues(null, null, true)\n\t}\n\n\tjQuery(document).trigger(\"wpmLoadPixels\", {})\n})\n\n\n/**\n * All ecommerce events\n */\n\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToCart\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\t// If Facebook pixel is loaded, add Facebook server to server event data to the payload\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToCart\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// TikTok\n\t// https://ads.tiktok.com/gateway/docs/index?identify_key=c0138ffadd90a955c1f0670a56fe348d1d40680b3c89461e09f78ed26785164b&language=ENGLISH&doc_id=1739585702922241#item-link-Adding%20parameters%20to%20event%20code\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToCart\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToCart\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmBeginCheckout\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"beginCheckout\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"InitiateCheckout\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (wpmDataLayer?.cart && !jQuery.isEmptyObject(wpmDataLayer.cart)) {\n\t\t\tpayload.facebook.custom_data = {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tcontent_ids : wpm.fbGetContentIdsFromCart(),\n\t\t\t\tvalue : wpm.getCartValue(),\n\t\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\t}\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"InitiateCheckout\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideBeginCheckout\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmAddToWishlist\", (event, product) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToWishlist\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToWishlist\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"viewItem\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"ViewContent\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.facebook.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"ViewContent\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.tiktok.properties = {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideViewItem\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"pmwEvent:Search\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"search\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Search\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tsearch_string: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"Search\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tquery: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideSearch\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmPlaceOrder\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"placeOrder\",\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"PlaceAnOrder\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientPlaceOrder\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"orderReceived\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Purchase\",\n\t\t\tevent_id : wpmDataLayer.order.id.toString(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tcontent_ids : wpm.facebookContentIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"CompletePayment\",\n\t\t\tevent_id : wpmDataLayer.order.id.toString(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\t\tcontents: wpm.getTikTokOrderItemIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideOrderReceivedPage\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// ! No server-to-server event is sent for this event because it is compiled and sent from the server directly\n})\n\njQuery(document).on(\"pmw:ready\", async () => {\n\n\t// /**\n\t// * Run as soon as wpm namespace is loaded\n\t// */\n\t//\n\t// await wpm.wpmDataLayerExists()\n\n\t// Watch for products visible in viewport\n\twpm.startIntersectionObserverToWatch()\n\n\t// Watch for lazy loaded products\n\twpm.startProductsMutationObserverToWatch()\n})\n\n\n\n\n","/**\n * Register event listeners\n */\n\n\n/**\n * add_to_cart event\n *\n * WC is inconsistent with events that emit add-to-cart events.\n * adding_to_cart and added_to_are legacy events. Also, they only work\n * on Ajax buttons on shop pages.\n */\n\nconst addToCartSelectors = [\n\t\".add_to_cart_button:not(.product_type_variable)\",\n\t\".ajax_add_to_cart\",\n\t\".single_add_to_cart_button\",\n].join(\",\")\n\njQuery(addToCartSelectors).on(\"click adding_to_cart\", (event) => {\n\t// console log current time\n\t// console.log(\"add_to_cart event fired at: \" + new Date().getTime())\n\n\ttry {\n\n\t\t// console.log(\"add_to_cart event detected\")\n\n\t\tlet quantity = 1,\n\t\t\tproductId\n\n\t\t// Only process on product pages\n\t\tif (wpmDataLayer.shop.page_type === \"product\") {\n\n\t\t\t// First process related and upsell products\n\t\t\tif (typeof jQuery(event.currentTarget).attr(\"href\") !== \"undefined\" && jQuery(event.currentTarget).attr(\"href\").includes(\"add-to-cart\")) {\n\n\t\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\")\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is simple product\n\t\t\tif (wpmDataLayer.shop.product_type === \"simple\") {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(event.currentTarget).val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is variable product or variable-subscription\n\t\t\tif ([\"variable\", \"variable-subscription\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(\"[name='variation_id']\").val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is grouped product\n\t\t\tif (wpmDataLayer.shop.product_type === \"grouped\") {\n\n\t\t\t\tjQuery(\".woocommerce-grouped-product-list-item\").each((index, element) => {\n\n\t\t\t\t\tquantity = Number(jQuery(element).find(\".input-text.qty\").val())\n\t\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\t\tlet classes = jQuery(element).attr(\"class\")\n\t\t\t\t\tproductId = wpm.getPostIdFromString(classes)\n\n\t\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// If is bundle product\n\t\t\tif (wpmDataLayer.shop.product_type === \"bundle\") {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(\"input[name=add-to-cart]\").val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\")\n\t\t\twpm.addProductToCart(productId, quantity)\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * If someone clicks anywhere on a custom /?add-to-cart=123 link\n * trigger the add to cart event\n */\n\n// jQuery(document).one(\"click\", \"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\", (event) => {\njQuery(\"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\").one(\"click\", (event) => {\n\n\ttry {\n\t\tif (jQuery(event.target).closest(\"a\").attr(\"href\")) {\n\n\t\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"), window.location.origin)\n\n\t\t\tif (url.searchParams.has(\"add-to-cart\")) {\n\n\t\t\t\tlet productId = url.searchParams.get(\"add-to-cart\")\n\t\t\t\twpm.addProductToCart(productId, 1)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// select item event\n// jQuery(document).on(\"click\", \".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\", (event) => {\njQuery(\".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\").on(\"click\", (event) => {\n\n\ttry {\n\n\t\t/**\n\t\t * On some pages the event fires multiple times, and on product pages\n\t\t * even on page load. Using e.stopPropagation helps to prevent this,\n\t\t * but I don't know why. We don't even have to use this, since only a real\n\t\t * product click yields a valid productId. So we filter the invalid click\n\t\t * events out later down in the code. I'll keep it that way because this is\n\t\t * the most compatible way across shops.\n\t\t *\n\t\t * e.stopPropagation();\n\t\t * */\n\n\t\tlet productId = jQuery(event.currentTarget).nextAll(\".wpmProductId:first\").data(\"id\")\n\n\t\t/**\n\t\t * On product pages, for some reason, the click event is triggered on the main product on page load.\n\t\t * In that case no ID is found. But we can discard it, since we only want to trigger the event on\n\t\t * related products, which are found below.\n\t\t */\n\n\t\tif (productId) {\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\t\t\tjQuery(document).trigger(\"wpmSelectContentGaUa\", product)\n\t\t\t\tjQuery(document).trigger(\"wpmSelectItem\", product)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// checkout_progress event\n// track checkout option event: entered valid billing email\n// jQuery(document).on(\"input\", \"#billing_email\", (event) => {\njQuery(\"#billing_email\").on(\"input\", (event) => {\n\n\tif (wpm.isEmail(jQuery(event.currentTarget).val())) {\n\t\t// wpm.fireCheckoutOption(2);\n\t\twpm.fireCheckoutProgress(2)\n\t\twpm.emailSelected = true\n\t}\n})\n\n\n/**\n * Place order button\n *\n * Track checkout option event: purchase click\n * https://stackoverflow.com/a/34112407/4688612\n * jQuery(document).one(\"click\", \"#place_order\", () => {\n *\n * Has to be hooked after document ready !\n */\njQuery(\"form.checkout\").on(\"checkout_place_order_success\", () => {\n\n\t// console log current time\n\t// console.log(\"checkout_place_order_success event fired at: \" + new Date().getTime())\n\n\tif (false === wpm.emailSelected) {\n\t\twpm.fireCheckoutProgress(2)\n\t}\n\n\tif (false === wpm.paymentMethodSelected) {\n\t\twpm.fireCheckoutProgress(3)\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t}\n\n\twpm.fireCheckoutProgress(4)\n\n\tjQuery(document).trigger(\"wpmPlaceOrder\", {})\n})\n\n/**\n * Update cart event\n *\n * Has to be hooked after document ready !\n */\njQuery(\"[name='update_cart']\").on(\"click\", () => {\n\n\ttry {\n\t\tjQuery(\".cart_item\").each((index, element) => {\n\n\t\t\tlet url = new URL(jQuery(element).find(\".product-remove\").find(\"a\").attr(\"href\"))\n\t\t\tlet productId = wpm.getProductIdByCartItemKeyUrl(url)\n\n\t\t\tlet quantity = jQuery(element).find(\".qty\").val()\n\n\t\t\tif (quantity === 0) {\n\t\t\t\twpm.removeProductFromCart(productId)\n\t\t\t} else if (quantity < wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.removeProductFromCart(productId, wpmDataLayer.cart[productId].quantity - quantity)\n\t\t\t} else if (quantity > wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.addProductToCart(productId, quantity - wpmDataLayer.cart[productId].quantity)\n\t\t\t}\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t\twpm.getCartItemsFromBackend()\n\t}\n})\n\n// add_to_wishlist\njQuery(\".add_to_wishlist,.wl-add-to\").on(\"click\", event => {\n\n\ttry {\n\n\t\tlet productId\n\n\t\tif (jQuery(event.currentTarget).data(\"productid\")) { // for the WooCommerce wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"productid\")\n\t\t} else if (jQuery(event.currentTarget).data(\"product-id\")) { // for the YITH wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"product-id\")\n\t\t}\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\n\t\tjQuery(document).trigger(\"wpmAddToWishlist\", product)\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called when the user selects all the required dropdowns / attributes\n *\n * Has to be hooked after document ready !\n *\n * https://stackoverflow.com/a/27849208/4688612\n * https://stackoverflow.com/a/65065335/4688612\n */\n\njQuery(\".single_variation_wrap\").on(\"show_variation\", (event, variation) => {\n\n\ttry {\n\t\tlet productId = wpm.getIdBasedOndVariationsOutputSetting(variation.variation_id)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\twpm.triggerViewItemEventPrep(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called on variable products when no selection has been done yet\n * or when the visitor deselects his choice.\n *\n * Has to be hooked after document ready !\n */\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n//\n// \t\ttry {\n// \t\t\tlet classes = jQuery(\"body\").attr(\"class\")\n// \t\t\tlet productId = classes.match(/(postid-)(\\d+)/)[2]\n//\n// \t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n//\n// \t\t\t/**\n// \t\t\t * If we have a variable product with no preset,\n// \t\t\t * and variations output is enabled,\n// \t\t\t * then we send a viewItem event with the first\n// \t\t\t * variation we find for the parent.\n// \t\t\t * If variations output is disabled,\n// \t\t\t * we just send the parent ID.\n// \t\t\t *\n// \t\t\t * And if Facebook microdata is active, use the\n// \t\t\t * microdata product ID.\n// \t\t\t */\n//\n// \t\t\tif (\n// \t\t\t\t\"variable\" === wpmDataLayer.shop.product_type &&\n// \t\t\t\twpmDataLayer?.general?.variationsOutput\n// \t\t\t) {\n// \t\t\t\tfor (const [key, product] of Object.entries(wpmDataLayer.products)) {\n// \t\t\t\t\tif (\"parentId\" in product) {\n//\n// \t\t\t\t\t\tproductId = product.id\n// \t\t\t\t\t\tbreak\n// \t\t\t\t\t}\n// \t\t\t\t}\n//\n// \t\t\t\tif (wpmDataLayer?.pixels?.facebook?.microdata_product_id) {\n// \t\t\t\t\tproductId = wpmDataLayer.pixels.facebook.microdata_product_id\n// \t\t\t\t}\n// \t\t\t}\n//\n// \t\t\t// console.log(\"hmm\")\n// \t\t\twpm.triggerViewItemEventPrep(productId)\n//\n// \t\t} catch (e) {\n// \t\t\tconsole.error(e)\n// \t\t}\n// \t})\n// })\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n// \t\tjQuery(document).trigger(\"wpmviewitem\")\n// \t})\n// })\n","/**\n * Create a wpm namespace under which all functions are declared\n */\n\n// https://stackoverflow.com/a/5947280/4688612\n\n(function (wpm, $, undefined) {\n\n\tconst wpmDeduper = {\n\t\tkeyName : \"_wpm_order_ids\",\n\t\tcookieExpiresDays: 365,\n\t}\n\n\tconst wpmRestSettings = {\n\t\t// cookiesAvailable : '_wpm_cookies_are_available',\n\t\tcookiePmwRestEndpointAvailable: \"_pmw_endpoint_available\",\n\t\trestEndpointPost : \"pmw/v1/test/\",\n\t\trestFails : 0,\n\t\trestFailsThreshold : 10,\n\t}\n\n\twpm.emailSelected = false\n\twpm.paymentMethodSelected = false\n\n\t// wpm.checkIfCookiesAvailable = function () {\n\t//\n\t// // read the cookie if previously set, if it is return true, otherwise continue\n\t// if (wpm.getCookie(wpmRestSettings.cookiesAvailable)) {\n\t// return true;\n\t// }\n\t//\n\t// // set the cookie for the session\n\t// Cookies.set(wpmRestSettings.cookiesAvailable, true);\n\t//\n\t// // read cookie, true if ok, false if not ok\n\t// return !!wpm.getCookie(wpmRestSettings.cookiesAvailable);\n\t// }\n\n\twpm.useRestEndpoint = () => {\n\n\t\t// only if sessionStorage is available\n\n\t\t// only if REST API endpoint is generally accessible\n\t\t// check in sessionStorage if we checked before and return answer\n\t\t// otherwise check if the endpoint is available, save answer in sessionStorage and return answer\n\n\t\t// only if not too many REST API errors happened\n\n\t\treturn wpm.isSessionStorageAvailable() &&\n\t\t\twpm.isRestEndpointAvailable() &&\n\t\t\twpm.isBelowRestErrorThreshold()\n\t}\n\n\twpm.isBelowRestErrorThreshold = () => window.sessionStorage.getItem(wpmRestSettings.restFails) <= wpmRestSettings.restFailsThreshold\n\n\twpm.isRestEndpointAvailable = async () => {\n\n\t\tif (window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable)) {\n\t\t\treturn JSON.parse(window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable))\n\t\t} else {\n\t\t\treturn await wpm.testEndpoint()\n\t\t}\n\t}\n\n\twpm.isSessionStorageAvailable = () => !!window.sessionStorage\n\n\t// Test the endpoint by sending a POST request\n\twpm.testEndpoint = async (\n\t\turl = wpm.root + wpmRestSettings.restEndpointPost,\n\t\tcookieName = wpmRestSettings.cookiePmwRestEndpointAvailable,\n\t) => {\n\n\t\tlet response = await fetch(url, {\n\t\t\tmethod : \"POST\",\n\t\t\tmode : \"cors\",\n\t\t\tcache : \"no-cache\",\n\t\t\tkeepalive: true,\n\t\t})\n\n\t\tif (response.status === 200) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(true))\n\t\t\treturn true\n\t\t} else if (response.status === 404) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t} else if (response.status === 0) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isWpmRestEndpointAvailable = (cookieName = wpmRestSettings.cookiePmwRestEndpointAvailable) => !!wpm.getCookie(cookieName)\n\n\twpm.writeOrderIdToStorage = (orderId, orderKey, source = \"thankyou_page\", expireDays = 365) => {\n\n\t\t// save the order ID in the browser storage\n\n\t\tif (!window.Storage) {\n\t\t\tlet expiresDate = new Date()\n\t\t\texpiresDate.setDate(expiresDate.getDate() + wpmDeduper.cookieExpiresDays)\n\n\t\t\tlet ids = []\n\t\t\tif (checkCookie()) {\n\t\t\t\tids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t}\n\n\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\tids.push(orderId)\n\t\t\t\tdocument.cookie = wpmDeduper.keyName + \"=\" + JSON.stringify(ids) + \";expires=\" + expiresDate.toUTCString()\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (localStorage.getItem(wpmDeduper.keyName) === null) {\n\t\t\t\tlet ids = []\n\t\t\t\tids.push(orderId)\n\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\n\t\t\t} else {\n\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\t\tids.push(orderId)\n\t\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof wpm.storeOrderIdOnServer === \"function\" && wpmDataLayer.orderDeduplication) {\n\t\t\twpm.storeOrderIdOnServer(orderKey, source)\n\t\t}\n\t}\n\n\tfunction checkCookie() {\n\t\tlet key = wpm.getCookie(wpmDeduper.keyName)\n\t\treturn key !== \"\"\n\t}\n\n\twpm.isOrderIdStored = orderId => {\n\n\t\tif (wpmDataLayer.orderDeduplication) {\n\n\t\t\tif (!window.Storage) {\n\n\t\t\t\tif (checkCookie()) {\n\t\t\t\t\tlet ids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (localStorage.getItem(wpmDeduper.keyName) !== null) {\n\t\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.log(\"order duplication prevention: off\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isEmail = email => {\n\n\t\t// https://emailregex.com/\n\n\t\tlet regex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n\n\t\treturn regex.test(email)\n\t}\n\n\twpm.removeProductFromCart = async (productId, quantityToRemove = null) => {\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tlet quantity\n\n\t\t\tif (quantityToRemove == null) {\n\t\t\t\tquantity = wpmDataLayer.cart[productId].quantity\n\t\t\t} else {\n\t\t\t\tquantity = quantityToRemove\n\t\t\t}\n\n\t\t\tif (!wpmDataLayer.cart[productId]) {\n\t\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\t}\n\n\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\tjQuery(document).trigger(\"wpmRemoveFromCart\", product)\n\n\t\t\tif (quantityToRemove == null || wpmDataLayer.cart[productId].quantity === quantityToRemove) {\n\n\t\t\t\tdelete wpmDataLayer.cart[productId]\n\n\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t} else {\n\n\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity - quantity\n\n\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\t// console.log('getting cart from back end');\n\t\t\t// wpm.getCartItemsFromBackend();\n\t\t\t// console.log('getting cart from back end done');\n\t\t}\n\t}\n\n\twpm.getIdBasedOndVariationsOutputSetting = productId => {\n\n\t\ttry {\n\t\t\tif (wpmDataLayer?.general?.variationsOutput) return productId\n\n\t\t\tif (wpmDataLayer.products[productId].isVariation) return wpmDataLayer.products[productId].parentId\n\n\t\t\treturn productId\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// add_to_cart\n\twpm.addProductToCart = async (productId, quantity) => {\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (!wpmDataLayer?.products[productId]) {\n\t\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\t}\n\n\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\tjQuery(document).trigger(\"wpmAddToCart\", product)\n\n\t\t\t// add product to cart wpmDataLayer['cart']\n\n\t\t\t// if the product already exists in the object, only add the additional quantity\n\t\t\t// otherwise create that product object in the wpmDataLayer['cart']\n\t\t\tif (wpmDataLayer?.cart[productId]) {\n\n\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity + quantity\n\t\t\t} else {\n\n\t\t\t\tif (!(\"cart\" in wpmDataLayer)) wpmDataLayer.cart = {}\n\n\t\t\t\twpmDataLayer.cart[productId] = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\t\t\t}\n\n\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\n\t\t\t// fallback if wpmDataLayer.cart and wpmDataLayer.products got out of sync in case cart caching has an issue\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\n\t}\n\n\twpm.getCartItems = () => {\n\n\t\tif (sessionStorage) {\n\t\t\tif (!sessionStorage.getItem(\"wpmDataLayerCart\") || wpmDataLayer.shop.page_type === \"order_received_page\") {\n\t\t\t\tsessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify({}))\n\t\t\t} else {\n\t\t\t\twpm.saveCartObjectToDataLayer(JSON.parse(sessionStorage.getItem(\"wpmDataLayerCart\")))\n\t\t\t}\n\t\t} else {\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\n\t}\n\n\t// get all cart items from the backend\n\twpm.getCartItemsFromBackend = () => {\n\t\ttry {\n\n\t\t\t/**\n\t\t\t * Can't use a REST API endpoint, as the cart session will not be loaded if the\n\t\t\t * endpoint is called.\n\t\t\t *\n\t\t\t * https://wordpress.org/support/topic/wc-cart-is-null-in-custom-rest-api/#post-11442843\n\t\t\t */\n\n\t\t\t/**\n\t\t\t * Get the cart items from the backend the data object using fetch API\n\t\t\t * and log success or error messages\n\t\t\t * and url encoded data\n\t\t\t */\n\t\t\tfetch(wpm.ajax_url, {\n\t\t\t\tmethod : \"POST\",\n\t\t\t\tcache : \"no-cache\",\n\t\t\t\tbody : new URLSearchParams({action: \"pmw_get_cart_items\"}),\n\t\t\t\tkeepalive: true,\n\t\t\t})\n\t\t\t\t.then(response => {\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\treturn response.json()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then(data => {\n\n\t\t\t\t\tif (data.success) {\n\n\t\t\t\t\t\tif (!data.data[\"cart\"]) data.data[\"cart\"] = {}\n\n\t\t\t\t\t\twpm.saveCartObjectToDataLayer(data.data[\"cart\"])\n\n\t\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(data.data[\"cart\"]))\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// get productIds from the backend\n\twpm.getProductsFromBackend = async productIds => {\n\n\t\tif (wpmDataLayer?.products) {\n\t\t\t// If productIds already exists as key in wpmDataLayer.products, remove it from the array\n\t\t\tproductIds = productIds.filter(productId => !(productId in wpmDataLayer.products))\n\t\t}\n\n\t\t// if no products IDs are in the object, don't try to get anything from the server\n\t\tif (!productIds || productIds.length === 0) return\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/products/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\tpageId : wpmDataLayer.general.pageId,\n\t\t\t\t\t\tpageType : wpmDataLayer.shop.page_type,\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t} else {\n\n\t\t\t\t// Get the product details from the backend the data object using fetch API\n\t\t\t\t// and log success or error messages\n\t\t\t\t// and url encoded data\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction : \"pmw_get_product_ids\",\n\t\t\t\t\t\tpageId : wpmDataLayer.general.pageId,\n\t\t\t\t\t\tpageType : wpmDataLayer.shop.page_type,\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (response.ok) {\n\t\t\t\tlet responseData = await response.json()\n\t\t\t\tif (responseData.success) {\n\t\t\t\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, responseData.data)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Error getting products from backend\")\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\n\t\treturn true\n\t}\n\n\twpm.saveCartObjectToDataLayer = cartObject => {\n\n\t\twpmDataLayer.cart = cartObject\n\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, cartObject)\n\t}\n\n\twpm.triggerViewItemEventPrep = async productId => {\n\n\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t} else {\n\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t}\n\t}\n\n\twpm.triggerViewItemEvent = productId => {\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t}\n\n\twpm.triggerViewItemEventNoProduct = () => {\n\t\tjQuery(document).trigger(\"wpmViewItem\")\n\t}\n\n\twpm.fireCheckoutOption = (step, checkout_option = null, value = null) => {\n\n\t\tlet data = {\n\t\t\tstep : step,\n\t\t\tcheckout_option: checkout_option,\n\t\t\tvalue : value,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutOption\", data)\n\t}\n\n\twpm.fireCheckoutProgress = step => {\n\n\t\tlet data = {\n\t\t\tstep: step,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutProgress\", data)\n\t}\n\n\twpm.getPostIdFromString = string => {\n\n\t\ttry {\n\t\t\treturn string.match(/(post-)(\\d+)/)[2]\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.triggerViewItemList = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tjQuery(document).trigger(\"wpmViewItemList\", wpm.getProductDataForViewItemEvent(productId))\n\t}\n\n\twpm.getProductDataForViewItemEvent = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\ttry {\n\t\t\tif (wpmDataLayer.products[productId]) {\n\n\t\t\t\treturn wpm.getProductDetailsFormattedForEvent(productId)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getMainProductIdFromProductPage = () => {\n\n\t\ttry {\n\t\t\tif ([\"simple\", \"variable\", \"grouped\", \"composite\", \"bundle\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\t\t\t\treturn jQuery(\".wpmProductId:first\").data(\"id\")\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.viewItemListTriggerTestMode = target => {\n\n\t\tjQuery(target).css({\"position\": \"relative\"})\n\t\tjQuery(target).append(\"
\")\n\t\tjQuery(target).find(\"#viewItemListTriggerOverlay\").css({\n\t\t\t\"z-index\" : \"10\",\n\t\t\t\"display\" : \"block\",\n\t\t\t\"position\" : \"absolute\",\n\t\t\t\"height\" : \"100%\",\n\t\t\t\"top\" : \"0\",\n\t\t\t\"left\" : \"0\",\n\t\t\t\"right\" : \"0\",\n\t\t\t\"opacity\" : wpmDataLayer.viewItemListTrigger.opacity,\n\t\t\t\"background-color\": wpmDataLayer.viewItemListTrigger.backgroundColor,\n\t\t})\n\t}\n\n\twpm.getSearchTermFromUrl = () => {\n\n\t\ttry {\n\t\t\tlet urlParameters = new URLSearchParams(window.location.search)\n\t\t\treturn urlParameters.get(\"s\")\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// we need this to track timeouts for intersection observers\n\tlet ioTimeouts = {}\n\n\twpm.observerCallback = (entries, observer) => {\n\n\t\tentries.forEach((entry) => {\n\n\t\t\ttry {\n\t\t\t\tlet productId\n\n\t\t\t\tlet elementId = jQuery(entry.target).data(\"ioid\")\n\n\t\t\t\t// Get the productId from next element, if wpmProductId is a sibling, like in Gutenberg blocks\n\t\t\t\t// otherwise go search in children, like in regular WC loop items\n\t\t\t\tif (jQuery(entry.target).next(\".wpmProductId\").length) {\n\t\t\t\t\t// console.log('test 1');\n\t\t\t\t\tproductId = jQuery(entry.target).next(\".wpmProductId\").data(\"id\")\n\t\t\t\t} else {\n\t\t\t\t\tproductId = jQuery(entry.target).find(\".wpmProductId\").data(\"id\")\n\t\t\t\t}\n\n\n\t\t\t\tif (!productId) throw Error(\"wpmProductId element not found\")\n\n\t\t\t\tif (entry.isIntersecting) {\n\n\t\t\t\t\tioTimeouts[elementId] = setTimeout(() => {\n\n\t\t\t\t\t\twpm.triggerViewItemList(productId)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) wpm.viewItemListTriggerTestMode(entry.target)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.repeat === false) observer.unobserve(entry.target)\n\t\t\t\t\t}, wpmDataLayer.viewItemListTrigger.timeout)\n\n\t\t\t\t} else {\n\n\t\t\t\t\tclearTimeout(ioTimeouts[elementId])\n\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) jQuery(entry.target).find(\"#viewItemListTriggerOverlay\").remove()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e)\n\t\t\t}\n\t\t})\n\t}\n\n\t// fire view_item_list only on products that have become visible\n\tlet io\n\tlet ioid = 0\n\tlet allIoElementsToWatch\n\n\tlet getAllElementsToWatch = () => {\n\n\t\tallIoElementsToWatch = jQuery(\".wpmProductId\")\n\t\t\t.map(function (i, elem) {\n\n\t\t\t\tif (\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"type-product\") ||\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"product\") ||\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"product-item-inner\")\n\t\t\t\t) {\n\t\t\t\t\treturn jQuery(elem).parent()\n\t\t\t\t} else if (\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"wc-block-grid__product\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"product\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"product-small\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"woocommerce-LoopProduct-link\")\n\t\t\t\t) {\n\t\t\t\t\treturn jQuery(this).prev()\n\t\t\t\t} else if (jQuery(elem).closest(\".product\").length) {\n\t\t\t\t\treturn jQuery(elem).closest(\".product\")\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\twpm.startIntersectionObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// enable view_item_list test mode from browser\n\t\t\tif (wpm.urlHasParameter(\"vildemomode\")) wpmDataLayer.viewItemListTrigger.testMode = true\n\n\t\t\t// set up intersection observer\n\t\t\tio = new IntersectionObserver(wpm.observerCallback, {\n\t\t\t\tthreshold: wpmDataLayer.viewItemListTrigger.threshold,\n\t\t\t})\n\n\t\t\tgetAllElementsToWatch()\n\n\t\t\tallIoElementsToWatch.each((i, elem) => {\n\n\t\t\t\tjQuery(elem[0]).data(\"ioid\", ioid++)\n\n\t\t\t\tio.observe(elem[0])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// watch DOM for new lazy loaded products and add them to the intersection observer\n\twpm.startProductsMutationObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// Pass in the target node, as well as the observer options\n\n\t\t\t// selects the most common parent node\n\t\t\t// https://stackoverflow.com/a/7648323/4688612\n\t\t\tlet productsNode = jQuery(\".wpmProductId:eq(0)\").parents().has(jQuery(\".wpmProductId:eq(1)\").parents()).first()\n\n\t\t\tif (productsNode.length) {\n\t\t\t\tproductsMutationObserver.observe(productsNode[0], {\n\t\t\t\t\tattributes : true,\n\t\t\t\t\tchildList : true,\n\t\t\t\t\tcharacterData: true,\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// Create an observer instance\n\tlet productsMutationObserver = new MutationObserver(mutations => {\n\n\t\tmutations.forEach(mutation => {\n\t\t\tlet newNodes = mutation.addedNodes // DOM NodeList\n\t\t\tif (newNodes !== null) { // If there are new nodes added\n\t\t\t\tlet nodes = jQuery(newNodes) // jQuery set\n\t\t\t\tnodes.each(function () {\n\t\t\t\t\tif (\n\t\t\t\t\t\tjQuery(this).hasClass(\"type-product\") ||\n\t\t\t\t\t\tjQuery(this).hasClass(\"product-small\") ||\n\t\t\t\t\t\tjQuery(this).hasClass(\"wc-block-grid__product\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// check if the node has a child or sibling wpmProductId\n\t\t\t\t\t\t// if yes add it to the intersectionObserver\n\t\t\t\t\t\tif (hasWpmProductIdElement(this)) {\n\t\t\t\t\t\t\tjQuery(this).data(\"ioid\", ioid++)\n\t\t\t\t\t\t\tio.observe(this)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n\n\tlet hasWpmProductIdElement = elem =>\n\t\t!!(jQuery(elem).find(\".wpmProductId\").length ||\n\t\t\tjQuery(elem).siblings(\".wpmProductId\").length)\n\n\twpm.setCookie = (cookieName, cookieValue = \"\", expiryDays = null) => {\n\n\t\tif (expiryDays) {\n\n\t\t\tlet d = new Date()\n\t\t\td.setTime(d.getTime() + (expiryDays * 24 * 60 * 60 * 1000))\n\t\t\tlet expires = \"expires=\" + d.toUTCString()\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";\" + expires + \";path=/\"\n\t\t} else {\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";path=/\"\n\t\t}\n\t}\n\n\twpm.getCookie = cookieName => {\n\n\t\tlet name = cookieName + \"=\"\n\t\tlet decodedCookie = decodeURIComponent(document.cookie)\n\t\tlet ca = decodedCookie.split(\";\")\n\n\t\tfor (let i = 0; i < ca.length; i++) {\n\n\t\t\tlet c = ca[i]\n\n\t\t\twhile (c.charAt(0) == \" \") {\n\t\t\t\tc = c.substring(1)\n\t\t\t}\n\n\t\t\tif (c.indexOf(name) == 0) {\n\t\t\t\treturn c.substring(name.length, c.length)\n\t\t\t}\n\t\t}\n\n\t\treturn \"\"\n\t}\n\n\twpm.deleteCookie = cookieName => {\n\t\twpm.setCookie(cookieName, \"\", -1)\n\t}\n\n\twpm.getWpmSessionData = () => {\n\n\t\tif (window.sessionStorage) {\n\n\t\t\tlet data = window.sessionStorage.getItem(\"_wpm\")\n\n\t\t\tif (data !== null) {\n\t\t\t\treturn JSON.parse(data)\n\t\t\t} else {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t} else {\n\t\t\treturn {}\n\t\t}\n\t}\n\n\twpm.setWpmSessionData = data => {\n\t\tif (window.sessionStorage) {\n\t\t\twindow.sessionStorage.setItem(\"_wpm\", JSON.stringify(data))\n\t\t}\n\t}\n\n\twpm.storeOrderIdOnServer = async (orderKey, source) => {\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/pixels-fired/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\theaders : {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\t\"X-WP-Nonce\" : wpm.nonce_wp_rest,\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\t// order_id: orderId,\n\t\t\t\t\t\torder_key: orderKey,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\t// nonce : wpm.pmw_nonce,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t})\n\n\t\t\t} else {\n\t\t\t\t// save the state in the database\n\n\t\t\t\t// Send the data object with ajax request\n\t\t\t\t// and log success or error using fetch API and url encoded\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction: \"pmw_purchase_pixels_fired\",\n\t\t\t\t\t\t// order_id: orderId,\n\t\t\t\t\t\torder_key : orderKey,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\tnonce_ajax: wpm.nonce_ajax,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst responseJson = await response.json()\n\n\t\t\tif (responseJson.success) {\n\t\t\t\tconsole.log(\"wpm.storeOrderIdOnServer success\")\n\t\t\t} else {\n\t\t\t\tconsole.error(\"wpm.storeOrderIdOnServer error\", responseJson)\n\t\t\t}\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getProductIdByCartItemKeyUrl = url => {\n\n\t\tlet searchParams = new URLSearchParams(url.search)\n\t\tlet cartItemKey = searchParams.get(\"remove_item\")\n\n\t\tlet productId\n\n\t\tif (wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"] === 0) {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"product_id\"]\n\t\t} else {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"]\n\t\t}\n\n\t\treturn productId\n\t}\n\n\twpm.getAddToCartLinkProductIds = () =>\n\t\tjQuery(\"a\").map(function () {\n\t\t\tlet href = jQuery(this).attr(\"href\")\n\n\t\t\tif (href && href.includes(\"?add-to-cart=\")) {\n\t\t\t\tlet matches = href.match(/(add-to-cart=)(\\d+)/)\n\t\t\t\tif (matches) return matches[2]\n\t\t\t}\n\t\t}).get()\n\n\twpm.getProductDetailsFormattedForEvent = (productId, quantity = 1) => {\n\n\t\tlet product = {\n\t\t\tid : productId.toString(),\n\t\t\tdyn_r_ids : wpmDataLayer.products[productId].dyn_r_ids,\n\t\t\tname : wpmDataLayer.products[productId].name,\n\t\t\tlist_name : wpmDataLayer.shop.list_name,\n\t\t\tbrand : wpmDataLayer.products[productId].brand,\n\t\t\tcategory : wpmDataLayer.products[productId].category,\n\t\t\tvariant : wpmDataLayer.products[productId].variant,\n\t\t\tlist_position: wpmDataLayer.products[productId].position,\n\t\t\tquantity : quantity,\n\t\t\tprice : wpmDataLayer.products[productId].price,\n\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\tisVariable : wpmDataLayer.products[productId].isVariable,\n\t\t\tisVariation : wpmDataLayer.products[productId].isVariation,\n\t\t\tparentId : wpmDataLayer.products[productId].parentId,\n\t\t}\n\n\t\tif (product.isVariation) product[\"parentId_dyn_r_ids\"] = wpmDataLayer.products[productId].parentId_dyn_r_ids\n\n\t\treturn product\n\t}\n\n\twpm.setReferrerToCookie = () => {\n\n\t\t// can't use session storage as we can't read it from the server\n\t\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\t\t\twpm.setCookie(\"wpmReferrer\", document.referrer)\n\t\t}\n\t}\n\n\twpm.getReferrerFromCookie = () => {\n\n\t\tif (wpm.getCookie(\"wpmReferrer\")) {\n\t\t\treturn wpm.getCookie(\"wpmReferrer\")\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t}\n\n\twpm.getClidFromBrowser = (clidId = \"gclid\") => {\n\n\t\tlet clidCookieId\n\n\t\tclidCookieId = {\n\t\t\tgclid: \"_gcl_aw\",\n\t\t\tdclid: \"_gcl_dc\",\n\t\t}\n\n\t\tif (wpm.getCookie(clidCookieId[clidId])) {\n\n\t\t\tlet clidCookie = wpm.getCookie(clidCookieId[clidId])\n\t\t\tlet matches = clidCookie.match(/(GCL.[\\d]*.)(.*)/)\n\t\t\treturn matches[2]\n\t\t} else {\n\t\t\treturn \"\"\n\t\t}\n\t}\n\n\twpm.getUserAgent = () => navigator.userAgent\n\n\twpm.getViewPort = () => ({\n\t\twidth : Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\n\t\theight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0),\n\t})\n\n\n\twpm.version = () => {\n\t\tconsole.log(wpmDataLayer.version)\n\t}\n\n\t/**\n\t * https://api.jquery.com/jquery.getscript/\n\t *\n\t * Switched back to jQuery.ajax as the fetch method on some sites returned a type error\n\t * Possible reasons are:\n\t * * CORS mismatch\n\t * * The user is using an ad blocker\n\t */\n\n\twpm.loadScriptAndCacheIt = url => {\n\n\t\t// Get and load the script using fetch API, if possible from cache, and return it without using eval\n\t\t// return fetch(url, {\n\t\t// \tmethod : \"GET\",\n\t\t// \tcache : \"default\",\n\t\t// \tkeepalive: true,\n\t\t// })\n\t\t// \t.then(response => {\n\t\t// \t\tif (response.ok) {\n\t\t// \t\t\t// console.log(\"response\", response)\n\t\t// \t\t\treturn response.text()\n\t\t// \t\t\t// console.log(\"wpm.loadScriptAndCacheIt success: \" + url)\n\t\t// \t\t} else {\n\t\t// \t\t\tthrow new Error(\"Network response was not ok: \" + url)\n\t\t// \t\t}\n\t\t// \t})\n\t\t// \t.then(script => {\n\t\t// \t\t// Execute the script\n\t\t// \t\t// console.error(\"executing script: \" + script)\n\t\t// \t\teval(script)\n\t\t// \t\t// console.log(\"executed script: \" + script)\n\t\t// \t})\n\t\t// \t.catch(e => {\n\t\t// \t\tconsole.error(e)\n\t\t// \t})\n\n\t\tlet options = {\n\t\t\tdataType: \"script\",\n\t\t\tcache : true,\n\t\t\turl : url,\n\t\t}\n\n\t\treturn jQuery.ajax(options)\n\t}\n\n\twpm.getOrderItemPrice = orderItem => (orderItem.total + orderItem.total_tax) / orderItem.quantity\n\n\twpm.hasLoginEventFired = () => {\n\t\tlet data = wpm.getWpmSessionData()\n\t\treturn data?.loginEventFired\n\t}\n\n\twpm.setLoginEventFired = () => {\n\t\tlet data = wpm.getWpmSessionData()\n\t\tdata[\"loginEventFired\"] = true\n\t\twpm.setWpmSessionData(data)\n\t}\n\n\twpm.pageLoaded = async () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\t\t\tif (\"complete\" === document.readyState) return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\twpm.pageReady = () => {\n\t\treturn new Promise(resolve => {\n\t\t\t(function waitForVar() {\n\t\t\t\tif (\"interactive\" === document.readyState || \"complete\" === document.readyState) return resolve()\n\t\t\t\tsetTimeout(waitForVar, 50)\n\t\t\t})()\n\t\t})\n\t}\n\n\twpm.isMiniCartActive = () => {\n\t\tif (window.sessionStorage) {\n\t\t\tfor (const [key, value] of Object.entries(window.sessionStorage)) {\n\t\t\t\tif (key.includes(\"wc_fragments\")) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.doesWooCommerceCartExist = () => document.cookie.includes(\"woocommerce_items_in_cart\")\n\n\twpm.urlHasParameter = parameter => {\n\t\tlet urlParams = new URLSearchParams(window.location.search)\n\t\treturn urlParams.has(parameter)\n\t}\n\n\t// https://stackoverflow.com/a/60606893/4688612\n\twpm.hashAsync = (algo, str) => {\n\t\treturn crypto.subtle.digest(algo, new TextEncoder(\"utf-8\").encode(str)).then(buf => {\n\t\t\treturn Array.prototype.map.call(new Uint8Array(buf), x => ((\"00\" + x.toString(16)).slice(-2))).join(\"\")\n\t\t})\n\t}\n\n\twpm.getCartValue = () => {\n\n\t\tlet value = 0\n\n\t\tif (wpmDataLayer?.cart) {\n\n\t\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\t\t// content_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\n\t\t\t\tlet product = wpmDataLayer.cart[key]\n\n\t\t\t\tvalue += product.quantity * product.price\n\t\t\t}\n\t\t}\n\n\t\treturn value\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern\n\t *\n\t * @param patterns\n\t * @returns {boolean}\n\t */\n\twpm.doesUrlContainPatterns = patterns => {\n\n\t\tfor (const pattern of patterns) {\n\t\t\tif (new RegExp(pattern).test(window.location.href)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern that is on the tracking exclusion list\n\t *\n\t * https://www.linkedin.com/pulse/how-remove-google-robot-problem-via-gtm-facebook-pixel-hjelpdahl/\n\t * https://www.youtube.com/watch?v=b4I1ePZt8Z0\n\t *\n\t * @returns {boolean}\n\t */\n\twpm.excludeDomainFromTracking = () => {\n\n\t\tlet excludeDomains = [\n\t\t\t\"appspot.com\",\n\t\t\t\"translate.google.com\",\n\t\t]\n\n\t\tif (wpmDataLayer?.general?.excludeDomains) {\n\t\t\texcludeDomains = [...excludeDomains, ...wpmDataLayer.general.excludeDomains]\n\t\t}\n\n\t\t// Abort if URL contains excluded domains\n\t\tif (excludeDomains.some(domain => window.location.href.includes(domain))) {\n\t\t\tconsole.debug(\"Pixel Manager for WooCommerce: Aborted due to excluded domain\")\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.getRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\n\twpm.pmwConsoleMessage = () => {\n\t\tlet pmwConsoleMessage = \"Pixel Manager for WooCommerce: \"\n\t\tpmwConsoleMessage += wpmDataLayer.version.pro ? \"pro\" : \"free\"\n\t\tpmwConsoleMessage += \" | distro: \" + wpmDataLayer.version.distro\n\t\tif (wpmDataLayer.version.distro === \"fms\" && wpmDataLayer.version.pro) {\n\t\t\tpmwConsoleMessage += \" | active license: \" + (wpmDataLayer.version.eligibleForUpdates ? \"yes\" : \"no\")\n\t\t}\n\t\tpmwConsoleMessage += \" | version: \" + wpmDataLayer.version.number\n\n\t\tconsole.log(pmwConsoleMessage)\n\t}\n\n\twpm.canLoadPremiumFeatures = () => {\n\t\treturn (wpmDataLayer.version.distro === \"fms\" && wpmDataLayer.version.pro && wpmDataLayer.version.eligibleForUpdates) || wpmDataLayer.version.distro === \"wcm\"\n\t}\n\n\tlet jQueryReadyFired = false\n\n\twpm.triggerDomReadyEvent = () => {\n\t\tif (jQueryReadyFired === false) jQuery(document).trigger(\"pmw:ready\")\n\t\tjQueryReadyFired = true\n\t}\n\n\tjQuery(document).on(\"ready\", () => {\n\t\twpm.triggerDomReadyEvent()\n\t})\n\n\tdocument.addEventListener(\"DOMContentLoaded\", () => {\n\t\twpm.triggerDomReadyEvent()\n\t})\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load all WPM functions\n *\n * Ignore event listeners. They need to be loaded after\n * we made sure that jQuery has been loaded.\n */\n\nrequire(\"./functions\")\nrequire(\"./cookie_consent\")\nrequire(\"./ip_check\")\n\n// #if process.env.TIER === 'premium'\n// if (wpm.canLoadPremiumFeatures()) {\n// \trequire(\"./functions_premium\")\n// }\n// #endif\n","(function (wpm, $, undefined) {\n\n\twpm.jQueryExists = async () => new Promise(resolve => {\n\n\t\t(function waitForjQuery() {\n\t\t\tif (typeof jQuery !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForjQuery, 100)\n\t\t})()\n\t})\n\n\twpm.wpmDataLayerExists = async () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\t\t\tif (typeof wpmDataLayer !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * IP Check\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.ipCheck = async () => {\n\n\t\tif (window.sessionStorage && sessionStorage.getItem(\"pmw_ip_valid\")) {\n\t\t\treturn !!JSON.parse(sessionStorage.getItem(\"pmw_ip_valid\"))\n\t\t}\n\n\t\t// Cloudflare takes approx. 70ms to respond\n\t\tconst response = await fetch(\"https://www.cloudflare.com/cdn-cgi/trace\")\n\t\tlet data = await response.text()\n\n\t\t// Convert key-value pairs to JSON\n\t\t// https://stackoverflow.com/a/39284735/452587\n\t\tdata = data\n\t\t\t.trim()\n\t\t\t.split(\"\\n\")\n\t\t\t.reduce((obj, pair) => {\n\t\t\t\tpair = pair.split(\"=\")\n\t\t\t\treturn obj[pair[0]] = pair[1], obj\n\t\t\t}, {})\n\n\t\tif (isOnBlacklist(data.ip)) {\n\t\t\tif (window.sessionStorage) window.sessionStorage.setItem(\"pmw_ip_valid\", JSON.stringify(false))\n\t\t\treturn false\n\t\t}\n\n\t\tif (window.sessionStorage) window.sessionStorage.setItem(\"pmw_ip_valid\", JSON.stringify(true))\n\t\treturn true\n\t}\n\n\tconst isOnBlacklist = ip => {\n\n\t\tconst {isInSubnet} = require(\"is-in-subnet\")\n\n\t\tfor (const ipName of getBlacklist()) {\n\n\t\t\tif (isCidr(ipName)) {\n\t\t\t\ttry {\n\t\t\t\t\tif (isInSubnet(ip, ipName)) return true\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (ip === ipName) return true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\tconst isCidr = ipName => {\n\n\t\tconst {isRange} = require(\"range_check\")\n\n\t\treturn isRange(ipName)\n\t}\n\n\tconst getBlacklist = () => {\n\n\t\tconst blacklist = [\n\t\t\t// \"91.190.12.52/32\", // for testing\n\t\t\t// \"91.190.12.52\", // for testing\n\t\t]\n\n\t\tconst google = [\n\t\t\t\"2001:4860:4801:10::/64\",\n\t\t\t\"2001:4860:4801:11::/64\",\n\t\t\t\"2001:4860:4801:12::/64\",\n\t\t\t\"2001:4860:4801:13::/64\",\n\t\t\t\"2001:4860:4801:14::/64\",\n\t\t\t\"2001:4860:4801:15::/64\",\n\t\t\t\"2001:4860:4801:16::/64\",\n\t\t\t\"2001:4860:4801:17::/64\",\n\t\t\t\"2001:4860:4801:18::/64\",\n\t\t\t\"2001:4860:4801:19::/64\",\n\t\t\t\"2001:4860:4801:1a::/64\",\n\t\t\t\"2001:4860:4801:1b::/64\",\n\t\t\t\"2001:4860:4801:20::/64\",\n\t\t\t\"2001:4860:4801:21::/64\",\n\t\t\t\"2001:4860:4801:22::/64\",\n\t\t\t\"2001:4860:4801:23::/64\",\n\t\t\t\"2001:4860:4801:24::/64\",\n\t\t\t\"2001:4860:4801:25::/64\",\n\t\t\t\"2001:4860:4801:26::/64\",\n\t\t\t\"2001:4860:4801:27::/64\",\n\t\t\t\"2001:4860:4801:28::/64\",\n\t\t\t\"2001:4860:4801:29::/64\",\n\t\t\t\"2001:4860:4801:2::/64\",\n\t\t\t\"2001:4860:4801:2a::/64\",\n\t\t\t\"2001:4860:4801:2b::/64\",\n\t\t\t\"2001:4860:4801:2c::/64\",\n\t\t\t\"2001:4860:4801:2d::/64\",\n\t\t\t\"2001:4860:4801:2e::/64\",\n\t\t\t\"2001:4860:4801:2f::/64\",\n\t\t\t\"2001:4860:4801:30::/64\",\n\t\t\t\"2001:4860:4801:31::/64\",\n\t\t\t\"2001:4860:4801:32::/64\",\n\t\t\t\"2001:4860:4801:33::/64\",\n\t\t\t\"2001:4860:4801:34::/64\",\n\t\t\t\"2001:4860:4801:35::/64\",\n\t\t\t\"2001:4860:4801:36::/64\",\n\t\t\t\"2001:4860:4801:37::/64\",\n\t\t\t\"2001:4860:4801:38::/64\",\n\t\t\t\"2001:4860:4801:39::/64\",\n\t\t\t\"2001:4860:4801:3::/64\",\n\t\t\t\"2001:4860:4801:3a::/64\",\n\t\t\t\"2001:4860:4801:3b::/64\",\n\t\t\t\"2001:4860:4801:3c::/64\",\n\t\t\t\"2001:4860:4801:3d::/64\",\n\t\t\t\"2001:4860:4801:3e::/64\",\n\t\t\t\"2001:4860:4801:40::/64\",\n\t\t\t\"2001:4860:4801:41::/64\",\n\t\t\t\"2001:4860:4801:42::/64\",\n\t\t\t\"2001:4860:4801:43::/64\",\n\t\t\t\"2001:4860:4801:44::/64\",\n\t\t\t\"2001:4860:4801:45::/64\",\n\t\t\t\"2001:4860:4801:46::/64\",\n\t\t\t\"2001:4860:4801:47::/64\",\n\t\t\t\"2001:4860:4801:48::/64\",\n\t\t\t\"2001:4860:4801:49::/64\",\n\t\t\t\"2001:4860:4801:4a::/64\",\n\t\t\t\"2001:4860:4801:50::/64\",\n\t\t\t\"2001:4860:4801:51::/64\",\n\t\t\t\"2001:4860:4801:53::/64\",\n\t\t\t\"2001:4860:4801:60::/64\",\n\t\t\t\"2001:4860:4801:61::/64\",\n\t\t\t\"2001:4860:4801:62::/64\",\n\t\t\t\"2001:4860:4801:63::/64\",\n\t\t\t\"2001:4860:4801:64::/64\",\n\t\t\t\"2001:4860:4801:65::/64\",\n\t\t\t\"2001:4860:4801:66::/64\",\n\t\t\t\"2001:4860:4801:67::/64\",\n\t\t\t\"2001:4860:4801:68::/64\",\n\t\t\t\"2001:4860:4801:69::/64\",\n\t\t\t\"2001:4860:4801:6a::/64\",\n\t\t\t\"2001:4860:4801:6b::/64\",\n\t\t\t\"2001:4860:4801:6c::/64\",\n\t\t\t\"2001:4860:4801:6d::/64\",\n\t\t\t\"2001:4860:4801:6e::/64\",\n\t\t\t\"2001:4860:4801:6f::/64\",\n\t\t\t\"2001:4860:4801:70::/64\",\n\t\t\t\"2001:4860:4801:71::/64\",\n\t\t\t\"2001:4860:4801:72::/64\",\n\t\t\t\"2001:4860:4801:73::/64\",\n\t\t\t\"2001:4860:4801:74::/64\",\n\t\t\t\"2001:4860:4801:75::/64\",\n\t\t\t\"2001:4860:4801:76::/64\",\n\t\t\t\"2001:4860:4801:77::/64\",\n\t\t\t\"2001:4860:4801:80::/64\",\n\t\t\t\"2001:4860:4801:81::/64\",\n\t\t\t\"2001:4860:4801:82::/64\",\n\t\t\t\"2001:4860:4801:83::/64\",\n\t\t\t\"2001:4860:4801:84::/64\",\n\t\t\t\"2001:4860:4801:85::/64\",\n\t\t\t\"2001:4860:4801:86::/64\",\n\t\t\t\"2001:4860:4801:90::/64\",\n\t\t\t\"2001:4860:4801:91::/64\",\n\t\t\t\"2001:4860:4801:92::/64\",\n\t\t\t\"2001:4860:4801::/64\",\n\t\t\t\"2001:4860:4801:c::/64\",\n\t\t\t\"2001:4860:4801:f::/64\",\n\t\t\t\"34.100.182.96/28\",\n\t\t\t\"34.101.50.144/28\",\n\t\t\t\"34.118.254.0/28\",\n\t\t\t\"34.118.66.0/28\",\n\t\t\t\"34.126.178.96/28\",\n\t\t\t\"34.146.150.144/28\",\n\t\t\t\"34.147.110.144/28\",\n\t\t\t\"34.151.74.144/28\",\n\t\t\t\"34.152.50.64/28\",\n\t\t\t\"34.154.114.144/28\",\n\t\t\t\"34.155.98.32/28\",\n\t\t\t\"34.165.18.176/28\",\n\t\t\t\"34.175.160.64/28\",\n\t\t\t\"34.176.130.16/28\",\n\t\t\t\"34.64.82.64/28\",\n\t\t\t\"34.65.242.112/28\",\n\t\t\t\"34.80.50.80/28\",\n\t\t\t\"34.88.194.0/28\",\n\t\t\t\"34.89.10.80/28\",\n\t\t\t\"34.89.198.80/28\",\n\t\t\t\"34.96.162.48/28\",\n\t\t\t\"35.247.243.240/28\",\n\t\t\t\"66.249.64.0/27\",\n\t\t\t\"66.249.64.128/27\",\n\t\t\t\"66.249.64.160/27\",\n\t\t\t\"66.249.64.192/27\",\n\t\t\t\"66.249.64.224/27\",\n\t\t\t\"66.249.64.32/27\",\n\t\t\t\"66.249.64.64/27\",\n\t\t\t\"66.249.64.96/27\",\n\t\t\t\"66.249.65.0/27\",\n\t\t\t\"66.249.65.128/27\",\n\t\t\t\"66.249.65.160/27\",\n\t\t\t\"66.249.65.192/27\",\n\t\t\t\"66.249.65.224/27\",\n\t\t\t\"66.249.65.32/27\",\n\t\t\t\"66.249.65.64/27\",\n\t\t\t\"66.249.65.96/27\",\n\t\t\t\"66.249.66.0/27\",\n\t\t\t\"66.249.66.128/27\",\n\t\t\t\"66.249.66.192/27\",\n\t\t\t\"66.249.66.32/27\",\n\t\t\t\"66.249.66.64/27\",\n\t\t\t\"66.249.68.0/27\",\n\t\t\t\"66.249.68.32/27\",\n\t\t\t\"66.249.68.64/27\",\n\t\t\t\"66.249.69.0/27\",\n\t\t\t\"66.249.69.128/27\",\n\t\t\t\"66.249.69.160/27\",\n\t\t\t\"66.249.69.192/27\",\n\t\t\t\"66.249.69.224/27\",\n\t\t\t\"66.249.69.32/27\",\n\t\t\t\"66.249.69.64/27\",\n\t\t\t\"66.249.69.96/27\",\n\t\t\t\"66.249.70.0/27\",\n\t\t\t\"66.249.70.128/27\",\n\t\t\t\"66.249.70.160/27\",\n\t\t\t\"66.249.70.192/27\",\n\t\t\t\"66.249.70.224/27\",\n\t\t\t\"66.249.70.32/27\",\n\t\t\t\"66.249.70.64/27\",\n\t\t\t\"66.249.70.96/27\",\n\t\t\t\"66.249.71.0/27\",\n\t\t\t\"66.249.71.128/27\",\n\t\t\t\"66.249.71.160/27\",\n\t\t\t\"66.249.71.192/27\",\n\t\t\t\"66.249.71.32/27\",\n\t\t\t\"66.249.71.64/27\",\n\t\t\t\"66.249.71.96/27\",\n\t\t\t\"66.249.72.0/27\",\n\t\t\t\"66.249.72.128/27\",\n\t\t\t\"66.249.72.160/27\",\n\t\t\t\"66.249.72.192/27\",\n\t\t\t\"66.249.72.224/27\",\n\t\t\t\"66.249.72.32/27\",\n\t\t\t\"66.249.72.64/27\",\n\t\t\t\"66.249.72.96/27\",\n\t\t\t\"66.249.73.0/27\",\n\t\t\t\"66.249.73.128/27\",\n\t\t\t\"66.249.73.160/27\",\n\t\t\t\"66.249.73.192/27\",\n\t\t\t\"66.249.73.224/27\",\n\t\t\t\"66.249.73.32/27\",\n\t\t\t\"66.249.73.64/27\",\n\t\t\t\"66.249.73.96/27\",\n\t\t\t\"66.249.74.0/27\",\n\t\t\t\"66.249.74.32/27\",\n\t\t\t\"66.249.74.64/27\",\n\t\t\t\"66.249.74.96/27\",\n\t\t\t\"66.249.75.0/27\",\n\t\t\t\"66.249.75.128/27\",\n\t\t\t\"66.249.75.160/27\",\n\t\t\t\"66.249.75.192/27\",\n\t\t\t\"66.249.75.224/27\",\n\t\t\t\"66.249.75.32/27\",\n\t\t\t\"66.249.75.64/27\",\n\t\t\t\"66.249.75.96/27\",\n\t\t\t\"66.249.76.0/27\",\n\t\t\t\"66.249.76.128/27\",\n\t\t\t\"66.249.76.160/27\",\n\t\t\t\"66.249.76.192/27\",\n\t\t\t\"66.249.76.224/27\",\n\t\t\t\"66.249.76.32/27\",\n\t\t\t\"66.249.76.64/27\",\n\t\t\t\"66.249.76.96/27\",\n\t\t\t\"66.249.77.0/27\",\n\t\t\t\"66.249.77.128/27\",\n\t\t\t\"66.249.77.32/27\",\n\t\t\t\"66.249.77.64/27\",\n\t\t\t\"66.249.77.96/27\",\n\t\t\t\"66.249.79.0/27\",\n\t\t\t\"66.249.79.128/27\",\n\t\t\t\"66.249.79.160/27\",\n\t\t\t\"66.249.79.192/27\",\n\t\t\t\"66.249.79.224/27\",\n\t\t\t\"66.249.79.32/27\",\n\t\t\t\"66.249.79.64/27\",\n\t\t\t\"66.249.79.96/27\",\n\t\t]\n\n\t\tconst facebook = [\n\t\t\t\"69.63.176.0/20\",\n\t\t\t\"66.220.144.0/20\",\n\t\t\t\"66.220.144.0/21\",\n\t\t\t\"69.63.184.0/21\",\n\t\t\t\"69.63.176.0/21\",\n\t\t\t\"74.119.76.0/22\",\n\t\t\t\"69.171.255.0/24\",\n\t\t\t\"173.252.64.0/18\",\n\t\t\t\"69.171.224.0/19\",\n\t\t\t\"69.171.224.0/20\",\n\t\t\t\"103.4.96.0/22\",\n\t\t\t\"173.252.64.0/19\",\n\t\t\t\"31.13.64.0/18\",\n\t\t\t\"31.13.24.0/21\",\n\t\t\t\"66.220.152.0/21\",\n\t\t\t\"69.171.239.0/24\",\n\t\t\t\"69.171.240.0/20\",\n\t\t\t\"31.13.64.0/19\",\n\t\t\t\"31.13.64.0/24\",\n\t\t\t\"31.13.65.0/24\",\n\t\t\t\"31.13.67.0/24\",\n\t\t\t\"31.13.68.0/24\",\n\t\t\t\"31.13.69.0/24\",\n\t\t\t\"31.13.70.0/24\",\n\t\t\t\"31.13.71.0/24\",\n\t\t\t\"31.13.72.0/24\",\n\t\t\t\"31.13.73.0/24\",\n\t\t\t\"31.13.74.0/24\",\n\t\t\t\"31.13.75.0/24\",\n\t\t\t\"31.13.76.0/24\",\n\t\t\t\"31.13.77.0/24\",\n\t\t\t\"31.13.96.0/19\",\n\t\t\t\"31.13.66.0/24\",\n\t\t\t\"173.252.96.0/19\",\n\t\t\t\"69.63.178.0/24\",\n\t\t\t\"31.13.78.0/24\",\n\t\t\t\"31.13.79.0/24\",\n\t\t\t\"31.13.80.0/24\",\n\t\t\t\"31.13.82.0/24\",\n\t\t\t\"31.13.83.0/24\",\n\t\t\t\"31.13.84.0/24\",\n\t\t\t\"31.13.85.0/24\",\n\t\t\t\"31.13.86.0/24\",\n\t\t\t\"31.13.87.0/24\",\n\t\t\t\"31.13.88.0/24\",\n\t\t\t\"31.13.89.0/24\",\n\t\t\t\"31.13.91.0/24\",\n\t\t\t\"31.13.92.0/24\",\n\t\t\t\"31.13.93.0/24\",\n\t\t\t\"31.13.94.0/24\",\n\t\t\t\"31.13.95.0/24\",\n\t\t\t\"31.13.81.0/24\",\n\t\t\t\"179.60.192.0/22\",\n\t\t\t\"179.60.192.0/24\",\n\t\t\t\"179.60.193.0/24\",\n\t\t\t\"179.60.194.0/24\",\n\t\t\t\"179.60.195.0/24\",\n\t\t\t\"185.60.216.0/22\",\n\t\t\t\"45.64.40.0/22\",\n\t\t\t\"185.60.216.0/24\",\n\t\t\t\"185.60.217.0/24\",\n\t\t\t\"185.60.218.0/24\",\n\t\t\t\"185.60.219.0/24\",\n\t\t\t\"129.134.0.0/16\",\n\t\t\t\"157.240.0.0/16\",\n\t\t\t\"157.240.8.0/24\",\n\t\t\t\"157.240.0.0/24\",\n\t\t\t\"157.240.1.0/24\",\n\t\t\t\"157.240.2.0/24\",\n\t\t\t\"157.240.3.0/24\",\n\t\t\t\"157.240.5.0/24\",\n\t\t\t\"157.240.6.0/24\",\n\t\t\t\"157.240.7.0/24\",\n\t\t\t\"157.240.9.0/24\",\n\t\t\t\"157.240.10.0/24\",\n\t\t\t\"157.240.16.0/24\",\n\t\t\t\"157.240.19.0/24\",\n\t\t\t\"157.240.11.0/24\",\n\t\t\t\"157.240.12.0/24\",\n\t\t\t\"157.240.13.0/24\",\n\t\t\t\"157.240.14.0/24\",\n\t\t\t\"157.240.15.0/24\",\n\t\t\t\"157.240.17.0/24\",\n\t\t\t\"157.240.18.0/24\",\n\t\t\t\"157.240.20.0/24\",\n\t\t\t\"157.240.21.0/24\",\n\t\t\t\"157.240.22.0/24\",\n\t\t\t\"157.240.23.0/24\",\n\t\t\t\"157.240.0.0/17\",\n\t\t\t\"69.171.250.0/24\",\n\t\t\t\"204.15.20.0/22\",\n\t\t\t\"157.240.192.0/24\",\n\t\t\t\"157.240.198.0/24\",\n\t\t\t\"102.132.96.0/20\",\n\t\t\t\"102.132.96.0/24\",\n\t\t\t\"102.132.97.0/24\",\n\t\t\t\"157.240.26.0/24\",\n\t\t\t\"157.240.27.0/24\",\n\t\t\t\"157.240.28.0/24\",\n\t\t\t\"157.240.29.0/24\",\n\t\t\t\"157.240.30.0/24\",\n\t\t\t\"129.134.28.0/24\",\n\t\t\t\"129.134.29.0/24\",\n\t\t\t\"157.240.208.0/24\",\n\t\t\t\"157.240.193.0/24\",\n\t\t\t\"157.240.194.0/24\",\n\t\t\t\"157.240.195.0/24\",\n\t\t\t\"157.240.197.0/24\",\n\t\t\t\"157.240.196.0/24\",\n\t\t\t\"157.240.200.0/24\",\n\t\t\t\"157.240.201.0/24\",\n\t\t\t\"157.240.203.0/24\",\n\t\t\t\"157.240.204.0/24\",\n\t\t\t\"157.240.205.0/24\",\n\t\t\t\"157.240.206.0/24\",\n\t\t\t\"157.240.207.0/24\",\n\t\t\t\"157.240.209.0/24\",\n\t\t\t\"157.240.210.0/24\",\n\t\t\t\"157.240.211.0/24\",\n\t\t\t\"157.240.212.0/24\",\n\t\t\t\"157.240.213.0/24\",\n\t\t\t\"157.240.214.0/24\",\n\t\t\t\"157.240.215.0/24\",\n\t\t\t\"157.240.216.0/24\",\n\t\t\t\"157.240.222.0/24\",\n\t\t\t\"129.134.30.0/24\",\n\t\t\t\"129.134.31.0/24\",\n\t\t\t\"129.134.30.0/23\",\n\t\t\t\"129.134.25.0/24\",\n\t\t\t\"129.134.26.0/24\",\n\t\t\t\"129.134.27.0/24\",\n\t\t\t\"102.132.99.0/24\",\n\t\t\t\"102.132.101.0/24\",\n\t\t\t\"129.134.64.0/24\",\n\t\t\t\"129.134.65.0/24\",\n\t\t\t\"129.134.66.0/24\",\n\t\t\t\"129.134.67.0/24\",\n\t\t\t\"157.240.219.0/24\",\n\t\t\t\"157.240.217.0/24\",\n\t\t\t\"157.240.218.0/24\",\n\t\t\t\"157.240.199.0/24\",\n\t\t\t\"129.134.127.0/24\",\n\t\t\t\"157.240.223.0/24\",\n\t\t\t\"157.240.192.0/18\",\n\t\t\t\"157.240.221.0/24\",\n\t\t\t\"157.240.220.0/24\",\n\t\t\t\"173.252.88.0/21\",\n\t\t\t\"129.134.68.0/24\",\n\t\t\t\"129.134.69.0/24\",\n\t\t\t\"129.134.70.0/24\",\n\t\t\t\"157.240.24.0/24\",\n\t\t\t\"157.240.25.0/24\",\n\t\t\t\"102.132.100.0/24\",\n\t\t\t\"157.240.31.0/24\",\n\t\t\t\"157.240.224.0/24\",\n\t\t\t\"129.134.71.0/24\",\n\t\t\t\"157.240.225.0/24\",\n\t\t\t\"157.240.226.0/24\",\n\t\t\t\"157.240.227.0/24\",\n\t\t\t\"129.134.0.0/17\",\n\t\t\t\"129.134.72.0/24\",\n\t\t\t\"129.134.73.0/24\",\n\t\t\t\"129.134.74.0/24\",\n\t\t\t\"185.89.218.0/24\",\n\t\t\t\"185.89.219.0/24\",\n\t\t\t\"185.89.218.0/23\",\n\t\t\t\"157.240.228.0/24\",\n\t\t\t\"157.240.229.0/24\",\n\t\t\t\"129.134.76.0/24\",\n\t\t\t\"129.134.75.0/24\",\n\t\t\t\"157.240.239.0/24\",\n\t\t\t\"157.240.240.0/24\",\n\t\t\t\"157.240.241.0/24\",\n\t\t\t\"157.240.231.0/24\",\n\t\t\t\"157.240.232.0/24\",\n\t\t\t\"157.240.233.0/24\",\n\t\t\t\"157.240.234.0/24\",\n\t\t\t\"157.240.235.0/24\",\n\t\t\t\"157.240.236.0/24\",\n\t\t\t\"129.134.77.0/24\",\n\t\t\t\"129.134.78.0/24\",\n\t\t\t\"129.134.79.0/24\",\n\t\t\t\"157.240.237.0/24\",\n\t\t\t\"157.240.238.0/24\",\n\t\t\t\"157.240.242.0/24\",\n\t\t\t\"157.240.243.0/24\",\n\t\t\t\"129.134.112.0/24\",\n\t\t\t\"157.240.100.0/24\",\n\t\t\t\"157.240.98.0/24\",\n\t\t\t\"157.240.96.0/24\",\n\t\t\t\"157.240.99.0/24\",\n\t\t\t\"157.240.101.0/24\",\n\t\t\t\"129.134.113.0/24\",\n\t\t\t\"129.134.114.0/24\",\n\t\t\t\"157.240.97.0/24\",\n\t\t\t\"129.134.115.0/24\",\n\t\t\t\"157.240.244.0/24\",\n\t\t\t\"157.240.245.0/24\",\n\t\t\t\"157.240.246.0/24\",\n\t\t\t\"157.240.247.0/24\",\n\t\t\t\"157.240.248.0/24\",\n\t\t\t\"157.240.249.0/24\",\n\t\t\t\"157.240.250.0/24\",\n\t\t\t\"163.70.128.0/17\",\n\t\t\t\"163.77.128.0/17\",\n\t\t\t\"157.240.251.0/24\",\n\t\t\t\"157.240.252.0/24\",\n\t\t\t\"157.240.253.0/24\",\n\t\t\t\"147.75.208.0/20\",\n\t\t\t\"157.240.254.0/24\",\n\t\t\t\"185.89.219.0/24\",\n\t\t\t\"185.89.218.0/24\",\n\t\t\t\"185.89.218.0/23\",\n\t\t\t\"185.89.216.0/22\",\n\t\t\t\"147.75.208.0/20\",\n\t\t\t\"204.15.20.0/22\",\n\t\t\t\"69.63.176.0/20\",\n\t\t\t\"69.63.176.0/21\",\n\t\t\t\"69.63.184.0/21\",\n\t\t\t\"66.220.144.0/20\",\n\t\t\t\"69.63.176.0/20\",\n\t\t\t\"2620:0:1c00::/40\",\n\t\t\t\"2a03:2880::/32\",\n\t\t\t\"2a03:2880:fffe::/48\",\n\t\t\t\"2a03:2880:ffff::/48\",\n\t\t\t\"2620:0:1cff::/48\",\n\t\t\t\"2a03:2880:f001::/48\",\n\t\t\t\"2a03:2880:f003::/48\",\n\t\t\t\"2a03:2880:f004::/48\",\n\t\t\t\"2a03:2880:f005::/48\",\n\t\t\t\"2a03:2880:f006::/48\",\n\t\t\t\"2a03:2880:f007::/48\",\n\t\t\t\"2a03:2880:f008::/48\",\n\t\t\t\"2a03:2880:f00a::/48\",\n\t\t\t\"2a03:2880:f00c::/48\",\n\t\t\t\"2a03:2880:f00d::/48\",\n\t\t\t\"2a03:2880:f00e::/48\",\n\t\t\t\"2a03:2880:f00f::/48\",\n\t\t\t\"2a03:2880:f010::/48\",\n\t\t\t\"2a03:2880:f011::/48\",\n\t\t\t\"2a03:2880:f012::/48\",\n\t\t\t\"2a03:2880:f013::/48\",\n\t\t\t\"2a03:2880:f016::/48\",\n\t\t\t\"2a03:2880:f017::/48\",\n\t\t\t\"2a03:2880:f019::/48\",\n\t\t\t\"2a03:2880:f01b::/48\",\n\t\t\t\"2a03:2880:f01c::/48\",\n\t\t\t\"2a03:2880:f01f::/48\",\n\t\t\t\"2a03:2880:1000::/36\",\n\t\t\t\"2a03:2880:2000::/36\",\n\t\t\t\"2a03:2880:3000::/36\",\n\t\t\t\"2a03:2880:4000::/36\",\n\t\t\t\"2a03:2880:5000::/36\",\n\t\t\t\"2a03:2880:6000::/36\",\n\t\t\t\"2a03:2880:7000::/36\",\n\t\t\t\"2a03:2880:f021::/48\",\n\t\t\t\"2a03:2880:f023::/48\",\n\t\t\t\"2a03:2880:f024::/48\",\n\t\t\t\"2a03:2880:f027::/48\",\n\t\t\t\"2a03:2880:f028::/48\",\n\t\t\t\"2a03:2880:f029::/48\",\n\t\t\t\"2a03:2880:f02b::/48\",\n\t\t\t\"2a03:2880:f02c::/48\",\n\t\t\t\"2a03:2880:f02d::/48\",\n\t\t\t\"2a03:2880:f02e::/48\",\n\t\t\t\"2a03:2880:f02f::/48\",\n\t\t\t\"2a03:2880:f030::/48\",\n\t\t\t\"2a03:2880:f031::/48\",\n\t\t\t\"2a03:2880:f032::/48\",\n\t\t\t\"2a03:2880:f033::/48\",\n\t\t\t\"2a03:2880:f034::/48\",\n\t\t\t\"2a03:2880:f035::/48\",\n\t\t\t\"2a03:2880:f036::/48\",\n\t\t\t\"2a03:2880:f037::/48\",\n\t\t\t\"2a03:2880:f038::/48\",\n\t\t\t\"2a03:2880:f03a::/48\",\n\t\t\t\"2a03:2880:f03b::/48\",\n\t\t\t\"2a03:2880:f03d::/48\",\n\t\t\t\"2a03:2880:f03e::/48\",\n\t\t\t\"2a03:2880:f03f::/48\",\n\t\t\t\"2401:db00::/32\",\n\t\t\t\"2a03:2880::/36\",\n\t\t\t\"2a03:2880:f101::/48\",\n\t\t\t\"2a03:2880:f201::/48\",\n\t\t\t\"2a03:2880:f103::/48\",\n\t\t\t\"2a03:2880:f203::/48\",\n\t\t\t\"2a03:2880:f104::/48\",\n\t\t\t\"2a03:2880:f204::/48\",\n\t\t\t\"2a03:2880:f107::/48\",\n\t\t\t\"2a03:2880:f207::/48\",\n\t\t\t\"2a03:2880:f108::/48\",\n\t\t\t\"2a03:2880:f208::/48\",\n\t\t\t\"2a03:2880:f10a::/48\",\n\t\t\t\"2a03:2880:f20a::/48\",\n\t\t\t\"2a03:2880:f10d::/48\",\n\t\t\t\"2a03:2880:f20d::/48\",\n\t\t\t\"2a03:2880:f10e::/48\",\n\t\t\t\"2a03:2880:f20e::/48\",\n\t\t\t\"2a03:2880:f10f::/48\",\n\t\t\t\"2a03:2880:f20f::/48\",\n\t\t\t\"2a03:2880:f110::/48\",\n\t\t\t\"2a03:2880:f210::/48\",\n\t\t\t\"2a03:2880:f111::/48\",\n\t\t\t\"2a03:2880:f211::/48\",\n\t\t\t\"2a03:2880:f112::/48\",\n\t\t\t\"2a03:2880:f212::/48\",\n\t\t\t\"2a03:2880:f116::/48\",\n\t\t\t\"2a03:2880:f216::/48\",\n\t\t\t\"2a03:2880:f117::/48\",\n\t\t\t\"2a03:2880:f217::/48\",\n\t\t\t\"2a03:2880:f119::/48\",\n\t\t\t\"2a03:2880:f219::/48\",\n\t\t\t\"2a03:2880:f11f::/48\",\n\t\t\t\"2a03:2880:f21f::/48\",\n\t\t\t\"2a03:2880:f121::/48\",\n\t\t\t\"2a03:2880:f221::/48\",\n\t\t\t\"2a03:2880:f123::/48\",\n\t\t\t\"2a03:2880:f223::/48\",\n\t\t\t\"2a03:2880:f10c::/48\",\n\t\t\t\"2a03:2880:f20c::/48\",\n\t\t\t\"2a03:2880:f105::/48\",\n\t\t\t\"2a03:2880:f205::/48\",\n\t\t\t\"2a03:2880:f106::/48\",\n\t\t\t\"2a03:2880:f206::/48\",\n\t\t\t\"2a03:2880:f11b::/48\",\n\t\t\t\"2a03:2880:f21b::/48\",\n\t\t\t\"2a03:2880:f113::/48\",\n\t\t\t\"2a03:2880:f213::/48\",\n\t\t\t\"2a03:2880:f11c::/48\",\n\t\t\t\"2a03:2880:f21c::/48\",\n\t\t\t\"2a03:2880:f128::/48\",\n\t\t\t\"2a03:2880:f228::/48\",\n\t\t\t\"2a03:2880:f02a::/48\",\n\t\t\t\"2a03:2880:f12a::/48\",\n\t\t\t\"2a03:2880:f22a::/48\",\n\t\t\t\"2a03:2880:f12f::/48\",\n\t\t\t\"2a03:2880:f22f::/48\",\n\t\t\t\"2a03:2880:f124::/48\",\n\t\t\t\"2a03:2880:f127::/48\",\n\t\t\t\"2a03:2880:f129::/48\",\n\t\t\t\"2a03:2880:f12b::/48\",\n\t\t\t\"2a03:2880:f12c::/48\",\n\t\t\t\"2a03:2880:f12d::/48\",\n\t\t\t\"2a03:2880:f12e::/48\",\n\t\t\t\"2a03:2880:f130::/48\",\n\t\t\t\"2a03:2880:f131::/48\",\n\t\t\t\"2a03:2880:f132::/48\",\n\t\t\t\"2a03:2880:f133::/48\",\n\t\t\t\"2a03:2880:f134::/48\",\n\t\t\t\"2a03:2880:f135::/48\",\n\t\t\t\"2a03:2880:f136::/48\",\n\t\t\t\"2a03:2880:f137::/48\",\n\t\t\t\"2a03:2880:f138::/48\",\n\t\t\t\"2a03:2880:f13a::/48\",\n\t\t\t\"2a03:2880:f13b::/48\",\n\t\t\t\"2a03:2880:f13d::/48\",\n\t\t\t\"2a03:2880:f13e::/48\",\n\t\t\t\"2a03:2880:f13f::/48\",\n\t\t\t\"2a03:2880:f224::/48\",\n\t\t\t\"2a03:2880:f227::/48\",\n\t\t\t\"2a03:2880:f229::/48\",\n\t\t\t\"2a03:2880:f22b::/48\",\n\t\t\t\"2a03:2880:f22c::/48\",\n\t\t\t\"2a03:2880:f22d::/48\",\n\t\t\t\"2a03:2880:f22e::/48\",\n\t\t\t\"2a03:2880:f230::/48\",\n\t\t\t\"2a03:2880:f231::/48\",\n\t\t\t\"2a03:2880:f232::/48\",\n\t\t\t\"2a03:2880:f233::/48\",\n\t\t\t\"2a03:2880:f234::/48\",\n\t\t\t\"2a03:2880:f235::/48\",\n\t\t\t\"2a03:2880:f236::/48\",\n\t\t\t\"2a03:2880:f237::/48\",\n\t\t\t\"2a03:2880:f238::/48\",\n\t\t\t\"2a03:2880:f23a::/48\",\n\t\t\t\"2a03:2880:f23b::/48\",\n\t\t\t\"2a03:2880:f23d::/48\",\n\t\t\t\"2a03:2880:f23e::/48\",\n\t\t\t\"2a03:2880:f23f::/48\",\n\t\t\t\"2a03:2880:f0ff::/48\",\n\t\t\t\"2a03:2880:f1ff::/48\",\n\t\t\t\"2a03:2880:f2ff::/48\",\n\t\t\t\"2a03:2880:f044::/48\",\n\t\t\t\"2a03:2880:f144::/48\",\n\t\t\t\"2a03:2880:f244::/48\",\n\t\t\t\"2a03:2880:f042::/48\",\n\t\t\t\"2a03:2880:f043::/48\",\n\t\t\t\"2a03:2880:f045::/48\",\n\t\t\t\"2a03:2880:f046::/48\",\n\t\t\t\"2a03:2880:f047::/48\",\n\t\t\t\"2a03:2880:f048::/48\",\n\t\t\t\"2a03:2880:f04a::/48\",\n\t\t\t\"2a03:2880:f04c::/48\",\n\t\t\t\"2a03:2880:f04b::/48\",\n\t\t\t\"2a03:2880:f04d::/48\",\n\t\t\t\"2a03:2880:f259::/48\",\n\t\t\t\"2a03:2880:f258::/48\",\n\t\t\t\"2a03:2880:f257::/48\",\n\t\t\t\"2a03:2880:f256::/48\",\n\t\t\t\"2a03:2880:f255::/48\",\n\t\t\t\"2a03:2880:f254::/48\",\n\t\t\t\"2a03:2880:f253::/48\",\n\t\t\t\"2a03:2880:f252::/48\",\n\t\t\t\"2a03:2880:f250::/48\",\n\t\t\t\"2a03:2880:f24f::/48\",\n\t\t\t\"2a03:2880:f24d::/48\",\n\t\t\t\"2a03:2880:f24e::/48\",\n\t\t\t\"2a03:2880:f24c::/48\",\n\t\t\t\"2a03:2880:f24b::/48\",\n\t\t\t\"2a03:2880:f24a::/48\",\n\t\t\t\"2a03:2880:f248::/48\",\n\t\t\t\"2a03:2880:f247::/48\",\n\t\t\t\"2a03:2880:f246::/48\",\n\t\t\t\"2a03:2880:f245::/48\",\n\t\t\t\"2a03:2880:f243::/48\",\n\t\t\t\"2a03:2880:f242::/48\",\n\t\t\t\"2a03:2880:f241::/48\",\n\t\t\t\"2a03:2880:f240::/48\",\n\t\t\t\"2a03:2880:f159::/48\",\n\t\t\t\"2a03:2880:f158::/48\",\n\t\t\t\"2a03:2880:f157::/48\",\n\t\t\t\"2a03:2880:f156::/48\",\n\t\t\t\"2a03:2880:f155::/48\",\n\t\t\t\"2a03:2880:f154::/48\",\n\t\t\t\"2a03:2880:f153::/48\",\n\t\t\t\"2a03:2880:f152::/48\",\n\t\t\t\"2a03:2880:f150::/48\",\n\t\t\t\"2a03:2880:f14f::/48\",\n\t\t\t\"2a03:2880:f14e::/48\",\n\t\t\t\"2a03:2880:f14d::/48\",\n\t\t\t\"2a03:2880:f14c::/48\",\n\t\t\t\"2a03:2880:f14b::/48\",\n\t\t\t\"2a03:2880:f14a::/48\",\n\t\t\t\"2a03:2880:f148::/48\",\n\t\t\t\"2a03:2880:f147::/48\",\n\t\t\t\"2a03:2880:f146::/48\",\n\t\t\t\"2a03:2880:f145::/48\",\n\t\t\t\"2a03:2880:f143::/48\",\n\t\t\t\"2a03:2880:f142::/48\",\n\t\t\t\"2a03:2880:f141::/48\",\n\t\t\t\"2a03:2880:f140::/48\",\n\t\t\t\"2a03:2880:f059::/48\",\n\t\t\t\"2a03:2880:f058::/48\",\n\t\t\t\"2a03:2880:f057::/48\",\n\t\t\t\"2a03:2880:f056::/48\",\n\t\t\t\"2a03:2880:f055::/48\",\n\t\t\t\"2a03:2880:f054::/48\",\n\t\t\t\"2a03:2880:f053::/48\",\n\t\t\t\"2a03:2880:f052::/48\",\n\t\t\t\"2a03:2880:f050::/48\",\n\t\t\t\"2a03:2880:f04f::/48\",\n\t\t\t\"2a03:2880:f04e::/48\",\n\t\t\t\"2a03:2880:ff0b::/48\",\n\t\t\t\"2a03:2880:ff0c::/48\",\n\t\t\t\"2a03:2880:f040::/48\",\n\t\t\t\"2a03:2880:f041::/48\",\n\t\t\t\"2a03:2880:f0fc::/48\",\n\t\t\t\"2a03:2880:f0fd::/48\",\n\t\t\t\"2a03:2880:f0fc::/47\",\n\t\t\t\"2a03:2880:f1fc::/48\",\n\t\t\t\"2a03:2880:f1fd::/48\",\n\t\t\t\"2a03:2880:f1fc::/47\",\n\t\t\t\"2a03:2880:ff08::/48\",\n\t\t\t\"2a03:2880:ff09::/48\",\n\t\t\t\"2a03:2880:ff0a::/48\",\n\t\t\t\"2a03:2880:f05e::/48\",\n\t\t\t\"2a03:2880:f15e::/48\",\n\t\t\t\"2a03:2880:f25e::/48\",\n\t\t\t\"2620:0:1cfa::/48\",\n\t\t\t\"2a03:2880:f05b::/48\",\n\t\t\t\"2a03:2880:f05a::/48\",\n\t\t\t\"2a03:2880:f25a::/48\",\n\t\t\t\"2a03:2880:f15c::/48\",\n\t\t\t\"2a03:2880:f000::/36\",\n\t\t\t\"2a03:2880:f05d::/48\",\n\t\t\t\"2a03:2880:f25c::/48\",\n\t\t\t\"2a03:2880:f05c::/48\",\n\t\t\t\"2a03:2880:f260::/48\",\n\t\t\t\"2a03:2880:f060::/48\",\n\t\t\t\"2a03:2880:f160::/48\",\n\t\t\t\"2a03:2880:f15d::/48\",\n\t\t\t\"2a03:2880:f25b::/48\",\n\t\t\t\"2a03:2880:f25d::/48\",\n\t\t\t\"2a03:2880:f15b::/48\",\n\t\t\t\"2a03:2880:f15a::/48\",\n\t\t\t\"2a03:2880:f161::/48\",\n\t\t\t\"2a03:2880:f061::/48\",\n\t\t\t\"2a03:2880:f261::/48\",\n\t\t\t\"2a03:2881::/32\",\n\t\t\t\"2a03:2881::/48\",\n\t\t\t\"2a03:2881:1::/48\",\n\t\t\t\"2a03:2881:2::/48\",\n\t\t\t\"2a03:2881:3::/48\",\n\t\t\t\"2a03:2880:f162::/48\",\n\t\t\t\"2a03:2880:f262::/48\",\n\t\t\t\"2a03:2881:4000::/48\",\n\t\t\t\"2a03:2881:4003::/48\",\n\t\t\t\"2a03:2881:4001::/48\",\n\t\t\t\"2a03:2881:4002::/48\",\n\t\t\t\"2a03:2880:f065::/48\",\n\t\t\t\"2a03:2880:f163::/48\",\n\t\t\t\"2a03:2880:f066::/48\",\n\t\t\t\"2a03:2880:f263::/48\",\n\t\t\t\"2a03:2880:f264::/48\",\n\t\t\t\"2a03:2880:f164::/48\",\n\t\t\t\"2a03:2880:f067::/48\",\n\t\t\t\"2a03:2880:f165::/48\",\n\t\t\t\"2a03:2880:f265::/48\",\n\t\t\t\"2a03:2880:f068::/48\",\n\t\t\t\"2a03:2881:4004::/48\",\n\t\t\t\"2a03:2880:f06a::/48\",\n\t\t\t\"2a03:2880:f266::/48\",\n\t\t\t\"2a03:2880:f166::/48\",\n\t\t\t\"2a03:2880:f267::/48\",\n\t\t\t\"2a03:2880:f06b::/48\",\n\t\t\t\"2a03:2880:f167::/48\",\n\t\t\t\"2a03:2881:4006::/48\",\n\t\t\t\"2a03:2881:7::/48\",\n\t\t\t\"2a03:2881:9::/48\",\n\t\t\t\"2a03:2881:8::/48\",\n\t\t\t\"2a03:2881:4::/48\",\n\t\t\t\"2a03:2881:6::/48\",\n\t\t\t\"2a03:2881:5::/48\",\n\t\t\t\"2a03:2881:a::/48\",\n\t\t\t\"2a03:2880:f268::/48\",\n\t\t\t\"2a03:2880:f06d::/48\",\n\t\t\t\"2a03:2880:f168::/48\",\n\t\t\t\"2a03:2881:b::/48\",\n\t\t\t\"2a03:2881:c::/48\",\n\t\t\t\"2a03:2881:4007::/48\",\n\t\t\t\"2a03:2880:f269::/48\",\n\t\t\t\"2a03:2880:f169::/48\",\n\t\t\t\"2a03:2880:f06f::/48\",\n\t\t\t\"2a03:2880:f26a::/48\",\n\t\t\t\"2a03:2880:f16a::/48\",\n\t\t\t\"2a03:2880:f070::/48\",\n\t\t\t\"2a03:2881:d::/48\",\n\t\t\t\"2a03:2881:e::/48\",\n\t\t\t\"2a03:2880:f071::/48\",\n\t\t\t\"2a03:2880:f16b::/48\",\n\t\t\t\"2a03:2880:f26b::/48\",\n\t\t\t\"2a03:2881:4008::/48\",\n\t\t\t\"2a03:2881:10::/48\",\n\t\t\t\"2a03:2881:f::/48\",\n\t\t\t\"2a03:2881:11::/48\",\n\t\t\t\"2a03:2880:f26c::/48\",\n\t\t\t\"2a03:2880:f16c::/48\",\n\t\t\t\"2a03:2880:f073::/48\",\n\t\t\t\"2a03:2880:f16d::/48\",\n\t\t\t\"2a03:2880:f074::/48\",\n\t\t\t\"2a03:2880:f26d::/48\",\n\t\t\t\"2a03:2881:4009::/48\",\n\t\t\t\"2a03:2880:f26e::/48\",\n\t\t\t\"2a03:2880:f16e::/48\",\n\t\t\t\"2a03:2880:f076::/48\",\n\t\t\t\"2a03:2880:f16f::/48\",\n\t\t\t\"2a03:2880:f26f::/48\",\n\t\t\t\"2a03:2880:f077::/48\",\n\t\t\t\"2a03:2881:12::/48\",\n\t\t\t\"2a03:2881:13::/48\",\n\t\t\t\"2a03:2881:17::/48\",\n\t\t\t\"2a03:2881:15::/48\",\n\t\t\t\"2a03:2881:18::/48\",\n\t\t\t\"2a03:2881:14::/48\",\n\t\t\t\"2a03:2881:16::/48\",\n\t\t\t\"2a03:2881:19::/48\",\n\t\t\t\"2a03:2881:4005::/48\",\n\t\t\t\"2a03:2880:f078::/48\",\n\t\t\t\"2a03:2880:f170::/48\",\n\t\t\t\"2a03:2880:f270::/48\",\n\t\t\t\"2a03:2881:400a::/48\",\n\t\t\t\"2a03:2881:400c::/48\",\n\t\t\t\"2a03:2881:400b::/48\",\n\t\t\t\"2a03:2881:400d::/48\",\n\t\t\t\"2a03:2881:1a::/48\",\n\t\t\t\"2a03:2881:1c::/48\",\n\t\t\t\"2a03:2881:1b::/48\",\n\t\t\t\"2a03:2880:f271::/48\",\n\t\t\t\"2a03:2880:f07d::/48\",\n\t\t\t\"2a03:2880:f171::/48\",\n\t\t\t\"2a03:2880:f07e::/48\",\n\t\t\t\"2a03:2880:f172::/48\",\n\t\t\t\"2a03:2880:f272::/48\",\n\t\t\t\"2a03:2880:f080::/48\",\n\t\t\t\"2a03:2880:f173::/48\",\n\t\t\t\"2a03:2880:f273::/48\",\n\t\t\t\"2a03:2880:f081::/48\",\n\t\t\t\"2a03:2880:f174::/48\",\n\t\t\t\"2a03:2880:f274::/48\",\n\t\t\t\"2a03:2880:f175::/48\",\n\t\t\t\"2a03:2880:f275::/48\",\n\t\t\t\"2a03:2880:f082::/48\",\n\t\t\t\"2a03:2880:f176::/48\",\n\t\t\t\"2a03:2880:f276::/48\",\n\t\t\t\"2a03:2880:f083::/48\",\n\t\t\t\"2a03:2880:f277::/48\",\n\t\t\t\"2a03:2880:f084::/48\",\n\t\t\t\"2a03:2880:f177::/48\",\n\t\t\t\"2a03:2881:1e::/48\",\n\t\t\t\"2a03:2880:f085::/48\",\n\t\t\t\"2a03:2880:f178::/48\",\n\t\t\t\"2a03:2880:f278::/48\",\n\t\t\t\"2a03:2880:f179::/48\",\n\t\t\t\"2a03:2880:f086::/48\",\n\t\t\t\"2a03:2880:f279::/48\",\n\t\t\t\"2a03:2880:f17a::/48\",\n\t\t\t\"2a03:2880:f08a::/48\",\n\t\t\t\"2a03:2880:f27a::/48\",\n\t\t\t\"2a03:2881:48::/45\",\n\t\t\t\"2a10:f781:10:cee0::/64\",\n\t\t\t\"2a03:83e0::/32\",\n\t\t]\n\n\t\tconst twitter = [\n\t\t\t\"199.16.156.0/22\",\n\t\t\t\"199.59.148.0/22\",\n\t\t\t\"192.133.76.0/22\",\n\t\t]\n\n\t\tconst bing = [\n\t\t\t\"157.55.39.0/24\",\n\t\t\t\"207.46.13.0/24\",\n\t\t\t\"40.77.167.0/24\",\n\t\t\t\"13.66.139.0/24\",\n\t\t\t\"13.66.144.0/24\",\n\t\t\t\"52.167.144.0/24\",\n\t\t\t\"13.67.10.16/28\",\n\t\t\t\"13.69.66.240/28\",\n\t\t\t\"13.71.172.224/28\",\n\t\t\t\"139.217.52.0/28\",\n\t\t\t\"191.233.204.224/28\",\n\t\t\t\"20.36.108.32/28\",\n\t\t\t\"20.43.120.16/28\",\n\t\t\t\"40.79.131.208/28\",\n\t\t\t\"40.79.186.176/28\",\n\t\t\t\"52.231.148.0/28\",\n\t\t\t\"20.79.107.240/28\",\n\t\t\t\"51.105.67.0/28\",\n\t\t\t\"20.125.163.80/28\",\n\t\t\t\"40.77.188.0/22\",\n\t\t\t\"65.55.210.0/24\",\n\t\t\t\"199.30.24.0/23\",\n\t\t\t\"40.77.202.0/24\",\n\t\t\t\"40.77.139.0/25\",\n\t\t\t\"20.74.197.0/28\",\n\t\t]\n\n\t\tconst pinterest = [\n\t\t\t\"54.236.1.1/32\",\n\t\t\t\"54.236.1.2/31\",\n\t\t\t\"54.236.1.4/30\",\n\t\t\t\"54.236.1.8/29\",\n\t\t\t\"54.236.1.16/28\",\n\t\t\t\"54.236.1.32/27\",\n\t\t\t\"54.236.1.64/26\",\n\t\t\t\"54.236.1.128/25\",\n\t\t]\n\n\t\tconst hotjar = [\n\t\t\t\"18.203.61.76\",\n\t\t\t\"18.203.176.135\",\n\t\t\t\"52.17.197.221\",\n\t\t]\n\n\t\tconst alexa = [\n\t\t\t\"204.236.235.245\",\n\t\t\t\"75.101.186.145\",\n\t\t]\n\n\t\tconst amazon = [\n\t\t\t\"18.207.141.103\",\n\t\t\t\"52.1.113.12\",\n\t\t]\n\n\t\tconst baidu = [\n\t\t\t\"180.76.15.0/24\",\n\t\t\t\"119.63.196.0/24\",\n\t\t\t\"115.239.212.0/24\",\n\t\t\t\"119.63.199.0/24\",\n\t\t\t\"122.81.208.0/22\",\n\t\t\t\"123.125.71.0/24\",\n\t\t\t\"180.76.4.0/24\",\n\t\t\t\"180.76.5.0/24\",\n\t\t\t\"180.76.6.0/24\",\n\t\t\t\"185.10.104.0/24\",\n\t\t\t\"220.181.108.0/24\",\n\t\t\t\"220.181.51.0/24\",\n\t\t\t\"111.13.102.0/24\",\n\t\t\t\"123.125.67.144/29\",\n\t\t\t\"123.125.67.152/31\",\n\t\t\t\"61.135.169.0/24\",\n\t\t\t\"123.125.68.68/30\",\n\t\t\t\"123.125.68.72/29\",\n\t\t\t\"123.125.68.80/28\",\n\t\t\t\"123.125.68.96/30\",\n\t\t\t\"202.46.48.0/20\",\n\t\t\t\"220.181.38.0/24\",\n\t\t\t\"123.125.68.80/30\",\n\t\t\t\"123.125.68.84/31\",\n\t\t\t\"123.125.68.0/24\",\n\t\t]\n\n\t\tconst duckduckgo = [\n\t\t\t\"20.191.45.212\",\n\t\t\t\"40.88.21.235\",\n\t\t\t\"40.76.173.151\",\n\t\t\t\"40.76.163.7\",\n\t\t\t\"20.185.79.47\",\n\t\t\t\"52.142.26.175\",\n\t\t\t\"20.185.79.15\",\n\t\t\t\"52.142.24.149\",\n\t\t\t\"40.76.162.208\",\n\t\t\t\"40.76.163.23\",\n\t\t\t\"40.76.162.191\",\n\t\t\t\"40.76.162.247\",\n\t\t]\n\n\t\tconst yahoo = [\n\t\t\t\"5.255.250.0/24\",\n\t\t\t\"37.9.87.0/24\",\n\t\t\t\"67.195.37.0/24\",\n\t\t\t\"67.195.50.0/24\",\n\t\t\t\"67.195.110.0/24\",\n\t\t\t\"67.195.111.0/24\",\n\t\t\t\"67.195.112.0/23\",\n\t\t\t\"67.195.114.0/24\",\n\t\t\t\"67.195.115.0/24\",\n\t\t\t\"68.180.224.0/21\",\n\t\t\t\"72.30.132.0/24\",\n\t\t\t\"72.30.142.0/24\",\n\t\t\t\"72.30.161.0/24\",\n\t\t\t\"72.30.196.0/24\",\n\t\t\t\"72.30.198.0/24\",\n\t\t\t\"74.6.254.0/24\",\n\t\t\t\"74.6.8.0/24\",\n\t\t\t\"74.6.13.0/24\",\n\t\t\t\"74.6.17.0/24\",\n\t\t\t\"74.6.18.0/24\",\n\t\t\t\"74.6.22.0/24\",\n\t\t\t\"74.6.27.0/24\",\n\t\t\t\"74.6.168.0/24\",\n\t\t\t\"77.88.5.0/24\",\n\t\t\t\"77.88.47.0/24\",\n\t\t\t\"93.158.161.0/24\",\n\t\t\t\"98.137.72.0/24\",\n\t\t\t\"98.137.206.0/24\",\n\t\t\t\"98.137.207.0/24\",\n\t\t\t\"98.139.168.0/24\",\n\t\t\t\"114.111.95.0/24\",\n\t\t\t\"124.83.159.0/24\",\n\t\t\t\"124.83.179.0/24\",\n\t\t\t\"124.83.223.0/24\",\n\t\t\t\"141.8.144.0/24\",\n\t\t\t\"183.79.63.0/24\",\n\t\t\t\"183.79.92.0/24\",\n\t\t\t\"203.216.255.0/24\",\n\t\t\t\"211.14.11.0/24\",\n\t\t]\n\n\t\tconst yandex = [\n\t\t\t\"100.43.90.0/24\",\n\t\t\t\"37.9.115.0/24\",\n\t\t\t\"37.140.165.0/24\",\n\t\t\t\"77.88.22.0/25\",\n\t\t\t\"77.88.29.0/24\",\n\t\t\t\"77.88.31.0/24\",\n\t\t\t\"77.88.59.0/24\",\n\t\t\t\"84.201.146.0/24\",\n\t\t\t\"84.201.148.0/24\",\n\t\t\t\"84.201.149.0/24\",\n\t\t\t\"87.250.243.0/24\",\n\t\t\t\"87.250.253.0/24\",\n\t\t\t\"93.158.147.0/24\",\n\t\t\t\"93.158.148.0/24\",\n\t\t\t\"93.158.151.0/24\",\n\t\t\t\"93.158.153.0/32\",\n\t\t\t\"95.108.128.0/24\",\n\t\t\t\"95.108.138.0/24\",\n\t\t\t\"95.108.150.0/23\",\n\t\t\t\"95.108.158.0/24\",\n\t\t\t\"95.108.156.0/24\",\n\t\t\t\"95.108.188.128/25\",\n\t\t\t\"95.108.234.0/24\",\n\t\t\t\"95.108.248.0/24\",\n\t\t\t\"100.43.80.0/24\",\n\t\t\t\"130.193.62.0/24\",\n\t\t\t\"141.8.153.0/24\",\n\t\t\t\"178.154.165.0/24\",\n\t\t\t\"178.154.166.128/25\",\n\t\t\t\"178.154.173.29\",\n\t\t\t\"178.154.200.158\",\n\t\t\t\"178.154.202.0/24\",\n\t\t\t\"178.154.205.0/24\",\n\t\t\t\"178.154.239.0/24\",\n\t\t\t\"178.154.243.0/24\",\n\t\t\t\"37.9.84.253\",\n\t\t\t\"199.21.99.99\",\n\t\t\t\"178.154.162.29\",\n\t\t\t\"178.154.203.251\",\n\t\t\t\"178.154.211.250\",\n\t\t\t\"178.154.171.0/24\",\n\t\t\t\"178.154.200.0/24\",\n\t\t\t\"178.154.244.0/24\",\n\t\t\t\"178.154.246.0/24\",\n\t\t\t\"95.108.181.0/24\",\n\t\t\t\"95.108.246.252\",\n\t\t\t\"5.45.254.0/24\",\n\t\t\t\"5.255.253.0/24\",\n\t\t\t\"37.140.141.0/24\",\n\t\t\t\"37.140.188.0/24\",\n\t\t\t\"100.43.81.0/24\",\n\t\t\t\"100.43.85.0/24\",\n\t\t\t\"100.43.91.0/24\",\n\t\t\t\"199.21.99.0/24\",\n\t\t\t\"2a02:6b8:b000::/32\",\n\t\t\t\"2a02:6b8:b010::/32\",\n\t\t\t\"2a02:6b8:b011::/32\",\n\t\t\t\"2a02:6b8:c0e::/32\",\n\t\t]\n\n\t\tconst sogou = [\n\t\t\t\"220.181.125.0/24\",\n\t\t\t\"123.126.51.64/27\",\n\t\t\t\"123.126.51.96/28\",\n\t\t\t\"123.126.68.25\",\n\t\t\t\"61.135.189.74\",\n\t\t\t\"61.135.189.75\",\n\t\t]\n\n\t\tconst youdao = [\n\t\t\t\"61.135.249.200/29\",\n\t\t\t\"61.135.249.208/28\",\n\t\t]\n\n\t\tlet customExclusionList = []\n\n\t\t// if wpmDataLayer.general.server2server.ipExcludeList is array\n\t\tif (Array.isArray(wpmDataLayer.general.server2server.ipExcludeList)) {\n\t\t\tcustomExclusionList = wpmDataLayer.general.server2server.ipExcludeList\n\t\t}\n\n\t\treturn blacklist.concat(\n\t\t\tgoogle,\n\t\t\tfacebook,\n\t\t\ttwitter,\n\t\t\tbing,\n\t\t\tpinterest,\n\t\t\thotjar,\n\t\t\talexa,\n\t\t\tamazon,\n\t\t\tbaidu,\n\t\t\tduckduckgo,\n\t\t\tyahoo,\n\t\t\tyandex,\n\t\t\tsogou,\n\t\t\tyoudao,\n\t\t\tcustomExclusionList,\n\t\t)\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * https://github.com/woocommerce/woocommerce-blocks/blob/trunk/src/BlockTypes/AbstractProductGrid.php#L108\n * https://github.com/woocommerce/woocommerce-blocks/issues/3483\n * https://github.com/woocommerce/woocommerce-blocks/issues/1714\n *\n * https://github.com/woocommerce/woocommerce-blocks/blob/trunk/docs/third-party-developers/extensibility/hooks/actions.md#woocommerce_add_to_cart\n *\n * experimental__woocommerce_blocks-product-list-render\n *\n * https://github.com/woocommerce/woocommerce-blocks/blob/a1a6eb2b574b7d39d19d67bafb747d38017289da/docs/internal-developers/blocks/feature-flags-and-experimental-interfaces.md/#usages-of-experimental-prefix\n */\n\n// TODO experimental__woocommerce_blocks-checkout-set-email-address\n// TODO experimental__woocommerce_blocks-product-view-link > selectItem\n// TODO maybe experimental__woocommerce_blocks-product-list-render, when product list is rendered send some list event\n// TODO maybe experimental__woocommerce_blocks-product-search, if the current event trigger doesn't work\n// TODO experimental__woocommerce_blocks-product-render > viewItem\n// TODO various events during entering checkout details, such as email, address, etc.\n// TODO find a way to keep view_item_list events working with the mutation observer\n\n// import {createHooks, addAction, doAction} from \"@wordpress/hooks\"\n// console.log(wp.hooks)\n// console.log(wp.hooks.applyFilters(\"ndx_change_string\", \"\"))\n\n/**\n * Add-to-cart button\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-cart-add-item\",\n\t\"pixel-manager-for-woocommerce\",\n\tdata => {\n\t\t// console.log(\"experimental__woocommerce_blocks-cart-add-item\", data)\n\n\t\t// Works on the all product page\n\t\t// TODO make it work with variable quantities on product page\n\t\twpm.addProductToCart(data.product.id, 1)\n\t},\n)\n\n/**\n * Change cart quantity\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-cart-set-item-quantity\",\n\t\"pixel-manager-for-woocommerce\",\n\tdata => {\n\t\t// console.log(\"experimental__woocommerce_blocks-cart-set-item-quantity\", data)\n\n\t\tif (data.quantity > data.product.quantity) {\n\t\t\twpm.addProductToCart(data.product.id, data.quantity - data.product.quantity)\n\t\t}\n\n\t\tif (data.quantity < data.product.quantity) {\n\t\t\twpm.removeProductFromCart(data.product.id, data.product.quantity - data.quantity)\n\t\t}\n\t},\n)\n\n/**\n * Remove from cart\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-cart-remove-item\",\n\t\"pixel-manager-for-woocommerce\",\n\tdata => {\n\t\t// console.log(\"experimental__woocommerce_blocks-cart-remove-item\", data)\n\t\twpm.removeProductFromCart(data.product.id, data.quantity)\n\t},\n)\n\n/**\n * Checkout form submit\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-checkout-submit\",\n\t\"pixel-manager-for-woocommerce\",\n\t() => {\n\t\t// console.log(\"experimental__woocommerce_blocks-checkout-submit\")\n\t\tjQuery(document).trigger(\"wpmPlaceOrder\", {})\n\t},\n)\n\n\n/**\n * Only outputs an object with products. No other data or actions.\n */\n// wp.hooks.addAction(\n// \t\"experimental__woocommerce_blocks-product-list-render\",\n// \t\"pixel-manager-for-woocommerce\",\n// \t(value) => {\n//\n// \t\tif (value.products.length > 0) {\n// \t\t\tconsole.log(\"hello world 1\")\n// \t\t\tconsole.log(value)\n//\n// \t\t\tjQuery(\".add_to_cart_button\").on(\"click\", function (event) {\n//\n// \t\t\t\tconsole.log(jQuery(event.target.parentElement.parentElement))\n//\n// \t\t\t\t// console.log(\"hello world 5\");\n// \t\t\t\t//\n// \t\t\t\t// console.log(jQuery(this.parentElement.parentElement));\n// \t\t\t\t//\n// \t\t\t\t// console.log(\"hello world 6\");\n// \t\t\t\t//\n// \t\t\t\t// // element is part of a React component.\n// \t\t\t\t// // Get the parent element.\n// \t\t\t\t// const pe = event.target.parentElement.parentElement\n// \t\t\t\t// console.log(jQuery(pe)._reactInternalFiber.key)\n// \t\t\t\t//\n// \t\t\t\t// // pe is a react component. Get the key of that component.\n// \t\t\t\t// const key = pe.getAttribute(\"data-key\")\n// \t\t\t\t// console.log(key)\n//\n//\n// \t\t\t\t// console.log(element.currentTarget.dataset.key)\n// \t\t\t})\n// \t\t}\n// \t\treturn value\n// \t},\n// )\n\n// jQuery(document).on(\"pmw:ready\", () => {\n// \tjQuery(\".add_to_cart_button\").on(\"click\", function (element) {\n//\n// \t\tconsole.log(\"hello world 3\")\n// \t\t// element is part of a React component.\n// \t\t// Get the key of that component.\n// \t\tconsole.log(element.currentTarget.dataset.key)\n// \t})\n// })\n\n// wp.hooks.addAction(\n// \t'woocommerce_add_to_cart',\n// \t'pixel-manager-for-woocommerce',\n// \t( cart_item_key, product_id, quantity, variation_id, variation, cart_item_data ) => {\n// \t\tconsole.log( cart_item_key, product_id, quantity, variation_id, variation, cart_item_data );\n// \t},\n// \t()=>{\n// \t\tconsole.log(\"hello world 2\")\n// \t}\n// )\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * Run PMW main loader\n */\nconst main = async () => {\n\n\trequire(\"./wpm/functions_main\")\n\n\t// Wait until jQuery is loaded\n\tawait wpm.jQueryExists()\n\t// Wait until wpmDataLayer is loaded\n\tawait wpm.wpmDataLayerExists()\n\n\t// wait 1000ms\n\t// await new Promise(resolve => setTimeout(resolve, 1000))\n\n\t// Load all essential scripts first\n\trequire(\"./wpm/functions_loader\")\n\n\t// Load all event listeners that depend on document ready\n\tjQuery(document).on(\"pmw:ready\", () => {\n\t\trequire(\"./wpm/event_listeners_on_ready\")\n\t})\n\n\t// Load remaining event listeners\n\trequire(\"./wpm/event_listeners\")\n\n\trequire(\"./wpm/wc_hooks\")\n\n\t// Output PMW console message\n\twpm.pmwConsoleMessage()\n\n\t// Check if domain is excluded from tracking\n\t// If so, return\n\tif (wpm.excludeDomainFromTracking()) return\n\n\t// Load free pixels\n\trequire(\"./google/loader\")\n\trequire(\"./facebook/loader\")\n\trequire(\"./hotjar/loader\")\n\n\t// #if process.env.TIER === 'premium'\n// \t/**\n// \t * Load all premium scripts\n// \t */\n// \tif (wpm.canLoadPremiumFeatures()) {\n// \t\trequire(\"./wpm/event_listeners_premium\")\n// \t\trequire(\"./microsoft-ads/loader\")\n// \t\trequire(\"./pinterest/loader\")\n// \t\trequire(\"./snapchat/loader\")\n// \t\trequire(\"./tiktok/loader\")\n// \t\trequire(\"./twitter/loader\")\n// \t}\n\t// #endif\n\n\t// Preload pixels\n\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\n\t// Trigger wpmLoad event\n\tdocument.dispatchEvent(new Event(\"wpmLoad\"))\n\n\t// Wait until page is loaded\n\tawait wpm.pageLoaded()\n\twpm.triggerDomReadyEvent()\n}\n\nmain()\n\n\n\n\n"],"names":["exports","isInSubnet","address","subnetOrSubnets","createChecker","Array","isArray","subnetsByVersion","reduce","acc","subnet","ip","split","util","isIP","push","length","Error","check4","IPv4","check6","IPv6","isIPv6","isIPv4MappedAddress","extractMappedIpv4","Object","enumerable","get","isPrivate","isLocalhost","isReserved","isSpecial","localhost","ipv4","ipv6","private","reserved","ipv4ToLong","isIPv4","octets","parseInt","checks_1","map","addressLong","some","check","createLongChecker","subnetAddress","prefixLengthString","prefixLength","Number","isInteger","subnetLong","specialNetsCache","ipRange_1","dot","mappedIpv4","colon","doubleColon","getIpv6Segments","test","matches","match","prefix","parts","x","toString","mappedIpv4ToIpv6","beforeChunk","afterChunk","beforeParts","afterParts","missingSegments","concat","segments","createSegmentChecker","subnetSegments","i","bitCount","Math","min","addressSegments","Boolean","v4Seg","v4Str","IPv4Reg","RegExp","v6Seg","IPv6Reg","s","expandIPv6","ipaddr","ipv4Part","ipv4Regexes","ipv6Part","ipv6Regexes","matchCIDR","zoneIndex","module","this","first","second","partSize","cidrBits","part","shift","subnetMatch","rangeList","defaultName","k","len","rangeName","rangeSubnets","kind","apply","octet","prototype","join","toNormalizedString","toByteArray","slice","other","cidrRange","ref","SpecialRanges","unspecified","broadcast","multicast","linkLocal","loopback","carrierGradeNat","range","toIPv4MappedAddress","parse","prefixLengthFromSubnetMask","cidr","stop","zeros","zerotable","fourOctet","longValue","parser","string","parseIntAuto","value","results","reverse","zoneId","l","replace","toRFC5952String","bestMatchIndex","bestMatchLength","regex","exec","index","substring","bytes","addr","suffix","call","toFixedLengthString","padStart","uniqueLocal","ipv4Mapped","rfc6145","rfc6052","teredo","toIPv4Address","high","low","transitional","colonCount","lastColon","replacement","replacementCount","indexOf","lastIndexOf","substr","isValid","error1","isValidFourPartDecimal","parseCIDR","maskLength","parsed","defineProperty","subnetMaskFromPrefixLength","filledOctetCount","j","floor","pow","broadcastAddressFromCIDR","ipInterfaceOctets","subnetMaskOctets","networkAddressFromCIDR","fromByteArray","process","normalize","a","_validate","nh","toLowerCase","sections","n","h","ns","hs","undefined","_leftPad","abbreviate","zPreviousFlag","zeroStartIndex","zeroLength","zStartIndex","zLength","section","zFlag","splice","d","p","padding","repeat","_bin2hex","bin","_addr2bin","binAddr","_bin2addr","binPart","hexSection","divideSubnet","mask0","mask1","limit","abbr","ret","binNetPart","binHostPart","numSubnets","binSubnet","hexAddr","binStartAddr","binEndAddr","start","end","size","randomSubnet","random","ptr","mask","version","err","isV4","isV6","isRange","inRange","check_range","ip6","range_data","parse_addr","parse_range","storeIP","displayIP","jQuery","document","on","wpmDataLayer","pixels","facebook","pixel_id","loaded","wpm","doesUrlContainPatterns","exclusion_patterns","canIFire","loadFacebookPixel","event","payload","fbq","custom_data","eventID","event_id","error","console","setFbUserData","$","fbUserData","f","window","b","e","callMethod","arguments","queue","_fbq","t","createElement","async","src","getElementsByTagName","parentNode","insertBefore","data","isFbpSet","isFbAdvancedMatchingEnabled","getUserIdentifiersForFb","user","id","raw","external_id","order","user_id","email","em","billing_email_hashed","first_name","fn","billing_first_name","last_name","ln","billing_last_name","phone","ph","billing_phone","city","ct","billing_city","state","st","billing_state","postcode","zp","billing_postcode","country","billing_country","getFbRandomEventId","getFbUserData","getFbUserDataFromBrowser","advanced_matching","getCookie","isValidFbp","fbp","isValidFbc","fbc","navigator","userAgent","client_user_agent","fbGetProductDataForCapiEvent","product","content_type","content_name","name","content_ids","dyn_r_ids","dynamic_remarketing","id_type","parseFloat","quantity","price","currency","facebookContentIds","prodIds","key","item","entries","items","general","variationsOutput","variation_id","String","products","trackCustomFacebookEvent","eventName","customData","eventId","trigger","event_name","user_data","event_source_url","location","href","fbGetContentIdsFromCart","cart","require","isEmptyObject","google","ads","conversionIds","status","googleConfigConditionsMet","isVariable","send_events_with_parent_ids","send_to","getGoogleAdsConversionIdentifiers","google_business_vertical","gtagLoaded","then","gtag","value_filtered","getGoogleAdsDynamicRemarketingOrderItems","getGoogleAdsConversionIdentifiersWithLabel","data_basic","data_with_cart","transaction_id","number","new_customer","clv_order_value_filtered","customer_lifetime_value","aw_merchant_id","discount","aw_feed_country","aw_feed_language","getGoogleAdsRegularOrderItems","conversionIdentifiers","orderItems","orderItem","analytics","universal","property_id","mp_active","affiliation","value_regular","tax","shipping","coupon","getGAUAOrderItems","category","variant","variant_name","brand","ga3AddListNameToProduct","item_data","productPosition","list_name","shop","list_position","ga4","measurement_id","getGA4OrderItems","item_name","item_category","item_id","item_variant","item_brand","canGoogleLoad","loadGoogle","logPreventedPixelLoading","type","consent_mode","active","getConsentValues","mode","categories","includes","getVisitorConsentStatusAndUpdateGoogleConsentSettings","google_consent_settings","analytics_storage","ad_storage","updateGoogleConsentMode","cookie_consent_mgmt","explicit_consent","fireGtagGoogleAds","enhanced_conversions","phone_conversion_label","phone_conversion_number","keys","page_type","enhanced_conversion_data","fireGtagGoogleAnalyticsUA","parameters","fireGtagGoogleAnalyticsGA4","debug_mode","isGoogleActive","getGoogleGtagId","loadScriptAndCacheIt","script","textStatus","dataLayer","wait_for_update","region","ads_data_redaction","url_passthrough","linker","settings","Date","Promise","resolve","reject","startTime","wait","setTimeout","optimize","container_id","load_google_optimize_pixel","hotjar","site_id","load_hotjar_pixel","o","hj","q","_hjSettings","hjid","hjsv","r","appendChild","getComplianzCookies","cmplz_statistics","cmplz_marketing","visitorHasChosen","getCookieLawInfoCookies","analyticsCookie","adsCookie","wpmConsentValues","setConsentValueCategories","updateConsentCookieValues","cookie","explicitConsent","JSON","decodeURI","action","consents","statistics","marketing","thirdparty","advanced","localStorage","getItem","log","UC_UI","addEventListener","ucUiProcessConsent","areAllConsentsAccepted","groups","URLSearchParams","groupsObject","forEach","group","groupArray","groubsObject","pmw","consentAcceptAll","ucStatisticsSlug","getSettingsLabels","filter","label","slug","consentAdjustSelectively","getServicesBaseInfo","categorySlug","consent","setConsentDefaultValuesToExplicit","pixelName","canIFireMode","scriptTagObserver","MutationObserver","mutations","addedNodes","node","shouldScriptBeActive","unblockScript","blockScript","observe","head","childList","subtree","disconnect","element","scriptNode","removeAttach","remove","wpmSrc","attr","appendTo","dispatchEvent","Event","removeAttr","unblockAllScripts","unblockSelectedPixels","explicitConsentStateAlreadySet","Cookiebot","detail","cmplzStatusChange","cmplzConsentData","huObserver","querySelector","hu","documentElement","body","consentRevokeAll","OneTrust","reload","duration","consentSetCookie","setCookie","stringify","url","URL","currentTarget","productId","getProductIdByCartItemKeyUrl","removeProductFromCart","checkoutButtonClasses","paymentMethodSelected","fireCheckoutProgress","fireCheckoutOption","val","doesWooCommerceCartExist","getCartItems","productIds","getAddToCartLinkProductIds","getProductsFromBackend","referrer","referrerHostname","hostname","host","wpmLoadFired","product_type","getMainProductIdFromProductPage","getProductDataForViewItemEvent","isOrderIdStored","writeOrderIdToStorage","acrRemoveCookie","hasLoginEventFired","setLoginEventFired","sessionStorage","tiktok","getRandomEventId","context","getTikTokUserDataFromBrowser","properties","contents","content_id","sendEventPayloadToServer","getCartValue","search_string","getSearchTermFromUrl","query","getTikTokOrderItemIds","startIntersectionObserverToWatch","startProductsMutationObserverToWatch","addToCartSelectors","addProductToCart","each","find","classes","getPostIdFromString","one","target","closest","origin","searchParams","has","nextAll","getIdBasedOndVariationsOutputSetting","getProductDetailsFormattedForEvent","isEmail","emailSelected","getCartItemsFromBackend","variation","triggerViewItemEventPrep","wpmDeduper","wpmRestSettings","checkCookie","useRestEndpoint","isSessionStorageAvailable","isRestEndpointAvailable","isBelowRestErrorThreshold","testEndpoint","root","cookieName","response","fetch","method","cache","keepalive","setItem","isWpmRestEndpointAvailable","orderId","orderKey","source","Storage","ids","expiresDate","setDate","getDate","toUTCString","storeOrderIdOnServer","orderDeduplication","quantityToRemove","isVariation","parentId","saveCartObjectToDataLayer","ajax_url","ok","json","success","headers","pageId","pageType","responseData","assign","cartObject","triggerViewItemEvent","triggerViewItemEventNoProduct","step","checkout_option","triggerViewItemList","viewItemListTriggerTestMode","css","append","viewItemListTrigger","opacity","backgroundColor","search","io","ioTimeouts","observerCallback","observer","entry","elementId","next","isIntersecting","testMode","unobserve","timeout","clearTimeout","allIoElementsToWatch","ioid","getAllElementsToWatch","elem","parent","hasClass","prev","urlHasParameter","IntersectionObserver","threshold","productsNode","parents","productsMutationObserver","attributes","characterData","mutation","newNodes","hasWpmProductIdElement","siblings","cookieValue","expiryDays","setTime","getTime","expires","ca","decodeURIComponent","c","charAt","deleteCookie","getWpmSessionData","setWpmSessionData","nonce_wp_rest","order_key","nonce_ajax","responseJson","cartItemKey","cartItemKeys","position","parentId_dyn_r_ids","setReferrerToCookie","getReferrerFromCookie","getClidFromBrowser","clidCookieId","clidId","gclid","dclid","getUserAgent","getViewPort","width","max","clientWidth","innerWidth","height","clientHeight","innerHeight","options","dataType","ajax","getOrderItemPrice","total","total_tax","loginEventFired","pageLoaded","waitForVar","readyState","pageReady","isMiniCartActive","parameter","hashAsync","algo","str","crypto","subtle","digest","TextEncoder","encode","buf","Uint8Array","patterns","pattern","excludeDomainFromTracking","excludeDomains","domain","debug","pmwConsoleMessage","pro","distro","eligibleForUpdates","canLoadPremiumFeatures","jQueryReadyFired","triggerDomReadyEvent","jQueryExists","waitForjQuery","wpmDataLayerExists","ipCheck","text","trim","obj","pair","isOnBlacklist","ipName","getBlacklist","isCidr","customExclusionList","server2server","ipExcludeList","wp","hooks","addAction","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","g","globalThis","Function","prop","hasOwnProperty","Symbol","toStringTag","main"],"sourceRoot":""}