1<!doctype html> 2<html lang="en"> 3 <head > 4
4<script> 5 var LOCALE = 'en\u002DUS'; 6 var BASE_URL = 'https\u003A\u002F\u002Fwww.centerpointarchery.com\u002F'; 7 var require = { 8 'baseUrl': 'https\u003A\u002F\u002Fwww.centerpointarchery.com\u002Fstatic\u002Fversion1790000787\u002Ffrontend\u002FCenterpoint\u002Fdefault\u002Fen_US' 9 };</script>
9 <meta charset="utf-8"/>
9<script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"1103355215",accountID:"2557132",trustKey:"2557132",xpid:"VgMCVldQChABVFBbAQgEUFYB",licenseKey:"NRJS-aafa228070e6a667a44",applicationID:"1019693620",browserID:"1103355215"};;/*! For license information please see nr-loader-spa-1.323.0.min.js.LICENSE.txt */ 10(()=>{var e={8122(e,t,r){"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),s=0===Object.keys(r).length?e:r;for(let a in s)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):e[a]instanceof Map||e[a]instanceof Set||e[a]instanceof Date||e[a]instanceof RegExp?r[a]=e[a]:"object"==typeof e[a]&&null!==t[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){r[a]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>a});var n=r(384),i=r(8122);const s={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function a(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,s)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["A",0,"@newrelic/rrweb","x",0,"1.323.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},9752(e,t,r){"use strict";const n="newrelic-iframe-",i=n+"timing-update",s=n+"api",a=n+"api-response",o=n+"vitals-update",c=n+"ajax";r.d(t,["$8",0,o,"Gi",0,a,"KU",0,c,"Pl",0,n,"cS",0,s,"cr",0,i])},6154(e,t,r){"use strict";var n=r(1863);const i="undefined"!=typeof window&&!!window.document,s="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),o=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)();r.d(t,["OF",0,d,"RI",0,i,"WN",0,f,"bv",0,s,"gm",0,a,"lR",0,l,"m",0,c,"mw",0,o,"sb",0,u,"zk",0,()=>{const e=a?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<a.performance.now())return e}])},7295(e,t,r){"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>s});var n=[];function i(e){if(!e||s(e))return!1;if(0===n.length)return!0;if("*"===n[0].hostname)return!1;for(var t=0;t<n.length;t++){var r=n[t];if(r.hostname.test(e.hostname)&&r.pathname.test(e.pathname))return!1}return!0}function s(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;if("*"===r)return void(n=[{hostname:"*"}]);0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let s,a;i>0?(s=r.substring(0,i),a=r.substring(i)):(s=r,a="*");let[c]=s.split(":");n.push({hostname:o(c),pathname:o(a,!0)})}}function o(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),a=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};
10e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,o=i.i.handlers;if(s&&!s.aborted&&s.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}).forEach(t=>{t[0]?.on&&t[0].context()instanceof a.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}s.isolatedBacklog||delete o[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],s=e[2];n.apply(i,s)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),s=r(2646),a=r(5607);const o="nr@context:".concat(a.W),c=function e(t,r){var n={},a={},u={},l=!1;try{l=16===r.length&&d.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,s){!1!==s&&(s=!0);if(c.aborted&&!i)return;t&&s&&t.emit(e,r,n);var o=h(n);g(e).forEach(e=>{e.apply(o,r)});var d=v()[a[e]];d&&d.push([f,e,r,o]);return o},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{a[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[a[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof s.y?e:e?(0,i.I)(e,o,()=>new s.y(o)):new s.y(o)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=c),r.d(t,["P",0,o,"ee",0,c])},2646(e,t,r){"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908(e,t,r){"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,s){s?(s.buffer([e],i),s.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=a;var i=s.handlers={};function s(e,t,r,s){a(s||n.d,i,e,t,r)}function a(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var a=t[s]=t[s]||{};(a[r]=a[r]||[]).push([e,i])}},3878(e,t,r){"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function s(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>s,jT:()=>n,sp:()=>i})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>a,ZF:()=>o,bz:()=>s,el:()=>c});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function s(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,s=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var o=0;o<e;o++)a.push(i(r,s++).toString(16));return a.join("")}function o(){return a(16)}function c(){return a(32)}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","g",0,{OFF:0,FULL:1,ERROR:2},"iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},733(e,t,r){"use strict";function n(e,t){return function(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}("".concat(String(e),":").concat(String(t)))}r.d(t,{Y:()=>n})},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},9119(e,t,r){"use strict";r.d(t,{L:()=>s});var n=/([^?#]*)[^#]*(#[^?]*|$).*/,i=/([^?#]*)().*/;function s(e,t){return e?e.replace(t?n:i,"$1$2"):e}},7485(e,t,r){"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},7866(e,t,r){"use strict";r.d(t,["Nc",0,/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,"cn",0,/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i,"fL",0,/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,"h3",0,/function (.+?)\s*\(/,"hB",0,/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i])},944(e,t,r){"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},8990(e,t,r){"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389(e,t,r){"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},1910(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(944);const i=new Map;function s(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),s=t.includes("nrWrapper");return r||s||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},3304(e,t,r){"use strict";r.d(t,{A:()=>i});var n=r(7836);function i(e){try{return JSON.stringify(e,(()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}})())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},9232(e,t,r){"use strict";r.d(t,["f",0,{MFE:"MFE",BA:"BA"}])},7560(e,t,r){"use strict";r.d(t,{N:()=>a,j:()=>c});var n=r(9119),i=r(944);const s=(0,r(6389).J)(e=>(0,i.R)(80,e));function a(e){if(!Array.isArray(e?.assets)||!e.assets.length)return;
10const t=e.assets.map(o).filter(Boolean);return t.length?{assets:t,scripts:t.filter(e=>e.isScript)}:void 0}function o(e){if(!e||"object"!=typeof e)return;const{matcher:t,type:r}=e;let i="string"==typeof t&&t.endsWith(".js");return void 0!==r&&(!function(e){return"script"===e||"asset"===e}(r)?s(r):i=function(e){return"script"===e}(r)),a=t,"[object RegExp]"===Object.prototype.toString.call(a)?{pattern:t,test:e=>(t.lastIndex=0,t.test((0,n.L)(e))),isScript:i}:"string"==typeof t&&t.length>0?{pattern:t,test:e=>(0,n.L)(e).includes(t),isScript:i}:void s(t);var a}function c(e,t,{scriptsOnly:r=!1}={}){if(!e||!t)return!1;return(r?e.scripts:e.assets).some(e=>e.test(t))}},5718(e,t,r){"use strict";r.d(t,{xo:()=>T,AZ:()=>v,cI:()=>g,Qr:()=>A,QL:()=>y});var n=r(6154),i=r(1863),s=r(9119),a=r(7866);class o{dom=new c;performance=new c;constructor(e){this.url=e,this.claimedBy=new Set}get script(){const e=Math.max(this.dom.start,this.performance.end);return{start:e,end:Math.max(this.dom.end,this.performance.end,e)}}}class c{start=0;end=0;value=void 0}function d(e=()=>{},t){return{get:()=>void 0!==t?t:e(),set:e=>{t=e}}}let u;try{u=v(y())[0]}catch(e){u=v(e)[0]}const l=new Map;let f=[];const h=new WeakMap;function p(e){let t=h.get(e);return t||(t={weighedAssetUrls:new Set,recordManifestScriptWindow:(t,r)=>{t&&(e.scriptStart=e.scriptStart>0?Math.min(e.scriptStart,t):t),r&&(e.scriptEnd=e.scriptEnd>0?Math.max(e.scriptEnd,r):r)}},h.set(e,t)),t}function g(e){return l.get(e)}function m(e){const t=g(e);
10if(t)return t;const r=new o(e);if(l.set(e,r),l.size>1e3){const e=l.keys().next().value;l.delete(e)}return r}if(n.gm.MutationObserver&&n.gm.document){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if("SCRIPT"===e.nodeName&&e.src){const t=m((0,s.L)(e.src));t.dom.start=(0,i.t)(),t.dom.value=e;const r=()=>{t.dom.end=(0,i.t)()};["load","error"].forEach(t=>e.addEventListener(t,r,{once:!0}))}})})}).observe(n.gm.document,{childList:!0,subtree:!0})}if(n.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{if((e=>"script"===e.initiatorType||["link","fetch"].includes(e.initiatorType)&&(0,s.L)(e.name).endsWith(".js"))(e)){const t=m((0,s.L)(e.name));t.performance.start=Math.floor(e.startTime),t.performance.end=Math.floor(e.responseEnd),t.performance.value=e}if(!f.length)return;const t=[];f.forEach(({test:r,addedAt:n},s)=>{(r(e)||(0,i.t)()-n>1e4)&&t.push(s)}),f=f.filter((e,r)=>!t.includes(r))})}).observe({type:"resource",buffered:!0})}function v(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(a.cn)||e.match(a.hB)||e.match(a.fL);if(r&&r[2])t.add((0,s.L)(r[2]));else{const r=e.match(/\(([^)]+\.js):\d+:\d+\)/)||e.match(/^\s+at\s+([^\s(]+\.js):\d+:\d+/);r&&r[1]&&t.add((0,s.L)(r[1]))}}return[...t]}function y(){let e;try{const t=Error.stackTraceLimit;Error.stackTraceLimit=50,e=(new Error).stack,Error.stackTraceLimit=t}catch(t){e=(new Error).stack}return e}function b(e,t){return(0,s.L)(e.name)===t}function E(e,t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType,w(e,t)}function w(e,t){const r=(0,s.L)(t.name),{weighedAssetUrls:n}=p(e);n.has(r)||(n.add(r),e.totalWeight=(e.totalWeight||0)+(t.transferSize||0),"blocking"===t.renderBlockingStatus?e.renderBlocking=!0:"non-blocking"===t.renderBlockingStatus&&!0!==e.renderBlocking&&(e.renderBlocking=!1))}function R(e,t,r,n,i){if(w(e,t),"scripts"!==i&&"all"!==i)return;if("all"===i||r.isScript){const r=Math.floor(t.startTime),n=Math.floor(t.responseEnd);e.fetchStart=e.fetchStart>0?Math.min(e.fetchStart,r):r,e.fetchEnd=e.fetchEnd>0?Math.max(e.fetchEnd,n):n}if(r.isScript){const r=g((0,s.L)(t.name));if(r){const t=()=>{const{start:t,end:n}=r.script;p(e).recordManifestScriptWindow(t,n)};t(),!r.dom.end&&r.dom.value&&["load","error"].forEach(e=>r.dom.value.addEventListener(e,t,{once:!0}))}n.resolved||(e.asset=t.name,e.type=t.initiatorType,n.resolved=!0)}}function T(e,t){const r=t?.manifest;if(!r||!r.assets.length)return;const s={resolved:!1},a=new Set(r.assets);(n.gm.performance?.getEntriesByType("resource")||[]).forEach(r=>{const n=[...a].find(e=>e.test(r.name));n&&(R(e,r,n,s,t.timingMethod),a.delete(n))}),a.size&&function(e,t,r,s){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:n=>{const i=[...t].find(e=>e.test(n.name));return i&&(R(e,n,i,r,s),t.delete(i)),0===t.size}})}(e,a,s,t.timingMethod)}function A(e){const t=e?.id,r={registeredAt:(0,i.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,scriptStart:0,scriptEnd:0,asset:void 0,type:"unknown",totalWeight:0,renderBlocking:void 0},a=y();if(!a)return r;const o=n.gm.performance?.getEntriesByType("navigation")?.[0]?.name||"";try{const e=v(a),c=(e.length>1?e.filter(e=>u!==e):e)[0];if(!c)return r;if(o.includes(c))return r.asset=(0,s.L)(o),r.type="inline",r;r.correlation=g(c);const l=r.correlation?.performance.value||n.gm.performance?.getEntriesByType("resource")?.find(e=>b(e,c));if(l)E(r,l);else{(function(e){if(!e||!n.gm.document)return!1;try{const t=n.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,s.L)(r.href)===e)return!0}catch(e){}return!1})(c)&&(r.asset=c,r.type="preload"),function(e,t){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:r=>!!b(r,t)&&(E(e,r),!0)})}(r,c)}const h=r.correlation,m=!!t&&!!h?.claimedBy.has(t);h&&t&&h.claimedBy.add(t);const y=()=>{const e=h?.script.start;if(!m||!e)return!1;return r.registeredAt-e>1e4};let w=0,R=0;p(r).recordManifestScriptWindow=(e,t)=>{e&&(w=w>0?Math.min(w,e):e),t&&(R=R>0?Math.max(R,t):t)},Object.defineProperty(r,"scriptStart",d(()=>{const e=y()?r.registeredAt:h?.script.start??r.fetchEnd;return w>0?Math.min(e,w):e})),Object.defineProperty(r,"scriptEnd",d(()=>{const e=y()?r.registeredAt:h?.script.end??r.registeredAt;return R>0?Math.max(e,R):e}))}catch(e){}return r}},5732(e,t,r){"use strict";r.d(t,{$5:()=>m,B5:()=>g,K6:()=>u,M$:()=>
10o,Ms:()=>d,NG:()=>c,Ux:()=>h,YA:()=>p,yx:()=>l});var n=r(5718),i=r(7560),s=r(9119),a=r(9232);function o(e){return e?.type===a.f.MFE}function c(e,t){if(!y(e,t))return;const r=t.runtime.registeredEntities;return r?.find(t=>t.metadata.target.iframeInterfaceId===e)}function d(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities;return r?.filter(t=>String(t.metadata.target.id)===String(e)).map(e=>e.metadata.target)||[]}function u(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=(0,s.L)(e),a=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!1}):!!t.metadata.timings?.asset&&(0,s.L)(t.metadata.timings.asset)===n});return f(a).map(e=>e.metadata.target)}function l(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!0}):!!t.metadata.timings?.asset?.endsWith(e)});return f(n).map(e=>e.metadata.target)}function f(e){if(!e?.length)return e||[];const t=new Map,r=[];for(const n of e){const e=n.metadata?.timings?.asset;if(!e){r.push(n);continue}const i="".concat(e,"::").concat(n.metadata?.target?.id),s=t.get(i);if(s){if(s.metadata.target?.blocked&&!n.metadata.target?.blocked){const e=r.indexOf(s);-1!==e&&(r[e]=n),t.set(i,n)}}else t.set(i,n),r.push(n)}return r}function h(e,t){return v(t)?o(e)?e.attributes:t.agentRef.runtime.v2Target.attributes:{}}function p(e,t){return g(e,t)?{"child.id":e.id,"child.type":e.type,...h(void 0,t)}:{}}function g(e,t){return o(e)&&!!v(t)&&t.agentRef.init.api.register.duplicate_data_to_container}function m(e){if(!e?.runtime)return[];if(!y(!0,e)||!e.runtime.registeredEntities?.length)return[e.runtime.v2Target];const t=[];try{var r=(0,n.AZ)((0,n.QL)());let i=r.length-1;for(;r[i];)t.push(...l(r[i--],e))}catch(e){}const i=function(e){const t=new Set,r=[];for(const n of e){const e=n?.instance;t.has(e)||(t.add(e),r.push(n))}return r}(t);return i.length||i.push(e.runtime.v2Target),i}function v(e){return 2===e?.harvestEndpointVersion}function y(e,t){return!!e&&!!t?.init.api.register.enabled}},5289(e,t,r){"use strict";r.d(t,{GG:()=>a,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function a(e,t){if(s())return e();const r=(0,i.J)(e),a=setInterval(()=>{s()&&(clearInterval(a),r())},500);(0,n.sp)("load",r,t)}function o(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),a=r(1910);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,a.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}r.d(t,["NT",0,o])},2843(e,t,r){"use strict";r.d(t,{G:()=>s,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function s(e,t,r){(0,n.sp)("pagehide",e,t,r)}},8139(e,t,r){"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),a=r(6154);const o={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e,t){var r=function(e){return(e||n.ee).get("events")}(e);if(o[r.debugId]++)return r;o[r.debugId]=1;var f=(0,i.YM)(r,!0,t);function p(e){f.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,p),c&&h(c.prototype,p),h(a.gm,p)),r.on(d+"-start",function(e,t){var r=e[1];if(null!==r&&("function"==typeof r||"object"==typeof r)&&"newrelic"!==e[0]){var n=(0,s.I)(r,l,function(){var e={object:function(){if("function"!=typeof r.handleEvent)return;return r.handleEvent.apply(r,arguments)},function:r}[typeof r];return e?f(e,"fn-",null,e.name||"anonymous"):r});this.wrapped=e[1]=n}}),r.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),r}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434(e,t,r){"use strict";r.d(t,{YM:()=>d});var n=r(7836),i=r(5607),s=r(5732);const a="nr@original:".concat(i.W);var o=Object.prototype.hasOwnProperty,c=!1;function d(e,t,r){return e||(e=n.ee),i.inPlace=function(e,t,r,n,s,a){r||(r="");const o="-"===r.charAt(0);for(let c=0;c<t.length;c++){const d=t[c],u=e[d];l(u)||(e[d]=i(u,o?d+r:r,n,d,s,a))}},i.flag=a,i;function i(t,n,i,c,f,h){return l(t)?t:(n||(n=""),nrWrapper[a]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach(function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})}),t}catch(e){u([e],r)}for(var n in e)o.call(e,n)&&(t[n]=e[n])}
10(t,nrWrapper,e),nrWrapper);function nrWrapper(){var a,o,l,p;let g,m;try{o=this,a=[...arguments],m=h?(0,s.$5)(r):[r?.runtime?.v2Target],l="function"==typeof i?i(a,o):i||{}}catch(t){u([t,"",[a,o,c],l],e)}d(n+"start",[a,o,c,m],l,f);const v=performance.now();let y;try{return p=t.apply(o,a),y=performance.now(),p}catch(e){throw y=performance.now(),d(n+"err",[a,o,e,m],l,f),g=e,g}finally{const e=y-v,t={start:v,end:y,duration:e,isLongTask:e>=50,methodName:c,thrownError:g};t.isLongTask&&d("long-task",[t,o,m],l,f),d(n+"end",[a,o,p,m],l,f)}}}function d(r,n,i,s){if(!c||t){var a=c;c=!0;try{e.emit(r,n,i,t,s)}catch(t){u([t,r,n,i],e)}c=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function l(e){return!(e&&"function"==typeof e&&e.apply&&!e[a])}r.d(t,["Jt",0,a])},9300(e,t,r){"use strict";const n=r(860).K7.ajax;r.d(t,["TZ",0,n,"f5",0,"ajaxRequest.id","mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3333(e,t,r){"use strict";var n=r(981);const i=r(860).K7.genericEvents,s=[n.R.PA,n.R.UA,n.R.BP];r.d(t,["$v",0,{RESOURCES:"experimental.resources",REGISTER:"register"},"TZ",0,i,"Zp",0,["auxclick","click","copy","keydown","paste","scrollend"],"kd",0,s,"qN",0,["focus","blur"]])},6774(e,t,r){"use strict";const n=r(860).K7.jserrors;r.d(t,["T",0,n])},993(e,t,r){"use strict";const n=r(860).K7.logging;r.d(t,["A$",0,{OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},"TZ",0,n,"p_",0,{ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"}])},3785(e,t,r){"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),a=r(3969),o=r(993);function c(e,t,r={},c=o.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)("log",[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(o.p_).some(t=>t===e.toUpperCase().trim())}},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},6344(e,t,r){"use strict";var n=r(2614);const i=r(860).K7.sessionReplay,s={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0}
10;r.d(t,["Qb",0,{API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"},"TZ",0,i,"Vh",0,"errorDuringReplay","_s",0,{DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},"bc",0,{RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},"yP",0,s])},5270(e,t,r){"use strict";r.d(t,{Aw:()=>a,SR:()=>s,rF:()=>o});var n=r(384),i=r(7767);function s(e){return!!(0,n.dV)().o.MO&&(0,i.V)(e)&&!0===e?.session_trace.enabled}function a(e){return!0===e?.session_replay.preload&&s(e)}function o(e,t){try{if("string"==typeof t?.type&&"password"===t.type.toLowerCase())return"*".repeat(e?.length||0);if(void 0!==t?.dataset?.nrUnmask||t?.classList?.contains("nr-unmask"))return e}catch(e){}return"string"==typeof e?e.replace(/[\S]/g,"*"):"*".repeat(e?.length||0)}},3738(e,t,r){"use strict";const n=r(860).K7.sessionTrace,i="-start",s="-end",a="fn"+i,o="fn"+s;r.d(t,["He",0,"bstResource","Kp",0,s,"Lc",0,o,"Rz",0,"pushState","TZ",0,n,"bD",0,"resource","bc",0,{CROSS_TAB:{message:"Session Entity was set to OFF on another tab"},ENTITLEMENTS:{message:"Session Trace is not allowed and will not be started"},RESET:{message:"Session was reset"},SESSION_CHANGED:{message:"Session identifier changed unexpectedly"}},"d3",0,i,"uP",0,a])},3962(e,t,r){"use strict";const n=r(860).K7.softNav;r.d(t,["O2",0,{INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},"OV",0,"popstate","Qu",0,{INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},"TZ",0,n,"ih",0,{IP:"in progress",PF:"pending finish",FIN:"finished",CAN:"cancelled"},"pP",0,"initialPageLoad","tC",0,["click","keydown","submit"]])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},8362(e,t,r){"use strict";r.d(t,{d:()=>s});var n=r(9566),i=r(1741);class s extends i.W{agentIdentifier=(0,n.LA)(16)}},1741(e,t,r){"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e("log",e,t)}start(){return this.#e("start")}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","hw",0,"api-ixn-","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>u});var n=r(3241),i=r(9908),s=r(1863),a=r(944),o=r(3969),c=r(8362),d=r(860);function u(e,t,r,s){const u=s||r;!u||u[e]&&u[e]!==c.d.prototype[e]||(u[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,a.R)(23,e)}})}function l(e,t,r,n,a){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(a||null===r)&&(0,i.p)("api-"+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",s="browser/blobs",a="browser/logs",o={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},d={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:s,[o.sessionReplay]:s,[o.logging]:a,[o.genericEvents]:"ins"};r.d(t,["$J",0,d,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,a,"df",0,s,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],s=t[n++];r.o(e,i)?0===s&&n++:0===s?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:s})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>({212:"nr-spa-compressor",238:"nr-spa-iframe-message-handler",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.323.0.min.js"),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.323.0.PROD:";r.l=(n,i,s,a)=>
10{if(e[n])return void e[n].push(i);let o,c;if(void 0!==s){const e=document.getElementsByTagName("script");for(var d=0;d<e.length;d++){const r=e[d];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+s){o=r;break}}}if(!o){c=!0;var u={478:"sha512-ORjtmy+nQMgxbu0os8+oTRa5sPzbinyuWSvpZrrstVLIaHofRRlfODdH+oUmkIgeQpM+vPf3vG/4RzvCsFVh1A==",249:"sha512-o7+K6xC0z3TqynjVxpd+jgiSgqy8rrPeRcUSqt5J0Rqg5Su5CycLMYfpwiM3WBCHiNDrG5aZoXJQ6HRc335XYQ==",212:"sha512-kRvBt1IYQDBnClTEWNaE8sDFqbXXM3Vdyf972Uf4MFbJxl7u3KmdO+jdB1H4achPEoT9YtNXHswaESey6sCH0A==",238:"sha512-U5EGmyYbFVR2UMNAuZJ7fTgVVtPa5b8RPMySDwXo7z3frRdkUJ2x1VAQTLQCeBab8VlGVGRV8FiSHIn/pwN72A=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+s),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),u[a]&&(o.integrity=u[a])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={38:0,788:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const s=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=s);const a=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(a,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,s,a]=n;var o,c,d=0;if(i.some(t=>0!==e[t])){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(a)a(r)}for(t&&t(n);d<i.length;d++)c=i[d],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.323.0.PROD"]=self["webpackChunk:NRBA-1.323.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),s=r(1741);var a=r(2555),o=r(3333),c=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var u=r(2614),l=r(944),f=r(8122);const h="[data-nr-mask]",p=e=>(0,f.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0,capture_payloads:c.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(o.$v.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,l.R)(1,t)}}},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:u.wk,inactiveMs:u.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inl
10ine_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(h):""===t||null===t?e.mask_selector=h:(0,l.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,l.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,l.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]},web_sockets:{enabled:!1}}})());var g=r(6154),m=r(9324);let v=0;const y={buildEnv:"PROD",distMethod:"CDN",version:m.x,originTime:g.WN},b={consented:!1},E={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||b.consented},set consented(e){b.consented=e},customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++v},listeningForIframeMessages:!1};var w=r(9232);var R=r(7836),T=r(3241);const A={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0};var S=r(9908),x=r(9752);function O(e,t={},n,o){let{init:c,info:d,loader_config:u,runtime:l={},exposed:h=!0}=t;if(!d){const e=(0,i.pV)();c=e.init,d=e.info,u=e.loader_config}var m;e.init=p(c||{}),e.loader_config=(m=u||{},(0,f.a)(m,A)),d.jsAttributes??={},g.bv&&(d.jsAttributes.isWorker=!0),e.info=(0,a.D)(d);const v=e.init;e.runtime??=(e=>{const t=(0,f.a)(e,E),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:w.f.BA,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(s.W.prototype).forEach(r=>{const n=s.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=R.ee.get(e.agentIdentifier),e.exposed=h,(0,T.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&g.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(x.Pl)&&(0,S.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var _=r(1863),k=r(4261),N=r(1738);var L=r(1687),M=r(4234),P=r(5289),I=r(5270),j=r(7767),C=r(6389),D=r(7699);const B=new WeakSet,H=new WeakMap;class W extends M.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,C.J)(()=>{(0,L.Ak)(e,this.featureName),t()}))}):(0,L.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,a.f)(e.info))return(0,l.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(H.has(e))return H.get(e);const i=(async()=>
10{if((0,j.V)(e.init))try{const{setupAgentSession:t}=await r.e(478).then(r.bind(r,8766));t(e)}catch(e){(0,l.R)(20,e),t.emit("internal-error",[e]),(0,S.p)(D.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await r.e(238).then(r.bind(r,6417));t(e)}catch(e){(0,l.R)(23,e)}const[{Connector:i},{Harvester:s}]=await Promise.all([r.e(478).then(r.bind(r,6589)),r.e(478).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new s(e);const a=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(a.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();H.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,l.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,l.R)(34,e),this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};g.RI?(0,P.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,I.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!B.has(e)&&(B.add(e),!(0,a.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}O(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var U=r(6630);class K extends W{static featureName=U.T;constructor(e){var t;super(e,U.T),this.setupInspectionEvents(),t=e,(0,N.Y)(k.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,S.p)("api-"+k.Fw,[(0,_.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(478).then(r.bind(r,908)):r.e(478).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,T.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,P.sB)(t=>{e(t,"DOMContentLoaded")}),(0,P.GG)(t=>{e(t,"load")}),(0,P.Qr)(t=>{e(t,"navigate")}),this.ee.on(u.tS.UPDATE,(e,t)=>{(0,T.W)({type:"lifecycle",name:"session",data:t})})}}class F extends e.d{constructor(e){var t;(super(),g.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(K),O(this,e,e.loaderType||"agent"),t=this,(0,N.Y)(k.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,N.U)(t,e,r,k.cD,n);(0,l.R)(40,typeof r)}else(0,l.R)(39,typeof e)},t),function(e){(0,N.Y)(k.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,l.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,S.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,N.U)(e,"enduser.id",t,k.Dl,!0)},e)}(this),function(e){(0,N.Y)(k.nb,function(t){if("string"==typeof t||null===t)return(0,N.U)(e,"application.version",t,k.nb,!1);(0,l.R)(42,typeof t)},e)}(this),function(e){(0,N.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,N.Y)(k.Pv,function(t=!0){if("boolean"==typeof t){if((0,S.p)("api-"+k.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum?.()})}}else(0,l.R)(65,typeof t)},e)}(this),this.run()):(0,l.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};return n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||r.featureName!==t.K7.pageViewEvent))return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,l.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,l.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var V=r(2843),z=r(782);class G extends W{static featureName=z.T;constructor(e){super(e,z.T),g.RI&&((0,V.u)(()=>(0,S.p)("docHidden",[(0,_.t)()],void 0,z.T,this.ee),!0),(0,V.G)(()=>(0,S.p)("winPagehide",[(0,_.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(478).then(r.bind(r,9917))))}}var q=r(3969);class Y extends W{static featureName=q.TZ;constructor(e){super(e,q.TZ),this.importAggregator(e,()=>r.e(478).then(r.bind(r,6555)))}}var Z=r(6774),J=r(3878),X=r(3304);class Q{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,X.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function ee(e){return ne(e)?e:new Q(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function te(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(ne(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return ee(e.reason)}const r=ee(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function re(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new Q(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return ne(e.error)?e.error:ee(e)}function ne(e){return e instanceof Error&&!!e.stack}function ie(e,r,n,i,s=(0,_.t)()){"string"==typeof e&&(e=new Error(e)),(0,S.p)("err",[e,s,!1,r,n.runtime.isRecording,void 0,i],void 0,t.K7.jserrors,n.ee),(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,n.ee)}var se=r(993),ae=r(3785);function oe(e,{customAttributes:t={},level:r=se.p_.INFO}={},n,i,s=(0,_.t)()){(0,ae.R)(n.ee,e,t,r,!1,i,s)}function ce(e,r,n,i,s=(0,_.t)()){(0,S.p)("api-"+k.hG,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}function de(e,r,n,i,s=(0,_.t)()){const{start:a,end:o,customAttributes:c}=r||{},d={customAttributes:c||{}};if("object"!=typeof d.customAttributes||"string"!=typeof e||0===e.length)return void(0,l.R)(57);const u=(e,t)=>
10null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(d.start=u(a,0),d.end=u(o,s),Number.isNaN(d.start)||Number.isNaN(d.end))(0,l.R)(57);else{if(d.duration=d.end-d.start,!(d.duration<0))return(0,S.p)("api-"+k.V1,[d,e,i],void 0,t.K7.genericEvents,n.ee),d;(0,l.R)(58)}}function ue(e,r={},n,i,s=(0,_.t)()){(0,S.p)("api-"+k.fF,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}var le=r(5718);const fe=(e,t)=>e?.nrMfeId===t.id&&(!e?.nrMfeObserved||e?.nrMfeObserved===t.instance),he=e=>{try{return g.gm.CSS.escape(e)}catch(t){return e}},pe=(e,t={})=>{const r=t.id,n=t.instance;if(!e||!r||!n)return!1;try{let r=1===e.nodeType?e:e.parentElement;for(;r?.tagName;){if(fe(r.dataset,t))return r.dataset.nrMfeObserved=n,!0;r=r.parentNode}}catch(e){}return!1},ge=(e,t)=>{const r=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]')),n=(Array.from(r)||[]).find(t=>fe(t.dataset,e));let i=!!n;i&&(n.dataset.nrMfeObserved??=e.instance);const s=new g.gm.MutationObserver(r=>{r.forEach(r=>{r.addedNodes.forEach(r=>{const n=1===r.nodeType?r:null;!i&&fe(n?.dataset,e)&&(s.disconnect(),s.observe(n,{childList:!0,subtree:!0}),i=!0,n.dataset.nrMfeObserved=e.instance),(e=>{try{return e?.textContent?.trim()||["img","video","canvas","svg"].includes(e?.nodeName?.toLowerCase())}catch(e){return!1}})(r)&&(i||pe(r,e))&&t(r,s)})})});return s.observe(n||g.gm.document,{childList:!0,subtree:!0}),s},me=(e,t,r)=>{try{const n=new g.gm.PerformanceObserver(e=>{e.getEntries().forEach(r)});return n.observe(t),e.push(n),n}catch(e){return null}};function ve(e,t){let r,n,i=!1;const s=e=>null==e?e:e-(t?.scriptStart||t?.registeredAt||0),a={fcp:{get value(){const e=s(r);return e>1e4?void 0:e},set value(e){i||(r=e)}},lcp:{get value(){if(void 0!==a.fcp.value)return s(n)},set value(e){i||(n=e)}},cls:{value:void 0},inp:{value:void 0},disconnect:()=>{}};if(!(e&&g.RI&&g.gm.MutationObserver&&g.gm.PerformanceObserver))return a;const o=[];setTimeout(()=>{r||a.disconnect()},1e4);const c=()=>{if(!i){if(null==r){const e=(0,_.t)();if(s(e)>1e4)return void a.disconnect();r=e}n??=(0,_.t)(),a.cls.value??=0}},d=ge(e,(e,t)=>{c(),t.disconnect()});o.push(d);let u=0,l=null;const f=new Set;try{l=new g.gm.ResizeObserver(e=>{i||e.forEach(e=>{try{const t=e.contentRect.width*e.contentRect.height;t>u&&(u=t,a.lcp.value=(0,_.t)()),l.unobserve(e.target)}catch(e){}})})}catch(e){}const h=ge(e,e=>{if(c(),l)try{const t=1===e.nodeType?e:e.parentElement;t&&!f.has(t)&&(f.add(t),"IMG"===t.tagName?t.complete?l.observe(t):t.addEventListener("load",()=>{l.observe(t)},{once:!0}):"VIDEO"===t.tagName?t.readyState>=2?l.observe(t):t.addEventListener("loadeddata",()=>{l.observe(t)},{once:!0}):l.observe(t))}catch(e){}});l&&o.push(l),o.push(h),me(o,{type:"layout-shift",buffered:!0},t=>{i||t.hadRecentInput||(t.sources||[]).some(r=>!!pe(r.node,e)&&(c(),a.cls.value+=t.value,!0))}),me(o,{type:"event",buffered:!0,durationThreshold:40},t=>{!i&&t.interactionId&&pe(t.target,e)&&(void 0===a.inp.value||t.duration>a.inp.value)&&(c(),a.inp.value=t.duration)});const p=["pointerdown","keydown"],m=()=>{p.forEach(e=>{g.gm.removeEventListener(e,v,{passive:!0})})};a.disconnect=()=>{i=!0,o.forEach(e=>{try{e?.disconnect()}catch(e){}}),m(),["visibilitychange","pagehide"].forEach(e=>{g.gm.removeEventListener(e,a.disconnect,{once:!0,passive:!0})})};const v=t=>{pe(t?.target,e)&&((()=>{try{h?.disconnect(),l?.disconnect()}catch(e){}})(),m())};p.forEach(e=>{g.gm.addEventListener(e,v,{passive:!0})}),["visibilitychange","pagehide"].forEach(e=>{g.gm.addEventListener(e,a.disconnect,{once:!0,passive:!0})});const y=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]'));return Array.from(y||[]).some(t=>fe(t.dataset,e))&&c(),a}var ye=r(9566),be=r(7560),Ee=r(9119);const we=["entry","scripts","all"],Re=["name","id","type"],Te=new Map([[ce,"addPageAction"],[oe,"log"],[de,"measure"],[ie,"noticeError"],[ue,"recordCustomEvent"]]),Ae={experimental:(0,C.J)(()=>(0,l.R)(54,"newrelic.register")),disabled:(0,C.J)(()=>(0,l.R)(55)),invalidTarget:(0,C.J)(e=>(0,l.R)(48,e)),deregistered:(0,C.J)(()=>(0,l.R)(68)),invalidTimingMethod:(0,C.J)(e=>(0,l.R)(80,e)),duplicateName:(0,C.J)(e=>(0,l.R)(81,e)),duplicateId:(0,C.J)(e=>(0,l.R)(82,e))};function Se(e){(0,N.Y)(k.eY,function(t){return xe(e,t)},e)}function xe(e,r){Ae.experimental(),r||={},r.instance=(0,ye.LA)(8),r.type=w.f.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={}),r.parent??={get id(){return e.runtime.appMetadata.agents?.[0].entityGuid},type:w.f.BA},r.manifest=(0,be.N)(r.manifest),void 0===r.timingMethod||we.includes(r.timingMethod)||(Ae.invali
10dTimingMethod(r.timingMethod),r.timingMethod=void 0);const n=(0,le.Qr)(r);r.manifest&&(0,le.xo)(n,r);const i=ve(r,n),s=(0,Ee.L)(""+location),a={};Object.prototype.hasOwnProperty.call(r,"attributes")||Object.defineProperty(r,"attributes",{get:()=>({...a,"source.id":r.id,"source.name":r.name,"source.type":r.type,"parent.type":r.parent?.type||w.f.BA,"parent.id":r.parent?.id})}),Object.entries(r.tags).forEach(([e,t])=>{Re.includes(e)||(a["source.".concat(e)]=t)});let o=()=>{};const c=e.runtime.registeredEntities,d=e=>{r.blocked=!0,o=e};function u(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501}e.init.api.register.enabled||d(Ae.disabled),u(r.id)&&u(r.name)||d(()=>Ae.invalidTarget(r)),c.forEach(e=>{try{const{name:t,id:n}=e.metadata.target;t===r.name&&n!==r.id&&Ae.duplicateName(r),n===r.id&&t!==r.name&&Ae.duplicateId(r)}catch(e){}});const f={addPageAction:(t,n={})=>m(ce,[t,{...a,...n},e],r),deregister:()=>{p(),d(Ae.deregistered)},log:(t,n={})=>m(oe,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),measure:(t,n={})=>m(de,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>m(ie,[t,{...a,...n},e],r),recordCustomEvent:(t,n={})=>m(ue,[t,{...a,...n},e],r),setApplicationVersion:e=>g("application.version",e),setCustomAttribute:(e,t)=>g(e,t),setUserId:e=>g("enduser.id",e),metadata:{get customAttributes(){return a},target:r,timings:n,vitals:i,events:{latestTimestamp:void 0}}},h=()=>(r.blocked&&o(),r.blocked);function p(){if(n.reportedAt)return;n.reportedAt=(0,_.t)(),i.disconnect(),n.fcp=i.fcp,n.lcp=i.lcp,n.cls=i.cls,n.inp=i.inp;const e=n.fetchEnd-n.fetchStart,t=n.scriptEnd-n.scriptStart,r={assetUrl:n.asset,assetType:n.type,registerUrl:s,deregisterUrl:(0,Ee.L)(""+location),pageUrl:void 0,currentUrl:void 0,timeAlive:n.reportedAt-n.registeredAt,timeToBeRequested:n.fetchStart,timeToExecute:t,timeToFetch:e,timeToLoad:e+t,t
10imeToRegister:n.registeredAt,totalWeight:n.totalWeight,...void 0!==n.renderBlocking&&{renderBlocking:n.renderBlocking},...i.fcp.value>=0&&{"vitals.fcp.value":i.fcp.value},...i.lcp.value>=0&&{"vitals.lcp.value":i.lcp.value},...i.cls.value>=0&&{"vitals.cls.value":i.cls.value},...i.inp.value>=0&&{"vitals.inp.value":i.inp.value}};f.recordCustomEvent("MicroFrontEndTiming",r)}h()||(c.push(f),(0,V.G)(p));const g=(e,t)=>{h()||(a[e]=t)},m=(r,n,i)=>{if(h()&&r!==xe)return;const s=f.metadata.events.latestTimestamp??(0,_.t)();f.metadata.events.latestTimestamp=void 0;const a=Te.get(r)||"unknown";(0,S.p)(q.xV,["API/register/".concat(a,"/called")],void 0,t.K7.metrics,e.ee);try{return r(...n,i,s)}catch(e){(0,l.R)(50,e)}};return f}class Oe extends W{static featureName=Z.T;constructor(e){var t;super(e,Z.T),t=e,(0,N.Y)(k.o5,(e,r)=>ie(e,r,t),t),function(e){(0,N.Y)(k.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,N.Y)(k.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Se(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,S.p)("ierr",[ee(t),(0,_.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),g.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,S.p)("err",[te(t),(0,_.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",t=>{this.abortHandler&&(0,S.p)("err",[re(t),(0,_.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e,()=>r.e(478).then(r.bind(r,9377)))}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var _e=r(8990);let ke=1;function Ne(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,_e.I)(e,"nr@id",function(){return ke++})}function Le(e){if("string"==typeof e)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,X.A)(e).length}catch(e){return}}}var Me=r(8139),Pe=r(3434),Ie=r(5732);const je={},Ce=["open","send","setRequestHeader"];function De(e,t){var r=e||R.ee;const n=function(e){return(e||R.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(je[n.debugId]++)return n;je[n.debugId]=1,(0,Me.u)(r,t);var i=(0,Pe.YM)(n,void 0,t),s=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,o=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],f=[],h=g.gm.XMLHttpRequest=function(e){const r=new s(e),a=n.context(r);a.targets=(0,Ie.$5)(t);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(o=a,function(){var e=this;e.readyState>3&&!o.resolved&&(o.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",E)}),(0,J.jT)(!1))}catch(e){(0,l.R)(15,e);try{n.emit("internal-error",[e])}catch(e){}}var o;return r};function p(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(s,h),h.prototype=s.prototype,i.inPlace(h.prototype,Ce,"-xhr-",E),n.on("send-xhr-start",function(e,t){p(e,t),function(e){f.push(e),a&&(m?m.then(b):c?c(b):(v=-v,y.data=v))}(t)}),n.on("open-xhr-start",p),a){var m=o&&o.resolve();if(!c&&!o){var v=1,y=document.createTextNode(v);new a(b).observe(y,{characterData:!0})}}else r.on("fn-end",function(e){e[0]&&e[0].type===d||b()});function b(){for(var e=0;e<f.length;e++)p(0,f[e]);f.length&&(f=[])}function E(e,t){return t}return n}var Be="fetch-",He=Be+"body-",We=["arrayBuffer","blob","json","text","formData"],Ue=g.gm.Request,Ke=g.gm.Response,Fe="prototype";const Ve={};function ze(e,t){const r=function(e){return(e||R.ee).get("fetch")}(e);if(!(Ue&&Ke&&g.gm.fetch))return r;if(Ve[r.debugId]++)return r;function n(e,n,i){var s=e[n];"function"==typeof s&&(e[n]=function(){var e=[...arguments];const n={},a=(0,Ie.$5)(t);var o;r.emit(i+"before-start",[e],n),n[R.P]&&n[R.P].dt&&(o=n[R.P].dt);var c=s.apply(this,e);return r.emit(i+"start",[e,o],c),c.then(function(e){return r.emit(i+"end",[null,e,a],c),e},function(e){throw r.emit(i+"end",[e,void 0,a],c),e})})}
10return Ve[r.debugId]=1,We.forEach(e=>{n(Ue[Fe],e,He),n(Ke[Fe],e,He)}),n(g.gm,"fetch",Be),r.on(Be+"end",function(e,n,i){var s=this;if(s.targets=i||[t.runtime.v2Target],n){var a=n.headers.get("content-length");null!==a&&(s.rxSize=a),r.emit(Be+"done",[null,n],s)}else r.emit(Be+"done",[e],s)}),r}var Ge=r(7485);class qe{constructor(e){this.agentRef=e}generateTracePayload(e){const t=this.agentRef.loader_config;if(!this.shouldGenerateTrace(e)||!t)return null;var r=(t.accountID||"").toString()||null,n=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!n)return null;var s,a=(0,ye.ZF)(),o=(0,ye.el)(),c=Date.now();this.agentRef.runtime?.timeKeeper?.ready&&(s=Math.floor(this.agentRef.runtime.timeKeeper.correctAbsoluteTimestamp(c)));var d={spanId:a,traceId:o,timestamp:c,timestampCorrected:s};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(d.traceContextParentHeader=this.generateTraceContextParentHeader(a,o),d.traceContextStateHeader=this.generateTraceContextStateHeader(a,s??c,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(d.newrelicHeader=this.generateTraceHeader(a,o,s??c,r,n,i)),d}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,s){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(a.d.tk=s),btoa((0,X.A)(a))}shouldGenerateTrace(e){return this.agentRef.init?.distributed_tracing?.enabled&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1;const r=this.agentRef.init?.distributed_tracing;if(e.sameOrigin)t=!0;else if(r?.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,Ge.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}excludeNewrelicHeader(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.cors_use_tracecontext_headers}}var Ye=r(7295);function Ze(e){return"string"==typeof e?e:e instanceof(0,i.dV)().o.REQ?e.url:g.gm?.URL&&e instanceof URL?e.href:void 0}function $e(e,t){var r=(0,Ge.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}var Je=["load","error","abort","timeout"],Xe=Je.length,Qe=(0,i.dV)().o.REQ,et=(0,i.dV)().o.XHR;const tt="X-NewRelic-App-Data",rt="internal-error";class nt extends W{static featureName=c.TZ;constructor(e){super(e,c.TZ),this.dt=new qe(e),this.handler=(e,t,r,n)=>(0,S.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach(r=>{if(r.initiatorType in e&&0!==r.responseStatus){const n={status:r.responseStatus},i={rxSize:r.transferSize,duration:Math.floor(r.duration),cbTime:0};$e(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}ze(this.ee,e),De(this.ee,e),function(e,r,n,i){const s=[c.mo.ALL,c.mo.FAILURES].includes(e.init.ajax?.capture_payloads);function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=A,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},t.latestLongtaskEnd=0,e.addEventListener("load",function(r){O(t,e)},(0,J.jT)(!1)),g.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,J.jT)(!1))}function o(e){this.params={method:e[0]},$e(this,e[1]),this.metrics={}}function d(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var n=i.generateTracePayload(this.parsedOrigin);if(n){var s=!1;n.newrelicHeader&&(r.setRequestHeader("newrelic",n.newrelicHeader),s=!0),n.traceContextParentHeader&&(r.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&r.setRequestHeader("tracestate",n.traceContextStateHeader),s=!0),s&&(this.dt=n)}}function u(e,t){s&&e.length>=2&&(this.requestHeaders??={},this.requestHeaders[e[0].toLowerCase()]=e[1])}function l(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=Le(i);a&&(n.txSize=a)}this.startTime=(0,_.t)(),this.requestBody=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"
10!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit(rt,[e])}catch(e){}}};for(var o=0;o<Xe;o++)t.addEventListener(Je[o],this.listener,(0,J.jT)(!1))}function f(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function h(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function m(){this.endTime=(0,_.t)()}function v(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function y(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function b(e,t,r){t instanceof et&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,_.t)()))}function E(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,_.t)()-this.xhrCbStart,this.onload,t],t)}function w(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,Ge.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var n=i.generateTracePayload(this.parsedOrigin);if(n&&(n.newrelicHeader||n.traceContextParentHeader))if(e[0]&&e[0].headers)o(e[0].headers,n)&&(this.dt=n);else{var s={};for(var a in r)s[a]=r[a];s.headers=new Headers(r.headers||{}),o(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function o(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function R(e,t){this.params={},this.metrics={},this.startTime=(0,_.t)(),this.dt=t;let[r,n={}]=e;$e(this,Ze(r));const i=(""+(r&&r instanceof Qe&&r.method||n.method||"GET")).toUpperCase();this.params.method=i,this.txSize=Le(n.body||r?.body)||0;try{var a=n.headers||r?.headers;if(s&&a)if(this.requestHeaders??={},a instanceof Headers)a.forEach(function(e,t){this.requestHeaders[t.toLowerCase()]=e}.bind(this));else if("object"==typeof a)for(var o in a)this.requestHeaders[o.toLowerCase()]=a[o]}catch(e){}this.requestBody=n.body||r?.body}function T(e,t){if(this.endTime=(0,_.t)(),this.params||(this.params={}),(0,Ye.iW)(this.params))return;this.params.status=t?t.status:0;const n=()=>{const e=+this.rxSize,t=null==this.rxSize||isNaN(e)?void 0:e,r={txSize:this.txSize,rxSize:t,duration:this.endTime-this.startTime},n=[this.params,r,this.startTime,this.endTime,"fetch"];this.targets.forEach(e=>x(n,this,e))};t&&s?t.clone().text().then(e=>{this.responseBody=e,this.rxSize&&"0"!==this.rxSize&&0!==this.rxSize||void 0===e||0===this.params.status||(this.rxSize=Le(e)),t?.headers&&(this.responseHeaders={},t.headers.forEach(function(e,t){this.responseHeaders[t.toLowerCase()]=e}.bind(this)))}).catch(e=>{r.emit(rt,[e])}).finally(()=>{n()}):n()}function A(e){const t=this.params,n=this.metrics;if(this.ended)return;this.ended=!0;for(let t=0;t<Xe;t++)e.removeEventListener(Je[t],this.listener,!1);if(t.aborted)return;if((0,Ye.iW)(t))return;if(n.duration=this.endTime-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):O(this,e),n.cbTime=this.cbTime,s){try{this.responseBody=e.responseText}catch(t){this.responseBody=e.response}if((!n.rxSize||0===n.rxSize)&&void 0!==this.responseBody&&0!==t.status){const e=Le(this.responseBody);void 0!==e&&(n.rxSize=e)}try{this.responseHeaders=function(e){const t={};return e?(e.split("\r\n").forEach(function(e){const r=e.indexOf(": ");if(r>0){const n=e.substring(0,r),i=e.substring(r+2);t[n.toLowerCase()]=i}}),t):t}(e.getAllResponseHeaders())}catch(e){r.emit(rt,[e])}}const i=[t,n,this.startTime,this.endTime,"xhr"];this.targets.forEach(e=>x(i,this,e))}function x(e,r,i){n("xhr",[...e,i],r,t.K7.ajax)}function O(e,n){e.params.status=n.status;var i=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?Le(e.response):"text"===r||""===r||void 0===r?Le(e.responseText):void 0}(n,e.lastSize);if(void 0!==i&&0!==n.status&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(tt)>=0){var s=n.getResponseHeader(tt);s&&((0,S.p)("sm",["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=s.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",o),r.on("open-xhr-end",d),r.on("send-xhr-start",l),r.on("setRequestHeader-xhr-start",u),r.on("xhr-cb-time",f),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",m),r.on("addEventListener-end",v),r.on("removeEventListener-end",y),r.on("fn-end",E),r.on("fetch-before-start",w),r.on("fetch-start",R),r.on("fn-start",b),r.on("fetch-done",T)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>r.e(478).then(r.bind(r,3845)))}}const it={},st=["pushState","replaceState"];function at(e,t){const r=function(e){return(e||R.ee).get("history")}(e);return!g.RI||it[r.debugId]++||(it[r.debugId]=1,(0,Pe.YM)(r,void 0,t).inPlace(window.history,st,"-")),r}var ot=r(3738);function ct(e){(0,N.Y)(k.BL,function(r=Date.now()){const n=r-g.WN;n<0&&(0,l.R)(62,r),(0,S.p)(q.XG,[k.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:k.BL,start:r,origin:"nr"}),(0,S.p)("api-"+k.hG,[n,k.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:dt,bD:ut,d3:lt,Kp:ft,TZ:ht,Lc:pt,uP:gt,Rz:mt}=ot;class vt extends W{static featureName=ht;constructor(e){var n;super(e,ht),n=e,(0,N.Y)(k.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const r={n:e.name,s:e.start-g.WN,e:(e.end||e.start)-g.WN,o:e.origin||"",t:"api"};r.s<0||r.e<0||r.e<r.s?(0,l.R)(61,{start:r.s,end:r.e}):(0,S.p)("bstApi",[r],void 0,t.K7.sessionTrace,n.ee)},n),ct(e);
10if(!(0,j.V)(e.init))return void this.deregisterDrain();const i=this.ee;let s;at(i,e),this.eventsEE=(0,Me.u)(i,e),this.eventsEE.on(gt,function(e,t){this.bstStart=(0,_.t)()}),this.eventsEE.on(pt,function(e,r){(0,S.p)("bst",[e[0],r,this.bstStart,(0,_.t)()],void 0,t.K7.sessionTrace,i)}),i.on(mt+lt,function(e){this.time=(0,_.t)(),this.startPath=location.pathname+location.hash}),i.on(mt+ft,function(e){(0,S.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,i)});try{s=new PerformanceObserver(e=>{const r=e.getEntries();(0,S.p)(dt,[r],void 0,t.K7.sessionTrace,i)}),s.observe({type:ut,buffered:!0})}catch(e){}this.importAggregator(e,()=>r.e(478).then(r.bind(r,6974)),{resourceObserver:s})}}var yt=r(733),bt=r(6344);class Et extends W{static featureName=bt.TZ;#i;recorder;constructor(e){var n;let i;super(e,bt.TZ),n=e,(0,N.Y)(k.CH,function(){(0,S.p)(k.CH,[],void 0,t.K7.sessionReplay,n.ee)},n),function(e){(0,N.Y)(k.Tb,function(){(0,S.p)(k.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);const s="".concat(u.Wt).concat((0,yt.Y)(e.info.licenseKey,e.info.applicationID));try{i=JSON.parse(localStorage.getItem(s))}catch(e){}(0,I.SR)(e.init)&&this.ee.on(k.CH,()=>this.#s()),this.#a(i)&&this.importRecorder().then(e=>{e.startRecording(bt.Qb.PRELOAD,i?.sessionReplayMode)}),this.abortHandler=this.#n,this.importAggregator(this.agentRef,()=>r.e(478).then(r.bind(r,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,S.p)(bt.Vh,[e],void 0,this.featureName,this.ee))})}#a(e){return e&&(e.sessionReplayMode===u.g.FULL||e.sessionReplayMode===u.g.ERROR)||(0,I.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#i??=Promise.all([r.e(478),r.e(249)]).then(r.bind(r,4866)).then(({Recorder:e})=>(this.recorder=new e(this),this.recorder)).catch(e=>{throw this.ee.emit("internal-error",[e]),this.blocked=!0,e}),this.#i)}#s(){this.blocked||(this.featAggregate?this.featAggregate.mode!==u.g.FULL&&this.featAggregate.initializeRecording(u.g.FULL,!0,bt.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(bt.Qb.API,u.g.FULL)}))}#n(){this.recorder?.stopRecording()}}var wt=r(3962);class Rt extends W{static featureName=wt.TZ;constructor(e){if(super(e,wt.TZ),function(e){const r=e.ee.get("tracer");function n(){}(0,N.Y)(k.dT,function(e){return(new n).get("object"==typeof e?e:{})},e);const i=n.prototype={createTracer:function(n,i){var s={},a=this,o="function"==typeof i;return(0,S.p)(q.xV,["API/createTracer/called"],void 0,t.K7.metrics,e.ee),function(){if(r.emit((o?"":"no-")+"fn-start",[(0,_.t)(),a,o],s),o)try{return i.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw r.emit("fn-err",[arguments,this,t],s),t}finally{r.emit("fn-end",[(0,_.t)()],s)}}}};["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach(r=>{N.Y.apply(this,[r,function(){return(0,S.p)(k.hw+r,[performance.now(),...arguments],this,t.K7.softNav,e.ee),this},e,i])}),(0,N.Y)(k.PA,function(){(0,S.p)(k.hw+"routeName",[performance.now(),...arguments],void 0,t.K7.softNav,e.ee)},e)}(e),!g.RI||!(0,i.dV)().o.MO)return;const n=at(this.ee,e);try{this.removeOnAbort=new AbortController}catch(e){}wt.tC.forEach(e=>{(0,J.sp)(e,e=>{c(e)},!0,this.removeOnAbort?.signal)}
10);const s=()=>(0,S.p)("newURL",[(0,_.t)(),""+window.location],void 0,this.featureName,this.ee);n.on("pushState-end",s),n.on("replaceState-end",s),(0,J.sp)(wt.OV,e=>{c(e),(0,S.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)},!0,this.removeOnAbort?.signal);let a=!1;const o=new((0,i.dV)().o.MO)((e,t)=>{a||(a=!0,requestAnimationFrame(()=>{(0,S.p)("newDom",[(0,_.t)()],void 0,this.featureName,this.ee),a=!1}))}),c=(0,C.s)(e=>{"loading"!==document.readyState&&((0,S.p)("newUIEvent",[e],void 0,this.featureName,this.ee),o.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0}))},100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),o.disconnect(),this.abortHandler=void 0},this.importAggregator(e,()=>r.e(478).then(r.bind(r,4393)),{domObserver:o})}}var Tt=r(981);const At={},St=new Set;function xt(e){return"string"==typeof e?{type:"string",size:(new TextEncoder).encode(e).length}:e instanceof ArrayBuffer?{type:"ArrayBuffer",size:e.byteLength}:e instanceof Blob?{type:"Blob",size:e.size}:e instanceof DataView?{type:"DataView",size:e.byteLength}:ArrayBuffer.isView(e)?{type:"TypedArray",size:e.byteLength}:{type:"unknown",size:0}}class Ot{constructor(e,t){this.timestamp=(0,_.t)(),this.currentUrl=(0,Ee.L)(window.location.href),this.socketId=(0,ye.LA)(8),this.requestedUrl=(0,Ee.L)(e),this.requestedProtocols=Array.isArray(t)?t.join(","):t||"",this.openedAt=void 0,this.protocol=void 0,this.extensions=void 0,this.binaryType=void 0,this.messageOrigin=void 0,this.messageCount=0,this.messageBytes=0,this.messageBytesMin=0,this.messageBytesMax=0,this.messageTypes=void 0,this.sendCount=0,this.sendBytes=0,this.sendBytesMin=0,this.sendBytesMax=0,this.sendTypes=void 0,this.closedAt=void 0,this.closeCode=void 0,this.closeReason="unknown",this.closeWasClean=void 0,this.connectedDuration=0,this.hasErrors=void 0}}class _t extends W{static featureName=o.TZ;constructor(e){super(e,o.TZ);const n=e.init.feature_flags.includes("websockets")||e.init.web_sockets?.enabled,s=!e.init.feature_flags.includes("no_spv"),a=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.performance.resources.enabled,e.init.user_actions.enabled,n,s];var c;let d;if(c=e,(0,N.Y)(k.hG,(e,t)=>ce(e,t,c),c),function(e){(0,N.Y)(k.fF,(t,r)=>ue(t,r,e),e)}(e),ct(e),Se(e),function(e){(0,N.Y)(k.V1,(t,r)=>de(t,r,e),e)}(e),this.removeOnAbort=new AbortController,this.abortHandler=()=>{this.removeOnAbort.abort(),this.abortHandler=void 0},n){const u=function(e,t){if(!(0,i.dV)().o.WS)return e;const r=e.get("websockets");if(At[r.debugId]++)return r;At[r.debugId]=1,(0,V.G)(()=>{const e=(0,_.t)();St.forEach(t=>{t.nrData.closedAt=e,t.nrData.closeCode=1001,t.nrData.closeReason="Page navigating away",t.nrData.closeWasClean=!1,t.nrData.openedAt&&(t.nrData.connectedDuration=e-t.nrData.openedAt),r.emit("ws",[t.nrData,t.targets],t)})});
10class n extends WebSocket{static name=Tt.R.WS;static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return n.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new Ot(e[0],e[1]),this.targets=(0,Ie.$5)(t),this.addEventListener("open",()=>{this.nrData.openedAt=(0,_.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),St.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=xt(e.data);this.nrData.messageOrigin??=(0,Ee.L)(e.origin),this.nrData.messageCount++,this.nrData.messageBytes+=r,this.nrData.messageBytesMin=Math.min(this.nrData.messageBytesMin||1/0,r),this.nrData.messageBytesMax=Math.max(this.nrData.messageBytesMax,r),(this.nrData.messageTypes??"").includes(t)||(this.nrData.messageTypes=this.nrData.messageTypes?"".concat(this.nrData.messageTypes,",").concat(t):t)}),this.addEventListener("close",e=>{this.nrData.closedAt=(0,_.t)(),this.nrData.closeCode=e.code,e.reason&&(this.nrData.closeReason=e.reason),this.nrData.closeWasClean=e.wasClean,this.nrData.connectedDuration=this.nrData.closedAt-this.nrData.openedAt,St.delete(this),r.emit("ws",[this.nrData,this.targets],this)})}addEventListener(e,t,...r){const n=this,i="function"==typeof t?function(...e){try{return t.apply(this,e)}catch(e){throw n.#o(e),e}}:t?.handleEvent?{handleEvent:function(...e){try{return t.handleEvent.apply(t,e)}catch(e){throw n.#o(e),e}}}:t;return super.addEventListener(e,i,...r)}send(e){if(this.readyState===WebSocket.OPEN){const{type:t,size:r}=xt(e);this.nrData.sendCount++,this.nrData.sendBytes+=r,this.nrData.sendBytesMin=Math.min(this.nrData.sendBytesMin||1/0,r),this.nrData.sendBytesMax=Math.max(this.nrData.sendBytesMax,r),(this.nrData.sendTypes??"").includes(t)||(this.nrData.sendTypes=this.nrData.sendTypes?"".concat(this.nrData.sendTypes,",").concat(t):t)}try{return super.send(e)}catch(e){throw this.#o(e),e}}close(...e){try{super.close(...e)}catch(e){throw this.#o(e),e}}}return g.gm.WebSocket=n,r}(this.ee,e);u.on("ws",(e,t)=>{(0,S.p)("ws-complete",[e,t],void 0,this.featureName,this.ee)})}if(s){if("function"==typeof g.gm.ReportingObserver){const l=new g.gm.ReportingObserver(e=>{e.forEach(e=>{(0,S.p)("spv",[kt(e),(0,_.t)()],void 0,t.K7.genericEvents,this.ee)}),l.disconnect()},{types:["csp-violation"],buffered:!0});l.observe()}g.gm.addEventListener("securitypolicyviolation",e=>{(0,S.p)("spv",[kt(e),e.timeStamp],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal))}if(g.RI){if(ze(this.ee,e),De(this.ee,e),d=at(this.ee,e),e.init.user_actions.enabled){function f(t){const r=(0,Ge.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function h(){d.emit("navChange")}o.Zp.forEach(e=>(0,J.sp)(e,e=>(0,S.p)("ua",[e],void 0,this.featureName,this.ee),!0)),o.qN.forEac
10h(e=>{const t=(0,C.s)(e=>{(0,S.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,J.sp)(e,t)}),g.gm.addEventListener("error",()=>{(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal)),this.ee.on("open-xhr-start",(e,r)=>{f(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(void 0,this.removeOnAbort.signal))}),this.ee.on("fetch-start",e=>{e.length>=1&&!f(Ze(e[0]))&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),d.on("pushState-end",h),d.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,J.jT)(!0,this.removeOnAbort.signal)),window.addEventListener("popstate",h,(0,J.jT)(!0,this.removeOnAbort.signal))}if(e.init.performance.resources.enabled&&g.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{(0,S.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)})}).observe({type:"resource",buffered:!0})}}a.some(e=>e)?this.importAggregator(e,()=>r.e(478).then(r.bind(r,8019))):this.deregisterDrain()}}function kt(e){const t=e.body??e;return{blockedUrl:t.blockedURL??e.blockedURI,documentUrl:t.documentURL??e.documentURI,effectiveDirective:t.effectiveDirective,originalPolicy:t.originalPolicy,sourceFile:t.sourceFile,statusCode:t.statusCode,lineNumber:t.lineNumber,columnNumber:t.columnNumber,disposition:"reporting"===t.disposition?"report":t.disposition,sample:t.sample,referrer:t.referrer}}var Nt=r(2646);const Lt=new Map;function Mt(e,t,r,n,i=!0,s){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const a=function(e){return(e||R.ee).get("logger")}(e),o=(0,Pe.YM)(a,void 0,s),c=new Nt.y(R.P);c.level=n.level,c.customAttributes=n.customAttributes,c.autoCaptured=i;const d=t[r]?.[Pe.Jt]||t[r];return Lt.set(d,c),o.inPlace(t,[r],"wrap-logger-",()=>Lt.get(d),void 0,!0),a}var Pt=r(1910);class It extends W{static featureName=se.TZ;constructor(e){var t;super(e,se.TZ),t=e,(0,N.Y)("log",(e,r)=>oe(e,r,t),t),function(e){(0,N.Y)(k.Wb,(t,r,{customAttributes:n={},level:i=se.p_.INFO}={})=>{Mt(e.ee,t,r,{customAttributes:n,level:i},!1,e)},e)}(e),Se(e);const n=this.ee;["log","error","warn","info","debug","trace"].forEach(t=>{(0,Pt.i)(g.gm.console[t]),Mt(n,g.gm.console,t,{level:"log"===t?"info":t},void 0,e)}),this.ee.on("wrap-logger-end",function([t],r,i,s=[e.runtime.v2Target]){const{level:a,customAttributes:o,autoCaptured:c}=this;s.forEach(e=>{(0,ae.R)(n,t,o,a,c,e)})}),this.importAggregator(e,()=>r.e(478).then(r.bind(r,5288)))}}new F({features:[nt,K,G,vt,Et,Y,Oe,_t,It,Rt],loaderType:"spa"})})()})();</script>
10 11<meta name="title" content="Cart"/> 12<meta name="description" content="CenterPoint Archery"/> 13<meta name="robots" content="INDEX,FOLLOW"/> 14<meta name="viewport" content="width=device-width, initial-scale=1"/> 15<meta name="format-detection" content="telephone=no"/> 16<title>Cart</title> 17<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/mage/calendar.css" /> 18<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/css/styles-m.css" /> 19<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/jquery/uppy/dist/uppy-custom.css" /> 20<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Amasty_Finder/css/chosen.min.css" /> 21<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Amasty_LibFancybox/fancybox/jquery.fancybox.min.css" /> 22<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Amasty_Quickview/css/quickview.css" /> 23<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Amasty_Storelocator/vendor/chosen/chosen.min.css" /> 24<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/MageMe_WebForms/css/styles.css" /> 25<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/WeltPixel_OwlCarouselSlider/css/owl.carousel.css" /> 26<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Adyen_Payment/css/adyen.css" /> 27<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Adyen_Payment/css/styles.css" /> 28<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Amasty_Base/vendor/slick/amslick.min.css" /> 29<link rel="stylesheet" type="text/css" media="all" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Amasty_Rules/css/amrules.css" /> 30<link rel="stylesheet" type="text/css" media="screen and (min-width: 768px)" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/css/styles-l.css" /> 31<link rel="stylesheet" type="text/css" media="print" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/css/print.css" />
32<script type="text/javascript" src="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/requirejs/require.js"></script>
vendor: 1 bytes, line 32
32
33<script type="text/javascript" src="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/mage/requirejs/mixins.js"></script>
vendor: 1 bytes, line 33
33
34<script type="text/javascript" src="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/requirejs-config.js"></script>
vendor: 1 bytes, line 34
34
35<script type="text/javascript" src="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Amasty_Promo/js/amastyNoticeDisable.js"></script>
35 36<link rel="preload" as="font" crossorigin="anonymous" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/fonts/opensans/light/opensans-300.woff2" /> 37<link rel="preload" as="font" crossorigin="anonymous" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/fonts/opensans/regular/opensans-400.woff2" /> 38<link rel="preload" as="font" crossorigin="anonymous" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/fonts/opensans/semibold/opensans-600.woff2" /> 39<link rel="preload" as="font" crossorigin="anonymous" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/fonts/opensans/bold/opensans-700.woff2" /> 40<link rel="preload" as="font" crossorigin="anonymous" href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/fonts/Luma-Icons.woff2" /> 41<link rel="stylesheet" type="text/css" href="https://use.typekit.net/bep7dmx.css" /> 42<link rel="icon" type="image/x-icon" href="https://www.centerpointarchery.com/media/favicon/stores/4/centerpoint-iso.png" /> 43<link rel="shortcut icon" type="image/x-icon" href="https://www.centerpointarchery.com/media/favicon/stores/4/centerpoint-iso.png" /> 44<link rel="canonical" href="https://www.centerpointarchery.com/checkout/cart" /> 45<!-- Google Tag Manager -->
46<script>
vendor: 331 bytes, lines 46-50
46(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 47new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 48j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 49'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 50})(window,document,'script','dataLayer','
50GTM-MRL4BPG
vendor: 3 bytes, line 50
50');
50</script>
50 51<!-- End Google Tag Manager --> 52
53<script data-ad-client="ca-pub-5625941833786964" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
53 54 55<!-- verify domain ownership --> 56 <meta name="google-site-verification" content="stBzJs2ifbtOFoYDHkxNeDDmJiCPCcYyClOD9Ns0sZs" /> 57 58 <!-- Global site tag (gtag.js) - Google Ads: 10865119560 -->
vendor: 73 bytes, lines 58-59
58 59 <script async src="https://www.googletagmanager.com/gtag/js?id=
59AW-10865119560
vendor: 21 bytes, lines 59-60
59"></script> 60
60<script> 61
vendor: 154 bytes, lines 61-64
61window.dataLayer = window.dataLayer || []; 62 function gtag(){dataLayer.push(arguments);} 63 gtag('js', new Date()); 64 gtag('config', '
64AW-10865119560
vendor: 13 bytes, lines 64-65
64'); 65
65</script>
65 66 67 <!-- Microsoft Advertising -->
68<script>(function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){var o={ti:"187179719", enableAutoSpaTracking: true};o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad")},n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function(){var s=this.readyState;s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null)},i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})(window,document,"script","//bat.bing.com/bat.js","uetq");</script>
68 69 70<!-- Meta Pixel Code -->
71<script>
vendor: 408 bytes, lines 71-80
71 72!function(f,b,e,v,n,t,s) 73{if(f.fbq)return;n=f.fbq=function(){n.callMethod? 74n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 75if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 76n.queue=[];t=b.createElement(e);t.async=!0; 77t.src=v;s=b.getElementsByTagName(e)[0]; 78s.parentNode.insertBefore(t,s)}(window, document,'script', 79'https://connect.facebook.net/en_US/fbevents.js'); 80fbq('init', '
80629864976711991
vendor: 32 bytes, lines 80-81
80'); 81fbq('track', 'PageView');
82</script>
82 83<noscript><img height="1" width="1" style="display:none" 84src="https://www.facebook.com/tr?id=629864976711991&ev=PageView&noscript=1" 85/></noscript> 86<!-- End Meta Pixel Code --> 87
88<script type="text/javascript"> 89 //DO NOT REMOVE - DRIVES REVENUE 90 var AddShoppersWidgetOptions = { 'loadCss': false, 'pushResponse': false }; 91 (!function(){ 92 var t=document.createElement("script"); 93 t.type="text/javascript", 94 t.async=!0, 95 t.id="AddShoppers", 96 t.src="https://shop.pe/widget/widget_async.js#6879fa91c576f30876d2071e", 97 document.getElementsByTagName("head")[0].appendChild(t) 98 }()); 99</script>
99 100 101 102<style> 103.ampromo-overlay.-show .ampromo-popup-container .ampromo-carousel-product .ampromo-gallery .ampromo-options{ 104display:block !important; 105} 106.megamenu-container-2__list>.megamenu-container-2__item.accent-color>.megamenu-container-2__link_wapper_title>a { 107 color: #ff2d12; 108} 109.ie-div-position-customer-chat{ 110position:fixed; 111} 112 113 114@media screen and (min-width: 1024px){ 115 .megamenu-container-2__inner-list { 116 font-size: 1.65rem; 117 } 118 119 ul.megamenu-container-2__inner-list.megamenu-container-2__inner-list--level1 { 120 box-shadow: 0 10px 20px -10px rgba(0, 0, 0, 0.9) 121 } 122 123 .megamenu-container-2 .subactegory_item.compound { 124 width: 40%; 125 max-width: 40%; 126 } 127 128 .megamenu-container-2 .subactegory_item { 129 width: 20%; 130 max-width: 20%; 131 } 132} 133 134 135 136li.megamenu-container-2__inner-item .new-product:after { 137 content: 'NEW'; 138 font-size: 12px; 139 background: #00c35a; 140 color: #fff; 141 padding: 0px 4px; 142 margin-left: 4px; 143 position: absolute; 144 top: 0; 145 line-height: 18px; 146} 147 148li.megamenu-container-2__inner-item .new-product { 149 position: relative; 150} 151 152.catalog-category-view .toolbar-products { position: relative; } 153 154.video-container { 155 margin-top: 3rem; 156 position: relative; 157 padding-bottom: 56.25%; 158 padding-top: 30px; 159 height: 0; 160 overflow: hidden; 161} 162 163.video-container iframe, .video-container object, .video-container embed { 164 position: absolute; 165 top: 0; 166 left: 0; 167 width: 100%; 168 height: 100%; 169} 170 171.product.info.detailed .amrelated-pack-wrapper { 172 display: none; 173} 174 175.amrelated-pack-wrapper { display: none; } 176.column.main .amrelated-pack-wrapper { display: block !important; } 177.column.main .product.info.detailed .amrelated-pack-wrapper { display: none !important; } 178 179.blog-page .megamenu-container-2 { font-size: 1.4rem; } 180 181.bundle-pack-item h3, 182.bundle-pack-item .amrelated-name a.amrelated-link, 183.bundle-pack-item span.price 184{ 185 font-family: 'Akzidenz Grotesk Condensed Bold',sans-serif; 186} 187 188.bundle-pack-item h3 { 189 font-size: 3rem; 190} 191 192.bundle-pack-item .amrelated-name a.amrelated-link { 193 font-size: 1.75rem; 194 line-height: 1.5rem; 195 color: #000; 196 text-transform: uppercase; 197} 198 199.bundle-pack-item .amrelated-discount.-product, 200.bundle-pack-item .amrelated-discount.-summary 201{ 202 font-family: 'Akzidenz Grotesk Bold',sans-serif; 203 background: #00c35a; 204} 205 206.bundle-pack-item .product-reviews-summary.short { display: none; } 207 208 .minicart-items-wrapper { 209 margin-top: 0px; 210 padding: 0; 211 max-height: 325px; 212 } 213 214 215@media screen and (max-width: 767px){ 216 /* Minicart Overrides */ 217 218 .minicart-wrapper .block-minicart .block-content .minicart-footer .subtotal .label { 219 font-size: 1.2rem; 220 text-transform: uppercase; 221 } 222 223 .minicart-wrapper .block-minicart .block-content .minicart-footer .subtotal .price { 224 font-size: 1.75rem; 225 } 226 227 .minicart-wrapper ul.related-products-list.slick-initialized.slick-slider { 228 margin-bottom: 0; 229 } 230 231 .minicart-wrapper .block-minicart li.related-product-item.product-item { 232 padding: 0; 233 } 234 235 .minicart-wrapper .minicart-related-products>h3 { 236 margin-bottom: 15px; 237 } 238 239 .minicart-wrapper .minicart-related-products .slick-slider button.slick-arrow { 240 top: -25px; 241 } 242 243 .minicart-wrapper .block-minicart .block-content .minicart-footer>.actions .action.primary { 244 padding: 0; 245 line-height: 45px; 246 } 247 248 .minicart-wrapper .block-minicart .action.close { 249 left: 5px; 250 right: unset; 251 z-index: 1; 252 top: 5px; 253 } 254 255 .minicart-wrapper .minicart-items .product-item .product-item-details .product-item-name a { 256 font-size: 1.4rem; 257 line-height: 1.6rem; 258 } 259 260 .minicart-wrapper .minicart-items .product-item .product-item-photo { 261 margin-right: 15px; 262 width: 80px !important; 263 } 264 265 .minicart-wrapper .minicart-items .product-item .product-item-details .product-item-name { 266 width: 170px; 267 font-size: 1.9rem !important; 268 } 269 270 .minicart-wrapper .minicart-related-products { 271 padding: 0 20px 10px; 272 } 273 274 .minicart-wrapper .minicart-widgets { 275 margin-top: 10px; 276 } 277 278 .minicart-wrapper button#top-cart-btn-checkout { 279 display: block; 280 line-height: 45px; 281 } 282 283 /* End Minicart Overrides */ 284} 285 286@media screen and (min-width: 768px) { 287 .bundle-pack-item .amrelated-pack-wrapper .amrelated-content-wrapper .amrelated-plus, 288 .bundle-pack-item .amrelated-pack-wrapper .amrelated-content-wrapper .amrelated-equal { 289 color: #ddd; 290 font-size: 8rem; 291 } 292} 293 294.bundle-pack-item .amrelated-photo-container .amrelated-checkbox:checked+.amrelated-label { 295 background-color: #f00; 296} 297 298.bundle-pack-item .amrelated-pack-item.-narrow.-discount-applied.-selected { 299 max-width: 160px; 300} 301 302.bundle-pack-item .amrelated-pack-item.-narrow.-discount-applied.-main { 303 width: 160px; 304} 305 306.bundle-pack-item button.action.primary { 307 color: #fff; 308 font-weight: bold; 309 font-family: 'Akzidenz Grotesk Bold',sans-serif; 310} 311 312.warranty-container ul li { font-size: 1.8rem; } 313 314.products-grid .product-item .badge { 315 transform: unset; 316 left: 0; 317 top: 0; 318 letter-spacing: 0.2rem; 319 font-family: 'Akzidenz Grotesk Condensed Medium'; 320 font-size: 1.8rem; 321 padding: 8px 15px; 322 background: #00c35a; 323 color: #fff; 324} 325 326/* cleanup */ 327.page-footer .footer.content .footer_right .footer--secondary .newsletter-heading { 328 color: #fff; 329 font-family: 'Akzidenz Grotesk Condensed Medium', sans-serif; 330 font-size: 3.5rem; 331 font-weight: 400; 332 margin: 0; 333 margin-top: 20px; 334 text-transform: uppercase; 335} 336 337section.footer-menu-links .links-title 338{ 339 margin: 2rem 0; 340} 341 342.page-footer .footer-menu-links .links-title { 343 margin: 1rem 0 2rem 0; 344} 345 346.blog-author-view.page-layout-2columns-right #maincontent .columns .sidebar.sidebar-additional { 347 position: relative; 348 order: 2; 349 min-width: 40%; 350} 351 352.blog-author-view.page-layout-2columns-right #maincontent .columns { 353 display: flex; 354 flex-wrap: nowrap; 355} 356 357.blog-author-view.page-layout-2columns-right #maincontent .columns .column.main { 358 order: 1; 359 min-width: 60%; 360 padding: 3rem 1rem 0 0; 361} 362 363.blog-author-view.page-layout-2columns-right #maincontent .post-description p { 364 font-size: 14px !important; 365} 366 367.blog-author-view.page-layout-2columns-right.blog-page .breadcrumbs { 368 padding: 2rem 2rem 0; 369} 370 371@media screen and (max-width: 1023px){ 372 .blog-author-view.page-layout-2columns-right #maincontent .columns { 373 flex-wrap: wrap; 374 } 375 376 .blog-author-view.page-layout-2columns-right.blog-page .breadcrumbs { 377 display: block; 378 margin: 0 0 0 2rem; 379 padding: 2rem 0 0 0; 380 } 381} 382 383/* end cleanup */ 384 385/** Minicart start **/ 386.minicart-items-wrapper .minicart-items .product-item-data .unit-price { display: none; } 387.minicart-items-wrapper .minicart-items dl.product.options.list { margin-bottom: 0; } 388.minicart-items-wrapper .minicart-items .product-item>.product .product-item-details { padding: 20px 20px 20px 0; } 389.minicart-items-wrapper .minicart-items .product-item-pricing .label { font-size: 1.4rem; } 390.minicart-items-wrapper .minicart-items .product-item>.product .product-item-details .product.options { align-content: center; } 391/** Minicart end **/ 392 393/** Current Promotions start **/ 394.category-current-promotions .toolbar.toolbar-products { display: none; } 395.category-current-promotions .column.main { flex-direction: column; } 396.category-current-promotions .page-bottom .content { max-width: 1400px; margin: 0 auto; padding: 0 20px; text-align: center; font-size: 1.5rem; } 397/** Current Promotions end **/ 398 399
400.catalog-product-view .amrelated-pack .amrelated-details { 401 margin: 20px 0 0 !important; 402} 403 404.catalog-product-view .amrelated-pack .amrelated-info { 405 flex-direction: column !important; 406} 407 408</style> 409
410<script> 411 window.getWpGA4Cookie = function(name) { 412 match = document.cookie.match(new RegExp(name + '=([^;]+)')); 413 if (match) return decodeURIComponent(match[1].replace(/\+/g, ' ')) ; 414 }; 415 416 window.ga4AllowServices = false; 417 418 var isCookieRestrictionModeEnabled = 0, 419 currentWebsiteId = 4, 420 cookieRestrictionName = 'user_allowed_save_cookie'; 421 422 if (isCookieRestrictionModeEnabled) { 423 allowedCookies = window.getWpGA4Cookie(cookieRestrictionName); 424 425 if (allowedCookies !== undefined) { 426 allowedWebsites = JSON.parse(allowedCookies); 427 428 if (allowedWebsites[currentWebsiteId] === 1) { 429 window.ga4AllowServices = true; 430 } 431 } 432 } else { 433 window.ga4AllowServices = true; 434 } 435</script>
435 436
436<script> 437 if (window.ga4AllowServices) { 438 window.dataLayer = window.dataLayer || []; 439 var dl4Objects = [{"pageName":"Cart","pageType":"cart","event":"view_cart","cart_total":0,"total":0,"ecommerce":{"items":[],"value":0,"currency":"USD"}}]; 440 for (var i in dl4Objects) { 441 window.dataLayer.push({ecommerce: null}); 442 window.dataLayer.push(dl4Objects[i]); 443 } 444 var wpGA4Cookies = ['wp_ga4_user_id','wp_ga4_customerGroup']; 445 wpGA4Cookies.map(function (cookieName) { 446 var cookieValue = window.getWpGA4Cookie(cookieName); 447 if (cookieValue) { 448 var dl4Object = {}; 449 dl4Object[cookieName.replace('wp_ga4_', '')] = cookieValue; 450 window.dataLayer.push(dl4Object); 451 } 452 }); 453 } 454 </script>
454 455 456 <!-- Google Tag Manager -->
457<script> if (window.ga4AllowServices) {
vendor: 332 bytes, lines 457-461
457 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 458new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 459j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 460'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 461})(window,document,'script','dataLayer','
461GTM-MRL4BPG
vendor: 3 bytes, line 461
461');
461} </script>
461 462<!-- End Google Tag Manager --><!-- BEGIN GOOGLE ANALYTICS CODE -->
463<script type="text/x-magento-init"> 464{ 465 "*": { 466 "Magento_GoogleAnalytics/js/google-analytics": { 467 "isCookieRestrictionModeEnabled": 0, 468 "currentWebsite": 4, 469 "cookieName": "user_allowed_save_cookie", 470 "ordersTrackingData": [], 471 "pageTrackingData": {"optPageUrl":"","isAnonymizedIpActive":false,"accountId":"UA-321761-14"} } 472 } 473} 474</script>
474 475<!-- END GOOGLE ANALYTICS CODE --> 476
476<script type="text/x-magento-init"> 477 { 478 "*": { 479 "Magento_PageCache/js/form-key-provider": { 480 "isPaginationCacheEnabled": 481 0 } 482 } 483 } 484 </script>
vendor: 1 bytes, line 484
484
485<script type="text/x-magento-init"> 486 { 487 "*": { 488 "widgetRenderer": { 489 "price" : "$0.00", 490 "alignment" : "right", 491 "is_cart" : true, 492 "widget_url" : "https://widget.sezzle.com/v1/javascript/price-widget?uuid=8c3f998a-2529-4f3d-8989-f1844cc814bb" 493 } 494 } 495 } 496</script>
496 497
497<script> 498function init() { 499 'use strict'; 500 console.log("DOM ready, run script"); 501 502/* 503 Web Data Collector SDK Clean v2.2.0 504 - Magento-ready: reliable "Checkout Started" with KO/SPA readiness checks 505 - Batching + sendBeacon, retry with jitter, debounced observers 506 - Safer cookie handling (SameSite, Secure, apex domain) + storage fallbacks 507 - Locale-aware price parsing, guarded debug logs 508 - Pluggable selectors with platform defaults + per-merchant overrides 509*/ 510 511;(function (window, document) { 512 const VERSION = '1.0.0'; 513 514 // Dynamic API URL construction from current domain 515 function getClickstreamApiUrl() { 516 const { protocol, host } = window.location; 517 return `${protocol}//${host}/.clickstream`; 518 } 519 520 const CLICKSTREAM_API_URL = getClickstreamApiUrl(); 521 522 const DEFAULTS = { 523 apiBaseUrl: CLICKSTREAM_API_URL, 524 cookie: { 525 uid: 'wbs_uid', 526 session: 'wbs_session', 527 days: 730 528 }, 529 // Session management configuration 530 session: { 531 inactivityTimeoutHours: 12, // Session expires after 12 hours of inactivity 532 }, 533 batching: { 534 flushIntervalMs: 5000, 535 maxBatch: 25 536 }, 537 retry: { 538 attempts: 3, 539 baseDelayMs: 500, 540 maxDelayMs: 4000 541 } 542 }; 543 544 545 // -------------------- tiny utils -------------------- 546 const U = { 547 now() { return Date.now(); }, 548 iso() { return new Date().toISOString(); }, 549 randId(prefix) { return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`; }, 550 uuid() { 551 return crypto.randomUUID(); 552 }, 553 clamp(n, a, b) { return Math.max(a, Math.min(b, n)); }, 554 // Very forgiving number parser using current or provided locale 555 parseMoney(text) { 556 if (!text) return { amount: null, currency: null }; 557 const s = String(text).trim(); 558 559 // Extract currency code if it's in ISO format (e.g., "USD 19.99", "19.99 USD") 560 const isoCurrencyMatch = s.match(/\b([A-Z]{3})\b/); 561 if (isoCurrencyMatch) { 562 const currency = isoCurrencyMatch[1]; 563 const num = s.replace(/[^0-9,.-]/g, ''); 564 let normalized = num; 565 const lastComma = num.lastIndexOf(','); 566 const lastDot = num.lastIndexOf('.'); 567 if (lastComma > -1 && lastDot > -1) { 568 if (lastComma > lastDot) normalized = num.replace(/\./g, '').replace(',', '.'); 569 else normalized = num.replace(/,/g, ''); 570 } else { 571 if (lastComma > -1 && /,\d{1,2}$/.test(num)) normalized = num.replace(',', '.'); 572 else normalized = num.replace(/,/g, ''); 573 } 574 const amount = parseFloat(normalized); 575 return { amount: Number.isFinite(amount) ? amount : null, currency }; 576 } 577 578 // Fallback to symbol detection with enhanced currency support 579 const currencyMap = { 580 '$': 'USD', 'ââ¬': 'EUR', 'ã': 'GBP', 'ÃÂ¥': 'JPY', 'ââ¹': 'INR', 581 'ââ½': 'RUB', 'ââ©': 'KRW', 'ââª': 'ILS', 'ââ¦': 'NGN', 'ââ¨': 'PKR', 582 'ââ±': 'PHP', 'ââ«': 'VND', 'ââ´': 'UAH', 'ââ¸': 'KZT', 'ââº': 'TRY', 583 'ââ¼': 'AZN', 'ââ¾': 'GEL', 'ââ¿': 'BTC', 'Þ': 'ETH' 584 }; 585 586 const curSym = (s.match(/[A-Za-z]{3}|[ââ¬Ã£Ã¥ââ¹$ââ½ââ©ââªââ¦ââ¨ââ±ââ«ââ´ââ¸ââºââ¼ââ¾ââ¿Ãž]/) || [null])[0]; 587 const num = s.replace(/[^0-9,.-]/g, ''); 588 let normalized = num; 589 const lastComma = num.lastIndexOf(','); 590 const lastDot = num.lastIndexOf('.'); 591 if (lastComma > -1 && lastDot > -1) { 592 if (lastComma > lastDot) normalized = num.replace(/\./g, '').replace(',', '.'); 593 else normalized = num.replace(/,/g, ''); 594 } else { 595 if (lastComma > -1 && /,\d{1,2}$/.test(num)) normalized = num.replace(',', '.'); 596 else normalized = num.replace(/,/g, ''); 597 } 598 const amount = parseFloat(normalized); 599 let currency = null; 600 if (curSym) currency = currencyMap[curSym] || (/[A-Za-z]{3}/.test(curSym) ? curSym.toUpperCase() : null); 601 return { amount: Number.isFinite(amount) ? amount : null, currency }; 602 }, 603 log(...args){ 604 // console.log('[SDK]', ...args); 605 }, 606 warn(...args){ 607 // console.warn('[SDK]', ...args); 608 } 609 }; 610 611 // -------------------- storage (cookie with fallbacks) -------------------- 612 const Store = {
613 setCookie(name, value, days) { 614 try { 615 const date = new Date(); 616 date.setTime(date.getTime() + days * 864e5); 617 const hostParts = location.hostname.split('.'); 618 const apex = hostParts.length > 2 ? hostParts.slice(-2).join('.') : location.hostname; 619 const secure = location.protocol === 'https:' ? ';Secure' : ''; 620 const base = `${name}=${encodeURIComponent(value)};expires=${date.toUTCString()};path=/;SameSite=Lax${secure}`; 621 document.cookie = `${base};domain=.${apex}`; 622 if (!Store.getCookie(name)) document.cookie = base; // host-only fallback 623 } catch (e) { 624 try { localStorage.setItem(name, value); } catch {} 625 } 626 }, 627 getCookie(name) { 628 try { 629 const m = document.cookie.match(new RegExp('(?:^|; )' + name.replace(/([.$?*|{}()[\]\\/+^])/g, '\\$1') + '=([^;]*)')); 630 return m ? decodeURIComponent(m[1]) : localStorage.getItem(name); 631 } catch { return null; } 632 }, 633 setConfig(key, value) { 634 try { 635 localStorage.setItem(key, JSON.stringify(value)); 636 return true; 637 } catch (e) { 638 U.warn('Failed to store config in localStorage:', e); 639 return false; 640 } 641 }, 642 getConfig(key) { 643 try { 644 const data = localStorage.getItem(key); 645 return data ? JSON.parse(data) : null; 646 } catch (e) { 647 U.warn('Failed to retrieve config from localStorage:', e); 648 return null; 649 } 650 }, 651 removeConfig(key) { 652 try { 653 localStorage.removeItem(key); 654 return true; 655 } catch (e) { 656 U.warn('Failed to remove config from localStorage:', e); 657 return false; 658 } 659 } 660 }; 661 662 // -------------------- compression utilities -------------------- 663 const Compression = { 664 /** 665 * Compress a string using gzip (browser-compatible) 666 * @param {string} data - String data to compress 667 * @returns {Promise<Uint8Array|null>} - Compressed data as Uint8Array or null if failed 668 */ 669 async gzip(data) { 670 if (!('CompressionStream' in window)) { 671 U.warn('CompressionStream not supported, sending uncompressed'); 672 return null; 673 } 674 675 try { 676 const stream = new CompressionStream('gzip'); 677 const writer = stream.writable.getWriter(); 678 const reader = stream.readable.getReader(); 679 680 // Write data to compression stream 681 const encoder = new TextEncoder();
682 writer.write(encoder.encode(data)); 683 writer.close(); 684 685 // Read compressed chunks 686 const chunks = []; 687 let done = false; 688 while (!done) { 689 const { value, done: readerDone } = await reader.read(); 690 done = readerDone; 691 if (value) chunks.push(value); 692 } 693 694 // Combine chunks into single Uint8Array 695 const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0); 696 const result = new Uint8Array(totalLength); 697 let offset = 0; 698 for (const chunk of chunks) { 699 result.set(chunk, offset); 700 offset += chunk.length; 701 } 702 703 return result; 704 } catch (error) { 705 U.warn('Gzip compression failed:', error); 706 return null; 707 } 708 }, 709 710 /** 711 * Check if compression is beneficial (at least 20% size reduction) 712 * @param {number} originalSize - Original size in bytes 713 * @param {number} compressedSize - Compressed size in bytes 714 * @param {number} threshold - Minimum size to attempt compression (default 1000) 715 * @returns {boolean} - True if compression should be used 716 */ 717 shouldUseCompression(originalSize, compressedSize, threshold = 1000) { 718 return originalSize >= threshold && compressedSize < originalSize * 0.8; 719 } 720 }; 721 722 // -------------------- transport (queue + flush + retry) -------------------- 723 class Transport { 724 constructor(apiBaseUrl, retryCfg, batching) { 725 this.apiBaseUrl = apiBaseUrl; 726 this.retry = retryCfg; 727 this.batchCfg = batching; 728 this.queue = this._loadQueue(); // Load from localStorage 729 this.timer = null; 730 this._bindLifecycle(); 731 } 732 enqueue(evt) { 733 // Add to queue 734 this.queue.push(evt); 735 736 // Limit queue to 100 events, dropping older ones 737 if (this.queue.length > 100) { 738 const droppedCount = this.queue.length - 100; 739 this.queue = this.queue.slice(-100); // Keep only the last 100 events 740 U.warn(`Queue limit exceeded (100). Dropped ${droppedCount} older events.`); 741 } 742 743 this._persistQueue(); // Save to localStorage 744 745 // Log the complete event being pushed to queue 746 U.log('Enqueued event (complete):', { 747 ...evt, 748 queue_size: this.queue.length 749 }); 750 751 if (this.queue.length >= this.batchCfg.maxBatch) this.flush(); 752 else this._ensureTimer(); 753 } 754 _ensureTimer(){ 755 if (this.timer) return; 756 this.timer = setInterval(() => { 757 if (this.queue.length > 0) { 758 this.flush(); 759 } 760 }, this.batchCfg.flushIntervalMs); 761 } 762 _clearTimer(){ if (this.timer) { clearInterval(this.timer); this.timer = null; } } 763 _bindLifecycle(){ 764 const flushNow = () => this.flush(true); 765 window.addEventListener('visibilitychange', () => { if (document.visibilityState === 'hidden') flushNow(); }); 766 window.addEventListener('pagehide', flushNow); 767 window.addEventListener('beforeunload', flushNow); 768 } 769 async flush(isUnload=false){ 770 U.log('Flushing queue:', this.queue.length); 771 if (this.queue.length === 0) return; 772 const batch = this.queue.splice(0, this.batchCfg.maxBatch); 773 this._persistQueue(); // Update localStorage after removing items 774 this._clearTimer(); 775 776 const url = `${this.apiBaseUrl}/events/batch`; 777 const payload = JSON.stringify(batch); 778 779 // Try compression for larger payloads 780 let requestBody = payload; 781 let headers = { 'Content-Type': 'application/json', 'X-SDK-Version': VERSION }; 782 let compressionUsed = false; 783 784 // Try sendBeacon on unload for reliability (uncompressed) 785 if (isUnload && navigator.sendBeacon) { 786 try { 787 const ok = navigator.sendBeacon(url, new Blob([payload], { type: 'application/json' })); 788 if (ok) { 789 // Log successful sendBeacon with event details 790 U.log('Successfully sent batch via sendBeacon:', { 791 batch_size: batch.length, 792 events: batch.map(evt => ({ 793 event_name: evt.event_name, 794 event_id: evt.event_id, 795 page_type: evt.page?.type 796 })), 797 api_url: url, 798 compression: { enabled: false, reason: 'sendBeacon_unload_reliability' } 799 }); 800 this._clearPersistedQueue(); // Clear persisted queue on successful flush 801 return; // success 802 } 803 } catch {} 804 } 805 806 // Attempt gzip compression if payload is large enough 807 if (payload.length >= 1000) { // Only compress if >= 1KB 808 try { 809 const compressedData = await Compression.gzip(payload); 810 811 if (compressedData && Compression.shouldUseCompression(payload.length, compressedData.length)) { 812 requestBody = compressedData; 813 headers['Content-Encoding'] = 'gzip'; 814 headers['Content-Type'] = 'application/json'; // Keep original content type 815 compressionUsed = true; 816 817 U.log(`Using gzip compression: ${payload.length} â ${compressedData.length} bytes (${(payload.length/compressedData.length).toFixed(1)}x reduction)`); 818 } 819 } catch (error) { 820 U.warn('Compression failed, sending uncompressed:', error); 821 // Continue with uncompressed payload 822 } 823 } 824 825 // Use fetch with compression and retry 826 let attempt = 0; 827 while (attempt < this.retry.attempts) { 828 attempt++; 829 try { 830 const ac = new AbortController(); 831 const timeout = setTimeout(() => ac.abort(), U.clamp(3000 * attempt, 3000, 10000)); 832 833 const res = await fetch(url, { 834 method: 'POST', 835 headers: headers, 836 body: requestBody,
837 signal: ac.signal 838 }); 839 840 clearTimeout(timeout); 841 842 if (res.ok) { 843 U.log('Successfully sent batch:', { 844 batch_size: batch.length, 845 compressed: compressionUsed, 846 original_size: payload.length, 847 sent_size: compressionUsed ? requestBody.length : payload.length 848 }); 849 this._clearPersistedQueue(); 850 return; 851 } 852 U.log('Failed to flush queue - HTTP status:', res.status, 'URL:', url); 853 throw new Error(`HTTP ${res.status}`); 854 } catch (err) { 855 U.log(`Retry attempt ${attempt}/${this.retry.attempts} failed:`, err.message); 856 if (attempt === this.retry.attempts) { 857 U.log('All retry attempts failed, pushing', batch.length, 'events back to queue'); 858 } 859 const jitter = Math.random() * 200; 860 const delay = U.clamp(this.retry.baseDelayMs * Math.pow(2, attempt - 1) + jitter, this.retry.baseDelayMs, this.retry.maxDelayMs); 861 await new Promise(r => setTimeout(r, delay)); 862 } 863 } 864 // Don't push back failed events - drop them after all retries are exhausted 865 U.log('Dropping failed batch after all retries exhausted, batch size:', batch.length); 866 U.warn('Failed to send', batch.length, 'events after', this.retry.attempts, 'retry attempts. Events dropped.'); 867 } 868 869 // Add these new methods 870 _persistQueue() { 871 try { 872 localStorage.setItem('wbs_event_queue', JSON.stringify(this.queue)); 873 } catch (e) { 874 U.warn('Failed to persist queue to localStorage:', e); 875 } 876 } 877 878 _loadQueue() { 879 try { 880 const stored = localStorage.getItem('wbs_event_queue'); 881 return stored ? JSON.parse(stored) : []; 882 } catch (e) { 883 U.warn('Failed to load queue from localStorage:', e); 884 return []; 885 } 886 } 887 888 _clearPersistedQueue() { 889 try { 890 localStorage.removeItem('wbs_event_queue'); 891 } catch (e) { 892 U.warn('Failed to clear persisted queue:', e); 893 } 894 } 895 896 // Helper method to create a summary of payload for logging 897 _getPayloadSummary(payload) { 898 if (!payload) return null; 899 900 const summary = {}; 901 902 // Add key fields based on event type 903 if (payload.product_id) summary.product_id = payload.product_id; 904 if (payload.sku) summary.sku = payload.sku; 905 if (payload.name) summary.name = payload.name?.substring(0, 50) + (payload.name?.length > 50 ? '...' : ''); 906 if (payload.query) summary.query = payload.query; 907 if (payload.order_id) summary.order_id = payload.order_id; 908 if (payload.order_number) summary.order_number = payload.order_number; 909 if (payload.value) summary.value = payload.value; 910 if (payload.currency) summary.currency = payload.currency; 911 if (payload.products?.length) summary.product_count = payload.products.length; 912 if (payload.item_count) summary.item_count = payload.item_count; 913 914 return Object.keys(summary).length > 0 ? summary : null; 915 } 916 } 917 918 // -------------------- DOM config -------------------- 919 // Global DOM config - will be set once during initialization 920 let domConfig = null; 921 922 // Function to get DOM config with async fetch and caching 923 async function getDomConfig(apiBaseUrl) { 924 const cacheKey = 'clickstream_config'; 925 const cacheTTL = 5 * 60 * 1000; // 5 minutes in milliseconds 926 927 // Check cache first 928 try { 929 const cached = localStorage.getItem(cacheKey); 930 if (cached) { 931 const { data, timestamp } = JSON.parse(cached); 932 const isExpired = (Date.now() - timestamp) > cacheTTL; 933 934 if (!isExpired) { 935 U.log(`Using cached DOM config`); 936 return data; 937 } else { 938 U.log(`Cache expired, will fetch from API`); 939 localStorage.removeItem(cacheKey); 940 } 941 } 942 } catch (e) { 943 U.warn(`Cache read error: ${e.message}`); 944 } 945 946 // Cache miss or expired - fetch from API asynchronously 947 U.log(`Fetching DOM config from API`); 948 949 try { 950 const apiUrl = `${apiBaseUrl}/clickstream-config`; 951 const response = await fetch(apiUrl, { 952 method: 'GET', 953 headers: { 'Content-Type': 'application/json' }, 954 signal: AbortSignal.timeout(10000) // 10 second timeout 955 }); 956 957 if (!response.ok) { 958 throw new Error(`API request failed: ${response.status} ${response.statusText}`); 959 } 960 961 const configData = await response.json(); 962 963 if (!configData.dom_config) { 964 throw new Error('No dom_config found in API response'); 965 } 966 967 if (!configData.merchant_id || !configData.merchant_code) { 968 throw new Error('Missing merchant_id or merchant_code in API response'); 969 } 970 971 // Cache the result 972 const cacheData = { 973 data: configData, 974 timestamp: Date.now() 975 }; 976 localStorage.setItem(cacheKey, JSON.stringify(cacheData)); 977 U.log('DOM config fetched and cached successfully'); 978 979 return configData; 980 981 } catch (error) { 982 U.warn(`Failed to fetch DOM config from API`); 983 throw new Error(`DOM configuration not available. ${error.message}`); 984 } 985 } 986 987 988 // -------------------- page detector (classes first, then heuristics) -------------------- 989 class PageDetector { 990 constructor(){ 991 this.current = 'OTHER'; 992 this.detect = this.detect.bind(this); 993 } 994 995 detect(){ 996 const pageConfig = domConfig.pages; 997 U.log('Starting page detection with config:', pageConfig); 998 999 for (const [pageType, methods] of Object.entries(pageConfig)) { 1000 if (!Array.isArray(methods)) continue; 1001 1002 U.log(`Testing page type: ${pageType}`); 1003 1004 for (const method of methods) { 1005 let detected = false;
1006 1007 switch (method.type) { 1008 case 'dom_element': 1009 detected = this._detectPageByDOM(method.selector); 1010 U.log(`DOM detection for ${pageType}:`, method.selector, 'ââ â', detected); 1011 break; 1012 case 'url_pattern': 1013 detected = this._detectPageByURL(method.pattern); 1014 U.log(`URL detection for ${pageType}:`, method.pattern, 'ââ â', detected); 1015 break; 1016 default: 1017 U.warn(`Unknown page detection method: ${method.type}`); 1018 continue; 1019 } 1020 1021 if (detected) { 1022 U.log(`Page detected as: ${pageType}`); 1023 return (this.current = pageType); 1024 } 1025 } 1026 } 1027 1028 U.log('No page type detected, defaulting to OTHER'); 1029 return (this.current = 'OTHER'); 1030 } 1031 1032 // Check DOM selector 1033 _detectPageByDOM(selector) { 1034 if (document.querySelector(selector)) { 1035 return true; 1036 } 1037 return false; 1038 } 1039 1040 // Check URL pattern using regex 1041 _detectPageByURL(pattern) { 1042 const currentURL = window.location.href; 1043 const currentPath = window.location.pathname; 1044 const fullURL = currentPath + window.location.search; // Include query params 1045 1046 try { 1047 const regex = new RegExp(pattern); 1048 if (regex.test(fullURL) || regex.test(currentURL)) { 1049 return true; 1050 } 1051 } catch (e) { 1052 U.warn(`[SDK] Invalid regex pattern: ${pattern}`, e); 1053 } 1054 return false; 1055 } 1056 } 1057 1058 // Event names from schema.py - keep in sync with backend 1059 const SUPPORTED_EVENTS = { 1060 PRODUCTS_SEARCHED: 'products_searched', 1061 PRODUCT_VIEWED: 'product_viewed', 1062 PRODUCT_ADDED_TO_CART: 'product_added_to_cart', 1063 CART_VIEWED: 'cart_viewed', 1064 CHECKOUT_STARTED: 'checkout_started', 1065 ORDER_COMPLETED: 'order_completed' 1066 }; 1067 1068 /** 1069 * Factory function to extract event data based on event name and page type 1070 * @param {string} eventName - Event name from SUPPORTED_EVENTS 1071 * @param {string} pageType - Page type (PRODUCT, CATEGORY, SEARCH, etc.) 1072 * @param {...any} args - Additional arguments (e.g., element for product_clicked) 1073 * @returns {object|null} - Event payload data or null if extraction fails 1074 */ 1075 async function extractEventData(eventName, pageType, sdkInstance = null, ...args) { 1076 if (!Object.values(SUPPORTED_EVENTS).includes(eventName)) { 1077 U.warn(`[SDK] Unsupported event name: ${eventName}`); 1078 return null; 1079 } 1080 1081 try { 1082 switch (eventName) { 1083 case SUPPORTED_EVENTS.PRODUCT_VIEWED: 1084 return sdkInstance ? await sdkInstance._extractProductViewedDataWithRetry(pageType) : null; 1085 1086 case SUPPORTED_EVENTS.PRODUCTS_SEARCHED: 1087 return sdkInstance ? await sdkInstance._extractProductsSearchedDataWithRetry(pageType) : null; 1088 1089 case SUPPORTED_EVENTS.PRODUCT_ADDED_TO_CART: 1090 // This uses a different pattern - handled in _trackProductAddedToCart 1091 U.warn(`[SDK] ${eventName} extraction handled separately in tracking method`); 1092 return null; 1093 1094 case SUPPORTED_EVENTS.CART_VIEWED: 1095 return sdkInstance ? await sdkInstance._extractCartViewedDataWithRetry(pageType) : null; 1096 1097 case SUPPORTED_EVENTS.CHECKOUT_STARTED: 1098 return sdkInstance ? await sdkInstance._extractCheckoutDataWithRetry(pageType) : null; 1099 1100 case SUPPORTED_EVENTS.ORDER_COMPLETED: 1101 return sdkInstance ? await sdkInstance._extractTransactionDataWithRetry(pageType) : null; 1102 1103 default: 1104 U.warn(`[SDK] No extraction handler for event: ${eventName}`); 1105 return null; 1106 } 1107 } catch (error) { 1108 U.warn(`[SDK] Error extracting data for ${eventName}:`, error); 1109 return null; 1110 } 1111 } 1112 1113 1114 // -------------------- core SDK -------------------- 1115 class WebDataCollector { 1116 constructor(options={}){ 1117 this.cfg = { ...DEFAULTS, ...options }; 1118 this.initialized = false; 1119 1120 // Initialize async components 1121 this._initialize(); 1122 } 1123 1124 async _initialize() { 1125 try { 1126 U.log('Starting initialization'); 1127 1128 // Fetch config from API (no merchant_id parameter needed) 1129 const fullConfig = await getDomConfig(this.cfg.apiBaseUrl); 1130 1131 // Extract merchant_id and merchant_code from config 1132 this.merchantId = fullConfig.merchant_id; 1133 this.merchantCode = fullConfig.merchant_code; 1134 1135 // Set global DOM config from the dom_config property 1136 domConfig = fullConfig.dom_config; 1137 1138 U.log('DOM config loaded successfully from API:', { 1139 merchant_id: this.merchantId, 1140 merchant_code: this.merchantCode, 1141 platform: domConfig.platform, 1142 pages_configured: Object.keys(domConfig.pages || {}), 1143 events_configured: Object.keys(domConfig.events || {}) 1144 }); 1145 1146 this.platform = domConfig.platform; // Get platform from config instead of detection 1147 1148 this.detector = new PageDetector(); 1149 this.currentPageType = this.detector.detect(); 1150 U.log('Page detected as:', this.currentPageType, 'URL:', location.href); 1151 1152 this.transport = new Transport(this.cfg.apiBaseUrl, this.cfg.retry, this.cfg.batching); 1153 1154 // identities 1155 this.uid = this._getOrCreateId(this.cfg.cookie.uid, this.cfg.cookie.days); 1156 1157 // Check if this is a new session or continuing existing one 1158 const isNewSession = this._isNewSession(); 1159 if (isNewSession) { 1160 // Create new session ID for new sessions 1161 this.sessionId = this._getOrCreateId(this.cfg.cookie.session, this.cfg.cookie.sessionHours/24); 1162 // Reset event sequence for new session 1163 this.eventSeq = 0; 1164 Store.setConfig('wbs_event_seq', 0); 1165 // Session tracking removed - not in schema 1166 } else { 1167 // Use existing session ID 1168 this.sessionId = Store.getCookie(this.cfg.cookie.session); 1169 // Restore event sequence from previous page loads
1170 this.eventSeq = Store.getConfig('wbs_event_seq') || 0; 1171 // Session tracking removed - not in schema 1172 // Refresh session cookie expiration 1173 this._refreshSessionCookie(); 1174 } 1175 1176 // fire-once guard per path/session for Checkout Started 1177 this._firedGuards = new Set(); 1178 1179 this._bindAddToCartListeners(); 1180 1181 U.log('Initialization completed successfully:', { 1182 merchant_id: this.merchantId, 1183 merchant_code: this.merchantCode, 1184 platform: this.platform, 1185 page_type: this.currentPageType, 1186 uid: this.uid, 1187 session_id: this.sessionId, 1188 event_seq: this.eventSeq 1189 }); 1190 1191 this.initialized = true; 1192 this.trackPageView(); 1193 } catch (error) { 1194 U.warn('[SDK] âÂÅ Initialization failed:', error); 1195 throw error; // Fail fast - SDK cannot function without DOM config 1196 } 1197 } 1198 1199 1200 // ---------- ids ---------- 1201 _getOrCreateId(name, days){ let v = Store.getCookie(name); if (!v){ v = U.uuid(); Store.setCookie(name, v, days); } return v; } 1202 1203 _getNextEventSeq() { 1204 // Increment event sequence and persist it 1205 this.eventSeq += 1; 1206 Store.setConfig('wbs_event_seq', this.eventSeq); 1207 return this.eventSeq; 1208 } 1209 1210 _isNewSession() { 1211 // Check if session cookie exists and hasn't expired 1212 const existingSessionId = Store.getCookie(this.cfg.cookie.session); 1213 if (!existingSessionId) { 1214 return true; // No existing session 1215 } 1216 1217 // Check if we have a stored session start time 1218 const storedSessionStart = Store.getConfig('wbs_session_start'); 1219 if (!storedSessionStart) { 1220 return true; // No stored session start time 1221 } 1222 1223 // Check if we have last activity timestamp 1224 const lastActivity = Store.getConfig('wbs_last_activity'); 1225 if (!lastActivity) { 1226 return true; // No activity tracking 1227 } 1228 1229 // Check if session has expired based on inactivity (configurable) 1230 const lastActivityTime = new Date(lastActivity).getTime(); 1231 const currentTime = Date.now(); 1232 const inactivityTimeout = this.cfg.session.inactivityTimeoutHours * 60 * 60 * 1000; // Convert hours to milliseconds 1233 const timeSinceLastActivity = currentTime - lastActivityTime; 1234 1235 if (timeSinceLastActivity > inactivityTimeout) { 1236 // Session expired due to inactivity, clean up old data 1237 Store.removeConfig('wbs_session_start'); 1238 Store.removeConfig('wbs_last_activity'); 1239 Store.removeConfig('wbs_event_seq'); // Clear event sequence for expired session 1240 // Also remove the expired session cookie so a new one will be created 1241 Store.setCookie(this.cfg.cookie.session, '', -1); // Set to expire immediately 1242 return true; 1243 } 1244 1245 return false; // Session is still valid 1246 } 1247 1248 _refreshSessionCookie() { 1249 // Extend the session cookie expiration to keep the session alive 1250 const existingSessionId = Store.getCookie(this.cfg.cookie.session); 1251 if (existingSessionId) { 1252 Store.setCookie(this.cfg.cookie.session, existingSessionId, this.cfg.cookie.sessionHours/24); 1253 } 1254 } 1255 1256 // ---------- retry helpers ---------- 1257 1258 _bindAddToCartListeners(){ 1259 // Get add to cart config from the current page type 1260 const pageConfig = domConfig.events[this.currentPageType]; 1261 const cfg = pageConfig?.product_added_to_cart; 1262 1263 if (!cfg || !cfg.selectors) return; // No add to cart config for this page type 1264 1265 // Use configuration-based add-to-cart detection with industry standard data attributes 1266 document.addEventListener('click', (e) => { 1267 // Check if clicked element matches any configured add-to-cart selectors 1268 const matchedSelector = cfg.selectors.find(selector => { 1269 return e.target.matches(selector) || e.target.closest(selector); 1270 }); 1271 1272 if (matchedSelector) { 1273 const actualElement = e.target.matches(matchedSelector) ? e.target : e.target.closest(matchedSelector); 1274 1275 // Prevent duplicate tracking and handle different element types 1276 if (actualElement.tagName === 'FORM') { 1277 // Handle form submission tracking 1278 actualElement.addEventListener('submit', async (submitEvent) => { 1279 await this._trackProductAddedToCart(actualElement, 'form'); 1280 }, { once: true }); 1281 } else { 1282 // Handle button/element click tracking (fire and forget) 1283 this._trackProductAddedToCart(actualElement, 'click').catch(error => { 1284 U.warn('Add to cart tracking failed:', error); 1285 }); 1286 } 1287 } 1288 }, { capture: true }); 1289 } 1290 1291 1292 async _trackProductAddedToCart(element, eventType = 'form'){
1293 try { 1294 // Extract product data based on context 1295 const productData = await this._extractProductDataFromAddToCart(element, eventType); 1296 if (!productData?.product_id && !productData?.sku) { 1297 U.warn('Could not extract product data from element'); 1298 return; 1299 } 1300 1301 const payload = this._buildBase(SUPPORTED_EVENTS.PRODUCT_ADDED_TO_CART, { 1302 payload: { 1303 product_id: productData.product_id || productData.sku, 1304 name: productData.name, 1305 sku: productData.sku, 1306 price: productData.price, 1307 currency: productData.currency, 1308 quantity: productData.quantity || null, 1309 } 1310 }); 1311 1312 this.transport.enqueue(payload); 1313 } catch (e) { 1314 U.warn('Failed to track product added to cart:', e); 1315 } 1316 } 1317 1318 // Extract product data from add-to-cart interactions (forms or buttons) 1319 async _extractProductDataFromAddToCart(element, eventType){ 1320 const productData = {}; 1321 1322 try { 1323 // For PDP pages, use the existing working extractProductViewedData() function 1324 if (this.currentPageType === 'PRODUCT') { 1325 const pdpData = await this._extractProductViewedData(this.currentPageType); 1326 productData.product_id = pdpData?.product_id; 1327 productData.name = pdpData?.name; 1328 productData.sku = pdpData?.sku; 1329 productData.price = pdpData?.price; 1330 productData.currency = pdpData?.currency; 1331 1332 // Extract quantity using DOM config 1333 const cfg = domConfig.events[this.currentPageType]?.product_added_to_cart?.extraction; 1334 if (cfg?.quantity) { 1335 const qtyValue = this._extractFieldValue(cfg.quantity, document, 'quantity'); 1336 productData.quantity = qtyValue ? parseInt(qtyValue, 10) || null : null; 1337 } 1338 } 1339 // For product list pages (category, search, etc.) 1340 else { 1341 const cfg = domConfig.events[this.currentPageType]?.product_added_to_cart?.extraction; 1342 1343 // Find the product container (form itself, or closest product item) 1344 let container = element; 1345 if (eventType === 'button' && cfg?.container) { 1346 container = element.closest(cfg.container) || element; 1347 } 1348 1349 1350 // Use the generic extraction methods 1351 productData.product_id = cfg.product_id ? this._extractFieldValue(cfg.product_id, container, 'product_id') : null; 1352 1353 productData.sku = cfg.sku ? this._extractFieldValue(cfg.sku, container, 'sku') : null; 1354 productData.name = cfg.name ? this._extractFieldValue(cfg.name, container, 'name') : null; 1355 1356 // Extract price and currency 1357 if (cfg.price) { 1358 const priceValue = this._extractFieldValue(cfg.price, container, 'price'); 1359 if (priceValue) { 1360 const { amount, currency } = U.parseMoney(priceValue); 1361 productData.price = amount; 1362 productData.currency = currency; 1363 } 1364 } 1365 1366 // Extract quantity 1367 if (cfg.quantity) { 1368 const qtyValue = this._extractFieldValue(cfg.quantity, container, 'quantity'); 1369 productData.quantity = qtyValue ? parseInt(qtyValue, 10) || null : null; 1370 } 1371 } 1372 1373 } catch (e) { 1374 U.warn('Error extracting product data:', e); 1375 } 1376 1377 return productData; 1378 } 1379 1380 async _waitForDomStable(timeout, idleTime) { 1381 return new Promise(resolve => { 1382 let lastChange = Date.now(); 1383 1384 const observer = new MutationObserver(() => { 1385 lastChange = Date.now(); 1386 }); 1387 1388 observer.observe(document.body, { 1389 childList: true, 1390 subtree: true, 1391 attributes: true, 1392 characterData: true 1393 }); 1394 1395 const check = () => { 1396 const now = Date.now(); 1397 1398 // if DOM idle for idleTime â stable 1399 if (now - lastChange >= idleTime) { 1400 observer.disconnect(); 1401 //console.log("SDK: DOM stable"); 1402 resolve(true); 1403 return; 1404 } 1405 1406 // timeout fallback 1407 if (now - startTime >= timeout) { 1408 observer.disconnect(); 1409 //console.log("SDK: DOM wait timeout"); 1410 resolve(false); 1411 return; 1412 } 1413 1414 requestAnimationFrame(check); 1415 }; 1416 1417 const startTime = Date.now(); 1418 check(); 1419 }); 1420 } 1421 1422 1423 // ---------- page load events ---------- 1424 async trackPageView(){ 1425 1426 // ð¥ WAIT until Magento DOM stable 1427 await this._waitForDomStable(7000, 800); 1428 1429 // Update last activity timestamp for session management 1430 this._updateLastActivity(); 1431 1432 U.log(`Tracking page view for page type: ${this.currentPageType}`); 1433 1434 // chained events by page type 1435 if (this.currentPageType === 'SEARCH') { 1436 U.log('Attempting to track products_searched event'); 1437 await this._trackProductsSearched(); 1438 } 1439 if (this.currentPageType === 'PRODUCT') { 1440 U.log('Attempting to track product_viewed event'); 1441 await this._trackProductViewed(); 1442 } 1443 if (this.currentPageType === 'CART') { 1444 U.log('Attempting to track cart_viewed event'); 1445 await this._trackCartViewed(); 1446 } 1447 if (this.currentPageType === 'CHECKOUT') { 1448 U.log('Attempting to track checkout_started event'); 1449 await this._trackCheckoutStarted(); 1450 } 1451 if (this.currentPageType === 'ORDER_CONFIRMATION') { 1452 U.log('Attempting to track order_completed event'); 1453 await this._trackOrderCompleted(); 1454 } 1455 1456 if (this.currentPageType === 'OTHER') { 1457 U.log('Page type is OTHER - no automatic events will be tracked'); 1458 } 1459 } 1460 1461 1462 // ---------- builders ---------- 1463 _baseCtx(){ 1464 return { 1465 merchant_id: this.merchantId, 1466 merchant_code: this.merchantCode, 1467 platform: this.platform, 1468 event_id: U.randId('evt'), 1469 event_seq: this._getNextEventSeq(), 1470 timestamp: U.iso(), 1471 user: (() => { 1472 const userId = this._authedUserId(); 1473 const magentoData = this._getMagentoUserData(); 1474 return { 1475 user_id: userId, 1476 wbs_id: this.uid, 1477 session_id: this.sessionId, 1478 ...(magentoData && { magento: magentoData }) 1479 }; 1480 })(), 1481 device: { 1482 screen: { 1483 width: screen.width, 1484 height: screen.height, 1485 color_depth: screen.colorDepth, 1486 pixel_depth: screen.pixelDepth 1487 }, 1488 language: navigator.language, 1489 platform: navigator.platform 1490 }, 1491 utm: this._utm(), 1492 page: this._pageCtx(), 1493 external_ids: this._externalIds(), 1494 ip: null, // Backend will extract IP from request 1495 sdk: `js-sdk@${VERSION}` 1496 }; 1497 } 1498 1499 _pageCtx(){ 1500 return { 1501 type: this.currentPageType, 1502 url: location.href, 1503 title: document.title, 1504 path: location.pathname, 1505 referrer: document.referrer || null 1506 }; 1507 } 1508 1509 _buildBase(eventName, extra={}) { return { event_name: eventName, ...this._baseCtx(), ...extra }; } 1510 1511 1512 _utm(){ 1513 const p = new URLSearchParams(location.search); 1514 return { source: p.get('utm_source'), medium: p.get('utm_medium'), campaign: p.get('utm_campaign'), term: p.get('utm_term'), content: p.get('utm_content') }; 1515 } 1516 1517 _externalIds(){ 1518 // Extract external platform identifiers from cookies/localStorage 1519 const getCookie = (name) => { 1520 const value = `; ${document.cookie}`; 1521 const parts = value.split(`; ${name}=`); 1522 if (parts.length === 2) return parts.pop().split(';').shift(); 1523 return null; 1524 }; 1525 1526 return { 1527 google_analytics_browser_id: getCookie('_ga') || null, 1528 meta_pixel_browser_id: getCookie('_fbp') || null, 1529 google_analytics_app_id: null, // Mobile only 1530 meta_sdk_app_id: null // Mobile only 1531 }; 1532 } 1533 1534 1535 _authedUserId(){ 1536 const userConfig = domConfig.user; 1537 1538 // Debug logging to see what's in the user config 1539 U.log('User config:', userConfig); 1540 1541 // Check for both possible property names and ensure it's an array 1542 const extractionMethods = userConfig?.extraction; 1543 1544 if (!userConfig || !extractionMethods || !Array.isArray(extractionMethods)) { 1545 U.log('No user extraction methods found, using fallback'); 1546 return null; 1547 } 1548 1549 // Try each extraction method in order until one succeeds 1550 for (const method of extractionMethods) { 1551 try { 1552 let value = null; 1553 1554 switch (method.type) { 1555 case 'local_storage': 1556 value = this._extractFromLocalStorage(method.key, method.json_path); 1557 break; 1558 1559 case 'cookie': 1560 value = this._extractFromCookie(method.name); 1561 break; 1562 1563 case 'dom_element': 1564 value = this._extractFromDOMElement(method.selector, method.attribute); 1565 break; 1566 1567 default: 1568 U.warn(`[SDK] Unknown user extraction method: ${method.type}`); 1569 continue; 1570 } 1571 1572 // Return first successful extraction 1573 if (value) { 1574 // convert to string and trim 1575 return value.toString().trim(); 1576 } 1577 } catch (error) { 1578 U.warn(`[SDK] User extraction method ${method.type} failed:`, error); 1579 continue; 1580 } 1581 } 1582 1583 return null; 1584 } 1585 1586 // User extraction helper methods 1587 1588 _extractFromCookie(name) { 1589 if (!name) return null; 1590
1591 try { 1592 const value = `; ${document.cookie}`; 1593 const parts = value.split(`; ${name}=`); 1594 if (parts.length === 2) { 1595 return parts.pop().split(';').shift(); 1596 } 1597 return null; 1598 } catch (error) { 1599 return null; 1600 } 1601 } 1602 1603 _extractFromLocalStorage(key, jsonPath = null) { 1604 try { 1605 const value = localStorage.getItem(key); 1606 if (!value) return null; 1607 1608 if (jsonPath) { 1609 // Parse as JSON and extract specific field 1610 const jsonData = JSON.parse(value); 1611 const parts = jsonPath.split('.'); 1612 let current = jsonData; 1613 1614 for (const part of parts) { 1615 current = current[part]; 1616 if (current === undefined || current === null) { 1617 return null; 1618 } 1619 } 1620 1621 return current; 1622 } else { 1623 return value; 1624 } 1625 } catch (error) { 1626 return null; 1627 } 1628 } 1629 1630 1631 1632 // Generic field extraction using extraction_methods pattern 1633 _applyExtractionDefaults(method, fieldName = null) { 1634 // Apply intelligent defaults 1635 const normalized = { ...method }; 1636 1637 // Default 1: type defaults to 'dom_element' when not specified 1638 if (!normalized.type) { 1639 normalized.type = 'dom_element'; 1640 } 1641 1642 // Default 2: Auto-infer attribute from selector when it matches [data-{field-name}] pattern 1643 if (normalized.type === 'dom_element' && !normalized.attribute && fieldName) { 1644 const expectedSelector = `[data-${fieldName.replace('_', '-')}]`; 1645 if (normalized.selector === expectedSelector) { 1646 normalized.attribute = `data-${fieldName.replace('_', '-')}`; 1647 } 1648 } 1649 1650 return normalized; 1651 } 1652 1653 1654 _extractFieldValue(extraction_methods, context = null, fieldName = null) { 1655 if (!extraction_methods || !Array.isArray(extraction_methods)) { 1656 U.log(`No extraction methods for field: ${fieldName}`); 1657 return null; 1658 } 1659 1660 // Handle special case for collection extraction (now in array format) 1661 if (extraction_methods.length >
1661 0 && extraction_methods[0].type === 'dom_collection') { 1662 return this._extractListItems(extraction_methods[0], context, fieldName); 1663 } 1664 1665 for (const method of extraction_methods) { 1666 try { 1667 let value = null; 1668 1669 // Apply intelligent defaults 1670 const normalizedMethod = this._applyExtractionDefaults(method, fieldName); 1671 1672 switch (normalizedMethod.type) { 1673 case 'dom_element': 1674 value = this._extractFromDOMElement(normalizedMethod.selector, normalizedMethod.attribute, context); 1675 break; 1676 1677 case 'url_param': 1678 value = this._extractFromURLParam(normalizedMethod.param_name); 1679 break; 1680 1681 default: 1682 U.warn(`[SDK] Unknown extraction method type: ${normalizedMethod.type}`); 1683 continue; 1684 } 1685 1686 // Return the first successfully extracted value 1687 if (value !== null && value !== undefined && value !== '') { 1688 return value; 1689 } 1690 } catch (error) { 1691 U.warn(`[SDK] Extraction method ${method.type} failed:`, error); 1692 continue; 1693 } 1694 } 1695 1696 return null; 1697 } 1698 1699 // Helper function to extract list items 1700 _extractListItems(listConfig, context = null, fieldName = null) { 1701 try { 1702 const searchContext = context || document; 1703 const { selector, item_fields } = listConfig; 1704 1705 if (!selector || !item_fields) { 1706 U.warn(`[SDK] Invalid list config for field: ${fieldName}`); 1707 return []; 1708 } 1709 1710 // Find all collection elements (cart items, products, etc.) 1711 const containerElements = searchContext.querySelectorAll(selector); 1712 1713 if (containerElements.length === 0) { 1714 return []; 1715 } 1716 1717 // Extract data from each item 1718 const items = []; 1719 containerElements.forEach((item, index) => { 1720 const itemData = this._extractItemData(item, item_fields, index); 1721 if (itemData && (itemData.product_id || itemData.name || itemData.sku)) { 1722 items.push(itemData); 1723 } 1724 }); 1725 1726 return items; 1727 } catch (error) { 1728 U.warn(`[SDK] List extraction failed for field: ${fieldName}`, error); 1729 return []; 1730 } 1731 } 1732 1733 // Helper function to extract data from a single list item 1734 _extractItemData(itemElement, itemExtractionConfig, position = 0) { 1735 try { 1736 const itemData = {}; 1737 1738 // Extract each field defined in item_extraction config 1739 for (const [fieldName, fieldConfig] of Object.entries(itemExtractionConfig)) { 1740 const value = this._extractFieldValue(fieldConfig, itemElement, fieldName); 1741 if (value !== null && value !== undefined && value !== '') { 1742 itemData[fieldName] = value; 1743 } 1744 } 1745 1746 // Parse monetary values if present - convert to strings for Decimal compatibility 1747 if (itemData.unit_price) { 1748 const { amount, currency } = U.parseMoney(itemData.unit_price); 1749 itemData.unit_price = amount !== null ? String(amount) : null; 1750 if (currency && !itemData.currency) { 1751 itemData.currency = currency; 1752 } 1753 } 1754 1755 // Parse item value (subtotal) if present - convert to strings for Decimal compatibility 1756 if (itemData.value) { 1757 const { amount, currency } = U.parseMoney(itemData.value); 1758 itemData.value = amount !== null ? String(amount) : null; 1759 if (currency && !itemData.currency) { 1760 itemData.currency = currency; 1761 } 1762 } 1763 1764 // Parse currency field if it contains price data instead of currency code 1765 if (itemData.currency && typeof itemData.currency === 'string' && itemData.currency.includes('$')) { 1766 const { currency } = U.parseMoney(itemData.currency); 1767 itemData.currency = currency || null; 1768 } 1769 1770 // Parse quantity as integer 1771 if (itemData.quantity) { 1772 const qty = parseInt(itemData.quantity, 10); 1773 itemData.quantity = isNaN(qty) ? null : qty; 1774 } else { 1775 itemData.quantity = null; 1776 } 1777 1778 return itemData; 1779 } catch (error) { 1780 U.warn('[SDK] Item data extraction failed:', error); 1781 return null; 1782 } 1783 } 1784 1785 // -------------------- Event Data Extraction Methods -------------------- 1786 1787 async _extractProductViewedDataWithRetry(pageType = 'PRODUCT', maxRetries = 2) { 1788 for (let attempt = 0; attempt <= maxRetries; attempt++) { 1789 const data = await this._extractProductViewedData(pageType); 1790 1791 // Check if we have minimum required data (product_id or sku) 1792 if (data && (data.product_id || data.sku)) { 1793 return data; 1794 } 1795 1796 if (attempt < maxRetries) {
1797 const delay = Math.min(200 * Math.pow(2, attempt), 1000); // 200ms, 400ms, 800ms max 1798 await new Promise(resolve => setTimeout(resolve, delay)); 1799 } 1800 } 1801 1802 U.warn(`[SDK] Failed to extract product data after ${maxRetries + 1} attempts`); 1803 return null; 1804 } 1805 1806 async _extractProductViewedData(pageType = 'PRODUCT') { 1807 const cfg = domConfig.events[pageType]?.product_viewed?.extraction; 1808 if (!cfg) { 1809 U.warn(`[SDK] No product_viewed config found for page type: ${pageType}`); 1810 return null; 1811 } 1812 1813 // Extract all fields in parallel (no individual retries) 1814 const [product_id, name, sku, price, currency, original_price, availabilityRaw] = await Promise.all([ 1815 cfg.product_id ? this._extractFieldValue(cfg.product_id, null, 'product_id') : Promise.resolve(null), 1816 cfg.name ? this._extractFieldValue(cfg.name, null, 'name') : Promise.resolve(null), 1817 cfg.sku ? this._extractFieldValue(cfg.sku, null, 'sku') : Promise.resolve(null), 1818 cfg.price ? this._extractFieldValue(cfg.price, null, 'price') : Promise.resolve(null), 1819 cfg.currency ? this._extractFieldValue(cfg.currency, null, 'currency') : Promise.resolve(null), 1820 cfg.original_price ? this._extractFieldValue(cfg.original_price, null, 'original_price') : Promise.resolve(null), 1821 cfg.availability ? this._extractFieldValue(cfg.availability, null, 'availability') : Promise.resolve(null), 1822 ]); 1823 1824 // Process availability with some additional logic 1825 let availability = null; 1826 if (availabilityRaw) { 1827 const availabilityText = String(availabilityRaw).toLowerCase(); 1828 availability = /out of stock|unavailable/.test(availabilityText) ? 'out_of_stock' : 'in_stock'; 1829 } 1830 1831 return { product_id, name, sku, price, currency, original_price, availability }; 1832 } 1833 1834 async _extractProductsSearchedDataWithRetry(pageType = 'SEARCH', maxRetries = 2) { 1835 for (let attempt = 0; attempt <= maxRetries; attempt++) { 1836 const data = await this._extractProductsSearchedData(pageType); 1837 1838 // Check if we have minimum required data (query) 1839 if (data && data.query) { 1840 return data; 1841 } 1842 1843 if (attempt < maxRetries) { 1844 const delay = Math.min(200 * Math.pow(2, attempt), 1000); // 200ms, 400ms, 800ms max 1845 await new Promise(resolve => setTimeout(resolve, delay)); 1846 } 1847 } 1848 1849 U.warn(`[SDK] Failed to extract search data after ${maxRetries + 1} attempts`); 1850 return null; 1851 } 1852 1853 async _extractProductsSearchedData(pageType = 'SEARCH') { 1854 const cfg = domConfig.events[pageType]?.products_searched?.extraction; 1855 if (!cfg) { 1856 U.warn(`[SDK] No products_searched config found for page type: ${pageType}`); 1857 return null; 1858 } 1859 1860 // Extract all fields in parallel (no individual retries) 1861 const [query, results_count] = await Promise.all([ 1862 cfg.query ? this._extractFieldValue(cfg.query, null, 'query') : Promise.resolve(null), 1863 cfg.results_count ? this._extractFieldValue(cfg.results_count, null, 'results_count') : Promise.resolve(null), 1864 ]); 1865 1866 return { query, results_count }; 1867 } 1868 1869 async _extractCartViewedDataWithRetry(pageType = 'CART', maxRetries = 2) { 1870 for (let attempt = 0; attempt <= maxRetries; attempt++) { 1871 const data = await this._extractCartViewedData(pageType); 1872 1873 // Check if we have minimum required data (value or products) 1874 if (data && (data.value || (data.products && data.products.length > 0))) { 1875 return data; 1876 } 1877 1878 if (attempt < maxRetries) { 1879 const delay = Math.min(300 * Math.pow(2, attempt), 1500); // 300ms, 600ms, 1200ms max (longer for cart) 1880 await new Promise(resolve => setTimeout(resolve, delay)); 1881 } 1882 } 1883 1884 U.warn(`[SDK] Failed to extract cart data after ${maxRetries + 1} attempts`); 1885 return null; 1886 } 1887 1888 async _extractCartViewedData(pageType = 'CART') { 1889 const cfg = domConfig.events[pageType]?.cart_viewed?.extraction; 1890 if (!cfg) { 1891 U.warn(`[SDK] No cart_viewed config found for page type: ${pageType}`); 1892 return null; 1893 } 1894 1895 // Extract all fields in parallel (no individual retries) 1896 const [totalValue, cartCurrency, products] = await Promise.all([ 1897 cfg.value ? this._extractFieldValue(cfg.value, null, 'value') : Promise.resolve(null), 1898 cfg.currency ? this._extractFieldValue(cfg.currency, null, 'currency') : Promise.resolve(null), 1899 cfg.items ? this._extractFieldValue(cfg.items, null, 'items') : Promise.resolve(null), 1900 ]); 1901 1902 // Process total value and currency 1903 let parsedTotal = null; 1904 let currency = null; 1905 1906 if (totalValue) { 1907 const { amount, currency: detectedCurrency } = U.parseMoney(totalValue); 1908 if (amount !== null) parsedTotal = amount; 1909 if (detectedCurrency) currency = detectedCurrency; 1910 } 1911 1912 // Process separate currency field 1913 if (cartCurrency) { 1914 const { currency: detectedCurrency } = U.parseMoney(cartCurrency); 1915 if (detectedCurrency) currency = detectedCurrency; 1916 } 1917 1918 const result = { 1919 value: parsedTotal !== null ? String(parsedTotal) : null, 1920 currency: currency, 1921 item_count: products ? products.length : 0, 1922 products: products || [] 1923 }; 1924 1925 return result; 1926 } 1927 1928 async _extractCheckoutDataWithRetry(pageType = 'CHECKOUT', maxRetries = 3) { 1929 for (let attempt = 0; attempt <= maxRetries; attempt++) { 1930 const data = await this._extractCheckoutData(pageType); 1931 1932 // Check if we have minimum required data (value, subtotal, or products) 1933 if (data && (data.value || data.subtotal || (data.products && data.products.length > 0))) { 1934 return data; 1935 } 1936 1937 if (attempt < maxRetries) {
1938 const delay = Math.min(500 * Math.pow(2, attempt), 2000); // 500ms, 1s, 2s max (longest for checkout) 1939 await new Promise(resolve => setTimeout(resolve, delay)); 1940 } 1941 } 1942 1943 U.warn(`[SDK] Failed to extract checkout data after ${maxRetries + 1} attempts`); 1944 return null; 1945 } 1946 1947 async _extractCheckoutData(pageType = 'CHECKOUT') { 1948 const cfg = domConfig.events[pageType]?.checkout_started?.extraction; 1949 if (!cfg) { 1950 U.warn(`[SDK] No checkout_started config found for page type: ${pageType}`); 1951 return null; 1952 } 1953 1954 // Extract all fields in parallel (no individual retries) 1955 const [total, subtotal, shipping, tax, discount, currency, coupon, products] = await Promise.all([ 1956 cfg.total ? this._extractFieldValue(cfg.total, null, 'total') : Promise.resolve(null), 1957 cfg.subtotal ? this._extractFieldValue(cfg.subtotal, null, 'subtotal') : Promise.resolve(null), 1958 cfg.shipping ? this._extractFieldValue(cfg.shipping, null, 'shipping') : Promise.resolve(null), 1959 cfg.tax ? this._extractFieldValue(cfg.tax, null, 'tax') : Promise.resolve(null), 1960 cfg.discount ? this._extractFieldValue(cfg.discount, null, 'discount') : Promise.resolve(null), 1961 cfg.currency ? this._extractFieldValue(cfg.currency, null, 'currency') : Promise.resolve(null), 1962 cfg.coupon ? this._extractFieldValue(cfg.coupon, null, 'coupon') : Promise.resolve(null), 1963 cfg.products ? this._extractFieldValue(cfg.products, null, 'products') : Promise.resolve([]), 1964 ]); 1965 1966 // Parse monetary values 1967 let parsedTotal = null, parsedSubtotal = null, parsedShipping = null, parsedTax = null, parsedDiscount = null, detectedCurrency = null; 1968 1969 if (total) { 1970 const { amount, currency: curr } = U.parseMoney(total); 1971 if (amount !== null) parsedTotal = amount; 1972 if (curr) detectedCurrency = curr; 1973 } 1974 1975 if (subtotal) { 1976 const { amount, currency: curr } = U.parseMoney(subtotal); 1977 if (amount !== null) parsedSubtotal = amount; 1978 if (curr && !detectedCurrency) detectedCurrency = curr; 1979 } 1980 1981 if (shipping) { 1982 const { amount } = U.parseMoney(shipping); 1983 if (amount !== null) parsedShipping = amount; 1984 } 1985 1986 if (tax) { 1987 const { amount } = U.parseMoney(tax); 1988 if (amount !== null) parsedTax = amount; 1989 } 1990 1991 if (discount) { 1992 const { amount } = U.parseMoney(discount); 1993 if (amount !== null) parsedDiscount = amount; 1994 } 1995 1996 if (currency) { 1997 const { currency: curr } = U.parseMoney(currency); 1998 if (curr) detectedCurrency = curr; 1999 } 2000 2001 return { 2002 value: parsedTotal !== null ? String(parsedTotal) : null, 2003 currency: detectedCurrency, 2004 subtotal: parsedSubtotal !== null ? String(parsedSubtotal) : null, 2005 shipping: parsedShipping !== null ? String(parsedShipping) : null, 2006 tax: parsedTax !== null ? String(parsedTax) : null, 2007 discount: parsedDiscount !== null ? String(parsedDiscount) : null, 2008 coupon: coupon, 2009 products: products || [] 2010 }; 2011 } 2012 2013 async _extractTransactionDataWithRetry(pageType = 'ORDER_CONFIRMATION', maxRetries = 2) { 2014 for (let attempt = 0; attempt <= maxRetries; attempt++) { 2015 const data = await this._extractTransactionData(pageType); 2016 2017 // Check if we have minimum required data (order_id or order_number) 2018 if (data && (data.order_id || data.order_number)) { 2019 return data; 2020 } 2021 2022 if (attempt < maxRetries) { 2023 const delay = Math.min(200 * Math.pow(2, attempt), 800); // 200ms, 400ms, 800ms max (shorter for order confirmation) 2024 await new Promise(resolve => setTimeout(resolve, delay)); 2025 } 2026 } 2027 2028 U.warn(`[SDK] Failed to extract transaction data after ${maxRetries + 1} attempts`); 2029 return null; 2030 } 2031 2032 async _extractTransactionData(pageType = 'ORDER_CONFIRMATION') { 2033 const cfg = domConfig.events[pageType]?.order_completed?.extraction; 2034 if (!cfg) { 2035 U.warn(`[SDK] No order_completed config found for page type: ${pageType}`); 2036 return null; 2037 } 2038 2039 // Extract all order fields in parallel (no individual retries) 2040 const [order_id, order_number, payment_method, shipping_method, order_date, order_status, customer_email, value, currency, subtotal, shipping, tax, discount, coupon, products] = await Promise.all([ 2041 cfg.order_id ? this._extractFieldValue(cfg.order_id, null, 'order_id') : Promise.resolve(null), 2042 cfg.order_number ? this._extractFieldValue(cfg.order_number, null, 'order_number') : Promise.resolve(null), 2043 cfg.value ? this._extractFieldValue(cfg.value, null, 'value') : Promise.resolve(null), 2044 cfg.currency ? this._extractFieldValue(cfg.currency, null, 'currency') : Promise.resolve(null), 2045 cfg.subtotal ? this._extractFieldValue(cfg.subtotal, null, 'subtotal') : Promise.resolve(null), 2046 cfg.shipping ? this._extractFieldValue(cfg.shipping, null, 'shipping') : Promise.resolve(null), 2047 cfg.tax ? this._extractFieldValue(cfg.tax, null, 'tax') : Promise.resolve(null), 2048 cfg.discount ? this._extractFieldValue(cfg.discount, null, 'discount') : Promise.resolve(null), 2049 cfg.coupon ? this._extractFieldValue(cfg.coupon, null, 'coupon') : Promise.resolve(null), 2050 cfg.products ? this._extractFieldValue(cfg.products, null, 'products') : Promise.resolve([]), 2051 ]); 2052 2053 // Parse monetary values 2054 let parsedValue = null, parsedSubtotal = null, parsedShipping = null, parsedTax = null, parsedDiscount = null, detectedCurrency = null; 2055 2056 if (value) { 2057 const { amount, currency: curr } = U.parseMoney(value); 2058 if (amount !== null) parsedValue = amount; 2059 if (curr) detectedCurrency = curr; 2060 } 2061 2062 if (subtotal) { 2063 const { amount, currency: curr } = U.parseMoney(subtotal); 2064 if (amount !== null) parsedSubtotal = amount; 2065 if (curr && !detectedCurrency) detectedCurrency = curr; 2066 } 2067 2068 if (shipping) { 2069 const { amount }
2069 = U.parseMoney(shipping); 2070 if (amount !== null) parsedShipping = amount; 2071 } 2072 2073 if (tax) { 2074 const { amount } = U.parseMoney(tax); 2075 if (amount !== null) parsedTax = amount; 2076 } 2077 2078 if (discount) { 2079 const { amount } = U.parseMoney(discount); 2080 if (amount !== null) parsedDiscount = amount; 2081 } 2082 2083 if (currency) { 2084 const { currency: curr } = U.parseMoney(currency); 2085 if (curr) detectedCurrency = curr; 2086 } 2087 2088 const result = { 2089 order_id: order_id || null, 2090 order_number: order_number || null, 2091 currency: detectedCurrency, 2092 coupon: coupon, 2093 discount: parsedDiscount !== null ? String(parsedDiscount) : null, 2094 shipping: parsedShipping !== null ? String(parsedShipping) : null, 2095 tax: parsedTax !== null ? String(parsedTax) : null, 2096 subtotal: parsedSubtotal !== null ? String(parsedSubtotal) : null, 2097 value: parsedValue !== null ? String(parsedValue) : null, 2098 products: products || [] 2099 }; 2100 2101 return result; 2102 } 2103 2104 // Enhanced DOM element extraction with context support 2105 _extractFromDOMElement(selector, attribute = null, context = null) { 2106 if (!selector) return null; 2107 2108 const searchContext = context || document; 2109 2110 try { 2111 const element = searchContext.querySelector(selector); 2112 if (element) { 2113 if (attribute) { 2114 const value = element.getAttribute(attribute); 2115 if (value) return value; 2116 } else { 2117 const value = element.textContent?.trim(); 2118 if (value) return value; 2119 } 2120 } 2121 } catch (error) { 2122 return null; 2123 } 2124 2125 return null; 2126 } 2127 2128 _extractFromURLParam(paramName) { 2129 if (!paramName) return null; 2130 2131 try { 2132 const urlParams = new URLSearchParams(window.location.search); 2133 return urlParams.get(paramName); 2134 } catch (error) { 2135 return null; 2136 } 2137 } 2138 2139 2140 _getMagentoUserData(){ 2141 if (typeof window.customerData !== 'undefined' && window.customerData.id) { 2142 return { 2143 website_id: window.customerData.website_id || null, 2144 group_id: window.customerData.group_id || null, 2145 store_id: window.customerData.store_id || null 2146 }; 2147 } 2148 return null; 2149 } 2150 2151 // ---------- specific events ---------- 2152 2153 async _trackProductsSearched(){ 2154 const searchData = await extractEventData(SUPPORTED_EVENTS.PRODUCTS_SEARCHED, 'SEARCH', this); 2155 if (!searchData?.query && searchData?.results_count === undefined) { 2156 U.warn('[SDK] âÂÅ No search query or results count extracted after retries, skipping products_searched event'); 2157 return; 2158 } 2159 const payload = this._buildBase(SUPPORTED_EVENTS.PRODUCTS_SEARCHED, { payload: searchData }); 2160 this.transport.enqueue(payload); 2161 } 2162 2163 async _trackProductViewed(){ 2164 const p = await extractEventData(SUPPORTED_EVENTS.PRODUCT_VIEWED, 'PRODUCT', this); 2165 2166 if (!p?.product_id && !p?.sku) { 2167 U.warn('[SDK] âÂÅ No product_id or sku extracted after retries, skipping product_viewed event'); 2168 return; 2169 } 2170 2171 const discount = p.original_price && p.price && p.original_price > p.price ? p.original_price - p.price : null; 2172 const payload = this._buildBase(SUPPORTED_EVENTS.PRODUCT_VIEWED, { payload: { ...p, discount, discount_type: discount? 'fixed_amount': null } }); 2173 2174 this.transport.enqueue(payload); 2175 } 2176 2177 2178 async _trackCartViewed(){ 2179 const cartData = await extractEventData(SUPPORTED_EVENTS.CART_VIEWED, 'CART', this); 2180 if (!cartData) { 2181 U.warn('[SDK] No cart data found, skipping cart viewed event'); 2182 return; 2183 } 2184 const payload = this._buildBase(SUPPORTED_EVENTS.CART_VIEWED, { 2185 payload: cartData 2186 }); 2187 this.transport.enqueue(payload); 2188 } 2189 2190 async _trackCheckoutStarted(){ 2191 // fire-once per path+session guard 2192 const guardKey = `checkout:${this.sessionId}:${location.pathname}`; 2193 if (this._firedGuards.has(guardKey)) { 2194 U.log('Checkout already sent for this session+path'); 2195 return; 2196 } 2197 2198 const checkoutData = await extractEventData(SUPPORTED_EVENTS.CHECKOUT_STARTED, 'CHECKOUT', this); 2199 2200 if (!checkoutData) { 2201 U.warn('[SDK] No checkout data extracted, skipping checkout started event'); 2202 return; 2203 } 2204 2205 const payload = this._buildBase(SUPPORTED_EVENTS.CHECKOUT_STARTED, { 2206 payload: checkoutData 2207 }); 2208 this.transport.enqueue(payload); 2209 2210 this._firedGuards.add(guardKey); 2211 } 2212 2213 async _trackOrderCompleted(){ 2214 // fire-once per path+session guard 2215 const guardKey = `transaction:${this.sessionId}:${location.pathname}`; 2216 if (this._firedGuards.has(guardKey)) { U.log('Transaction already sent for this session+path'); return; } 2217 2218 const orderData = await extractEventData(SUPPORTED_EVENTS.ORDER_COMPLETED, 'ORDER_CONFIRMATION', this); 2219 2220 if (!orderData) { 2221 U.warn('[SDK] No order data extracted, skipping order completed event'); 2222 return; 2223 } 2224 2225 const payload = this._buildBase(SUPPORTED_EVENTS.ORDER_COMPLETED, { 2226 payload: orderData 2227 }); 2228 this.transport.enqueue(payload); 2229 this._firedGuards.add(guardKey); 2230 } 2231 2232 2233 2234 _updateLastActivity() { 2235 // Update the last activity timestamp for session management 2236 Store.setConfig('wbs_last_activity', U.iso()); 2237 } 2238 } 2239 2240 // auto-init via script tag query 2241 function initFromScript(){ 2242 try { 2243 const script = document.currentScript || Array.from(document.scripts).pop(); 2244 const url = new URL(script.src, location.href); 2245 const apiBaseUrl = url.searchParams.get('api_base') || DEFAULTS.apiBaseUrl; 2246 window.WebDataCollector = new WebDataCollector({ apiBaseUrl }); 2247 } catch (e) { U.warn('init failed', e); } 2248 } 2249 2250 initFromScript(); 2251 window.WDC = { WebDataCollector }; // optional named export for manual init/testing 2252 2253})(window, document); 2254} 2255 2256if (document.readyState === "loading") { 2257 document.addEventListener("DOMContentLoaded", init); 2258} else { 2259 init(); // DOM already ready 2260} 2261</script>
2261</head> 2262 <body data-container="body" 2263 data-mage-init='{"loaderAjax": {}, "loader": { "icon": "https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/images/loader-2.gif"}}' 2264 class="transition-transform lg:transition-none checkout-cart-index page-layout-1column" id="html-body"> 2265 <!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 2265-2266
2265 2266<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
2266GTM-MRL4BPG
vendor: 85 bytes, lines 2266-2267
2266" 2267height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
2268<!-- End Google Tag Manager (noscript) -->
2269<script type="text/x-magento-init"> 2270 { 2271 "*": { 2272 "Magento_PageBuilder/js/widget-initializer": { 2273 "config": {"[data-content-type=\"slider\"][data-appearance=\"default\"]":{"Magento_PageBuilder\/js\/content-type\/slider\/appearance\/default\/widget":false},"[data-content-type=\"map\"]":{"Magento_PageBuilder\/js\/content-type\/map\/appearance\/default\/widget":false},"[data-content-type=\"row\"]":{"Magento_PageBuilder\/js\/content-type\/row\/appearance\/default\/widget":false},"[data-content-type=\"tabs\"]":{"Magento_PageBuilder\/js\/content-type\/tabs\/appearance\/default\/widget":false},"[data-content-type=\"slide\"]":{"Magento_PageBuilder\/js\/content-type\/slide\/appearance\/default\/widget":{"buttonSelector":".pagebuilder-slide-button","showOverlay":"hover","dataRole":"slide"}},"[data-content-type=\"banner\"]":{"Magento_PageBuilder\/js\/content-type\/banner\/appearance\/default\/widget":{"buttonSelector":".pagebuilder-banner-button","showOverlay":"hover","dataRole":"banner"}},"[data-content-type=\"buttons\"]":{"Magento_PageBuilder\/js\/content-type\/buttons\/appearance\/inline\/widget":false},"[data-content-type=\"products\"][data-appearance=\"carousel\"]":{"Magento_PageBuilder\/js\/content-type\/products\/appearance\/carousel\/widget":false}}, 2274 "breakpoints": {"desktop":{"label":"Desktop","stage":true,"default":true,"class":"desktop-switcher","icon":"Magento_PageBuilder::css\/images\/switcher\/switcher-desktop.svg","conditions":{"min-width":"1024px"},"options":{"products":{"default":{"slidesToShow":"5"}}}},"tablet":{"conditions":{"max-width":"1024px","min-width":"768px"},"options":{"products":{"default":{"slidesToShow":"4"},"continuous":{"slidesToShow":"3"}}}},"mobile":{"label":"Mobile","stage":true,"class":"mobile-switcher","icon":"Magento_PageBuilder::css\/images\/switcher\/switcher-mobile.svg","media":"only screen and (max-width: 768px)","conditions":{"max-width":"768px","min-width":"640px"},"options":{"products":{"default":{"slidesToShow":"3"}}}},"mobile-small":{"conditions":{"max-width":"640px"},"options":{"products":{"default":{"slidesToShow":"2"},"continuous":{"slidesToShow":"1"}}}}} } 2275 } 2276 } 2277</script>
2277 2278 2279<div class="cookie-status-message" id="cookie-status"> 2280 The store will not work correctly when cookies are disabled.</div>
2281<script type="text/javascript">document.querySelector("#cookie-status").style.display = "none";</script>
vendor: 1 bytes, line 2281
2281
2282<script type="text/x-magento-init"> 2283 { 2284 "*": { 2285 "cookieStatus": {} 2286 } 2287 } 2288</script>
2288 2289
2290<script type="text/x-magento-init"> 2291 { 2292 "*": { 2293 "mage/cookies": { 2294 "expires": null, 2295 "path": "\u002F", 2296 "domain": ".www.centerpointarchery.com", 2297 "secure": true, 2298 "lifetime": "86400" 2299 } 2300 } 2301 } 2302</script>
2302 2303 <noscript> 2304 <div class="message global noscript"> 2305 <div class="content"> 2306 <p> 2307 <strong>JavaScript seems to be disabled in your browser.</strong> 2308 <span> 2309 For the best experience on our site, be sure to turn on Javascript in your browser. </span> 2310 </p> 2311 </div> 2312 </div> 2313 </noscript> 2314 <!-- hash_002 --> 2315
2315<script> require.config({ 2316 paths: { 2317 'extendSdk': 'https\u003A\u002F\u002Fsdk.helloextend.com\u002Fextend\u002Dsdk\u002Dclient\u002Fv1\u002Fextend\u002Dsdk\u002Dclient.min' 2318 }, 2319 config: { 2320 mixins: { 2321 'Magento_Checkout/js/view/minicart': { 2322 'Extend_Warranty/js/view/minicart-mixin': true 2323 }, 2324 'Magento_Checkout/js/sidebar': { 2325 'Extend_Warranty/js/sidebar-mixin': true 2326 } 2327 } 2328 } 2329 }); 2330 2331 require(['extendSdk'], function(Extend) { 2332 Extend.config({"storeId":"0658a303-b407-4ad4-8fcd-8262410b599d","environment":"live","region":"US","locale":"en_US"}); 2333 window.Extend = Extend; window.Extend.integration = {"general":{"enableExtend":true,"balancedCart":true,"enableLeads":true,"enableLogging":true},"auth":{"mode":"live","id":"0658a303-b407-4ad4-8fcd-8262410b599d","sandboxId":null,"extendStoreName":"CenterPoint Archery"},"contracts":{"createWarrantyContract":true,"contractEvent":1,"contractCreatingMode":"event-based","cronContractSettings":{"frequency":"*\/5 * * * *","batchSize":25,"storagePeriod":30},"enableRefunds":true,"createRefundAutomatically":true},"offers":{"displayCartOffers":true,"enablePDPOffers":true,"enableProductsListOffers":true,"enableInterstitialCartOffers":true,"enablePostPurchaseModal":true,"enableOrderInformationOffers":true,"displaySettings":{"pdpPlacement":0}},"syncProducts":{"batchSize":100,"lastSyncDate":"2026-04-21 18:55:50","enableSpecialPrice":true,"enableCronSync":false},"syncHistoricalOrders":{"batchSize":10,"lastSendDate":"","enableCronSync":false},"trackingEnabled":true,"versions":{"magentoVersion":"2.4.7-p10","moduleVersion":"1.3.0"}}; });</script>
2333
2333<script type="text/x-magento-init"> 2334 { 2335 "*": { 2336 "Extend_Warranty/js/tracking-service": {} 2337 } 2338 } 2339 </script>
2339 2340
2341<script> 2342 window.cookiesConfig = window.cookiesConfig || {}; 2343 window.cookiesConfig.secure = true; 2344</script>
2344<script> require.config({ 2345 map: { 2346 '*': { 2347 wysiwygAdapter: 'mage/adminhtml/wysiwyg/tiny_mce/tinymceAdapter' 2348 } 2349 } 2350 });</script>
2350<script> require.config({ 2351 paths: { 2352 googleMaps: 'https\u003A\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs\u003Fv\u003D3.53\u0026key\u003D' 2353 }, 2354 config: { 2355 'Magento_PageBuilder/js/utils/map': { 2356 style: '', 2357 }, 2358 'Magento_PageBuilder/js/content-type/map/preview': { 2359 apiKey: '', 2360 apiKeyErrorMessage: 'You\u0020must\u0020provide\u0020a\u0020valid\u0020\u003Ca\u0020href\u003D\u0027https\u003A\u002F\u002Fwww.centerpointarchery.com\u002Fadminhtml\u002Fsystem_config\u002Fedit\u002Fsection\u002Fcms\u002F\u0023cms_pagebuilder\u0027\u0020target\u003D\u0027_blank\u0027\u003EGoogle\u0020Maps\u0020API\u0020key\u003C\u002Fa\u003E\u0020to\u0020use\u0020a\u0020map.' 2361 }, 2362 'Magento_PageBuilder/js/form/element/map': { 2363 apiKey: '', 2364 apiKeyErrorMessage: 'You\u0020must\u0020provide\u0020a\u0020valid\u0020\u003Ca\u0020href\u003D\u0027https\u003A\u002F\u002Fwww.centerpointarchery.com\u002Fadminhtml\u002Fsystem_config\u002Fedit\u002Fsection\u002Fcms\u002F\u0023cms_pagebuilder\u0027\u0020target\u003D\u0027_blank\u0027\u003EGoogle\u0020Maps\u0020API\u0020key\u003C\u002Fa\u003E\u0020to\u0020use\u0020a\u0020map.' 2365 }, 2366 } 2367 });</script>
2367<script> 2368 require.config({ 2369 shim: { 2370 'Magento_PageBuilder/js/utils/map': { 2371 deps: ['googleMaps'] 2372 } 2373 } 2374 });</script>
2374 2375 2376 2377 2378
2379<script type="text/x-magento-init"> 2380 { 2381 "*": { 2382 "AvantLink_Tracking/js/avantlink_data": { 2383 "orderData": { 2384 "orderId":"", 2385 "subTotal":"0", 2386 "couponCode":"", 2387 "currencyCode":"", 2388 "customerId":"", 2389 "taxAmount": "", 2390 "countryCode":"", 2391 "stateCode":"", 2392 "items": [] }, 2393 "merchantId": "35605", 2394 "order_id": [] } 2395 } 2396 } 2397</script>
2397 2398 2399 2400<div class="page-wrapper"><header class="page-header"><div class="header content">
2400<script type="text/javascript"> 2401 (function(a,b,c,d){ 2402 a='https://www.mczbf.com/tags/249290243492/tag.js?cookieUrl=https%3A%2F%2Fwww.centerpointarchery.com%2Fcookie%2Findex%2Findex'; 2403 b=document;c='script';d=b.createElement(c);d.src=a; 2404 d.type='text/java'+c;d.async=true; 2405 d.id='cjapitag'; 2406 a=b.getElementsByTagName(c)[0];a.parentNode.insertBefore(d,a) 2407 })(); 2408 2409</script>
2409 2410 2411 2412<div class="navigation_top_wrapper"><div class="navigation_top"><div class="left_links"><span data-action="toggle-nav" class="action nav-toggle"><span>Toggle Nav</span></span> 2413<a 2414 class="logo" 2415 href="https://www.centerpointarchery.com/" 2416 title="CenterPoint Archery" 2417 aria-label="store logo"> 2418 <img src="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/images/centerpoint-logo.svg" 2419 title="CenterPoint Archery" 2420 alt="CenterPoint Archery" 2421 /> 2422</a> 2423</div><div class="right_links"><div class="block block-search"> 2424 <div class="block block-title"><strong>Search</strong></div> 2425 <div class="block block-content"> 2426 <form class="form minisearch" id="search_mini_form" 2427 action="https://www.centerpointarchery.com/catalogsearch/result/" method="get"> 2428 <div class="field search"> 2429 <label class="label" for="search" data-role="minisearch-label"> 2430 <svg class="search-ico"xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21.46 21.46" class="Search"><defs><style>.cls-1{fill:none!important;stroke:#fff;stroke-miterlimit:10;stroke-width:1.67px;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Nav"><g id="Interface-Essential_Search_search-1" data-name="Interface-Essential / Search / search-1"><g id="Group_365" data-name="Group 365"><g id="search-1"><path id="Oval_280" data-name="Oval 280" class="cls-1" d="M9.55,18.26A8.72,8.72,0,1,0,.83,9.55,8.71,8.71,0,0,0,9.55,18.26Z"></path><path id="Shape_1861" data-name="Shape 1861" class="cls-1" d="M20.88,20.88l-5.17-5.17"></path></g></g></g></g></g></svg> 2431 </label> 2432 <div id="search-360" class="search-360"> 2433 <section role="search" data-ss360="true"> 2434 <input type="search" id="searchBox" placeholder="Search..."> 2435 <button id="searchButton"></button> 2436 </section> 2437 </div> 2438 </div> 2439 <div class="actions"> 2440 <button type="submit" 2441 title="Search" 2442 class="action search" 2443 aria-label="Search" 2444 > 2445 <span>Search</span> 2446 </button> 2447 </div> 2448 </form> 2449 </div> 2450</div>
2451<script type="text/javascript"> 2452 2453var ss360Config = { 2454 searchBox: { 2455 placeholder: "Searchâ¦", 2456 selector: "#searchBox", 2457 searchButton: "#searchButton" 2458 }, 2459 results: { 2460 integrationType: "layover" 2461 }, 2462 siteId: "dev.centerpointarchery.com" 2463} 2464</script>
vendor: 1 bytes, line 2464
2464
2465<script type="text/x-magento-init"> 2466{ 2467 "#search_mini_form": { 2468 "Magento_Search/js/search-form": { 2469 } 2470 } 2471} 2472</script>
vendor: 1 bytes, line 2472
2472
2473<script async src="https://js.sitesearch360.com/plugin/bundle/12653.js"></script>
2473 2474<a href="https://www.centerpointarchery.com/customer/account/" class="myaccount"> 2475 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21.71 21.71" class="User"><defs><style>.cls-1{fill:none!important;stroke:#fff;stroke-miterlimit:10;stroke-width:1.67px;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Nav"><g id="Users_Geometric-Close-Up-Single-User-Neutral_single-neutral-circle" data-name="Users / Geometric-Close-Up-Single-User-Neutral / single-neutral-circle"><g id="Group_306" data-name="Group 306"><g id="Light_306" data-name="Light 306"><path id="Oval_501" data-name="Oval 501" class="cls-1" d="M10.85,20.88a10,10,0,1,0-10-10A10,10,0,0,0,10.85,20.88Z"></path><path id="Oval_502" data-name="Oval 502" class="cls-1" d="M10.85,11.73A3.71,3.71,0,1,0,7.15,8,3.71,3.71,0,0,0,10.85,11.73Z"></path><path id="Shape_1222" data-name="Shape 1222" class="cls-1" d="M16.36,16.52a6.09,6.09,0,0,0-11,0"></path></g></g></g></g></g></svg> 2476</a> 2477 2478<div data-block="minicart" class="minicart-wrapper" id="minicart"> 2479 <a 2480 class="action showcart" 2481 href="https://www.centerpointarchery.com/checkout/cart/" 2482 data-bind="scope: 'minicart_content'" 2483 title="My Cart" 2484 > 2485 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21.11 20.9"> 2486 <g id="Layer_2" data-name="Layer 2"> 2487 <g id="Nav"> 2488 <path class="cls-1" d="M0,.77H2.76L4.15,6.3H20l-2.76,8.29H6.91A1.38,1.38,0,0,0,5.53,16h0a1.38,1.38,0,0,0,1.38,1.38H18"></path> 2489 <circle class="cls-1" cx="6.91" cy="18.74" r="1.38"></circle><circle class="cls-1" cx="15.9" cy="18.74" r="1.38"></circle> 2490 </g> 2491 </g> 2492 </svg> 2493 <span class="counter qty empty" 2494 data-bind="css: { empty: !!getCartParam('summary_count') == false && !isLoading() }, 2495 blockLoader: isLoading"> 2496 <span class="counter-number"><!-- ko text: getCartParam('summary_count') --><!-- /ko --></span> 2497 <span class="counter-label"> 2498 <!-- ko if: getCartParam('summary_count') --> 2499 <!-- ko text: getCartParam('summary_count') --><!-- /ko --> 2500 <!-- ko i18n: 'items' --><!-- /ko --> 2501 <!-- /ko --> 2502 </span> 2503 </span> 2504 </a> 2505 <div class="block block-minicart" 2506 data-role="dropdownDialog" 2507 data-mage-init='{"dropdownDialog":{ 2508 "appendTo":"[data-block=minicart]", 2509 "triggerTarget":".showcart", 2510 "timeout": "2000", 2511 "closeOnMouseLeave": false, 2512 "closeOnEscape": true, 2513 "triggerClass":"active", 2514 "parentClass":"active", 2515 "buttons":[]}}'> 2516 <div id="minicart-content-wrapper" data-bind="scope: 'minicart_content'"> 2517 <!-- ko template: getTemplate() --><!-- /ko --> 2518 </div> 2519 </div> 2520
2520<script>window.checkout = {"shoppingCartUrl":"https:\/\/www.centerpointarchery.com\/checkout\/cart\/","checkoutUrl":"https:\/\/www.centerpointarchery.com\/checkout\/","updateItemQtyUrl":"https:\/\/www.centerpointarchery.com\/checkout\/sidebar\/updateItemQty\/","removeItemUrl":"https:\/\/www.centerpointarchery.com\/checkout\/sidebar\/removeItem\/","imageTemplate":"Magento_Catalog\/product\/image_with_borders","baseUrl":"https:\/\/www.centerpointarchery.com\/","minicartMaxItemsVisible":3,"websiteId":"4","maxItemsToDisplay":10,"storeId":"4","storeGroupId":"4","customerLoginUrl":"https:\/\/www.centerpointarchery.com\/customer\/account\/login\/","isRedirectRequired":false,"autocomplete":"off","credova_active_status":false,"cred_mode":"0","cred_store":"BGV000","min_amt":50,"max_amt":10000,"mini_ala":"1","cart_ala":"1","white_logo":"0","captcha":{"user_login":{"isCaseSensitive":false,"imageHeight":50,"imageSrc":"","refreshUrl":"https:\/\/www.centerpointarchery.com\/captcha\/refresh\/","isRequired":false,"timestamp":1791303984}}}</script>
2520
2520<script type="text/x-magento-init"> 2521 { 2522 "[data-block='minicart']": { 2523 "Magento_Ui/js/core/app": {"components":{"minicart_content":{"children":{"subtotal.container":{"children":{"subtotal":{"children":{"subtotal.totals":{"config":{"display_cart_subtotal_incl_tax":0,"display_cart_subtotal_excl_tax":1,"template":"Magento_Tax\/checkout\/minicart\/subtotal\/totals"},"children":{"subtotal.totals.msrp":{"component":"Magento_Msrp\/js\/view\/checkout\/minicart\/subtotal\/totals","config":{"displayArea":"minicart-subtotal-hidden","template":"Magento_Msrp\/checkout\/minicart\/subtotal\/totals"}}},"component":"Magento_Tax\/js\/view\/checkout\/minicart\/subtotal\/totals"}},"component":"uiComponent","config":{"template":"Magento_Checkout\/minicart\/subtotal"}}},"component":"uiComponent","config":{"displayArea":"subtotalContainer"}},"item.renderer":{"component":"Magento_Checkout\/js\/view\/cart-item-renderer","config":{"displayArea":"defaultRenderer","template":"Magento_Checkout\/minicart\/item\/default"},"children":{"item.image":{"component":"Magento_Catalog\/js\/view\/image","config":{"template":"Magento_Catalog\/product\/image","displayArea":"itemImage"}},"checkout.cart.item.price.sidebar":{"component":"uiComponent","config":{"template":"Magento_Checkout\/minicart\/item\/price","displayArea":"priceSidebar"}},"checkout.cart.item.aw-onsale.label.renderer":{"component":"uiComponent","config":{"template":"Aheadworks_OnSale\/view\/label\/renderer\/minicart","displayArea":"priceSidebar"}}}},"amasty.discount.container":{"component":"uiComponent","config":{"displayArea":"subtotalContainer"},"children":{"discount":{"component":"Magento_Checkout\/js\/view\/checkout\/minicart\/subtotal\/totals","config":{"template":"Amasty_MiniCartDiscountInfo\/minicart\/discount","imports":{"displaySubtotal":"minicart_content.subtotal.container.subtotal.subtotal.totals:displaySubtotal"}},"children":{"discount.totals":{"component":"Magento_Checkout\/js\/view\/checkout\/minicart\/subtotal\/totals","config":{"template":"Amasty_MiniCartDiscountInfo\/minicart\/discount\/totals"}}}}}},"extra_info":{"component":"uiComponent","config":{"displayArea":"extraInfo"},"children":{"credova_aslowas":{"component":"Credova_Financial\/js\/view\/minicart","config":{"template":"Credova_Financial\/minicart\/info"}},"related_products":{"component":"VelocityOutdoor_RelatedItemMiniCart\/js\/view\/minicart\/related-products-component"}}},"promotion":{"component":"uiComponent","config":{"displayArea":"promotion"}}},"config":{"itemRenderer":{"default":"defaultRenderer","simple":"defaultRenderer","virtual":"defaultRenderer"},"template":"Magento_Checkout\/minicart\/content"},"component":"Magento_Checkout\/js\/view\/minicart"}},"types":[]} }, 2524 "*": { 2525 "Magento_Ui/js/block-loader": "https\u003A\u002F\u002Fwww.centerpointarchery.com\u002Fstatic\u002Fversion1790000787\u002Ffrontend\u002FCenterpoint\u002Fdefault\u002Fen_US\u002Fimages\u002Floader\u002D1.gif" 2526 } 2527 } 2528 </script>
2528 2529
2529<script type="text/javascript"> 2530 require(['jquery','Magento_Ui/js/lib/view/utils/async'], function($){ 2531 $.async('.amrelated-grid-wrapper', function(related) { 2532 $(related).insertBefore(".minicart-footer"); 2533 }); 2534 }) 2535 </script>
2535 2536</div> 2537<div id="nav-sections-menu" data-status="closed" > 2538 <button type="button" class="nav-sections-trigger" data-sections-menu-trigger > 2539 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.96 12.64" class="Menu open"> 2540 <defs><style>.cls-1{fill:none;stroke:#fff;stroke-miterlimit:10;stroke-width:1.67px;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Nav"><g id="Group_29" data-name="Group 29"><g id="navigation-menu"><path id="Shape_90" data-name="Shape 90" class="cls-1" d="M20,.83H0"></path><path id="Shape_91" data-name="Shape 91" class="cls-1" d="M20,6.32H0"></path><path id="Shape_92" data-name="Shape 92" class="cls-1" d="M20,11.81H0"></path></g></g></g></g> 2541 </svg> 2542 <svg class="close" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 25.4 25.4" style="enable-background:new 0 0 25.4 25.4;" xml:space="preserve"> 2543 <polygon class="st0" points="25.4,1.4 24,0 12.7,11.3 1.4,0 0,1.4 11.3,12.7 0,24 1.4,25.4 12.7,14.1 24,25.4 25.4,24 14.1,12.7 "/> 2544 </svg> 2545 </button> 2546 <div class="nav-sections-menu" data-sections-menu > 2547 <button 2548 type="button" 2549 title="Close" 2550 class="close" 2551 data-sections-menu-close 2552 > 2553 <img 2554 src="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/images/icons/icon-close.svg" 2555 alt="X" 2556 width="25" height="25" 2557 /> 2558 </button> 2559 <div class="mobile"> 2560 2561 <div class="megamenu-container-2__mobile"> 2562 <svg 2563 title="icon-arrow-down" 2564 class="megamenu-container-2__mobile-icon" 2565 > 2566 <use xlink:href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/images/icon-sprite.svg#icon-mobile-menu"></use> 2567 </svg> 2568 </div> 2569 2570 <nav 2571 class="megamenu-container-2" 2572 data-mage-init='{"snowdogMenu": {}}' 2573 > 2574 <ul class="megamenu-container-2__list"> 2575 <li class="megamenu-container-2__item megamenu-container-2__item--parent"> 2576 <div class="megamenu-container-2__link_wapper_title" > 2577<a 2578 href="https://www.centerpointarchery.com/bows" 2579 class="megamenu-container-2__link" 2580 data-menu="menu-20"> 2581 Bows</a> 2582</div> 2583 <ul class="megamenu-container-2__inner-list megamenu-container-2__inner-list--level1" data-menu="menu-20"> 2584 2585 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--all megamenu-container-2__inner-item--level1"> 2586 <div class="megamenu-container-2__inner-link_wapper_title" > 2587<a 2588 href="https://www.centerpointarchery.com/bows" 2589 class="megamenu-container-2__inner-link" 2590 > 2591 View All</a> 2592</div> 2593 </li> 2594 2595 2596 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level1 megamenu-container-2__inner-item--parent subactegory_item compound"> 2597 <div class="megamenu-container-2__inner-link_wapper_title" > 2598<a 2599 href="https://www.centerpointarchery.com/bows/crossbows" 2600 class="megamenu-container-2__inner-link" 2601 data-menu="menu-21"> 2602 Crossbows</a> 2603</div> 2604 <ul class="megamenu-container-2__inner-list megamenu-container-2__inner-list--level2" data-menu="menu-21"> 2605 2606 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--all megamenu-container-2__inner-item--level2"> 2607 <div class="megamenu-container-2__inner-link_wapper_title" > 2608<a 2609 href="https://www.centerpointarchery.com/bows/crossbows" 2610 class="megamenu-container-2__inner-link" 2611 > 2612 View All</a> 2613</div> 2614 </li> 2615 2616 2617 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2 new-product"> 2618 2619<a 2620 href="https://www.centerpointarchery.com/amped-g2d" 2621 class="megamenu-container-2__inner-link" 2622 data-menu="menu-292"> 2623 Amped G2D</a> 2624 </li> 2625 2626 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 2627 2628<a 2629 href="https://www.centerpointarchery.com/at400" 2630 class="megamenu-container-2__inner-link" 2631 data-menu="menu-193"> 2632 AT400</a> 2633 </li> 2634 2635 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 2636 <a 2637 href="/hellion-400-crossbow" 2638 data-menu="menu-300" class="megamenu-container-2__inner-link" > 2639 Hellion 400 </a> 2640 2641 </li> 2642 2643 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 2644 2645<a 2646 href="https://www.centerpointarchery.com/hornet-crossbow" 2647 class="megamenu-container-2__inner-link" 2648 data-menu="menu-28"> 2649 Hornet</a> 2650 </li> 2651 2652 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2 new-product"> 2653 2654<a 2655 href="https://www.centerpointarchery.com/sinister-430d" 2656 class="megamenu-container-2__inner-link" 2657 data-menu="menu-291"> 2658 Sinister 430D</a> 2659 </li> 2660 2661 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2 new-product"> 2662 2663<a 2664 href="https://www.centerpointarchery.com/sniper-g4d" 2665 class="megamenu-container-2__inner-link" 2666 data-menu="menu-294"> 2667 Sniper G4D</a> 2668 </li> 2669 2670 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 2671 <div class="megamenu-container-2__inner-link_wapper_title" > 2672<a 2673 href="https://www.centerpointarchery.com/bows/crossbows" 2674 class="megamenu-container-2__inner-link" 2675 data-menu="menu-35"> 2676 SHOP ALL CROSSBOWS</a> 2677</div> 2678 </li> 2679 </ul> 2680 </li> 2681 2682 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level1 megamenu-container-2__inner-item--parent subactegory_item"> 2683 <div class="megamenu-container-2__inner-link_wapper_title" > 2684<a 2685 href="https://www.centerpointarchery.com/bows/bowfishing" 2686 class="megamenu-container-2__inner-link" 2687 data-menu="menu-43"> 2688 Bowfishing</a> 2689</div> 2690 <ul class="megamenu-container-2__inner-list megamenu-container-2__inner-list--level2" data-menu="menu-43"> 2691 2692 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--all megamenu-container-2__inner-item--level2"> 2693 <div class="megamenu-container-2__inner-link_wapper_title" > 2694<a 2695 href="https://www.centerpointarchery.com/bows/bowfishing" 2696 class="megamenu-container-2__inner-link" 2697 > 2698 View All</a> 2699</div> 2700 </li> 2701 2702 2703 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 2704 2705<a 2706 href="https://www.centerpointarchery.com/typhon-bowfishing-kit" 2707 class="megamenu-container-2__inner-link" 2708 data-menu="menu-44"> 2709 Typhonâ¢</a> 2710 </li> 2711 2712 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 2713 2714<a 2715 href="https://www.centerpointarchery.com/typhontm-x1-bowfishing-kit" 2716 class="megamenu-container-2__inner-link" 2717 data-menu="menu-83"> 2718 Typhon⢠X1</a> 2719 </li> 2720 2721 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 2722 2723<a 2724 href="https://www.centerpointarchery.com/bow-fishing-arrow-2-pack-kit" 2725 class="megamenu-container-2__inner-link" 2726 data-menu="menu-84"> 2727 Bowfishing Arrows</a> 2728 </li> 2729 2730 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 2731 <div class="megamenu-container-2__inner-link_wapper_title" > 2732<a 2733 href="https://www.centerpointarchery.com/bows/bowfishing" 2734 class="megamenu-container-2__inner-link" 2735 data-menu="menu-86"> 2736 SHOP ALL BOWFISHING</a> 2737</div> 2738 </li> 2739 </ul> 2740 </li> 2741 2742 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level1 megamenu-container-2__inner-item--parent subactegory_item"> 2743 <div class="megamenu-container-2__inner-link_wapper_title" > 2744<a 2745 href="https://www.centerpointarchery.com/bows/youth-bows" 2746 class="megamenu-container-2__inner-link" 2747 data-menu="menu-47"> 2748 Youth Bows</a> 2749</div> 2750 <ul class="megamenu-container-2__inner-list megamenu-container-2__inner-list--level2" data-menu="menu-47"> 2751 2752 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--all megamenu-container-2__inner-item--level2"> 2753 <div class="megamenu-container-2__inner-link_wapper_title" > 2754<a 2755 href="https://www.centerpointarchery.com/bows/youth-bows" 2756 class="megamenu-container-2__inner-link" 2757 > 2758 View All</a> 2759</div> 2760 </li> 2761 2762 2763 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 2764 2765<a 2766 href="https://www.centerpointarchery.com/tatanka-youth-recurve-bow" 2767 class="megamenu-container-2__inner-link" 2768 data-menu="menu-48"> 2769 Tatanka®</a> 2770 </li> 2771 2772 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 2773 <div class="megamenu-container-2__inner-link_wapper_title" > 2774<a 2775 href="https://www.centerpointarchery.com/bows/youth-bows" 2776 class="megamenu-container-2__inner-link" 2777 data-menu="menu-51"> 2778 SHOP ALL YOUTH BOWS</a> 2779</div> 2780 </li> 2781 </ul> 2782 </li> 2783 </ul> 2784 </li> 2785 <li class="megamenu-container-2__item "> 2786 <div class="megamenu-container-2__link_wapper_title" > 2787<a 2788 href="https://www.centerpointarchery.com/arrows" 2789 class="megamenu-container-2__link" 2790 data-menu="menu-52"> 2791 Arrows</a> 2792</div> 2793 </li> 2794 <li class="megamenu-container-2__item "> 2795 <div class="megamenu-container-2__link_wapper_title" > 2796<a 2797 href="https://www.centerpointarchery.com/accessories" 2798 class="megamenu-container-2__link" 2799 data-menu="menu-58"> 2800 Accessories</a> 2801</div> 2802 </li> 2803 <li class="megamenu-container-2__item "> 2804 <div class="megamenu-container-2__link_wapper_title" > 2805<a 2806 href="https://www.centerpointarchery.com/parts" 2807 class="megamenu-container-2__link" 2808 data-menu="menu-53"> 2809 Service and Parts</a> 2810</div> 2811 </li> 2812 <li class="megamenu-container-2__item "> 2813 <div class="megamenu-container-2__link_wapper_title" > 2814<a 2815 href="https://www.centerpointarchery.com/apparel" 2816 class="megamenu-container-2__link" 2817 data-menu="menu-59"> 2818 Apparel</a> 2819</div> 2820 </li> 2821 <li class="megamenu-container-2__item accent-color"> 2822 <div class="megamenu-container-2__link_wapper_title" > 2823<a 2824 href="https://www.centerpointarchery.com/promotions/current-promotions" 2825 class="megamenu-container-2__link" 2826 data-menu="menu-87"> 2827 Deals</a> 2828</div> 2829 </li> 2830 <li class="megamenu-container-2__item "> 2831 2832<a 2833 href="https://www.centerpointarchery.com/technology" 2834 class="megamenu-container-2__link" 2835 data-menu="menu-54"> 2836 Technology</a> 2837 </li> 2838 <li class="megamenu-container-2__item "> 2839 2840<a 2841 href="https://www.centerpointarchery.com/about-centerpoint" 2842 class="megamenu-container-2__link" 2843 data-menu="menu-55"> 2844 About</a> 2845 </li> 2846 <li class="megamenu-container-2__item "> 2847 <a 2848 href="https://www.centerpointarchery.com/blog" 2849 data-menu="menu-56" class="megamenu-container-2__link" > 2850 Blog </a> 2851 2852 </li> 2853 </ul> 2854 <div class="megamenu-container-2__mobile-bg"></div> 2855 </nav> 2856 </div> 2857 <div class="desktop"> 2858 2859 <section class="footer-menu-links"> 2860 <div class="links-list"> 2861 <div data-role="collapsible"> 2862 <div data-role="trigger"> 2863 <div class="links-title">PRODUCTS</div> 2864 </div> 2865 </div> 2866 <div data-role="content"> 2867 <ul class="content"> 2868 <li> 2869 <a href="https://www.centerpointarchery.com/bows">BOWS</a> 2870 <ul> 2871 <li><a href="https://www.centerpointarchery.com/bows/crossbows">CROSSBOWS</a></li> 2872 <li><a href="https://www.centerpointarchery.com/bows/recurve-hunting-bows">RECURVE HUNTING BOWS</a></li> 2873 <li><a href="https://www.centerpointarchery.com/bows/bowfishing">BOWFISHING</a></li> 2874 <li><a href="https://www.centerpointarchery.com/bows/youth-bows">YOUTH BOWS</a></li> 2875 </ul> 2876 </li> 2877 <li><a href="https://www.centerpointarchery.com/arrows">ARROWS</a></li> 2878 <li><a href="https://www.centerpointarchery.com/gear">GEAR</a> 2879 <ul> 2880 <li><a href="https://www.centerpointarchery.com/accessories"> ACCESSORIES</a></li> 2881 </ul> 2882 </li> 2883<li><a href="https://www.centerpointarchery.com/centerpoint-egift-card">eGift Cards</a></li> 2884 2885 </ul> 2886 </div> 2887 </div> 2888 <div class="links-list"> 2889 <div data-role="collapsible"> 2890 <div data-role="trigger"> 2891 <div class="links-title">SUPPORT</div> 2892 </div> 2893 </div> 2894 <div data-role="content"> 2895 <ul class="content"> 2896 <li><a href="https://www.centerpointarchery.com/support/contact-support">CONTACT SUPPORT</a></li> 2897 <li><a href="https://www.centerpointarchery.com/support/faq">FAQS</a></li> 2898 <li><a href="https://www.centerpointarchery.com/support/product-registration">PRODUCT REGISTRATION</a></li> 2899 <li><a href="https://www.centerpointarchery.com/support/shipping">SHIPPING</a></li> 2900 <li><a href="https://www.centerpointarchery.com/owners-manuals">OWNER'S MANUALS</a></li> 2901 <li><a href="https://www.centerpointarchery.com/videos">VIDEOS</a></li> 2902 <li><a href="https://www.centerpointarchery.com/safety">SAFETY</a></li> 2903 <li><a href="https://www.centerpointarchery.com/support/warranty-info">WARRANTY INFO</a></li> 2904<li><a href="https://centerpointarcheryrebates.com/">REBATES</a></li> 2905 </ul> 2906 </div> 2907 2908 </div> 2909 <div class="links-list"> 2910 <div data-rol
2910e="collapsible"> 2911 <div data-role="trigger"> 2912 <div class="links-title">COMPANY</div> 2913 </div> 2914 </div> 2915 <div data-role="content"> 2916 <ul class="content"> 2917 <li><a href="https://www.centerpointarchery.com/about-centerpoint">ABOUT</a></li> 2918 <li><a href="https://www.centerpointarchery.com/the-elk-hunt">THE ELK HUNT</a></li> 2919 <li><a href="https://www.centerpointarchery.com/about-centerpoint/#our-partners">OUR PARTNERS</a></li> 2920 <li><a href="https://www.centerpointarchery.com/blog">BLOG</a></li> 2921 <li><a href="https://www.centerpointarchery.com/become-a-dealer">BECOME A DEALER</a></li> 2922 <li><a href="https://www.centerpointarchery.com/affiliate-program">AFFILIATE PROGRAM</a></li> 2923 <li><a href="https://www.centerpointarchery.com/dealer-locator">DEALER LOCATOR</a></li> 2924 <li><a href="https://www.centerpointarchery.com/careers">CAREERS</a></li> 2925 <li><a href="https://velocity-outdoor.com">A VELOCITY OUTDOOR COMPANY</a></li> 2926 </ul> 2927 </div> 2928 </div> 2929 </section> 2930 <a href="https://www.centerpointarchery.com/customer/account/" class="account"> 2931 <img 2932 src="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/images/icons/icon-profile-noborder.svg" 2933 alt="Account" 2934 width="20" height="20" 2935 /> 2936 <span>Account</span> 2937 </a> 2938 </div> 2939 <div class="menu-footer"> 2940 <div class="footer_social"> 2941 <label>Follow Us!</label> 2942 <div class="social-links"> 2943 <a href="https://www.youtube.com/channel/UCIq03klIyTESYCSgFXNVKVw"> 2944 2945 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 69.5 70.2" style="enable-background:new 0 0 69.5 70.2;" xml:space="preserve"> 2946 <g> 2947 <polygon class="st0" points="30.6,42.1 42.5,35.2 30.6,28.3 " /> 2948 <path class="st0" d="M35.2-0.1c-19,0-34.5,15.4-34.5,34.4v1.8c0,19,15.4,34.5,34.5,34.5c19,0,34.5-15.4,34.5-34.5v-1.8 2949 C69.6,15.3,54.2-0.1,35.2-0.1 M57.2,46.3c-0.5,2-2.1,3.5-4.1,4.1c-3.6,1-18,1-18,1s-14.4,0-18-1c-2-0.5-3.5-2.1-4.1-4.1 2950 c-1-3.6-1-11.1-1-11.1s0-7.5,1-11.1c0.5-2,2.1-3.5,4.1-4.1c3.6-1,18-1,18-1s14.4,0,18,1c2,0.5,3.5,2.1,4.1,4.1c1,3.6,1,11.1,1,11.1 2951 S58.1,42.7,57.2,46.3" /> 2952 </g> 2953 </svg> 2954 </a> 2955 2956 <a href="https://www.facebook.com/CenterPointArchery"> 2957 2958 2959 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 69.5 70.2" style="enable-background:new 0 0 69.5 70.2;" xml:space="preserve"> 2960 2961 <g> 2962 <path class="st0" d="M35.2,0.3C15.7,0.3,0,16,0,35.4C0,53,12.8,67.5,29.7,70.2V45.6h-8.9V35.4l0,0l0,0h8.9v-7.7 2963 c0-8.3,4.6-13.1,11.8-13.6c0.5,0,1-0.1,1.5-0.1c3.9,0,7.9,0.7,7.9,0.7v8.7l0,0l0,0h-4.4c-0.3,0-0.5,0-0.8,0 2964 c-3.8,0.3-4.9,2.9-4.9,5.5v6.6h9.7l-1.6,10.2l0,0h-8.2v24.6C57.5,67.5,70.3,53,70.3,35.4C70.3,16,54.6,0.3,35.2,0.3" /> 2965 </g> 2966 </svg> 2967 2968 </a> 2969 2970 <a href="https://www.instagram.com/centerpoint_archery"> 2971 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 69.5 70.2" style="enable-background:new 0 0 69.5 70.2;" xml:space="preserve"> 2972 2973 <g> 2974 <path class="st0" d="M41.1,35.2c0-3.3-2.6-5.9-5.9-5.9c-3.3,0-5.9,2.6-5.9,5.9s2.6,5.9,5.9,5.9C38.5,41.1,41.1,38.5,41.1,35.2" /> 2975 <path class="st0" d="M49.2,19.7H21.4c-0.9,0-1.6,0.7-1.
29756,1.6v12.3h6.6c0.8-4.2,4.5-7.5,8.9-7.5s8.2,3.2,8.9,7.5h6.6V21.3 2976 C50.8,20.4,50.1,19.7,49.2,19.7 M46,27.2c-1.2,0-2.1-1-2.1-2.1c0-1.2,1-2.1,2.1-2.1c1.2,0,2.1,1,2.1,2.1 2977 C48.1,26.3,47.1,27.2,46,27.2" /> 2978 <path class="st0" d="M35.3,44.3c-4.5,0-8.2-3.2-8.9-7.5h-6.6v12.3c0,0.9,0.7,1.6,1.6,1.6h27.8c0.9,0,1.6-0.7,1.6-1.6V36.8h-6.6 2979 C43.4,41.1,39.7,44.3,35.3,44.3" /> 2980 <path class="st0" d="M35.2,0C16.2,0,0.8,15.4,0.8,34.3v1.8c0,19,15.4,34.3,34.3,34.3c19,0,34.3-15.4,34.3-34.3v-1.8 2981 C69.5,15.4,54.1,0,35.2,0 M54,49.1c0,2.6-2.2,4.8-4.8,4.8H21.4c-2.6,0-4.8-2.2-4.8-4.8V21.3c0-2.6,2.2-4.8,4.8-4.8h27.8 2982 c2.6,0,4.8,2.2,4.8,4.8C54,21.3,54,49.1,54,49.1z" /> 2983 </g> 2984 </svg> 2985 2986 </a> 2987 2988 </div> 2989 2990</div> 2991 <section class="footer-copyright"> 2992 <div class="iso"> 2993 <img src="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/images/logo-no-text.svg" 2994 alt="Center Point Archery" 2995 width="34" height="25" 2996 /> 2997 </div> 2998 <div class="copyright-text"> 2999 © 2026 CenterPoint Archery. 3000 <br /> 3001 <span>ALL RIGHTS RESERVED.</span> 3002 </div> 3003 <div class="links"> 3004 <a href="/terms-of-use">Terms of Use</a> | 3005 <a href="/privacy-policy">Privacy Policy</a> |
3006 <a href="#" class="iubenda-cs-preferences-link">Your Privacy Choices</a> | 3007 <a href="#" class="iubenda-cs-uspr-link">Notice at Collection</a> 3008 </div> 3009 </section> 3010 </div> 3011 </div> 3012</div>
3013<script type="text/x-magento-init"> 3014{ 3015 "#nav-sections-menu": { 3016 "Magento_Theme/js/nav-sections": { 3017 } 3018 } 3019} 3020</script>
3020 3021</div></div></div><div class="navigation_bottom_wrapper"><div class="navigation_bottom"> 3022 <div class="megamenu-container-2__mobile"> 3023 <svg 3024 title="icon-arrow-down" 3025 class="megamenu-container-2__mobile-icon" 3026 > 3027 <use xlink:href="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/images/icon-sprite.svg#icon-mobile-menu"></use> 3028 </svg> 3029 </div> 3030 3031 <nav 3032 class="megamenu-container-2" 3033 data-mage-init='{"snowdogMenu": {}}' 3034 > 3035 <ul class="megamenu-container-2__list"> 3036 <li class="megamenu-container-2__item megamenu-container-2__item--parent"> 3037 <div class="megamenu-container-2__link_wapper_title" > 3038<a 3039 href="https://www.centerpointarchery.com/bows" 3040 class="megamenu-container-2__link" 3041 data-menu="menu-20"> 3042 Bows</a> 3043</div> 3044 <ul class="megamenu-container-2__inner-list megamenu-container-2__inner-list--level1" data-menu="menu-20"> 3045 3046 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--all megamenu-container-2__inner-item--level1"> 3047 <div class="megamenu-container-2__inner-link_wapper_title" > 3048<a 3049 href="https://www.centerpointarchery.com/bows" 3050 class="megamenu-container-2__inner-link" 3051 > 3052 View All</a> 3053</div> 3054 </li> 3055 3056 3057 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level1 megamenu-container-2__inner-item--parent subactegory_item compound"> 3058 <div class="megamenu-container-2__inner-link_wapper_title" > 3059<a 3060 href="https://www.centerpointarchery.com/bows/crossbows" 3061 class="megamenu-container-2__inner-link" 3062 data-menu="menu-21"> 3063 Crossbows</a> 3064</div> 3065 <ul class="megamenu-container-2__inner-list megamenu-container-2__inner-list--level2" data-menu="menu-21"> 3066 3067 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--all megamenu-container-2__inner-item--level2"> 3068 <div class="megamenu-container-2__inner-link_wapper_title" > 3069<a 3070 href="https://www.centerpointarchery.com/bows/crossbows" 3071 class="megamenu-container-2__inner-link" 3072 > 3073 View All</a> 3074</div> 3075 </li> 3076 3077 3078 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2 new-product"> 3079 3080<a 3081 href="https://www.centerpointarchery.com/amped-g2d" 3082 class="megamenu-container-2__inner-link" 3083 data-menu="menu-292"> 3084 Amped G2D</a> 3085 </li> 3086 3087 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 3088 3089<a 3090 href="https://www.centerpointarchery.com/at400" 3091 class="megamenu-container-2__inner-link" 3092 data-menu="menu-193"> 3093 AT400</a> 3094 </li> 3095 3096 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 3097 <a 3098 href="/hellion-400-crossbow" 3099 data-menu="menu-300" class="megamenu-container-2__inner-link" > 3100 Hellion 400 </a> 3101 3102 </li> 3103 3104 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 3105 3106<a 3107 href="https://www.centerpointarchery.com/hornet-crossbow" 3108 class="megamenu-container-2__inner-link" 3109 data-menu="menu-28"> 3110 Hornet</a> 3111 </li> 3112 3113 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2 new-product"> 3114 3115<a 3116 href="https://www.centerpointarchery.com/sinister-430d" 3117 class="megamenu-container-2__inner-link" 3118 data-menu="menu-291"> 3119 Sinister 430D</a> 3120 </li> 3121 3122 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2 new-product"> 3123 3124<a 3125 href="https://www.centerpointarchery.com/sniper-g4d" 3126 class="megamenu-container-2__inner-link" 3127 data-menu="menu-294"> 3128 Sniper G4D</a> 3129 </li> 3130 3131 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 3132 <div class="megamenu-container-2__inner-link_wapper_title" > 3133<a 3134 href="https://www.centerpointarchery.com/bows/crossbows" 3135 class="megamenu-container-2__inner-link" 3136 data-menu="menu-35"> 3137 SHOP ALL CROSSBOWS</a> 3138</div> 3139 </li> 3140 </ul> 3141 </li> 3142 3143 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level1 megamenu-container-2__inner-item--parent subactegory_item"> 3144 <div class="megamenu-container-2__inner-link_wapper_title" > 3145<a 3146 href="https://www.centerpointarchery.com/bows/bowfishing" 3147 class="megamenu-container-2__inner-link" 3148 data-menu="menu-43"> 3149 Bowfishing</a> 3150</div> 3151 <ul class="megamenu-container-2__inner-list megamenu-container-2__inner-list--level2" data-menu="menu-43"> 3152 3153 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--all megamenu-container-2__inner-item--level2"> 3154 <div class="megamenu-container-2__inner-link_wapper_title" > 3155<a 3156 href="https://www.centerpointarchery.com/bows/bowfishing" 3157 class="megamenu-container-2__inner-link" 3158 > 3159 View All</a> 3160</div> 3161 </li> 3162 3163 3164 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 3165 3166<a 3167 href="https://www.centerpointarchery.com/typhon-bowfishing-kit" 3168 class="megamenu-container-2__inner-link" 3169 data-menu="menu-44"> 3170 Typhonâ¢</a> 3171 </li> 3172 3173 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 3174 3175<a 3176 href="https://www.centerpointarchery.com/typhontm-x1-bowfishing-kit" 3177 class="megamenu-container-2__inner-link" 3178 data-menu="menu-83"> 3179 Typhon⢠X1</a> 3180 </li> 3181 3182 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 3183 3184<a 3185 href="https://www.centerpointarchery.com/bow-fishing-arrow-2-pack-kit" 3186 class="megamenu-container-2__inner-link" 3187 data-menu="menu-84"> 3188 Bowfishing Arrows</a> 3189 </li> 3190 3191 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 3192 <div class="megamenu-container-2__inner-link_wapper_title" > 3193<a 3194 href="https://www.centerpointarchery.com/bows/bowfishing" 3195 class="megamenu-container-2__inner-link" 3196 data-menu="menu-86"> 3197 SHOP ALL BOWFISHING</a> 3198</div> 3199 </li> 3200 </ul> 3201 </li> 3202 3203 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level1 megamenu-container-2__inner-item--parent subactegory_item"> 3204 <div class="megamenu-container-2__inner-link_wapper_title" > 3205<a 3206 href="https://www.centerpointarchery.com/bows/youth-bows" 3207 class="megamenu-container-2__inner-link" 3208 data-menu="menu-47"> 3209 Youth Bows</a> 3210</div> 3211 <ul class="megamenu-container-2__inner-list megamenu-container-2__inner-list--level2" data-menu="menu-47"> 3212 3213 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--all megamenu-container-2__inner-item--level2"> 3214 <div class="megamenu-container-2__inner-link_wapper_title" > 3215<a 3216 href="https://www.centerpointarchery.com/bows/youth-bows" 3217 class="megamenu-container-2__inner-link" 3218 > 3219 View All</a> 3220</div> 3221 </li> 3222 3223 3224 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 3225 3226<a 3227 href="https://www.centerpointarchery.com/tatanka-youth-recurve-bow" 3228 class="megamenu-container-2__inner-link" 3229 data-menu="menu-48"> 3230 Tatanka®</a> 3231 </li> 3232 3233 <li class="megamenu-container-2__inner-item megamenu-container-2__inner-item--level2"> 3234 <div class="megamenu-container-2__inner-link_wapper_title" > 3235<a 3236 href="https://www.centerpointarchery.com/bows/youth-bows" 3237 class="megamenu-container-2__inner-link" 3238 data-menu="menu-51"> 3239 SHOP ALL YOUTH BOWS</a> 3240</div> 3241 </li> 3242 </ul> 3243 </li> 3244 </ul> 3245 </li> 3246 <li class="megamenu-container-2__item "> 3247 <div class="megamenu-container-2__link_wapper_title" > 3248<a 3249 href="https://www.centerpointarchery.com/arrows" 3250 class="megamenu-container-2__link" 3251 data-menu="menu-52"> 3252 Arrows</a> 3253</div> 3254 </li> 3255 <li class="megamenu-container-2__item "> 3256 <div class="megamenu-container-2__link_wapper_title" > 3257<a 3258 href="https://www.centerpointarchery.com/accessories" 3259 class="megamenu-container-2__link" 3260 data-menu="menu-58"> 3261 Accessories</a> 3262</div> 3263 </li> 3264 <li class="megamenu-container-2__item "> 3265 <div class="megamenu-container-2__link_wapper_title" > 3266<a 3267 href="https://www.centerpointarchery.com/parts" 3268 class="megamenu-container-2__link" 3269 data-menu="menu-53"> 3270 Service and Parts</a> 3271</div> 3272 </li> 3273 <li class="megamenu-container-2__item "> 3274 <div class="megamenu-container-2__link_wapper_title" > 3275<a 3276 href="https://www.centerpointarchery.com/apparel" 3277 class="megamenu-container-2__link" 3278 data-menu="menu-59"> 3279 Apparel</a> 3280</div> 3281 </li> 3282 <li class="megamenu-container-2__item accent-color"> 3283 <div class="megamenu-container-2__link_wapper_title" > 3284<a 3285 href="https://www.centerpointarchery.com/promotions/current-promotions" 3286 class="megamenu-container-2__link" 3287 data-menu="menu-87"> 3288 Deals</a> 3289</div> 3290 </li> 3291 <li class="megamenu-container-2__item "> 3292 3293<a 3294 href="https://www.centerpointarchery.com/technology" 3295 class="megamenu-container-2__link" 3296 data-menu="menu-54"> 3297 Technology</a> 3298 </li> 3299 <li class="megamenu-container-2__item "> 3300 3301<a 3302 href="https://www.centerpointarchery.com/about-centerpoint" 3303 class="megamenu-container-2__link" 3304 data-menu="menu-55"> 3305 About</a> 3306 </li> 3307 <li class="megamenu-container-2__item "> 3308 <a 3309 href="https://www.centerpointarchery.com/blog" 3310 data-menu="menu-56" class="megamenu-container-2__link" > 3311 Blog </a> 3312 3313 </li> 3314 </ul> 3315 <div class="megamenu-container-2__mobile-bg"></div> 3316 </nav> 3317</div></div></div>
3317<script type="application/javascript" async 3318 src=https://static.klaviyo.com/onsite/js/UxnDnW/klaviyo.js ></script>
3318 3319 3320
3320<script type="text/x-magento-init"> 3321 { 3322 "*": { 3323 "KlaviyoCustomerData": {} 3324 } 3325 } 3326 </script>
3326 3327</header><main id="maincontent" class="page-main"><a id="contentarea" tabindex="-1"></a> 3328<div class="page-title-wrapper"> 3329 <h1 class="page-title" 3330 > 3331 <span class="base" data-ui-id="page-title-wrapper" >Cart</span> </h1> 3332 </div> 3333<div class="page messages"><div data-placeholder="messages"></div> 3334<div data-bind="scope: 'messages'"> 3335 <!-- ko if: cookieMessagesObservable() && cookieMessagesObservable().length > 0 --> 3336 <div aria-atomic="true" role="alert" class="messages" data-bind="foreach: { 3337 data: cookieMessagesObservable(), as: 'message' 3338 }"> 3339 <div data-bind="attr: { 3340 class: 'message-' + message.type + ' ' + message.type + ' message', 3341 'data-ui-id': 'message-' + message.type 3342 }"> 3343 <div data-bind="html: $parent.prepareMessageForHtml(message.text)"></div> 3344 </div> 3345 </div> 3346 <!-- /ko --> 3347 3348 <div aria-atomic="true" role="alert" class="messages" data-bind="foreach: { 3349 data: messages().messages, as: 'message' 3350 }, afterRender: purgeMessages"> 3351 <div data-bind="attr: { 3352 class: 'message-' + message.type + ' ' + message.type + ' message', 3353 'data-ui-id': 'message-' + message.type 3354 }"> 3355 <div data-bind="html: $parent.prepareMessageForHtml(message.text)"></div> 3356 </div> 3357 </div> 3358</div> 3359
3360<script type="text/x-magento-init"> 3361 { 3362 "*": { 3363 "Magento_Ui/js/core/app": { 3364 "components": { 3365 "messages": { 3366 "component": "Magento_Theme/js/view/messages" 3367 } 3368 } 3369 } 3370 } 3371 } 3372</script>
3372 3373</div><div class="columns"><div class="column main"><input name="form_key" type="hidden" value="t8U2ACqOKhFOYGMd" /><div id="authenticationPopup" data-bind="scope:'authenticationPopup', style: {display: 'none'}"> 3374
3374<script>window.authenticationPopup = {"autocomplete":"off","customerRegisterUrl":"https:\/\/www.centerpointarchery.com\/customer\/account\/create\/","customerForgotPasswordUrl":"https:\/\/www.centerpointarchery.com\/customer\/account\/forgotpassword\/","baseUrl":"https:\/\/www.centerpointarchery.com\/","customerLoginUrl":"https:\/\/www.centerpointarchery.com\/customer\/ajax\/login\/"}</script>
3374 <!-- ko template: getTemplate() --><!-- /ko --> 3375
3375<script type="text/x-magento-init"> 3376 { 3377 "#authenticationPopup": { 3378 "Magento_Ui/js/core/app": {"components":{"authenticationPopup":{"component":"Magento_Customer\/js\/view\/authentication-popup","children":{"messages":{"component":"Magento_Ui\/js\/view\/messages","displayArea":"messages"},"captcha":{"component":"Magento_Captcha\/js\/view\/checkout\/loginCaptcha","displayArea":"additional-login-form-fields","formId":"user_login","configSource":"checkout"},"recaptcha":{"component":"Magento_ReCaptchaFrontendUi\/js\/reCaptcha","displayArea":"additional-login-form-fields","reCaptchaId":"recaptcha-popup-login","settings":{"rendering":{"sitekey":"6Ld_A7EUAAAAAMyfwrvPBDxcZR4eUgTkpUJDxiiS","size":"normal","theme":"light","hl":""},"invisible":false}}}}}} }, 3379 "*": { 3380 "Magento_Ui/js/block-loader": "https\u003A\u002F\u002Fwww.centerpointarchery.com\u002Fstatic\u002Fversion1790000787\u002Ffrontend\u002FCenterpoint\u002Fdefault\u002Fen_US\u002Fimages\u002Floader\u002D1.gif" 3381 , 3382 "Magento_Customer/js/customer-global-session-loader": {} 3383 } 3384 } 3385 </script>
3385 3386</div>
3387<script type="text/x-magento-init"> 3388 { 3389 "*": { 3390 "Magento_Customer/js/section-config": { 3391 "sections": {"stores\/store\/switch":["*"],"stores\/store\/switchrequest":["*"],"directory\/currency\/switch":["*"],"*":["messages"],"customer\/account\/logout":["*","recently_viewed_product","recently_compared_product","persistent"],"customer\/account\/loginpost":["*"],"customer\/account\/createpost":["*"],"customer\/account\/editpost":["*"],"customer\/ajax\/login":["checkout-data","cart","captcha"],"catalog\/product_compare\/add":["compare-products","wp_ga4"],"catalog\/product_compare\/remove":["compare-products"],"catalog\/product_compare\/clear":["compare-products"],"sales\/guest\/reorder":["cart","ammessages"],"sales\/order\/reorder":["cart","ammessages"],"checkout\/cart\/add":["cart","directory-data","ammessages","extend-tracking","wp_ga4"],"checkout\/cart\/delete":["cart","ammessages","extend-tracking","wp_ga4"],"checkout\/cart\/updatepost":["cart","ammessages","extend-tracking","wp_ga4"],"checkout\/cart\/updateitemoptions":["cart","ammessages","extend-tracking","wp_ga4"],"checkout\/cart\/couponpost":["cart","ammessages"],"checkout\/cart\/estimatepost":["cart","ammessages"],"checkout\/cart\/estimateupdatepost":["cart","ammessages"],"checkout\/onepage\/saveorder":["cart","checkout-data","last-ordered-items","amasty-checkout-data","ammessages"],"checkout\/sidebar\/removeitem":["cart","ammessages","extend-tracking","wp_ga4"],"checkout\/sidebar\/updateitemqty":["cart","ammessages","extend-tracking","wp_ga4"],"rest\/*\/v1\/carts\/*\/payment-information":["cart","last-ordered-items","captcha","instant-purchase","amasty-checkout-data","ammessages","wp_ga4"],"rest\/*\/v1\/guest-carts\/*\/payment-information":["cart","captcha","amasty-checkout-data","ammessages","wp_ga4"],"rest\/*\/v1\/guest-carts\/*\/selected-payment-method":["cart","checkout-data","ammessages"],"rest\/*\/v1\/carts\/*\/selected-payment-method":["cart","checkout-data","instant-purchase","ammessages"],"customer\/address\/*":["instant-purchase"],"customer\/account\/*":["instant-purchase"],"vault\/cards\/deleteaction":["instant-purchase"],"multishipping\/checkout\/overviewpost":["cart","ammessages"],"paypal\/express\/placeorder":["cart","checkout-data","amasty-checkout-data","ammessages"],"paypal\/payflowexpress\/placeorder":["cart","checkout-data","amasty-checkout-data","ammessages"],"paypal\/express\/onauthorization":["cart","checkout-data","ammessages"],"persistent\/index\/unsetcookie":["persistent"],"review\/product\/post":["review"],"paymentservicespaypal\/smartbuttons\/placeorder":["cart","checkout-data"],"paymentservicespaypal\/smartbuttons\/cancel":["cart","checkout-data"],"wishlist\/index\/add":["wishlist","wp_ga4"],"wishlist\/index\/remove":["wishlist"],"wishlist\/index\/updateitemoptions":["wishlist"],"wishlist\/index\/update":["wishlist"],"wishlist\/index\/cart":["wishlist","cart","wp_ga4"],"wishlist\/index\/fromcart":["wishlist","cart"],"wishlist\/index\/allcart":["wishlist","cart","wp_ga4"],"wishlist\/shared\/allcart":["wishlist","cart"],"wishlist\/shared\/cart":["cart"],"ammostviewed\/cart\/add":["cart","messages"],"amasty_promo\/cart\/add":["cart","ammessages"],"braintree\/paypal\/placeorder":["ammessages"],"authorizenet\/directpost_payment\/place":["ammessages"],"warranty\/cart\/add":["extend-tracking"],"checkout\/sidebar\/updateitemoptions":["extend-tracking"],"idme\/authorize\/*":["idme-verify"],"reclaim\/checkout\/reload":["cart"],"sezzle\/payment\/complete":["cart","checkout-data","last-ordered-items"],"rest\/*\/v1\/sezzle\/carts\/*\/checkout":["cart","checkout-data","last-ordered-items"],"rest\/*\/v1\/sezzle\/guest-carts\/*\/checkout":["cart","checkout-data","last-ordered-items"],"rest\/*\/v1\/carts\/*\/order":["cart","checkout-data","last-ordered-items"],"rest\/*\/v1\/guest-carts\/*\/order":["cart","checkout-data","last-ordered-items"],"checkout\/cart\/configure":["wp_ga4"],"rest\/*\/v1\/guest-carts\/*\/shipping-information":["wp_ga4"],"rest\/*\/v1\/carts\/*\/shipping-information":["wp_ga4"]}, 3392 "clientSideSections": ["checkout-data","cart-data","amasty-checkout-data"], 3393 "baseUrls": ["https:\/\/www.centerpointarchery.com\/"], 3394 "sectionNames": ["messages","customer","compare-products","last-ordered-items","cart","directory-data","captcha","instant-purchase","loggedAsCustomer","persistent","review","payments","wishlist","ammessages","extend-tracking","idme-verify","webforms","wp_ga4","recently_viewed_product","recently_compared_product","product_data_storage","paypal-billing-agreement"] } 3395 } 3396 } 3397</script>
vendor: 1 bytes, line 3397
3397
3398<script type="text/x-magento-init"> 3399 { 3400 "*": { 3401 "Magento_Customer/js/customer-data": { 3402 "sectionLoadUrl": "https\u003A\u002F\u002Fwww.centerpointarchery.com\u002Fcustomer\u002Fsection\u002Fload\u002F", 3403 "expirableSectionLifetime": 60, 3404 "expirableSectionNames": ["cart","persistent"], 3405 "cookieLifeTime": "86400", 3406 "cookieDomain": "www.centerpointarchery.com", 3407 "updateSessionUrl": "https\u003A\u002F\u002Fwww.centerpointarchery.com\u002Fcustomer\u002Faccount\u002FupdateSession\u002F", 3408 "isLoggedIn": "" 3409 } 3410 } 3411 } 3412</script>
vendor: 1 bytes, line 3412
3412
3413<script type="text/x-magento-init"> 3414 { 3415 "*": { 3416 "Magento_Customer/js/invalidation-processor": { 3417 "invalidationRules": { 3418 "website-rule": { 3419 "Magento_Customer/js/invalidation-rules/website-rule": { 3420 "scopeConfig": { 3421 "websiteId": "4" 3422 } 3423 } 3424 } 3425 } 3426 } 3427 } 3428 } 3429</script>
vendor: 1 bytes, line 3429
3429
3430<script type="text/x-magento-init"> 3431 { 3432 "body": { 3433 "pageCache": {"url":"https:\/\/www.centerpointarchery.com\/page_cache\/block\/render\/","handles":["default","checkout_cart_index"],"originalRequest":{"route":"checkout","controller":"cart","action":"index","uri":"\/checkout\/cart\/"},"versionCookieName":"private_content_version"} } 3434 } 3435</script>
vendor: 1 bytes, line 3435
3435
3436<script type="text/x-magento-init"> 3437 { 3438 "*": { 3439 "Magento_Ui/js/core/app": { 3440 "components": { 3441 "finder_notification": { 3442 "component": "Amasty_Finder/js/notification" 3443 } 3444 } 3445 } 3446 } 3447 } 3448 3449</script>
3449 3450 3451
3451<script> 3452 require(['jquery', 'domReady!'], function($){ 3453 if ($('.mfblogunveil').length) { 3454 require(['Magefan_Blog/js/lib/mfblogunveil'], function(){ 3455 $('.mfblogunveil').mfblogunveil(); 3456 }); 3457 } 3458 }); 3459 </script>
3459<div class="cart-empty"> 3460 <p>You have no items in your shopping cart.</p> 3461 <p>Click <a href="https://www.centerpointarchery.com/">here</a> to continue shopping. </p> 3462 </div>
3463<script type="text/x-magento-init"> 3464{ 3465 "*": { 3466 "Magento_Checkout/js/empty-cart": {} 3467 } 3468} 3469</script>
3469 3470 3471 <form class="amhideprice-form" 3472 id="amgroupcat-form" 3473 role="dialog" 3474 aria-modal="true" 3475 aria-labelledby="amgroupcat-form-title" 3476 tabindex="-1" 3477 action="" 3478 method="post" 3479 style="display: none;"> 3480 <input name="form_key" type="hidden" value="" /> 3481 <input name="product_id" type="hidden" value="" /> 3482 <fieldset class="fieldset"> 3483 <legend class="legend amhideprice-form-ledend" 3484 id="amgroupcat-form-title"> 3485 <span>Get a Quote for</span> 3486 <span style="font-weight: bolder;" class="product-name"></span> 3487 </legend> 3488 <br> 3489 <div class="amhideprice-fields-container"> 3490 <div class="field required"> 3491 <label for="amgroupcat-name" class="label"> 3492 <span>Customer Name</span> 3493 </label> 3494 <div class="control"> 3495 <input type="text" name="name" class="input-text" 3496 id="amgroupcat-name" 3497 data-validate="{required:true}"> 3498 </div> 3499 </div> 3500 <div class="field required"> 3501 <label for="amgroupcat-email" class="label"> 3502 <span>Customer Email</span> 3503 </label> 3504 <div class="control"> 3505 <input type="email" 3506 name="email" 3507 autocomplete="email" 3508 id="amgroupcat-email" 3509 value="" class="input-text" 3510 data-validate="{required:true, 'validate-email':true}" 3511 aria-required="true"> 3512 </div> 3513 </div> 3514 <div class="field required"> 3515 <label for="amgroupcat-phone" class="label"> 3516 <span>Phone Number</span> 3517 </label> 3518 <div class="control"> 3519 <input type="text" name="phone" id="amgroupcat-phone" class="input-text " 3520 data-validate="{required:true}"> 3521 </div> 3522 </div> 3523 <div class="field"> 3524 <label for="amgroupcat-comment" class="label"> 3525 <span>Comment</span> 3526 </label> 3527 <div class="control"> 3528 <textarea title="Comment" 3529 type="textarea" 3530 id="amgroupcat-comment" 3531 name="comment" class="input-text" 3532 data-validate="{'validate-no-html-tags':true}"></textarea> 3533 </div> 3534 </div> 3535 <div class="actions-toolbar"> 3536 <div class="primary"> 3537 <button type="submit" class="action submit primary" 3538 title="Submit"> 3539 <span>Submit</span> 3540 </button> 3541 </div> 3542 </div> 3543 </div> 3544 </fieldset> 3545 </form> 3546
3546<script> 3547 require([ 3548 'jquery', 3549 'mage/url' 3550 ], function (jQuery, url) { 3551 url.setBaseUrl('https\u003A\u002F\u002Fwww.centerpointarchery.com\u002F'); 3552 jQuery.ajax({ 3553 url: url.build('reclaim/checkout/reload'), 3554 method: 'POST', 3555 data: {} 3556 }); 3557 }); 3558 </script>
3558 3559</div></div></main><footer class="page-footer"><div class="footer content"><div class="footer_left"> 3560 <section class="footer-menu-links"> 3561 <div class="links-list"> 3562 <div data-role="collapsible"> 3563 <div data-role="trigger"> 3564 <div class="links-title">PRODUCTS</div> 3565 </div> 3566 </div> 3567 <div data-role="content"> 3568 <ul class="content"> 3569 <li> 3570 <a href="https://www.centerpointarchery.com/bows">BOWS</a> 3571 <ul> 3572 <li><a href="https://www.centerpointarchery.com/bows/crossbows">CROSSBOWS</a></li> 3573 <li><a href="https://www.centerpointarchery.com/bows/recurve-hunting-bows">RECURVE HUNTING BOWS</a></li> 3574 <li><a href="https://www.centerpointarchery.com/bows/bowfishing">BOWFISHING</a></li> 3575 <li><a href="https://www.centerpointarchery.com/bows/youth-bows">YOUTH BOWS</a></li> 3576 </ul> 3577 </li> 3578 <li><a href="https://www.centerpointarchery.com/arrows">ARROWS</a></li> 3579 <li><a href="https://www.centerpointarchery.com/gear">GEAR</a> 3580 <ul> 3581 <li><a href="https://www.centerpointarchery.com/accessories"> ACCESSORIES</a></li> 3582 </ul> 3583 </li> 3584<li><a href="https://www.centerpointarchery.com/centerpoint-egift-card">eGift Cards</a></li> 3585 3586 </ul> 3587 </div> 3588 </div> 3589 <div class="links-list"> 3590 <div data-role="collapsible"> 3591 <div data-role="trigger"> 3592 <div class="links-title">SUPPORT</div> 3593 </div> 3594 </div> 3595 <div data-role="content"> 3596 <ul class="content"> 3597 <li><a href="https://www.centerpointarchery.com/support/contact-support">CONTACT SUPPORT</a></li> 3598 <li><a href="https://www.centerpointarchery.com/support/faq">FAQS</a></li> 3599 <li><a href="https://www.centerpointarchery.com/support/product-registration">PRODUCT REGISTRATION</a></li> 3600 <li><a href="https://www.centerpointarchery.com/support/shipping">SHIPPING</a></li> 3601 <li><a href="https://www.centerpointarchery.com/owners-manuals">OWNER'S MANUALS</a></li> 3602 <li><a href="https://www.centerpointarchery.com/videos">VIDEOS</a></li> 3603 <li><a href="https://www.centerpointarchery.com/safety">SAFETY</a></li> 3604 <li><a href="https://www.centerpointarchery.com/support/warranty-info">WARRANTY INFO</a></li> 3605<li><a href="https://centerpointarcheryrebates.com/">REBATES</a></li> 3606 </ul> 3607 </div> 3608 3609 </div> 3610 <div class="links-list"> 3611 <div data-role="collapsible"> 3612 <div data-role="trigger"> 3613 <div class="links-title">COMPANY</div> 3614 </div> 3615 </div> 3616 <div data-role="content"> 3617 <ul class="content"> 3618 <li><a href="https://www.centerpointarchery.com/about-centerpoint">ABOUT</a></li> 3619 <li><a href="https://www.centerpointarchery.com/the-elk-hunt">THE ELK HUNT</a></li> 3620 <li><a href="https://www.centerpointarchery.com/about-centerpoint/#our-partners">OUR PARTNERS</a></li> 3621 <li><a href="https://www.centerpointarchery.com/blog">BLOG</a></li> 3622 <li><a href="https://www.centerpointarchery.com/become-a-dealer">BECOME A DEALER</a></li> 3623 <li><a href="https://www.centerpointarchery.com/affiliate-program">AFFILIATE PROGRAM</a></li> 3624 <li><a href="https://www.centerpointarchery.com/dealer-locator">DEALER LOCATOR</a></li> 3625 <li><a href="https://www.centerpointarchery.com/careers">CAREERS</a></li> 3626 <li><a href="https://velocity-outdoor.com">A VELOCITY OUTDOOR COMPANY</a></li> 3627 </ul> 3628 </div> 3629 </div> 3630 </section> 3631 <div class="footer_social"> 3632 <label>Follow Us!</label> 3633 <div class="social-links"> 3634 <a href="https://www.youtube.com/channel/UCIq03klIyTESYCSgFXNVKVw"> 3635 3636 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 69.5 70.2" style="enable-background:new 0 0 69.5 70.2;" xml:space="preserve"> 3637 <g> 3638 <polygon class="st0" points="30.6,42.1 42.5,35.2 30.6,28.3 " /> 3639 <path class="st0" d="M35.2-0.1c-19,0-34.5,15.4-34.5,34.4v1.8c0,19,15.4,34.5,34.5,34.5c19,0,34.5-15.4,34.5-34.5v-1.8 3640 C69.6,15.3,54.2-0.1,35.2-0.1 M57.2,46.3c-0.5,2-2.1,3.5-4.1,4.1c-3.6,1-18,1-18,1s-14.4,0-18-1c-2-0.5-3.5-2.1-4.1-4.1 3641 c-1-3.6-1-11.1-1-11.1s0-7.5,1-11.1c0.5-2,2.1-3.5,4.1-4.1c3.6-1,18-1,18-1s14.4,0,18,1c2,0.5,3.5,2.1,4.1,4.1c1,3.6,1,11.1,1,11.1 3642 S58.1,42.7,57.2,46.3" /> 3643 </g> 3644 </svg> 3645 </a> 3646 3647 <a href="https://www.facebook.com/CenterPointArchery"> 3648 3649 3650 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 69.5 70.2" style="enable-background:new 0 0 69.5 70.2;" xml:space="preserve"> 3651 3652 <g> 3653 <path class="st0" d="M35.2,0.3C15.7,0.3,0,16,0,35.4C0,53,12.8,67.5,29.7,70.2V45.6h-8.9V35.4l0,0l0,0h8.9v-7.7 3654 c0-8.3,4.6-13.1,11.8-13.6c0.5,0,1-0.1,1.5-0.1c3.9,0,7.9,0.7,7.9,0.7v8.7l0,0l0,0h-4.4c-0.3,0-0.5,0-0.8,0 3655 c-3.8,0.3-4.9,2.9-4.9,5.5v6.6h9.7l-1.6,10.2l0,0h-8.2v24.6C57.5,67.5,70.3,53,70.3,35.4C70.3,16,54.6,0.3,35.2,0.3" /> 3656 </g> 3657 </svg> 3658 3659 </a> 3660 3661 <a href="https://www.instagram.com/centerpoint_archery"> 3662 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 69.5 70.2" style="enable-background:new 0 0 69.5 70.2;" xml:space="preserve"> 3663 3664 <g> 3665 <path class="st0" d="M41.1,35.2c0-3.3-2.6-5.9-5.9-5.9c-3.3,0-5.9,2.6-5.9,5.9s2.6,5.9,5.9,5.9C38.5,41.1,41.1,38.5,41.1,35.2" /> 3666 <path class="st0" d="M49.2,19.7H21.4c-0.9,0-1.6,0.7-1.
36666,1.6v12.3h6.6c0.8-4.2,4.5-7.5,8.9-7.5s8.2,3.2,8.9,7.5h6.6V21.3 3667 C50.8,20.4,50.1,19.7,49.2,19.7 M46,27.2c-1.2,0-2.1-1-2.1-2.1c0-1.2,1-2.1,2.1-2.1c1.2,0,2.1,1,2.1,2.1 3668 C48.1,26.3,47.1,27.2,46,27.2" /> 3669 <path class="st0" d="M35.3,44.3c-4.5,0-8.2-3.2-8.9-7.5h-6.6v12.3c0,0.9,0.7,1.6,1.6,1.6h27.8c0.9,0,1.6-0.7,1.6-1.6V36.8h-6.6 3670 C43.4,41.1,39.7,44.3,35.3,44.3" /> 3671 <path class="st0" d="M35.2,0C16.2,0,0.8,15.4,0.8,34.3v1.8c0,19,15.4,34.3,34.3,34.3c19,0,34.3-15.4,34.3-34.3v-1.8 3672 C69.5,15.4,54.1,0,35.2,0 M54,49.1c0,2.6-2.2,4.8-4.8,4.8H21.4c-2.6,0-4.8-2.2-4.8-4.8V21.3c0-2.6,2.2-4.8,4.8-4.8h27.8 3673 c2.6,0,4.8,2.2,4.8,4.8C54,21.3,54,49.1,54,49.1z" /> 3674 </g> 3675 </svg> 3676 3677 </a> 3678 3679 </div> 3680 3681</div> 3682 <section class="footer-copyright"> 3683 <div class="iso"> 3684 <img src="https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/images/logo-no-text.svg" 3685 alt="Center Point Archery" 3686 width="34" height="25" 3687 /> 3688 </div> 3689 <div class="copyright-text"> 3690 © 2026 CenterPoint Archery. 3691 <br /> 3692 <span>ALL RIGHTS RESERVED.</span> 3693 </div> 3694 <div class="links"> 3695 <a href="/terms-of-use">Terms of Use</a> | 3696 <a href="/privacy-policy">Privacy Policy</a> |
3697 <a href="#" class="iubenda-cs-preferences-link">Your Privacy Choices</a> | 3698 <a href="#" class="iubenda-cs-uspr-link">Notice at Collection</a> 3699 </div> 3700 </section> 3701 </div><div class="footer_right"><div class="block newsletter"> 3702 <div class="content"> 3703 3704 <div class="footer--secondary"> 3705 3706<style> 3707.klaviyo-form-RZ9Ru8{ 3708display:flex; 3709align-content:center; 3710justify-content:center; 3711width:100%; 3712} 3713.klaviyo-form-RZ9Ru8 form{ 3714padding: 0 !important; 3715} 3716.klaviyo-form-RZ9Ru8 div:first-of-type{ 3717display:flex; 3718width:100%; 3719align-items:center; 3720align-content:center; 3721} 3722.klaviyo-form-RZ9Ru8 div:first-of-type input{ 3723min-height:38px !important; 3724padding-left: 10px !important; 3725} 3726.klaviyo-form-RZ9Ru8 button:not(.primary){ 3727box-shadow:none !important; 3728padding: 0 20px !important; 3729} 3730</style> 3731 3732<div class="newsletter-heading">Join Our Mailing List</div> 3733<p>Stay locked onto the latest product releases, insider deals, and invite-only events.</p> 3734<div class="email-signup input"> 3735 <div class="klaviyo-form-RZ9Ru8"></div> 3736</div> 3737 <style> 3738.klaviyo-form-TGnDvX{ 3739display:flex; 3740align-content:center; 3741justify-content:center; 3742width:100%; 3743} 3744.klaviyo-form-TGnDvX form{ 3745padding: 0 !important; 3746} 3747.klaviyo-form-TGnDvX div:first-of-type{ 3748display:flex; 3749width:100%; 3750align-items:center; 3751align-content:center; 3752} 3753.klaviyo-form-TGnDvX div:first-of-type input{ 3754min-height:38px !important; 3755padding-left: 10px !important; 3756} 3757.klaviyo-form-TGnDvX button:not(.primary){ 3758box-shadow:none !important; 3759padding: 0 20px !important; 3760} 3761.page-footer .footer.content .footer_right .footer--secondary form span { 3762 display: block !important; 3763margin-top:15px!important; 3764} 3765</style> 3766 <img src="https://www.centerpointarchery.com/media/wysiwyg/cpa/cpa-catalog-2025.png" alt="" /> 3767 <p>Get all of CenterPoint's power concentrated in your hands at once.</p> 3768 <div class="email-signup catalog-download"> 3769 <div class="klaviyo-form-TGnDvX"></div> 3770 </div> </div> 3771 </div> 3772 3773</div> 3774<div class="footer_social"> 3775 <label>Follow Us!</label> 3776 <div class="social-links"> 3777 <a href="https://www.youtube.com/channel/UCIq03klIyTESYCSgFXNVKVw"> 3778 3779 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 69.5 70.2" style="enable-background:new 0 0 69.5 70.2;" xml:space="preserve"> 3780 <g> 3781 <polygon class="st0" points="30.6,42.1 42.5,35.2 30.6,28.3 " /> 3782 <path class="st0" d="M35.2-0.1c-19,0-34.5,15.4-34.5,34.4v1.8c0,19,15.4,34.5,34.5,34.5c19,0,34.5-15.4,34.5-34.5v-1.8 3783 C69.6,15.3,54.2-0.1,35.2-0.1 M57.2,46.3c-0.5,2-2.1,3.5-4.1,4.1c-3.6,1-18,1-18,1s-14.4,0-18-1c-2-0.5-3.5-2.1-4.1-4.1 3784 c-1-3.6-1-11.1-1-11.1s0-7.5,1-11.1c0.5-2,2.1-3.5,4.1-4.1c3.6-1,18-1,18-1s14.4,0,18,1c2,0.5,3.5,2.1,4.1,4.1c1,3.6,1,11.1,1,11.1 3785 S58.1,42.7,57.2,46.3" /> 3786 </g> 3787 </svg> 3788 </a> 3789 3790 <a href="https://www.facebook.com/CenterPointArchery"> 3791 3792 3793 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 69.5 70.2" style="enable-background:new 0 0 69.5 70.2;" xml:space="preserve"> 3794 3795 <g> 3796 <path class="st0" d="M35.2,0.3C15.7,0.3,0,16,0,35.4C0,53,12.8,67.5,29.7,70.2V45.6h-8.9V35.4l0,0l0,0h8.9v-7.7 3797 c0-8.3,4.6-13.1,11.8-13.6c0.5,0,1-0.1,1.5-0.1c3.9,0,7.9,0.7,7.9,0.7v8.7l0,0l0,0h-4.4c-0.3,0-0.5,0-0.8,0 3798 c-3.8,0.3-4.9,2.9-4.9,5.5v6.6h9.7l-1.6,10.2l0,0h-8.2v24.6C57.5,67.5,70.3,53,70.3,35.4C70.3,16,54.6,0.3,35.2,0.3" /> 3799 </g> 3800 </svg> 3801 3802 </a> 3803 3804 <a href="https://www.instagram.com/centerpoint_archery"> 3805 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 69.5 70.2" style="enable-background:new 0 0 69.5 70.2;" xml:space="preserve"> 3806 3807 <g> 3808 <path class="st0" d="M41.1,35.2c0-3.3-2.6-5.9-5.9-5.9c-3.3,0-5.9,2.6-5.9,5.9s2.6,5.9,5.9,5.9C38.5,41.1,41.1,38.5,41.1,35.2" /> 3809 <path class="st0" d="M49.2,19.7H21.4c-0.9,0-1.6,0.7-1.
38096,1.6v12.3h6.6c0.8-4.2,4.5-7.5,8.9-7.5s8.2,3.2,8.9,7.5h6.6V21.3 3810 C50.8,20.4,50.1,19.7,49.2,19.7 M46,27.2c-1.2,0-2.1-1-2.1-2.1c0-1.2,1-2.1,2.1-2.1c1.2,0,2.1,1,2.1,2.1 3811 C48.1,26.3,47.1,27.2,46,27.2" /> 3812 <path class="st0" d="M35.3,44.3c-4.5,0-8.2-3.2-8.9-7.5h-6.6v12.3c0,0.9,0.7,1.6,1.6,1.6h27.8c0.9,0,1.6-0.7,1.6-1.6V36.8h-6.6 3813 C43.4,41.1,39.7,44.3,35.3,44.3" /> 3814 <path class="st0" d="M35.2,0C16.2,0,0.8,15.4,0.8,34.3v1.8c0,19,15.4,34.3,34.3,34.3c19,0,34.3-15.4,34.3-34.3v-1.8 3815 C69.5,15.4,54.1,0,35.2,0 M54,49.1c0,2.6-2.2,4.8-4.8,4.8H21.4c-2.6,0-4.8-2.2-4.8-4.8V21.3c0-2.6,2.2-4.8,4.8-4.8h27.8 3816 c2.6,0,4.8,2.2,4.8,4.8C54,21.3,54,49.1,54,49.1z" /> 3817 </g> 3818 </svg> 3819 3820 </a> 3821 3822 </div> 3823 3824</div></div>
3824<script type="text/x-magento-init"> 3825{ 3826 ".footer.content .footer-menu-links": { 3827 "Magento_Theme/js/footer-accordion": { 3828 } 3829 } 3830} 3831</script>
vendor: 1 bytes, line 3831
3831
3832<script type="text/x-magento-init"> 3833{ 3834 ".cms-accordion": { 3835 "Magento_Theme/js/cms-pages-accordion": { 3836 } 3837 } 3838} 3839</script>
vendor: 1 bytes, line 3839
3839
3840<script type="text/x-magento-init"> 3841 { 3842 ".cms-home-page .product-items.widget-product-grid, .products-carousel .product-items, .catalog-product-view .product-items": { 3843 "slick": { 3844 "autoplay" : true, 3845 "mobileFirst": true, 3846 "prevArrow": "<button type='button' class='slick-prev'>â</button>", 3847 "nextArrow": "<button type='button' class='slick-next'>â¶</button>", 3848 "responsive": [ 3849 { 3850 "breakpoint": 768, 3851 "settings": { 3852 "slidesToShow": 2 3853 } 3854 }, 3855 { 3856 "breakpoint": 1200, 3857 "settings": { 3858 "slidesToShow": 3 3859 } 3860 } 3861 ] 3862 } 3863 } 3864 } 3865 </script>
vendor: 1 bytes, line 3865
3865
3866<script type="text/x-magento-init"> 3867{ 3868 "*": { 3869 "Magento_Theme/js/home-animations": { 3870 } 3871 } 3872} 3873</script>
vendor: 1 bytes, line 3873
3873
3874<script type="text/x-magento-init"> 3875{ 3876 "*": { 3877 "Magento_Theme/js/video-player": { 3878 } 3879 } 3880} 3881</script>
vendor: 1 bytes, line 3881
3881
3882<script type="text/x-magento-init"> 3883 { 3884 ".true-originals .make-it-yours .slider": { 3885 "slick": { 3886 "autoplay" : true, 3887 "mobileFirst": true, 3888 "prevArrow": "<button type='button' class='slick-prev'>â</button>", 3889 "nextArrow": "<button type='button' class='slick-next'>â¶</button>", 3890 "slidesToShow": 1 3891 } 3892 } 3893 } 3894 </script>
vendor: 1 bytes, line 3894
3894
3895<script type="text/x-magento-init"> 3896 { 3897 ".page-product-slider-gallery": { 3898 "slick": { 3899 "autoplay" : true, 3900 "mobileFirst": true, 3901 "prevArrow": "<button type='button' class='slick-prev'>â</button>", 3902 "nextArrow": "<button type='button' class='slick-next'>â¶</button>", 3903 "slidesToShow": 1, 3904 "dots": true, 3905 "speed": 300 3906 } 3907 }, 3908 "[data-lightbox-gallery]" : { 3909 "Magento_Theme/js/light-box": {} 3910 } 3911 } 3912 </script>
vendor: 1 bytes, line 3912
3912
3913<script type="text/x-magento-init"> 3914{ 3915 "*": { 3916 "Magento_Theme/js/open-minicart": { 3917 } 3918 } 3919} 3920</script>
3920 3921</div></footer>
3921<script type="text/x-magento-init"> 3922 { 3923 "*": { 3924 "Magento_Ui/js/core/app": { 3925 "components": { 3926 "storage-manager": { 3927 "component": "Magento_Catalog/js/storage-manager", 3928 "appendTo": "", 3929 "storagesConfiguration" : {"recently_viewed_product":{"requestConfig":{"syncUrl":"https:\/\/www.centerpointarchery.com\/catalog\/product\/frontend_action_synchronize\/"},"lifetime":"1000","allowToSendRequest":null},"recently_compared_product":{"requestConfig":{"syncUrl":"https:\/\/www.centerpointarchery.com\/catalog\/product\/frontend_action_synchronize\/"},"lifetime":"1000","allowToSendRequest":null},"product_data_storage":{"updateRequestConfig":{"url":"https:\/\/www.centerpointarchery.com\/rest\/centerpointarchery\/V1\/products-render-info"},"requestConfig":{"syncUrl":"https:\/\/www.centerpointarchery.com\/catalog\/product\/frontend_action_synchronize\/"},"allowToSendRequest":null}} } 3930 } 3931 } 3932 } 3933 } 3934</script>
3934 3935<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 3935-3936
3935 3936<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
3936GTM-MRL4BPG
vendor: 83 bytes, lines 3936-3937
3936" 3937height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
3938<!-- End Google Tag Manager (noscript) --> 3939 3940<!-- Start of HubSpot Embed Code --> 3941<!--
3941<script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/8151552.js"></script>
3941--> 3942<!-- End of HubSpot Embed Code --> 3943 3944<!--
3945<script type = "text/javascript" src = 'https://home-c9.incontact.com/inContact/ChatClient/js/embed.min.js'></script>
3945--> 3946<!--
3946<script type ="text/javascript"> 3947icPatronChat.init({serverHost:'https://home-c9.incontact.com',bus_no:4593762,poc:'975e25d1-d802-4332-bcb8-ddb7e689055f',params:['T3352','850724','Centerpoint Archery']}); 3948</script>
3948 3949--> 3950
3951<script>document.addEventListener("DOMContentLoaded", function() { 3952 if (document.querySelectorAll('.mf-ytw-wrapper').length || document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 3953 !function (f, b, e, v, t, s) { 3954 if(f.mfytwcss)return; 3955 f.mfytwcss=1; 3956 t = b.createElement(e); 3957 t.rel = 'stylesheet'; 3958 t.type = 'text/css'; 3959 t.href = v; 3960 s = b.getElementsByTagName('HEAD')[0]; 3961 s.appendChild(t) 3962 }(window, document, 'link', 'https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Magefan_YouTubeWidget/css/youtubewidget.css'); 3963 } 3964 if (document.querySelectorAll('.mf-ytw-wrapper').length) { 3965 !function (f, b, e, v, t, s) { 3966 if(f.mfytwjs)return; 3967 f.mfytwjs=1; 3968 t = b.createElement(e); 3969 t.type = 'text/javascript'; 3970 t.src = v; 3971 s = b.getElementsByTagName('HEAD')[0]; 3972 s.appendChild(t) 3973 }(window, document, 'script', 'https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Magefan_YouTubeWidget/js/iframe.js'); 3974 } 3975 if (document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 3976 !function (f, b, e, v, t) { 3977 if(f.mflinkjs)return; 3978 f.mflinkjs=1; 3979 t = b.createElement(e); 3980 t.type = 'text/javascript'; 3981 t.src = v; 3982 s = b.getElementsByTagName('HEAD')[0]; 3983 s.appendChild(t) 3984 }(window, document, 'script', 'https://www.centerpointarchery.com/static/version1790000787/frontend/Centerpoint/default/en_US/Magefan_YouTubeWidget/js/link.js'); 3985 } 3986 });</script>
3986<script> 3987 require([ 3988 "jquery", 3989 "https://cdn1.stamped.io/files/widget.min.js" 3990 ], function(jQuery) { 3991 StampedFn.init({ 3992 apiKey: 'd754693a\u002Dca8c\u002D455c\u002D9769\u002D3a8bbca7fdef\u002D\u002D\u002D', 3993 storeUrl: 'www.centerpointarchery.com\u002D\u002D\u002D' 3994 }); 3995 3996 function addEventListenerStamped(el, eventName, handler) { 3997 if (el.addEventListener) { 3998 el.addEventListener(eventName, handler); 3999 } else { 4000 el.attachEvent('on' + eventName, function() { 4001 handler.call(el); 4002 }); 4003 } 4004 } 4005 4006 addEventListenerStamped(document, "stamped:reviews:loaded", function(e) { 4007 var ratingCount = jQuery("meta[itemprop=reviewCount]").attr("content"); 4008 var ratingValue = jQuery("meta[itemprop=ratingValue]").attr("content"); 4009 var richSnippet = { 4010 "@context": "http://schema.org", 4011 "@type": "Product", 4012 "name": document.title 4013 } 4014 4015 if (parseInt(ratingValue) > 0) { 4016 richSnippet.aggregateRating = { 4017 "@type": "AggregateRating", 4018 "ratingValue": ratingValue, 4019 "reviewCount": ratingCount 4020 } 4021 } 4022 4023 var script = document.createElement('script'); 4024 script.type = 'application/ld+json'; 4025 script.innerHTML = JSON.stringify(richSnippet); 4026 document.getElementsByTagName('head')[0].appendChild(script); 4027 }); 4028 }) 4029</script>
vendor: 1 bytes, line 4029
4029
4030<script defer="1" src="https://www.dwin1.com/115172.js"></script>
4030 4031
4032<script> 4033require([ 4034 'jquery' 4035], function($){ 4036 4037//<![CDATA[ 4038 $.extend(true, $, { 4039 calendarConfig: { 4040 dayNames: ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], 4041 dayNamesMin: ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], 4042 monthNames: ["January","February","March","April","May","June","July","August","September","October","November","December"], 4043 monthNamesShort: ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"], 4044 infoTitle: 'About\u0020the\u0020calendar', 4045 firstDay: 0, 4046 closeText: 'Close', 4047 currentText: 'Go\u0020Today', 4048 prevText: 'Previous', 4049 nextText: 'Next', 4050 weekHeader: 'WK', 4051 timeText: 'Time', 4052 hourText: 'Hour', 4053 minuteText: 'Minute', 4054 dateFormat: "D, d M yy", // $.datepicker.RFC_2822 4055 showOn: 'button', 4056 showAnim: '', 4057 changeMonth: true, 4058 changeYear: true, 4059 buttonImageOnly: null, 4060 buttonImage: null, 4061 showButtonPanel: true, 4062 showWeek: true, 4063 timeFormat: '', 4064 showTime: false, 4065 showHour: false, 4066 showMinute: false 4067 } 4068 }); 4069 4070 enUS = {"m":{"wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}}; // en_US locale reference 4071//]]> 4072 4073});</script>
4073<div class="ampromo-overlay -hide" data-role="ampromo-overlay"> 4074 <div data-role="focusable-start" tabindex="0"></div> 4075 <div class="ampromo-popup-wrapper" 4076 data-ampromo-js="items-content" 4077 role="dialog" 4078 aria-labelledby="ampromo-popup-description" 4079 aria-modal="true" 4080 > 4081 <h2 id="ampromo-popup-description"> 4082 Free Items </h2> 4083 <button class="ampromo-close" 4084 data-role="ampromo-popup-hide" 4085 aria-label="Close Dialog" 4086 ></button> 4087 <div class="ampromo-popup-container" data-ampromo-js="popup-container"></div> 4088 </div> 4089 <div data-role="focusable-end" tabindex="0"></div> 4090</div> 4091
4092<script type="text/x-magento-init"> 4093 { 4094 "[data-role=ampromo-overlay]": { 4095 "Amasty_Promo/js/popup": { 4096 "sourceUrl": "https://www.centerpointarchery.com/amasty_promo/popup/reload/", 4097 "uenc": "aHR0cHM6Ly93d3cuY2VudGVycG9pbnRhcmNoZXJ5LmNvbS9jaGVja291dC9jYXJ0Lw~~", 4098 "slickSettings": { 4099 "slidesToShow": 3, 4100 "slidesToScroll": 3, 4101 "dots": true, 4102 "infinite": false, 4103 "respondTo": "slider", 4104 "rows": 0, 4105 "responsive": [ 4106 { 4107 "breakpoint": 571, 4108 "settings": { 4109 "slidesToShow": 2, 4110 "slidesToScroll": 2 4111 } 4112 }, 4113 { 4114 "breakpoint": 281, 4115 "settings": { 4116 "slidesToShow": 1, 4117 "slidesToScroll": 1 4118 } 4119 } 4120 ] 4121 }, 4122 "commonQty": "0", 4123 "products": {"common_qty":0,"triggered_products":[],"promo_sku":[]}, 4124 "formUrl": "https://www.centerpointarchery.com/amasty_promo/cart/add/", 4125 "selectionMethod": 0, 4126 "giftsCounter": 0, 4127 "autoOpenPopup": false, 4128 "shouldUpdateCartSection": false, 4129 "priceFormat": {"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false} } 4130} 4131} 4132</script>
4132 4133</div>
4133<script> 4134 window.ga4ParentVsChild = 'parent'; 4135 window.ga4VariantEnabled = '0'; 4136 require(['jquery','weltpixel_ga4_persistentLayer','weltpixel_ga4_gtm', 'Magento_Customer/js/customer-data'], 4137 function ($, wpGa4PersDl ,wpGa4gtm, customerData) { 4138 if (window.ga4AllowServices) { 4139 $(document).ajaxComplete(function (event, xhr, settings) { 4140 if (settings.url.search('/customer\/section\/load/') > 0) { 4141 var response = xhr.responseJSON; 4142 if (response.wp_ga4) { 4143 var dataLayerData = $.parseJSON(response.wp_ga4.datalayer); 4144 for (index in dataLayerData) { 4145 window.dataLayer.push({ecommerce: null}); 4146 window.dataLayer.push(dataLayerData[index]); 4147 } 4148 } 4149 } 4150 }); 4151 var wpPersDlOptions = {'storageExpiryTime': 30 }; 4152 var wpGtmOptions = { 4153 'enabled': 0, 4154 'persDataLayer': wpGa4PersDl 4155 }; 4156 wpGa4PersDl.init(wpPersDlOptions); 4157 wpGa4gtm.trackPromotion(wpGtmOptions); 4158 } 4159 }); 4160 </script>
4160 4161
4161<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-aafa228070e6a667a44","applicationID":"1019693620","transactionName":"NQZTYxMDV0cFBxcMXgxMcFQVC1ZaSwcLAFIJDERDTgFYRhBLCgtVBxs=","queueTime":0,"applicationTime":593,"atts":"GUFEFVsZRBhGBUFfSh8e","errorBeacon":"bam.nr-data.net","agent":""}</script>
4161<script>(function(){function r(){try{var a=new PerformanceObserver(function(c){c=c.getEntries();for(var d=0;d<c.length;d++){var b=c[d];"first-contentful-paint"==b.name?h=b.startTime:"largest-contentful-paint"==b.entryType?k=b.startTime:"navigation"==b.entryType&&(l=0<=b.responseStart?b.responseStart:b.responseEnd,m=b.domContentLoadedEventStart,n=b.loadEventStart,p=b.domInteractive)}});a.observe({type:"navigation",buffered:!0});a.observe({type:"largest-contentful-paint",buffered:!0});a.observe({type:"paint", 4162buffered:!0});return!0}catch(c){return!1}}function e(a,c,d){a.set("url",window.location.href);a.set("d",""+c);a.set("il",""+d);navigator.sendBeacon("/.webscale/rum?"+a.toString())}function f(){function a(d,b){void 0!==b&&(b=Math.round(b),0<=b&&6E4>=b&&c.set(d,""+b))}if(r()){var c=new URLSearchParams;setTimeout(function(){a("fcp",h);a("lcp",k);a("ttfb",l);a("dcl",m);a("e",n);a("di",p);a("rsi",q);c.get("e")&&e(c,100,!0);window.removeEventListener("load",f)},100)}else window.removeEventListener("load", 4163f)}function g(){try{"interactive"===document.readyState&&(q=performance.now(),document.removeEventListener("readystatechange",g))}catch(a){document.removeEventListener("readystatechange",g)}}function t(a){var c=performance.now();try{window.requestIdleCallback(function(){a.set("e",""+Math.round(performance.now()-c));e(a,0,!1)})}catch(d){window.setTimeout(function(){a.set("e",""+Math.round(performance.now()-c));e(a,100,!1)},100)}}var h,k,l,m,n,p,q;document.addEventListener("readystatechange",g);window.addEventListener("load", 4164f);(function(){try{var a=new URLSearchParams;a.set("url",window.location.href);(new MutationObserver(function(){try{a.get("url")!==window.location.href&&(a.set("url",window.location.href),t(a))}catch(c){}})).observe(document.querySelector("body"),{childList:!0,subtree:!0})}catch(c){}})()})(); 4165</script>
4165</body> 4166</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.