1!(function () { 2 'use strict' 3 ;(t => { 4 const { 5 screen: { width: e, height: a }, 6 navigator: { language: r, doNotTrack: n, msDoNotTrack: i }, 7 location: o, 8 document: s, 9 history: c, 10 top: u, 11 doNotTrack: d, 12 } = t, 13 { hostname: l, href: h, origin: m } = o, 14 { currentScript: f, referrer: p } = s, 15 g = h.startsWith('data:') ? void 0 : t.localStorage 16 if (!f) return 17 const y = 'data-', 18 b = 'true', 19 v = f.getAttribute.bind(f), 20 w = v(y + 'website-id'), 21 N = v(y + 'host-url'), 22 S = v(y + 'tag'), 23 T = 'false' !== v(y + 'auto-track'), 24 k = v(y + 'do-not-track') === b, 25 A = v(y + 'exclude-search') === b, 26 j = v(y + 'exclude-hash') === b, 27 x = v(y + 'domains') || '', 28 O = x.split(',').map(t => t.trim()), 29 E = `${(N || 'https://api-gateway.umami.dev' || f.src.split('/').slice(0, -1).join('/')).replace(/\/$/, '')}/api/send`, 30 L = `${e}x${a}`, 31 $ = /data-umami-event-([\w-_]+)/, 32 D = y + 'umami-event', 33 K = 300, 34 U = () => ({ 35 website: w, 36 screen: L, 37 language: r, 38 title: z, 39 hostname: l, 40 url: P, 41 referrer: R, 42 tag: S || void 0, 43 }), 44 _ = (t, e, a) => { 45 a && 46 ((R = P), 47 (P = new URL(a, o.href)), 48 A && (P.search = ''), 49 j && (P.hash = ''), 50 (P = P.toString()), 51 P !== R && setTimeout(C, K)) 52 }, 53 B = () => 54 F || 55 !w || 56 (g && g.getItem('umami.disabled')) || 57 (x && !O.includes(l)) || 58 (k && 59 (() => { 60 const t = d || n || i 61 return 1 === t || '1' === t || 'yes' === t 62 })()), 63 W = async (t, e = 'event') => { 64 if (B()) return 65 const a = { 'Content-Type': 'application/json' } 66 void 0 !== J && (a['x-umami-cache'] = J) 67 try { 68 const r = await fetch(E, { 69 method: 'POST', 70 body: JSON.stringify({ type: e, payload: t }), 71 headers: a, 72 credentials: 'omit', 73 }), 74 n = await r.json() 75 n && ((F = !!n.disabled), (J = n.cache)) 76 } catch (t) {} 77 }, 78 q = () => { 79 M || 80 (C(), 81 (() => { 82 const t = (t, e, a) => { 83 const r = t[e] 84 return (...e) => (a.apply(null, e), r.apply(t, e)) 85 } 86 ;(c.pushState = t(c, 'pushState', _)), (c.replaceState = t(c, 'replaceState', _)) 87 })(), 88 (() => { 89 const t = new MutationObserver(([t]) => { 90 z = t && t.target ? t.target.text : void 0 91 }), 92 e = s.querySelector('head > title') 93 e && t.observe(e, { subtree: !0, characterData: !0, childList: !0 }) 94 })(), 95 s.addEventListener( 96 'click', 97 async t => { 98 const e = t => ['BUTTON', 'A'].includes(t), 99 a = async t => { 100 const e = t.getAttribute.bind(t), 101 a = e(D) 102 if (a) { 103 const r = {} 104 return ( 105 t.getAttributeNames().forEach(t => { 106 const a = t.match($) 107 a && (r[a[1]] = e(t)) 108 }), 109 C(a, r) 110 ) 111 } 112 }, 113 r = t.target, 114 n = e(r.tagName) 115 ? r 116 : ((t, a) => { 117 let r = t 118 for (let t = 0; t < a; t++) { 119 if (e(r.tagName)) return r 120 if (((r = r.parentElement), !r)) return null 121 } 122 })(r, 10) 123 if (!n) return a(r) 124 { 125 const { href: e, target: r } = n, 126 i = n.getAttribute(D) 127 if (i) 128 if ('A' === n.tagName) { 129 const s = 130 '_blank' === r || 131 t.ctrlKey || 132 t.shiftKey || 133 t.metaKey || 134 (t.button && 1 === t.button) 135 if (i && e) 136 return ( 137 s || t.preventDefault(), 138 a(n).then(() => { 139 s || (('_top' === r ? u.location : o).href = e) 140 }) 141 ) 142 } else if ('BUTTON' === n.tagName) return a(n) 143 } 144 }, 145 !0 146 ), 147 (M = !0)) 148 }, 149 C = (t, e) => 150 W( 151 'string' == typeof t 152 ? { ...U(), name: t, data: 'object' == typeof e ? e : void 0 } 153 : 'object' == typeof t 154 ? t 155 : 'function' == typeof t 156 ? t(U()) 157 : U() 158 ), 159 I = t => W({ ...U(), data: t }, 'identify') 160 t.umami || (t.umami = { track: C, identify: I }) 161 let J, 162 M, 163 P = h,
164 R = p.startsWith(m) ? '' : p, 165 z = s.title, 166 F = !1 167 T && !B() && ('complete' === s.readyState ? q() : s.addEventListener('readystatechange', q, !0)) 168 })(window) 169})()
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.