Last active
          February 25, 2025 15:53 
        
      - 
      
- 
        Save ruvnet/9449344bb7bf50aa90352063b4ac3e9e to your computer and use it in GitHub Desktop. 
    Source Code: Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflows - all through natural language commands.
  
        
      This file has been truncated, but you can view the full file.
    
    
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | #!/usr/bin/env -S node --no-warnings=ExperimentalWarning --enable-source-maps | |
| // Claude Code is a Beta product per Anthropic's Commercial Terms of Service. | |
| // By using Claude Code, you agree that all code acceptance or rejection decisions you make, | |
| // and the associated conversations in context, constitute Feedback under Anthropic's Commercial Terms, | |
| // and may be used to improve Anthropic's products, including training models. | |
| // You are responsible for reviewing any code suggestions before use. | |
| // (c) Anthropic PBC. All rights reserved. Use is subject to Anthropic's Commercial Terms of Service (https://www.anthropic.com/legal/commercial-terms). | |
| /** | |
| * CLI entry point for Claude Code | |
| * This file is kept minimal and delegates to the modular implementation | |
| */ | |
| import path from 'path'; | |
| import { | |
| fileURLToPath | |
| } from 'url'; | |
| // Get the directory name of the current module | |
| const __filename = fileURLToPath(import.meta.url); | |
| const __dirname = path.dirname(__filename); | |
| // Import the main entry point | |
| import './src/index.mjs'; | |
| // Version: 0.2.9 | |
| import { | |
| createRequire as CU2 | |
| } from "node:module"; | |
| var IU2 = Object.create; | |
| var { | |
| getPrototypeOf: dU2, | |
| defineProperty: ie, | |
| getOwnPropertyNames: GU2 | |
| } = Object; | |
| var ZU2 = Object.prototype.hasOwnProperty; | |
| var J1 = (I, d, G) => { | |
| G = I != null ? IU2(dU2(I)) : {}; | |
| let Z = d || !I || !I.__esModule ? ie(G, "default", { | |
| value: I, | |
| enumerable: !0 | |
| }) : G; | |
| for (let C of GU2(I)) | |
| if (!ZU2.call(Z, C)) ie(Z, C, { | |
| get: () => I[C], | |
| enumerable: !0 | |
| }); | |
| return Z | |
| }; | |
| var Y = (I, d) => () => (d || I((d = { | |
| exports: {} | |
| }).exports, d), d.exports); | |
| var Kv = (I, d) => { | |
| for (var G in d) ie(I, G, { | |
| get: d[G], | |
| enumerable: !0, | |
| configurable: !0, | |
| set: (Z) => d[G] = () => Z | |
| }) | |
| }; | |
| var Gw = (I, d) => () => (I && (d = I(I = 0)), d); | |
| var B1 = CU2(import.meta.url); | |
| var xG = Y((eN1) => { | |
| Object.defineProperty(eN1, "__esModule", { | |
| value: !0 | |
| }); | |
| var aN1 = Object.prototype.toString; | |
| function WU2(I) { | |
| switch (aN1.call(I)) { | |
| case "[object Error]": | |
| case "[object Exception]": | |
| case "[object DOMException]": | |
| return !0; | |
| default: | |
| return IO(I, Error) | |
| } | |
| } | |
| function GN(I, d) { | |
| return aN1.call(I) === `[object ${d}]` | |
| } | |
| function wU2(I) { | |
| return GN(I, "ErrorEvent") | |
| } | |
| function BU2(I) { | |
| return GN(I, "DOMError") | |
| } | |
| function AU2(I) { | |
| return GN(I, "DOMException") | |
| } | |
| function VU2(I) { | |
| return GN(I, "String") | |
| } | |
| function sN1(I) { | |
| return typeof I === "object" && I !== null && "__sentry_template_string__" in I && "__sentry_template_values__" in I | |
| } | |
| function XU2(I) { | |
| return I === null || sN1(I) || typeof I !== "object" && typeof I !== "function" | |
| } | |
| function oN1(I) { | |
| return GN(I, "Object") | |
| } | |
| function YU2(I) { | |
| return typeof Event !== "undefined" && IO(I, Event) | |
| } | |
| function _U2(I) { | |
| return typeof Element !== "undefined" && IO(I, Element) | |
| } | |
| function DU2(I) { | |
| return GN(I, "RegExp") | |
| } | |
| function HU2(I) { | |
| return Boolean(I && I.then && typeof I.then === "function") | |
| } | |
| function FU2(I) { | |
| return oN1(I) && "nativeEvent" in I && "preventDefault" in I && "stopPropagation" in I | |
| } | |
| function gU2(I) { | |
| return typeof I === "number" && I !== I | |
| } | |
| function IO(I, d) { | |
| try { | |
| return I instanceof d | |
| } catch (G) { | |
| return !1 | |
| } | |
| } | |
| function JU2(I) { | |
| return !!(typeof I === "object" && I !== null && (I.__isVue || I._isVue)) | |
| } | |
| eN1.isDOMError = BU2; | |
| eN1.isDOMException = AU2; | |
| eN1.isElement = _U2; | |
| eN1.isError = WU2; | |
| eN1.isErrorEvent = wU2; | |
| eN1.isEvent = YU2; | |
| eN1.isInstanceOf = IO; | |
| eN1.isNaN = gU2; | |
| eN1.isParameterizedString = sN1; | |
| eN1.isPlainObject = oN1; | |
| eN1.isPrimitive = XU2; | |
| eN1.isRegExp = DU2; | |
| eN1.isString = VU2; | |
| eN1.isSyntheticEvent = FU2; | |
| eN1.isThenable = HU2; | |
| eN1.isVueViewModel = JU2 | |
| }); | |
| var Nv = Y((Iz1) => { | |
| Object.defineProperty(Iz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var dO = xG(); | |
| function uU2(I, d = 0) { | |
| if (typeof I !== "string" || d === 0) return I; | |
| return I.length <= d ? I : `${I.slice(0,d)}...` | |
| } | |
| function TU2(I, d) { | |
| let G = I, | |
| Z = G.length; | |
| if (Z <= 150) return G; | |
| if (d > Z) d = Z; | |
| let C = Math.max(d - 60, 0); | |
| if (C < 5) C = 0; | |
| let W = Math.min(C + 140, Z); | |
| if (W > Z - 5) W = Z; | |
| if (W === Z) C = Math.max(W - 140, 0); | |
| if (G = G.slice(C, W), C > 0) G = `'{snip} ${G}`; | |
| if (W < Z) G += " {snip}"; | |
| return G | |
| } | |
| function OU2(I, d) { | |
| if (!Array.isArray(I)) return ""; | |
| let G = []; | |
| for (let Z = 0; Z < I.length; Z++) { | |
| let C = I[Z]; | |
| try { | |
| if (dO.isVueViewModel(C)) G.push("[VueViewModel]"); | |
| else G.push(String(C)) | |
| } catch (W) { | |
| G.push("[value cannot be serialized]") | |
| } | |
| } | |
| return G.join(d) | |
| } | |
| function tN1(I, d, G = !1) { | |
| if (!dO.isString(I)) return !1; | |
| if (dO.isRegExp(d)) return d.test(I); | |
| if (dO.isString(d)) return G ? I === d : I.includes(d); | |
| return !1 | |
| } | |
| function mU2(I, d = [], G = !1) { | |
| return d.some((Z) => tN1(I, Z, G)) | |
| } | |
| Iz1.isMatchingPattern = tN1; | |
| Iz1.safeJoin = OU2; | |
| Iz1.snipLine = TU2; | |
| Iz1.stringMatchesSomePattern = mU2; | |
| Iz1.truncate = uU2 | |
| }); | |
| var Cz1 = Y((Zz1) => { | |
| Object.defineProperty(Zz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var ne = xG(), | |
| xU2 = Nv(); | |
| function cU2(I, d, G = 250, Z, C, W, w) { | |
| if (!W.exception || !W.exception.values || !w || !ne.isInstanceOf(w.originalException, Error)) return; | |
| let B = W.exception.values.length > 0 ? W.exception.values[W.exception.values.length - 1] : void 0; | |
| if (B) W.exception.values = pU2(re(I, d, C, w.originalException, Z, W.exception.values, B, 0), G) | |
| } | |
| function re(I, d, G, Z, C, W, w, B) { | |
| if (W.length >= G + 1) return W; | |
| let A = [...W]; | |
| if (ne.isInstanceOf(Z[C], Error)) { | |
| dz1(w, B); | |
| let V = I(d, Z[C]), | |
| X = A.length; | |
| Gz1(V, C, X, B), A = re(I, d, G, Z[C], C, [V, ...A], V, X) | |
| } | |
| if (Array.isArray(Z.errors)) Z.errors.forEach((V, X) => { | |
| if (ne.isInstanceOf(V, Error)) { | |
| dz1(w, B); | |
| let _ = I(d, V), | |
| F = A.length; | |
| Gz1(_, `errors[${X}]`, F, B), A = re(I, d, G, V, C, [_, ...A], _, F) | |
| } | |
| }); | |
| return A | |
| } | |
| function dz1(I, d) { | |
| I.mechanism = I.mechanism || { | |
| type: "generic", | |
| handled: !0 | |
| }, I.mechanism = { | |
| ...I.mechanism, | |
| ...I.type === "AggregateError" && { | |
| is_exception_group: !0 | |
| }, | |
| exception_id: d | |
| } | |
| } | |
| function Gz1(I, d, G, Z) { | |
| I.mechanism = I.mechanism || { | |
| type: "generic", | |
| handled: !0 | |
| }, I.mechanism = { | |
| ...I.mechanism, | |
| type: "chained", | |
| source: d, | |
| exception_id: G, | |
| parent_id: Z | |
| } | |
| } | |
| function pU2(I, d) { | |
| return I.map((G) => { | |
| if (G.value) G.value = xU2.truncate(G.value, d); | |
| return G | |
| }) | |
| } | |
| Zz1.applyAggregateErrorsToEvent = cU2 | |
| }); | |
| var K7 = Y((Wz1) => { | |
| Object.defineProperty(Wz1, "__esModule", { | |
| value: !0 | |
| }); | |
| function GO(I) { | |
| return I && I.Math == Math ? I : void 0 | |
| } | |
| var ae = typeof globalThis == "object" && GO(globalThis) || typeof window == "object" && GO(window) || typeof self == "object" && GO(self) || typeof global == "object" && GO(global) || function() { | |
| return this | |
| }() || {}; | |
| function nU2() { | |
| return ae | |
| } | |
| function rU2(I, d, G) { | |
| let Z = G || ae, | |
| C = Z.__SENTRY__ = Z.__SENTRY__ || {}; | |
| return C[I] || (C[I] = d()) | |
| } | |
| Wz1.GLOBAL_OBJ = ae; | |
| Wz1.getGlobalObject = nU2; | |
| Wz1.getGlobalSingleton = rU2 | |
| }); | |
| var se = Y((wz1) => { | |
| Object.defineProperty(wz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var eU2 = xG(), | |
| tU2 = K7(), | |
| ZN = tU2.getGlobalObject(), | |
| Iv2 = 80; | |
| function dv2(I, d = {}) { | |
| if (!I) return "<unknown>"; | |
| try { | |
| let G = I, | |
| Z = 5, | |
| C = [], | |
| W = 0, | |
| w = 0, | |
| B = " > ", | |
| A = B.length, | |
| V, X = Array.isArray(d) ? d : d.keyAttrs, | |
| _ = !Array.isArray(d) && d.maxStringLength || Iv2; | |
| while (G && W++ < Z) { | |
| if (V = Gv2(G, X), V === "html" || W > 1 && w + C.length * A + V.length >= _) break; | |
| C.push(V), w += V.length, G = G.parentNode | |
| } | |
| return C.reverse().join(B) | |
| } catch (G) { | |
| return "<unknown>" | |
| } | |
| } | |
| function Gv2(I, d) { | |
| let G = I, | |
| Z = [], | |
| C, W, w, B, A; | |
| if (!G || !G.tagName) return ""; | |
| if (ZN.HTMLElement) { | |
| if (G instanceof HTMLElement && G.dataset && G.dataset.sentryComponent) return G.dataset.sentryComponent | |
| } | |
| Z.push(G.tagName.toLowerCase()); | |
| let V = d && d.length ? d.filter((_) => G.getAttribute(_)).map((_) => [_, G.getAttribute(_)]) : null; | |
| if (V && V.length) V.forEach((_) => { | |
| Z.push(`[${_[0]}="${_[1]}"]`) | |
| }); | |
| else { | |
| if (G.id) Z.push(`#${G.id}`); | |
| if (C = G.className, C && eU2.isString(C)) { | |
| W = C.split(/\s+/); | |
| for (A = 0; A < W.length; A++) Z.push(`.${W[A]}`) | |
| } | |
| } | |
| let X = ["aria-label", "type", "name", "title", "alt"]; | |
| for (A = 0; A < X.length; A++) | |
| if (w = X[A], B = G.getAttribute(w), B) Z.push(`[${w}="${B}"]`); | |
| return Z.join("") | |
| } | |
| function Zv2() { | |
| try { | |
| return ZN.document.location.href | |
| } catch (I) { | |
| return "" | |
| } | |
| } | |
| function Cv2(I) { | |
| if (ZN.document && ZN.document.querySelector) return ZN.document.querySelector(I); | |
| return null | |
| } | |
| function Wv2(I) { | |
| if (!ZN.HTMLElement) return null; | |
| let d = I, | |
| G = 5; | |
| for (let Z = 0; Z < G; Z++) { | |
| if (!d) return null; | |
| if (d instanceof HTMLElement && d.dataset.sentryComponent) return d.dataset.sentryComponent; | |
| d = d.parentNode | |
| } | |
| return null | |
| } | |
| wz1.getComponentName = Wv2; | |
| wz1.getDomElement = Cv2; | |
| wz1.getLocationHref = Zv2; | |
| wz1.htmlTreeAsString = dv2 | |
| }); | |
| var Zw = Y((Bz1) => { | |
| Object.defineProperty(Bz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Xv2 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; | |
| Bz1.DEBUG_BUILD = Xv2 | |
| }); | |
| var DC = Y((Vz1) => { | |
| Object.defineProperty(Vz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var _v2 = Zw(), | |
| oe = K7(), | |
| Dv2 = "Sentry Logger ", | |
| ee = ["debug", "info", "warn", "error", "log", "assert", "trace"], | |
| te = {}; | |
| function Az1(I) { | |
| if (!("console" in oe.GLOBAL_OBJ)) return I(); | |
| let d = oe.GLOBAL_OBJ.console, | |
| G = {}, | |
| Z = Object.keys(te); | |
| Z.forEach((C) => { | |
| let W = te[C]; | |
| G[C] = d[C], d[C] = W | |
| }); | |
| try { | |
| return I() | |
| } finally { | |
| Z.forEach((C) => { | |
| d[C] = G[C] | |
| }) | |
| } | |
| } | |
| function Hv2() { | |
| let I = !1, | |
| d = { | |
| enable: () => { | |
| I = !0 | |
| }, | |
| disable: () => { | |
| I = !1 | |
| }, | |
| isEnabled: () => I | |
| }; | |
| if (_v2.DEBUG_BUILD) ee.forEach((G) => { | |
| d[G] = (...Z) => { | |
| if (I) Az1(() => { | |
| oe.GLOBAL_OBJ.console[G](`${Dv2}[${G}]:`, ...Z) | |
| }) | |
| } | |
| }); | |
| else ee.forEach((G) => { | |
| d[G] = () => { | |
| return | |
| } | |
| }); | |
| return d | |
| } | |
| var Fv2 = Hv2(); | |
| Vz1.CONSOLE_LEVELS = ee; | |
| Vz1.consoleSandbox = Az1; | |
| Vz1.logger = Fv2; | |
| Vz1.originalConsoleMethods = te | |
| }); | |
| var It = Y((_z1) => { | |
| Object.defineProperty(_z1, "__esModule", { | |
| value: !0 | |
| }); | |
| var zv2 = Zw(), | |
| zv = DC(), | |
| Qv2 = /^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/; | |
| function fv2(I) { | |
| return I === "http" || I === "https" | |
| } | |
| function qv2(I, d = !1) { | |
| let { | |
| host: G, | |
| path: Z, | |
| pass: C, | |
| port: W, | |
| projectId: w, | |
| protocol: B, | |
| publicKey: A | |
| } = I; | |
| return `${B}://${A}${d&&C?`:${C}`:""}@${G}${W?`:${W}`:""}/${Z?`${Z}/`:Z}${w}` | |
| } | |
| function Xz1(I) { | |
| let d = Qv2.exec(I); | |
| if (!d) { | |
| zv.consoleSandbox(() => { | |
| console.error(`Invalid Sentry Dsn: ${I}`) | |
| }); | |
| return | |
| } | |
| let [G, Z, C = "", W, w = "", B] = d.slice(1), A = "", V = B, X = V.split("/"); | |
| if (X.length > 1) A = X.slice(0, -1).join("/"), V = X.pop(); | |
| if (V) { | |
| let _ = V.match(/^\d+/); | |
| if (_) V = _[0] | |
| } | |
| return Yz1({ | |
| host: W, | |
| pass: C, | |
| path: A, | |
| projectId: V, | |
| port: w, | |
| protocol: G, | |
| publicKey: Z | |
| }) | |
| } | |
| function Yz1(I) { | |
| return { | |
| protocol: I.protocol, | |
| publicKey: I.publicKey || "", | |
| pass: I.pass || "", | |
| host: I.host, | |
| port: I.port || "", | |
| path: I.path || "", | |
| projectId: I.projectId | |
| } | |
| } | |
| function Rv2(I) { | |
| if (!zv2.DEBUG_BUILD) return !0; | |
| let { | |
| port: d, | |
| projectId: G, | |
| protocol: Z | |
| } = I; | |
| if (["protocol", "publicKey", "host", "projectId"].find((w) => { | |
| if (!I[w]) return zv.logger.error(`Invalid Sentry Dsn: ${w} missing`), !0; | |
| return !1 | |
| })) return !1; | |
| if (!G.match(/^\d+$/)) return zv.logger.error(`Invalid Sentry Dsn: Invalid projectId ${G}`), !1; | |
| if (!fv2(Z)) return zv.logger.error(`Invalid Sentry Dsn: Invalid protocol ${Z}`), !1; | |
| if (d && isNaN(parseInt(d, 10))) return zv.logger.error(`Invalid Sentry Dsn: Invalid port ${d}`), !1; | |
| return !0 | |
| } | |
| function Uv2(I) { | |
| let d = typeof I === "string" ? Xz1(I) : Yz1(I); | |
| if (!d || !Rv2(d)) return; | |
| return d | |
| } | |
| _z1.dsnFromString = Xz1; | |
| _z1.dsnToString = qv2; | |
| _z1.makeDsn = Uv2 | |
| }); | |
| var dt = Y((Hz1) => { | |
| Object.defineProperty(Hz1, "__esModule", { | |
| value: !0 | |
| }); | |
| class Dz1 extends Error { | |
| constructor(I, d = "warn") { | |
| super(I); | |
| this.message = I, this.name = new.target.prototype.constructor.name, Object.setPrototypeOf(this, new.target.prototype), this.logLevel = d | |
| } | |
| } | |
| Hz1.SentryError = Dz1 | |
| }); | |
| var cG = Y((Qz1) => { | |
| Object.defineProperty(Qz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Lv2 = se(), | |
| yv2 = Zw(), | |
| CN = xG(), | |
| Pv2 = DC(), | |
| Fz1 = Nv(); | |
| function $v2(I, d, G) { | |
| if (!(d in I)) return; | |
| let Z = I[d], | |
| C = G(Z); | |
| if (typeof C === "function") Nz1(C, Z); | |
| I[d] = C | |
| } | |
| function Kz1(I, d, G) { | |
| try { | |
| Object.defineProperty(I, d, { | |
| value: G, | |
| writable: !0, | |
| configurable: !0 | |
| }) | |
| } catch (Z) { | |
| yv2.DEBUG_BUILD && Pv2.logger.log(`Failed to add non-enumerable property "${d}" to object`, I) | |
| } | |
| } | |
| function Nz1(I, d) { | |
| try { | |
| let G = d.prototype || {}; | |
| I.prototype = d.prototype = G, Kz1(I, "__sentry_original__", d) | |
| } catch (G) {} | |
| } | |
| function uv2(I) { | |
| return I.__sentry_original__ | |
| } | |
| function Tv2(I) { | |
| return Object.keys(I).map((d) => `${encodeURIComponent(d)}=${encodeURIComponent(I[d])}`).join("&") | |
| } | |
| function zz1(I) { | |
| if (CN.isError(I)) return { | |
| message: I.message, | |
| name: I.name, | |
| stack: I.stack, | |
| ...Jz1(I) | |
| }; | |
| else if (CN.isEvent(I)) { | |
| let d = { | |
| type: I.type, | |
| target: gz1(I.target), | |
| currentTarget: gz1(I.currentTarget), | |
| ...Jz1(I) | |
| }; | |
| if (typeof CustomEvent !== "undefined" && CN.isInstanceOf(I, CustomEvent)) d.detail = I.detail; | |
| return d | |
| } else return I | |
| } | |
| function gz1(I) { | |
| try { | |
| return CN.isElement(I) ? Lv2.htmlTreeAsString(I) : Object.prototype.toString.call(I) | |
| } catch (d) { | |
| return "<unknown>" | |
| } | |
| } | |
| function Jz1(I) { | |
| if (typeof I === "object" && I !== null) { | |
| let d = {}; | |
| for (let G in I) | |
| if (Object.prototype.hasOwnProperty.call(I, G)) d[G] = I[G]; | |
| return d | |
| } else return {} | |
| } | |
| function Ov2(I, d = 40) { | |
| let G = Object.keys(zz1(I)); | |
| if (G.sort(), !G.length) return "[object has no keys]"; | |
| if (G[0].length >= d) return Fz1.truncate(G[0], d); | |
| for (let Z = G.length; Z > 0; Z--) { | |
| let C = G.slice(0, Z).join(", "); | |
| if (C.length > d) continue; | |
| if (Z === G.length) return C; | |
| return Fz1.truncate(C, d) | |
| } | |
| return "" | |
| } | |
| function mv2(I) { | |
| return Gt(I, new Map) | |
| } | |
| function Gt(I, d) { | |
| if (lv2(I)) { | |
| let G = d.get(I); | |
| if (G !== void 0) return G; | |
| let Z = {}; | |
| d.set(I, Z); | |
| for (let C of Object.keys(I)) | |
| if (typeof I[C] !== "undefined") Z[C] = Gt(I[C], d); | |
| return Z | |
| } | |
| if (Array.isArray(I)) { | |
| let G = d.get(I); | |
| if (G !== void 0) return G; | |
| let Z = []; | |
| return d.set(I, Z), I.forEach((C) => { | |
| Z.push(Gt(C, d)) | |
| }), Z | |
| } | |
| return I | |
| } | |
| function lv2(I) { | |
| if (!CN.isPlainObject(I)) return !1; | |
| try { | |
| let d = Object.getPrototypeOf(I).constructor.name; | |
| return !d || d === "Object" | |
| } catch (d) { | |
| return !0 | |
| } | |
| } | |
| function bv2(I) { | |
| let d; | |
| switch (!0) { | |
| case (I === void 0 || I === null): | |
| d = new String(I); | |
| break; | |
| case (typeof I === "symbol" || typeof I === "bigint"): | |
| d = Object(I); | |
| break; | |
| case CN.isPrimitive(I): | |
| d = new I.constructor(I); | |
| break; | |
| default: | |
| d = I; | |
| break | |
| } | |
| return d | |
| } | |
| Qz1.addNonEnumerableProperty = Kz1; | |
| Qz1.convertToPlainObject = zz1; | |
| Qz1.dropUndefinedKeys = mv2; | |
| Qz1.extractExceptionKeysForMessage = Ov2; | |
| Qz1.fill = $v2; | |
| Qz1.getOriginalFunction = uv2; | |
| Qz1.markFunctionWrapped = Nz1; | |
| Qz1.objectify = bv2; | |
| Qz1.urlEncode = Tv2 | |
| }); | |
| var ZO = Y((qz1) => { | |
| Object.defineProperty(qz1, "__esModule", { | |
| value: !0 | |
| }); | |
| function fz1(I, d = !1) { | |
| return !(d || I && !I.startsWith("/") && !I.match(/^[A-Z]:/) && !I.startsWith(".") && !I.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//)) && I !== void 0 && !I.includes("node_modules/") | |
| } | |
| function av2(I) { | |
| let d = /^\s*[-]{4,}$/, | |
| G = /at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/; | |
| return (Z) => { | |
| let C = Z.match(G); | |
| if (C) { | |
| let W, w, B, A, V; | |
| if (C[1]) { | |
| B = C[1]; | |
| let F = B.lastIndexOf("."); | |
| if (B[F - 1] === ".") F--; | |
| if (F > 0) { | |
| W = B.slice(0, F), w = B.slice(F + 1); | |
| let g = W.indexOf(".Module"); | |
| if (g > 0) B = B.slice(g + 1), W = W.slice(0, g) | |
| } | |
| A = void 0 | |
| } | |
| if (w) A = W, V = w; | |
| if (w === "<anonymous>") V = void 0, B = void 0; | |
| if (B === void 0) V = V || "<anonymous>", B = A ? `${A}.${V}` : V; | |
| let X = C[2] && C[2].startsWith("file://") ? C[2].slice(7) : C[2], | |
| _ = C[5] === "native"; | |
| if (X && X.match(/\/[A-Z]:/)) X = X.slice(1); | |
| if (!X && C[5] && !_) X = C[5]; | |
| return { | |
| filename: X, | |
| module: I ? I(X) : void 0, | |
| function: B, | |
| lineno: parseInt(C[3], 10) || void 0, | |
| colno: parseInt(C[4], 10) || void 0, | |
| in_app: fz1(X, _) | |
| } | |
| } | |
| if (Z.match(d)) return { | |
| filename: Z | |
| }; | |
| return | |
| } | |
| } | |
| qz1.filenameIsInApp = fz1; | |
| qz1.node = av2 | |
| }); | |
| var CO = Y((Lz1) => { | |
| Object.defineProperty(Lz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var vz1 = ZO(), | |
| Ez1 = 50, | |
| Rz1 = /\(error: (.*)\)/, | |
| Uz1 = /captureMessage|captureException/; | |
| function Mz1(...I) { | |
| let d = I.sort((G, Z) => G[0] - Z[0]).map((G) => G[1]); | |
| return (G, Z = 0) => { | |
| let C = [], | |
| W = G.split(` | |
| `); | |
| for (let w = Z; w < W.length; w++) { | |
| let B = W[w]; | |
| if (B.length > 1024) continue; | |
| let A = Rz1.test(B) ? B.replace(Rz1, "$1") : B; | |
| if (A.match(/\S*Error: /)) continue; | |
| for (let V of d) { | |
| let X = V(A); | |
| if (X) { | |
| C.push(X); | |
| break | |
| } | |
| } | |
| if (C.length >= Ez1) break | |
| } | |
| return Sz1(C) | |
| } | |
| } | |
| function ev2(I) { | |
| if (Array.isArray(I)) return Mz1(...I); | |
| return I | |
| } | |
| function Sz1(I) { | |
| if (!I.length) return []; | |
| let d = Array.from(I); | |
| if (/sentryWrapped/.test(d[d.length - 1].function || "")) d.pop(); | |
| if (d.reverse(), Uz1.test(d[d.length - 1].function || "")) { | |
| if (d.pop(), Uz1.test(d[d.length - 1].function || "")) d.pop() | |
| } | |
| return d.slice(0, Ez1).map((G) => ({ | |
| ...G, | |
| filename: G.filename || d[d.length - 1].filename, | |
| function: G.function || "?" | |
| })) | |
| } | |
| var Zt = "<anonymous>"; | |
| function tv2(I) { | |
| try { | |
| if (!I || typeof I !== "function") return Zt; | |
| return I.name || Zt | |
| } catch (d) { | |
| return Zt | |
| } | |
| } | |
| function IE2(I) { | |
| return [90, vz1.node(I)] | |
| } | |
| Lz1.filenameIsInApp = vz1.filenameIsInApp; | |
| Lz1.createStackParser = Mz1; | |
| Lz1.getFunctionName = tv2; | |
| Lz1.nodeStackLineParser = IE2; | |
| Lz1.stackParserFromStackParserOptions = ev2; | |
| Lz1.stripSentryFramesAndReverse = Sz1 | |
| }); | |
| var zA = Y((Pz1) => { | |
| Object.defineProperty(Pz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var BE2 = Zw(), | |
| AE2 = DC(), | |
| VE2 = CO(), | |
| WN = {}, | |
| yz1 = {}; | |
| function XE2(I, d) { | |
| WN[I] = WN[I] || [], WN[I].push(d) | |
| } | |
| function YE2() { | |
| Object.keys(WN).forEach((I) => { | |
| WN[I] = void 0 | |
| }) | |
| } | |
| function _E2(I, d) { | |
| if (!yz1[I]) d(), yz1[I] = !0 | |
| } | |
| function DE2(I, d) { | |
| let G = I && WN[I]; | |
| if (!G) return; | |
| for (let Z of G) try { | |
| Z(d) | |
| } catch (C) { | |
| BE2.DEBUG_BUILD && AE2.logger.error(`Error while triggering instrumentation handler. | |
| Type: ${I} | |
| Name: ${VE2.getFunctionName(Z)} | |
| Error:`, C) | |
| } | |
| } | |
| Pz1.addHandler = XE2; | |
| Pz1.maybeInstrument = _E2; | |
| Pz1.resetInstrumentationHandlers = YE2; | |
| Pz1.triggerHandlers = DE2 | |
| }); | |
| var wt = Y(($z1) => { | |
| Object.defineProperty($z1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Ct = DC(), | |
| KE2 = cG(), | |
| WO = K7(), | |
| Wt = zA(); | |
| function NE2(I) { | |
| Wt.addHandler("console", I), Wt.maybeInstrument("console", zE2) | |
| } | |
| function zE2() { | |
| if (!("console" in WO.GLOBAL_OBJ)) return; | |
| Ct.CONSOLE_LEVELS.forEach(function(I) { | |
| if (!(I in WO.GLOBAL_OBJ.console)) return; | |
| KE2.fill(WO.GLOBAL_OBJ.console, I, function(d) { | |
| return Ct.originalConsoleMethods[I] = d, | |
| function(...G) { | |
| let Z = { | |
| args: G, | |
| level: I | |
| }; | |
| Wt.triggerHandlers("console", Z); | |
| let C = Ct.originalConsoleMethods[I]; | |
| C && C.apply(WO.GLOBAL_OBJ.console, G) | |
| } | |
| }) | |
| }) | |
| } | |
| $z1.addConsoleInstrumentationHandler = NE2 | |
| }); | |
| var Qv = Y((Tz1) => { | |
| Object.defineProperty(Tz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var fE2 = cG(), | |
| Bt = Nv(), | |
| qE2 = K7(); | |
| function RE2() { | |
| let I = qE2.GLOBAL_OBJ, | |
| d = I.crypto || I.msCrypto, | |
| G = () => Math.random() * 16; | |
| try { | |
| if (d && d.randomUUID) return d.randomUUID().replace(/-/g, ""); | |
| if (d && d.getRandomValues) G = () => { | |
| let Z = new Uint8Array(1); | |
| return d.getRandomValues(Z), Z[0] | |
| } | |
| } catch (Z) {} | |
| return ([1e7] + 1000 + 4000 + 8000 + 100000000000).replace(/[018]/g, (Z) => (Z ^ (G() & 15) >> Z / 4).toString(16)) | |
| } | |
| function uz1(I) { | |
| return I.exception && I.exception.values ? I.exception.values[0] : void 0 | |
| } | |
| function UE2(I) { | |
| let { | |
| message: d, | |
| event_id: G | |
| } = I; | |
| if (d) return d; | |
| let Z = uz1(I); | |
| if (Z) { | |
| if (Z.type && Z.value) return `${Z.type}: ${Z.value}`; | |
| return Z.type || Z.value || G || "<unknown>" | |
| } | |
| return G || "<unknown>" | |
| } | |
| function vE2(I, d, G) { | |
| let Z = I.exception = I.exception || {}, | |
| C = Z.values = Z.values || [], | |
| W = C[0] = C[0] || {}; | |
| if (!W.value) W.value = d || ""; | |
| if (!W.type) W.type = G || "Error" | |
| } | |
| function EE2(I, d) { | |
| let G = uz1(I); | |
| if (!G) return; | |
| let Z = { | |
| type: "generic", | |
| handled: !0 | |
| }, | |
| C = G.mechanism; | |
| if (G.mechanism = { | |
| ...Z, | |
| ...C, | |
| ...d | |
| }, d && "data" in d) { | |
| let W = { | |
| ...C && C.data, | |
| ...d.data | |
| }; | |
| G.mechanism.data = W | |
| } | |
| } | |
| var ME2 = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; | |
| function SE2(I) { | |
| let d = I.match(ME2) || [], | |
| G = parseInt(d[1], 10), | |
| Z = parseInt(d[2], 10), | |
| C = parseInt(d[3], 10); | |
| return { | |
| buildmetadata: d[5], | |
| major: isNaN(G) ? void 0 : G, | |
| minor: isNaN(Z) ? void 0 : Z, | |
| patch: isNaN(C) ? void 0 : C, | |
| prerelease: d[4] | |
| } | |
| } | |
| function LE2(I, d, G = 5) { | |
| if (d.lineno === void 0) return; | |
| let Z = I.length, | |
| C = Math.max(Math.min(Z - 1, d.lineno - 1), 0); | |
| d.pre_context = I.slice(Math.max(0, C - G), C).map((W) => Bt.snipLine(W, 0)), d.context_line = Bt.snipLine(I[Math.min(Z - 1, C)], d.colno || 0), d.post_context = I.slice(Math.min(C + 1, Z), C + 1 + G).map((W) => Bt.snipLine(W, 0)) | |
| } | |
| function yE2(I) { | |
| if (I && I.__sentry_captured__) return !0; | |
| try { | |
| fE2.addNonEnumerableProperty(I, "__sentry_captured__", !0) | |
| } catch (d) {} | |
| return !1 | |
| } | |
| function PE2(I) { | |
| return Array.isArray(I) ? I : [I] | |
| } | |
| Tz1.addContextToFrame = LE2; | |
| Tz1.addExceptionMechanism = EE2; | |
| Tz1.addExceptionTypeValue = vE2; | |
| Tz1.arrayify = PE2; | |
| Tz1.checkOrSetAlreadyCaught = yE2; | |
| Tz1.getEventDescription = UE2; | |
| Tz1.parseSemver = SE2; | |
| Tz1.uuid4 = RE2 | |
| }); | |
| var Yt = Y((bz1) => { | |
| Object.defineProperty(bz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var jE2 = Qv(), | |
| wO = cG(), | |
| kE2 = K7(), | |
| At = zA(), | |
| wN = kE2.GLOBAL_OBJ, | |
| xE2 = 1000, | |
| Oz1, Vt, Xt; | |
| function cE2(I) { | |
| At.addHandler("dom", I), At.maybeInstrument("dom", lz1) | |
| } | |
| function lz1() { | |
| if (!wN.document) return; | |
| let I = At.triggerHandlers.bind(null, "dom"), | |
| d = mz1(I, !0); | |
| wN.document.addEventListener("click", d, !1), wN.document.addEventListener("keypress", d, !1), ["EventTarget", "Node"].forEach((G) => { | |
| let Z = wN[G] && wN[G].prototype; | |
| if (!Z || !Z.hasOwnProperty || !Z.hasOwnProperty("addEventListener")) return; | |
| wO.fill(Z, "addEventListener", function(C) { | |
| return function(W, w, B) { | |
| if (W === "click" || W == "keypress") try { | |
| let A = this, | |
| V = A.__sentry_instrumentation_handlers__ = A.__sentry_instrumentation_handlers__ || {}, | |
| X = V[W] = V[W] || { | |
| refCount: 0 | |
| }; | |
| if (!X.handler) { | |
| let _ = mz1(I); | |
| X.handler = _, C.call(this, W, _, B) | |
| } | |
| X.refCount++ | |
| } catch (A) {} | |
| return C.call(this, W, w, B) | |
| } | |
| }), wO.fill(Z, "removeEventListener", function(C) { | |
| return function(W, w, B) { | |
| if (W === "click" || W == "keypress") try { | |
| let A = this, | |
| V = A.__sentry_instrumentation_handlers__ || {}, | |
| X = V[W]; | |
| if (X) { | |
| if (X.refCount--, X.refCount <= 0) C.call(this, W, X.handler, B), X.handler = void 0, delete V[W]; | |
| if (Object.keys(V).length === 0) delete A.__sentry_instrumentation_handlers__ | |
| } | |
| } catch (A) {} | |
| return C.call(this, W, w, B) | |
| } | |
| }) | |
| }) | |
| } | |
| function pE2(I) { | |
| if (I.type !== Vt) return !1; | |
| try { | |
| if (!I.target || I.target._sentryId !== Xt) return !1 | |
| } catch (d) {} | |
| return !0 | |
| } | |
| function iE2(I, d) { | |
| if (I !== "keypress") return !1; | |
| if (!d || !d.tagName) return !0; | |
| if (d.tagName === "INPUT" || d.tagName === "TEXTAREA" || d.isContentEditable) return !1; | |
| return !0 | |
| } | |
| function mz1(I, d = !1) { | |
| return (G) => { | |
| if (!G || G._sentryCaptured) return; | |
| let Z = nE2(G); | |
| if (iE2(G.type, Z)) return; | |
| if (wO.addNonEnumerableProperty(G, "_sentryCaptured", !0), Z && !Z._sentryId) wO.addNonEnumerableProperty(Z, "_sentryId", jE2.uuid4()); | |
| let C = G.type === "keypress" ? "input" : G.type; | |
| if (!pE2(G)) I({ | |
| event: G, | |
| name: C, | |
| global: d | |
| }), Vt = G.type, Xt = Z ? Z._sentryId : void 0; | |
| clearTimeout(Oz1), Oz1 = wN.setTimeout(() => { | |
| Xt = void 0, Vt = void 0 | |
| }, xE2) | |
| } | |
| } | |
| function nE2(I) { | |
| try { | |
| return I.target | |
| } catch (d) { | |
| return null | |
| } | |
| } | |
| bz1.addClickKeypressInstrumentationHandler = cE2; | |
| bz1.instrumentDOM = lz1 | |
| }); | |
| var Ht = Y((hz1) => { | |
| Object.defineProperty(hz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var sE2 = Zw(), | |
| oE2 = DC(), | |
| eE2 = K7(), | |
| BO = eE2.getGlobalObject(); | |
| function tE2() { | |
| try { | |
| return new ErrorEvent(""), !0 | |
| } catch (I) { | |
| return !1 | |
| } | |
| } | |
| function IM2() { | |
| try { | |
| return new DOMError(""), !0 | |
| } catch (I) { | |
| return !1 | |
| } | |
| } | |
| function dM2() { | |
| try { | |
| return new DOMException(""), !0 | |
| } catch (I) { | |
| return !1 | |
| } | |
| } | |
| function Dt() { | |
| if (!("fetch" in BO)) return !1; | |
| try { | |
| return new Request("http://www.example.com"), !0 | |
| } catch (I) { | |
| return !1 | |
| } | |
| } | |
| function _t(I) { | |
| return I && /^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(I.toString()) | |
| } | |
| function GM2() { | |
| if (typeof EdgeRuntime === "string") return !0; | |
| if (!Dt()) return !1; | |
| if (_t(BO.fetch)) return !0; | |
| let I = !1, | |
| d = BO.document; | |
| if (d && typeof d.createElement === "function") try { | |
| let G = d.createElement("iframe"); | |
| if (G.hidden = !0, d.head.appendChild(G), G.contentWindow && G.contentWindow.fetch) I = _t(G.contentWindow.fetch); | |
| d.head.removeChild(G) | |
| } catch (G) { | |
| sE2.DEBUG_BUILD && oE2.logger.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ", G) | |
| } | |
| return I | |
| } | |
| function ZM2() { | |
| return "ReportingObserver" in BO | |
| } | |
| function CM2() { | |
| if (!Dt()) return !1; | |
| try { | |
| return new Request("_", { | |
| referrerPolicy: "origin" | |
| }), !0 | |
| } catch (I) { | |
| return !1 | |
| } | |
| } | |
| hz1.isNativeFetch = _t; | |
| hz1.supportsDOMError = IM2; | |
| hz1.supportsDOMException = dM2; | |
| hz1.supportsErrorEvent = tE2; | |
| hz1.supportsFetch = Dt; | |
| hz1.supportsNativeFetch = GM2; | |
| hz1.supportsReferrerPolicy = CM2; | |
| hz1.supportsReportingObserver = ZM2 | |
| }); | |
| var gt = Y((cz1) => { | |
| Object.defineProperty(cz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var DM2 = cG(), | |
| HM2 = Ht(), | |
| jz1 = K7(), | |
| fv = zA(); | |
| function FM2(I) { | |
| fv.addHandler("fetch", I), fv.maybeInstrument("fetch", gM2) | |
| } | |
| function gM2() { | |
| if (!HM2.supportsNativeFetch()) return; | |
| DM2.fill(jz1.GLOBAL_OBJ, "fetch", function(I) { | |
| return function(...d) { | |
| let { | |
| method: G, | |
| url: Z | |
| } = xz1(d), C = { | |
| args: d, | |
| fetchData: { | |
| method: G, | |
| url: Z | |
| }, | |
| startTimestamp: Date.now() | |
| }; | |
| return fv.triggerHandlers("fetch", { | |
| ...C | |
| }), I.apply(jz1.GLOBAL_OBJ, d).then((W) => { | |
| let w = { | |
| ...C, | |
| endTimestamp: Date.now(), | |
| response: W | |
| }; | |
| return fv.triggerHandlers("fetch", w), W | |
| }, (W) => { | |
| let w = { | |
| ...C, | |
| endTimestamp: Date.now(), | |
| error: W | |
| }; | |
| throw fv.triggerHandlers("fetch", w), W | |
| }) | |
| } | |
| }) | |
| } | |
| function Ft(I, d) { | |
| return !!I && typeof I === "object" && !!I[d] | |
| } | |
| function kz1(I) { | |
| if (typeof I === "string") return I; | |
| if (!I) return ""; | |
| if (Ft(I, "url")) return I.url; | |
| if (I.toString) return I.toString(); | |
| return "" | |
| } | |
| function xz1(I) { | |
| if (I.length === 0) return { | |
| method: "GET", | |
| url: "" | |
| }; | |
| if (I.length === 2) { | |
| let [G, Z] = I; | |
| return { | |
| url: kz1(G), | |
| method: Ft(Z, "method") ? String(Z.method).toUpperCase() : "GET" | |
| } | |
| } | |
| let d = I[0]; | |
| return { | |
| url: kz1(d), | |
| method: Ft(d, "method") ? String(d.method).toUpperCase() : "GET" | |
| } | |
| } | |
| cz1.addFetchInstrumentationHandler = FM2; | |
| cz1.parseFetchArgs = xz1 | |
| }); | |
| var Nt = Y((pz1) => { | |
| Object.defineProperty(pz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Jt = K7(), | |
| Kt = zA(), | |
| AO = null; | |
| function NM2(I) { | |
| Kt.addHandler("error", I), Kt.maybeInstrument("error", zM2) | |
| } | |
| function zM2() { | |
| AO = Jt.GLOBAL_OBJ.onerror, Jt.GLOBAL_OBJ.onerror = function(I, d, G, Z, C) { | |
| let W = { | |
| column: Z, | |
| error: C, | |
| line: G, | |
| msg: I, | |
| url: d | |
| }; | |
| if (Kt.triggerHandlers("error", W), AO && !AO.__SENTRY_LOADER__) return AO.apply(this, arguments); | |
| return !1 | |
| }, Jt.GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = !0 | |
| } | |
| pz1.addGlobalErrorInstrumentationHandler = NM2 | |
| }); | |
| var ft = Y((iz1) => { | |
| Object.defineProperty(iz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var zt = K7(), | |
| Qt = zA(), | |
| VO = null; | |
| function fM2(I) { | |
| Qt.addHandler("unhandledrejection", I), Qt.maybeInstrument("unhandledrejection", qM2) | |
| } | |
| function qM2() { | |
| VO = zt.GLOBAL_OBJ.onunhandledrejection, zt.GLOBAL_OBJ.onunhandledrejection = function(I) { | |
| let d = I; | |
| if (Qt.triggerHandlers("unhandledrejection", d), VO && !VO.__SENTRY_LOADER__) return VO.apply(this, arguments); | |
| return !0 | |
| }, zt.GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = !0 | |
| } | |
| iz1.addGlobalUnhandledRejectionInstrumentationHandler = fM2 | |
| }); | |
| var qt = Y((nz1) => { | |
| Object.defineProperty(nz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var UM2 = K7(), | |
| XO = UM2.getGlobalObject(); | |
| function vM2() { | |
| let I = XO.chrome, | |
| d = I && I.app && I.app.runtime, | |
| G = "history" in XO && !!XO.history.pushState && !!XO.history.replaceState; | |
| return !d && G | |
| } | |
| nz1.supportsHistory = vM2 | |
| }); | |
| var Rt = Y((az1) => { | |
| Object.defineProperty(az1, "__esModule", { | |
| value: !0 | |
| }); | |
| var rz1 = cG(); | |
| Zw(); | |
| DC(); | |
| var MM2 = K7(), | |
| SM2 = qt(), | |
| _O = zA(), | |
| qv = MM2.GLOBAL_OBJ, | |
| YO; | |
| function LM2(I) { | |
| _O.addHandler("history", I), _O.maybeInstrument("history", yM2) | |
| } | |
| function yM2() { | |
| if (!SM2.supportsHistory()) return; | |
| let I = qv.onpopstate; | |
| qv.onpopstate = function(...G) { | |
| let Z = qv.location.href, | |
| C = YO; | |
| YO = Z; | |
| let W = { | |
| from: C, | |
| to: Z | |
| }; | |
| if (_O.triggerHandlers("history", W), I) try { | |
| return I.apply(this, G) | |
| } catch (w) {} | |
| }; | |
| function d(G) { | |
| return function(...Z) { | |
| let C = Z.length > 2 ? Z[2] : void 0; | |
| if (C) { | |
| let W = YO, | |
| w = String(C); | |
| YO = w; | |
| let B = { | |
| from: W, | |
| to: w | |
| }; | |
| _O.triggerHandlers("history", B) | |
| } | |
| return G.apply(this, Z) | |
| } | |
| } | |
| rz1.fill(qv.history, "pushState", d), rz1.fill(qv.history, "replaceState", d) | |
| } | |
| az1.addHistoryInstrumentationHandler = LM2 | |
| }); | |
| var Ut = Y((oz1) => { | |
| Object.defineProperty(oz1, "__esModule", { | |
| value: !0 | |
| }); | |
| var HO = xG(), | |
| DO = cG(), | |
| $M2 = K7(), | |
| FO = zA(), | |
| uM2 = $M2.GLOBAL_OBJ, | |
| Rv = "__sentry_xhr_v3__"; | |
| function TM2(I) { | |
| FO.addHandler("xhr", I), FO.maybeInstrument("xhr", sz1) | |
| } | |
| function sz1() { | |
| if (!uM2.XMLHttpRequest) return; | |
| let I = XMLHttpRequest.prototype; | |
| DO.fill(I, "open", function(d) { | |
| return function(...G) { | |
| let Z = Date.now(), | |
| C = HO.isString(G[0]) ? G[0].toUpperCase() : void 0, | |
| W = OM2(G[1]); | |
| if (!C || !W) return d.apply(this, G); | |
| if (this[Rv] = { | |
| method: C, | |
| url: W, | |
| request_headers: {} | |
| }, C === "POST" && W.match(/sentry_key/)) this.__sentry_own_request__ = !0; | |
| let w = () => { | |
| let B = this[Rv]; | |
| if (!B) return; | |
| if (this.readyState === 4) { | |
| try { | |
| B.status_code = this.status | |
| } catch (V) {} | |
| let A = { | |
| args: [C, W], | |
| endTimestamp: Date.now(), | |
| startTimestamp: Z, | |
| xhr: this | |
| }; | |
| FO.triggerHandlers("xhr", A) | |
| } | |
| }; | |
| if ("onreadystatechange" in this && typeof this.onreadystatechange === "function") DO.fill(this, "onreadystatechange", function(B) { | |
| return function(...A) { | |
| return w(), B.apply(this, A) | |
| } | |
| }); | |
| else this.addEventListener("readystatechange", w); | |
| return DO.fill(this, "setRequestHeader", function(B) { | |
| return function(...A) { | |
| let [V, X] = A, _ = this[Rv]; | |
| if (_ && HO.isString(V) && HO.isString(X)) _.request_headers[V.toLowerCase()] = X; | |
| return B.apply(this, A) | |
| } | |
| }), d.apply(this, G) | |
| } | |
| }), DO.fill(I, "send", function(d) { | |
| return function(...G) { | |
| let Z = this[Rv]; | |
| if (!Z) return d.apply(this, G); | |
| if (G[0] !== void 0) Z.body = G[0]; | |
| let C = { | |
| args: [Z.method, Z.url], | |
| startTimestamp: Date.now(), | |
| xhr: this | |
| }; | |
| return FO.triggerHandlers("xhr", C), d.apply(this, G) | |
| } | |
| }) | |
| } | |
| function OM2(I) { | |
| if (HO.isString(I)) return I; | |
| try { | |
| return I.toString() | |
| } catch (d) {} | |
| return | |
| } | |
| oz1.SENTRY_XHR_DATA_KEY = Rv; | |
| oz1.addXhrInstrumentationHandler = TM2; | |
| oz1.instrumentXHR = sz1 | |
| }); | |
| var WQ1 = Y((CQ1) => { | |
| Object.defineProperty(CQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var hM2 = Zw(), | |
| jM2 = DC(), | |
| ez1 = wt(), | |
| tz1 = Yt(), | |
| IQ1 = gt(), | |
| dQ1 = Nt(), | |
| GQ1 = ft(), | |
| ZQ1 = Rt(), | |
| vt = Ut(); | |
| function kM2(I, d) { | |
| switch (I) { | |
| case "console": | |
| return ez1.addConsoleInstrumentationHandler(d); | |
| case "dom": | |
| return tz1.addClickKeypressInstrumentationHandler(d); | |
| case "xhr": | |
| return vt.addXhrInstrumentationHandler(d); | |
| case "fetch": | |
| return IQ1.addFetchInstrumentationHandler(d); | |
| case "history": | |
| return ZQ1.addHistoryInstrumentationHandler(d); | |
| case "error": | |
| return dQ1.addGlobalErrorInstrumentationHandler(d); | |
| case "unhandledrejection": | |
| return GQ1.addGlobalUnhandledRejectionInstrumentationHandler(d); | |
| default: | |
| hM2.DEBUG_BUILD && jM2.logger.warn("unknown instrumentation type:", I) | |
| } | |
| } | |
| CQ1.addConsoleInstrumentationHandler = ez1.addConsoleInstrumentationHandler; | |
| CQ1.addClickKeypressInstrumentationHandler = tz1.addClickKeypressInstrumentationHandler; | |
| CQ1.addFetchInstrumentationHandler = IQ1.addFetchInstrumentationHandler; | |
| CQ1.addGlobalErrorInstrumentationHandler = dQ1.addGlobalErrorInstrumentationHandler; | |
| CQ1.addGlobalUnhandledRejectionInstrumentationHandler = GQ1.addGlobalUnhandledRejectionInstrumentationHandler; | |
| CQ1.addHistoryInstrumentationHandler = ZQ1.addHistoryInstrumentationHandler; | |
| CQ1.SENTRY_XHR_DATA_KEY = vt.SENTRY_XHR_DATA_KEY; | |
| CQ1.addXhrInstrumentationHandler = vt.addXhrInstrumentationHandler; | |
| CQ1.addInstrumentationHandler = kM2 | |
| }); | |
| var Et = Y((wQ1) => { | |
| Object.defineProperty(wQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| function eM2() { | |
| return typeof __SENTRY_BROWSER_BUNDLE__ !== "undefined" && !!__SENTRY_BROWSER_BUNDLE__ | |
| } | |
| function tM2() { | |
| return "npm" | |
| } | |
| wQ1.getSDKSource = tM2; | |
| wQ1.isBrowserBundle = eM2 | |
| }); | |
| var Mt = Y((BQ1, JO) => { | |
| Object.defineProperty(BQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var GS2 = Et(); | |
| function ZS2() { | |
| return !GS2.isBrowserBundle() && Object.prototype.toString.call(typeof process !== "undefined" ? process : 0) === "[object process]" | |
| } | |
| function gO(I, d) { | |
| return I.require(d) | |
| } | |
| function CS2(I) { | |
| let d; | |
| try { | |
| d = gO(JO, I) | |
| } catch (G) {} | |
| try { | |
| let { | |
| cwd: G | |
| } = gO(JO, "process"); | |
| d = gO(JO, `${G()}/node_modules/${I}`) | |
| } catch (G) {} | |
| return d | |
| } | |
| BQ1.dynamicRequire = gO; | |
| BQ1.isNodeEnv = ZS2; | |
| BQ1.loadModule = CS2 | |
| }); | |
| var XQ1 = Y((VQ1) => { | |
| Object.defineProperty(VQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var AS2 = Mt(), | |
| AQ1 = K7(); | |
| function VS2() { | |
| return typeof window !== "undefined" && (!AS2.isNodeEnv() || XS2()) | |
| } | |
| function XS2() { | |
| return AQ1.GLOBAL_OBJ.process !== void 0 && AQ1.GLOBAL_OBJ.process.type === "renderer" | |
| } | |
| VQ1.isBrowser = VS2 | |
| }); | |
| var St = Y((YQ1) => { | |
| Object.defineProperty(YQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| function _S2() { | |
| let I = typeof WeakSet === "function", | |
| d = I ? new WeakSet : []; | |
| function G(C) { | |
| if (I) { | |
| if (d.has(C)) return !0; | |
| return d.add(C), !1 | |
| } | |
| for (let W = 0; W < d.length; W++) | |
| if (d[W] === C) return !0; | |
| return d.push(C), !1 | |
| } | |
| function Z(C) { | |
| if (I) d.delete(C); | |
| else | |
| for (let W = 0; W < d.length; W++) | |
| if (d[W] === C) { | |
| d.splice(W, 1); | |
| break | |
| } | |
| } | |
| return [G, Z] | |
| } | |
| YQ1.memoBuilder = _S2 | |
| }); | |
| var Uv = Y((HQ1) => { | |
| Object.defineProperty(HQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Lt = xG(), | |
| HS2 = St(), | |
| FS2 = cG(), | |
| gS2 = CO(); | |
| function _Q1(I, d = 100, G = 1 / 0) { | |
| try { | |
| return KO("", I, d, G) | |
| } catch (Z) { | |
| return { | |
| ERROR: `**non-serializable** (${Z})` | |
| } | |
| } | |
| } | |
| function DQ1(I, d = 3, G = 102400) { | |
| let Z = _Q1(I, d); | |
| if (zS2(Z) > G) return DQ1(I, d - 1, G); | |
| return Z | |
| } | |
| function KO(I, d, G = 1 / 0, Z = 1 / 0, C = HS2.memoBuilder()) { | |
| let [W, w] = C; | |
| if (d == null || ["number", "boolean", "string"].includes(typeof d) && !Lt.isNaN(d)) return d; | |
| let B = JS2(I, d); | |
| if (!B.startsWith("[object ")) return B; | |
| if (d.__sentry_skip_normalization__) return d; | |
| let A = typeof d.__sentry_override_normalization_depth__ === "number" ? d.__sentry_override_normalization_depth__ : G; | |
| if (A === 0) return B.replace("object ", ""); | |
| if (W(d)) return "[Circular ~]"; | |
| let V = d; | |
| if (V && typeof V.toJSON === "function") try { | |
| let g = V.toJSON(); | |
| return KO("", g, A - 1, Z, C) | |
| } catch (g) {} | |
| let X = Array.isArray(d) ? [] : {}, | |
| _ = 0, | |
| F = FS2.convertToPlainObject(d); | |
| for (let g in F) { | |
| if (!Object.prototype.hasOwnProperty.call(F, g)) continue; | |
| if (_ >= Z) { | |
| X[g] = "[MaxProperties ~]"; | |
| break | |
| } | |
| let J = F[g]; | |
| X[g] = KO(g, J, A - 1, Z, C), _++ | |
| } | |
| return w(d), X | |
| } | |
| function JS2(I, d) { | |
| try { | |
| if (I === "domain" && d && typeof d === "object" && d._events) return "[Domain]"; | |
| if (I === "domainEmitter") return "[DomainEmitter]"; | |
| if (typeof global !== "undefined" && d === global) return "[Global]"; | |
| if (typeof window !== "undefined" && d === window) return "[Window]"; | |
| if (typeof document !== "undefined" && d === document) return "[Document]"; | |
| if (Lt.isVueViewModel(d)) return "[VueViewModel]"; | |
| if (Lt.isSyntheticEvent(d)) return "[SyntheticEvent]"; | |
| if (typeof d === "number" && d !== d) return "[NaN]"; | |
| if (typeof d === "function") return `[Function: ${gS2.getFunctionName(d)}]`; | |
| if (typeof d === "symbol") return `[${String(d)}]`; | |
| if (typeof d === "bigint") return `[BigInt: ${String(d)}]`; | |
| let G = KS2(d); | |
| if (/^HTML(\w*)Element$/.test(G)) return `[HTMLElement: ${G}]`; | |
| return `[object ${G}]` | |
| } catch (G) { | |
| return `**non-serializable** (${G})` | |
| } | |
| } | |
| function KS2(I) { | |
| let d = Object.getPrototypeOf(I); | |
| return d ? d.constructor.name : "null prototype" | |
| } | |
| function NS2(I) { | |
| return ~-encodeURI(I).split(/%..|./).length | |
| } | |
| function zS2(I) { | |
| return NS2(JSON.stringify(I)) | |
| } | |
| function QS2(I, d) { | |
| let G = d.replace(/\\/g, "/").replace(/[|\\{}()[\]^$+*?.]/g, "\\$&"), | |
| Z = I; | |
| try { | |
| Z = decodeURI(I) | |
| } catch (C) {} | |
| return Z.replace(/\\/g, "/").replace(/webpack:\/?/g, "").replace(new RegExp(`(file://)?/*${G}/*`, "ig"), "app:///") | |
| } | |
| HQ1.normalize = _Q1; | |
| HQ1.normalizeToSize = DQ1; | |
| HQ1.normalizeUrlToBase = QS2; | |
| HQ1.walk = KO | |
| }); | |
| var QQ1 = Y((zQ1) => { | |
| Object.defineProperty(zQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| function gQ1(I, d) { | |
| let G = 0; | |
| for (let Z = I.length - 1; Z >= 0; Z--) { | |
| let C = I[Z]; | |
| if (C === ".") I.splice(Z, 1); | |
| else if (C === "..") I.splice(Z, 1), G++; | |
| else if (G) I.splice(Z, 1), G-- | |
| } | |
| if (d) | |
| for (; G--; G) I.unshift(".."); | |
| return I | |
| } | |
| var vS2 = /^(\S+:\\|\/?)([\s\S]*?)((?:\.{1,2}|[^/\\]+?|)(\.[^./\\]*|))(?:[/\\]*)$/; | |
| function JQ1(I) { | |
| let d = I.length > 1024 ? `<truncated>${I.slice(-1024)}` : I, | |
| G = vS2.exec(d); | |
| return G ? G.slice(1) : [] | |
| } | |
| function yt(...I) { | |
| let d = "", | |
| G = !1; | |
| for (let Z = I.length - 1; Z >= -1 && !G; Z--) { | |
| let C = Z >= 0 ? I[Z] : "/"; | |
| if (!C) continue; | |
| d = `${C}/${d}`, G = C.charAt(0) === "/" | |
| } | |
| return d = gQ1(d.split("/").filter((Z) => !!Z), !G).join("/"), (G ? "/" : "") + d || "." | |
| } | |
| function FQ1(I) { | |
| let d = 0; | |
| for (; d < I.length; d++) | |
| if (I[d] !== "") break; | |
| let G = I.length - 1; | |
| for (; G >= 0; G--) | |
| if (I[G] !== "") break; | |
| if (d > G) return []; | |
| return I.slice(d, G - d + 1) | |
| } | |
| function ES2(I, d) { | |
| I = yt(I).slice(1), d = yt(d).slice(1); | |
| let G = FQ1(I.split("/")), | |
| Z = FQ1(d.split("/")), | |
| C = Math.min(G.length, Z.length), | |
| W = C; | |
| for (let B = 0; B < C; B++) | |
| if (G[B] !== Z[B]) { | |
| W = B; | |
| break | |
| } let w = []; | |
| for (let B = W; B < G.length; B++) w.push(".."); | |
| return w = w.concat(Z.slice(W)), w.join("/") | |
| } | |
| function KQ1(I) { | |
| let d = NQ1(I), | |
| G = I.slice(-1) === "/", | |
| Z = gQ1(I.split("/").filter((C) => !!C), !d).join("/"); | |
| if (!Z && !d) Z = "."; | |
| if (Z && G) Z += "/"; | |
| return (d ? "/" : "") + Z | |
| } | |
| function NQ1(I) { | |
| return I.charAt(0) === "/" | |
| } | |
| function MS2(...I) { | |
| return KQ1(I.join("/")) | |
| } | |
| function SS2(I) { | |
| let d = JQ1(I), | |
| G = d[0], | |
| Z = d[1]; | |
| if (!G && !Z) return "."; | |
| if (Z) Z = Z.slice(0, Z.length - 1); | |
| return G + Z | |
| } | |
| function LS2(I, d) { | |
| let G = JQ1(I)[2]; | |
| if (d && G.slice(d.length * -1) === d) G = G.slice(0, G.length - d.length); | |
| return G | |
| } | |
| zQ1.basename = LS2; | |
| zQ1.dirname = SS2; | |
| zQ1.isAbsolute = NQ1; | |
| zQ1.join = MS2; | |
| zQ1.normalizePath = KQ1; | |
| zQ1.relative = ES2; | |
| zQ1.resolve = yt | |
| }); | |
| var Pt = Y((fQ1) => { | |
| Object.defineProperty(fQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var lS2 = xG(), | |
| QA; | |
| (function(I) { | |
| I[I.PENDING = 0] = "PENDING"; | |
| let G = 1; | |
| I[I.RESOLVED = G] = "RESOLVED"; | |
| let Z = 2; | |
| I[I.REJECTED = Z] = "REJECTED" | |
| })(QA || (QA = {})); | |
| function bS2(I) { | |
| return new Cw((d) => { | |
| d(I) | |
| }) | |
| } | |
| function hS2(I) { | |
| return new Cw((d, G) => { | |
| G(I) | |
| }) | |
| } | |
| class Cw { | |
| constructor(I) { | |
| Cw.prototype.__init.call(this), Cw.prototype.__init2.call(this), Cw.prototype.__init3.call(this), Cw.prototype.__init4.call(this), this._state = QA.PENDING, this._handlers = []; | |
| try { | |
| I(this._resolve, this._reject) | |
| } catch (d) { | |
| this._reject(d) | |
| } | |
| } | |
| then(I, d) { | |
| return new Cw((G, Z) => { | |
| this._handlers.push([!1, (C) => { | |
| if (!I) G(C); | |
| else try { | |
| G(I(C)) | |
| } catch (W) { | |
| Z(W) | |
| } | |
| }, (C) => { | |
| if (!d) Z(C); | |
| else try { | |
| G(d(C)) | |
| } catch (W) { | |
| Z(W) | |
| } | |
| }]), this._executeHandlers() | |
| }) | |
| } catch (I) { | |
| return this.then((d) => d, I) | |
| } finally(I) { | |
| return new Cw((d, G) => { | |
| let Z, C; | |
| return this.then((W) => { | |
| if (C = !1, Z = W, I) I() | |
| }, (W) => { | |
| if (C = !0, Z = W, I) I() | |
| }).then(() => { | |
| if (C) { | |
| G(Z); | |
| return | |
| } | |
| d(Z) | |
| }) | |
| }) | |
| } | |
| __init() { | |
| this._resolve = (I) => { | |
| this._setResult(QA.RESOLVED, I) | |
| } | |
| } | |
| __init2() { | |
| this._reject = (I) => { | |
| this._setResult(QA.REJECTED, I) | |
| } | |
| } | |
| __init3() { | |
| this._setResult = (I, d) => { | |
| if (this._state !== QA.PENDING) return; | |
| if (lS2.isThenable(d)) { | |
| d.then(this._resolve, this._reject); | |
| return | |
| } | |
| this._state = I, this._value = d, this._executeHandlers() | |
| } | |
| } | |
| __init4() { | |
| this._executeHandlers = () => { | |
| if (this._state === QA.PENDING) return; | |
| let I = this._handlers.slice(); | |
| this._handlers = [], I.forEach((d) => { | |
| if (d[0]) return; | |
| if (this._state === QA.RESOLVED) d[1](this._value); | |
| if (this._state === QA.REJECTED) d[2](this._value); | |
| d[0] = !0 | |
| }) | |
| } | |
| } | |
| } | |
| fQ1.SyncPromise = Cw; | |
| fQ1.rejectedSyncPromise = hS2; | |
| fQ1.resolvedSyncPromise = bS2 | |
| }); | |
| var RQ1 = Y((qQ1) => { | |
| Object.defineProperty(qQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var cS2 = dt(), | |
| $t = Pt(); | |
| function pS2(I) { | |
| let d = []; | |
| function G() { | |
| return I === void 0 || d.length < I | |
| } | |
| function Z(w) { | |
| return d.splice(d.indexOf(w), 1)[0] | |
| } | |
| function C(w) { | |
| if (!G()) return $t.rejectedSyncPromise(new cS2.SentryError("Not adding Promise because buffer limit was reached.")); | |
| let B = w(); | |
| if (d.indexOf(B) === -1) d.push(B); | |
| return B.then(() => Z(B)).then(null, () => Z(B).then(null, () => {})), B | |
| } | |
| function W(w) { | |
| return new $t.SyncPromise((B, A) => { | |
| let V = d.length; | |
| if (!V) return B(!0); | |
| let X = setTimeout(() => { | |
| if (w && w > 0) B(!1) | |
| }, w); | |
| d.forEach((_) => { | |
| $t.resolvedSyncPromise(_).then(() => { | |
| if (!--V) clearTimeout(X), B(!0) | |
| }, A) | |
| }) | |
| }) | |
| } | |
| return { | |
| $: d, | |
| add: C, | |
| drain: W | |
| } | |
| } | |
| qQ1.makePromiseBuffer = pS2 | |
| }); | |
| var vQ1 = Y((UQ1) => { | |
| Object.defineProperty(UQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| function nS2(I) { | |
| let d = {}, | |
| G = 0; | |
| while (G < I.length) { | |
| let Z = I.indexOf("=", G); | |
| if (Z === -1) break; | |
| let C = I.indexOf(";", G); | |
| if (C === -1) C = I.length; | |
| else if (C < Z) { | |
| G = I.lastIndexOf(";", Z - 1) + 1; | |
| continue | |
| } | |
| let W = I.slice(G, Z).trim(); | |
| if (d[W] === void 0) { | |
| let w = I.slice(Z + 1, C).trim(); | |
| if (w.charCodeAt(0) === 34) w = w.slice(1, -1); | |
| try { | |
| d[W] = w.indexOf("%") !== -1 ? decodeURIComponent(w) : w | |
| } catch (B) { | |
| d[W] = w | |
| } | |
| } | |
| G = C + 1 | |
| } | |
| return d | |
| } | |
| UQ1.parseCookie = nS2 | |
| }); | |
| var ut = Y((EQ1) => { | |
| Object.defineProperty(EQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| function aS2(I) { | |
| if (!I) return {}; | |
| let d = I.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); | |
| if (!d) return {}; | |
| let G = d[6] || "", | |
| Z = d[8] || ""; | |
| return { | |
| host: d[4], | |
| path: d[5], | |
| protocol: d[2], | |
| search: G, | |
| hash: Z, | |
| relative: d[5] + G + Z | |
| } | |
| } | |
| function sS2(I) { | |
| return I.split(/[\?#]/, 1)[0] | |
| } | |
| function oS2(I) { | |
| return I.split(/\\?\//).filter((d) => d.length > 0 && d !== ",").length | |
| } | |
| function eS2(I) { | |
| let { | |
| protocol: d, | |
| host: G, | |
| path: Z | |
| } = I, C = G && G.replace(/^.*@/, "[filtered]:[filtered]@").replace(/(:80)$/, "").replace(/(:443)$/, "") || ""; | |
| return `${d?`${d}://`:""}${C}${Z}` | |
| } | |
| EQ1.getNumberOfUrlSegments = oS2; | |
| EQ1.getSanitizedUrlString = eS2; | |
| EQ1.parseUrl = aS2; | |
| EQ1.stripUrlQueryAndFragment = sS2 | |
| }); | |
| var $Q1 = Y((PQ1) => { | |
| Object.defineProperty(PQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var ZL2 = vQ1(), | |
| CL2 = Zw(), | |
| MQ1 = xG(), | |
| WL2 = DC(), | |
| wL2 = Uv(), | |
| BL2 = ut(), | |
| AL2 = { | |
| ip: !1, | |
| request: !0, | |
| transaction: !0, | |
| user: !0 | |
| }, | |
| VL2 = ["cookies", "data", "headers", "method", "query_string", "url"], | |
| SQ1 = ["id", "username", "email"]; | |
| function XL2(I, d, G) { | |
| if (!I) return; | |
| if (!I.metadata.source || I.metadata.source === "url") { | |
| let [Z, C] = NO(d, { | |
| path: !0, | |
| method: !0 | |
| }); | |
| I.updateName(Z), I.setMetadata({ | |
| source: C | |
| }) | |
| } | |
| if (I.setAttribute("url", d.originalUrl || d.url), d.baseUrl) I.setAttribute("baseUrl", d.baseUrl); | |
| I.setData("query", LQ1(d, G)) | |
| } | |
| function NO(I, d = {}) { | |
| let G = I.method && I.method.toUpperCase(), | |
| Z = "", | |
| C = "url"; | |
| if (d.customRoute || I.route) Z = d.customRoute || `${I.baseUrl||""}${I.route&&I.route.path}`, C = "route"; | |
| else if (I.originalUrl || I.url) Z = BL2.stripUrlQueryAndFragment(I.originalUrl || I.url || ""); | |
| let W = ""; | |
| if (d.method && G) W += G; | |
| if (d.method && d.path) W += " "; | |
| if (d.path && Z) W += Z; | |
| return [W, C] | |
| } | |
| function YL2(I, d) { | |
| switch (d) { | |
| case "path": | |
| return NO(I, { | |
| path: !0 | |
| })[0]; | |
| case "handler": | |
| return I.route && I.route.stack && I.route.stack[0] && I.route.stack[0].name || "<anonymous>"; | |
| case "methodPath": | |
| default: { | |
| let G = I._reconstructedRoute ? I._reconstructedRoute : void 0; | |
| return NO(I, { | |
| path: !0, | |
| method: !0, | |
| customRoute: G | |
| })[0] | |
| } | |
| } | |
| } | |
| function _L2(I, d) { | |
| let G = {}; | |
| return (Array.isArray(d) ? d : SQ1).forEach((C) => { | |
| if (I && C in I) G[C] = I[C] | |
| }), G | |
| } | |
| function Tt(I, d) { | |
| let { | |
| include: G = VL2, | |
| deps: Z | |
| } = d || {}, C = {}, W = I.headers || {}, w = I.method, B = W.host || I.hostname || I.host || "<no host>", A = I.protocol === "https" || I.socket && I.socket.encrypted ? "https" : "http", V = I.originalUrl || I.url || "", X = V.startsWith(A) ? V : `${A}://${B}${V}`; | |
| return G.forEach((_) => { | |
| switch (_) { | |
| case "headers": { | |
| if (C.headers = W, !G.includes("cookies")) delete C.headers.cookie; | |
| break | |
| } | |
| case "method": { | |
| C.method = w; | |
| break | |
| } | |
| case "url": { | |
| C.url = X; | |
| break | |
| } | |
| case "cookies": { | |
| C.cookies = I.cookies || W.cookie && ZL2.parseCookie(W.cookie) || {}; | |
| break | |
| } | |
| case "query_string": { | |
| C.query_string = LQ1(I, Z); | |
| break | |
| } | |
| case "data": { | |
| if (w === "GET" || w === "HEAD") break; | |
| if (I.body !== void 0) C.data = MQ1.isString(I.body) ? I.body : JSON.stringify(wL2.normalize(I.body)); | |
| break | |
| } | |
| default: | |
| if ({}.hasOwnProperty.call(I, _)) C[_] = I[_] | |
| } | |
| }), C | |
| } | |
| function DL2(I, d, G) { | |
| let Z = { | |
| ...AL2, | |
| ...G && G.include | |
| }; | |
| if (Z.request) { | |
| let C = Array.isArray(Z.request) ? Tt(d, { | |
| include: Z.request, | |
| deps: G && G.deps | |
| }) : Tt(d, { | |
| deps: G && G.deps | |
| }); | |
| I.request = { | |
| ...I.request, | |
| ...C | |
| } | |
| } | |
| if (Z.user) { | |
| let C = d.user && MQ1.isPlainObject(d.user) ? _L2(d.user, Z.user) : {}; | |
| if (Object.keys(C).length) I.user = { | |
| ...I.user, | |
| ...C | |
| } | |
| } | |
| if (Z.ip) { | |
| let C = d.ip || d.socket && d.socket.remoteAddress; | |
| if (C) I.user = { | |
| ...I.user, | |
| ip_address: C | |
| } | |
| } | |
| if (Z.transaction && !I.transaction) I.transaction = YL2(d, Z.transaction); | |
| return I | |
| } | |
| function LQ1(I, d) { | |
| let G = I.originalUrl || I.url || ""; | |
| if (!G) return; | |
| if (G.startsWith("/")) G = `http://dogs.are.great${G}`; | |
| try { | |
| return I.query || typeof URL !== "undefined" && new URL(G).search.slice(1) || d && d.url && d.url.parse(G).query || void 0 | |
| } catch (Z) { | |
| return | |
| } | |
| } | |
| function yQ1(I) { | |
| let d = {}; | |
| try { | |
| I.forEach((G, Z) => { | |
| if (typeof G === "string") d[Z] = G | |
| }) | |
| } catch (G) { | |
| CL2.DEBUG_BUILD && WL2.logger.warn("Sentry failed extracting headers from a request object. If you see this, please file an issue.") | |
| } | |
| return d | |
| } | |
| function HL2(I) { | |
| let d = yQ1(I.headers); | |
| return { | |
| method: I.method, | |
| url: I.url, | |
| headers: d | |
| } | |
| } | |
| PQ1.DEFAULT_USER_INCLUDES = SQ1; | |
| PQ1.addRequestDataToEvent = DL2; | |
| PQ1.addRequestDataToTransaction = XL2; | |
| PQ1.extractPathForTransaction = NO; | |
| PQ1.extractRequestData = Tt; | |
| PQ1.winterCGHeadersToDict = yQ1; | |
| PQ1.winterCGRequestToRequestData = HL2 | |
| }); | |
| var mQ1 = Y((OQ1) => { | |
| Object.defineProperty(OQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var uQ1 = ["fatal", "error", "warning", "log", "info", "debug"]; | |
| function fL2(I) { | |
| return TQ1(I) | |
| } | |
| function TQ1(I) { | |
| return I === "warn" ? "warning" : uQ1.includes(I) ? I : "log" | |
| } | |
| OQ1.severityFromString = fL2; | |
| OQ1.severityLevelFromString = TQ1; | |
| OQ1.validSeverityLevels = uQ1 | |
| }); | |
| var Ot = Y((kQ1) => { | |
| Object.defineProperty(kQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var lQ1 = K7(), | |
| bQ1 = 1000; | |
| function hQ1() { | |
| return Date.now() / bQ1 | |
| } | |
| function vL2() { | |
| let { | |
| performance: I | |
| } = lQ1.GLOBAL_OBJ; | |
| if (!I || !I.now) return hQ1; | |
| let d = Date.now() - I.now(), | |
| G = I.timeOrigin == null ? d : I.timeOrigin; | |
| return () => { | |
| return (G + I.now()) / bQ1 | |
| } | |
| } | |
| var jQ1 = vL2(), | |
| EL2 = jQ1; | |
| kQ1._browserPerformanceTimeOriginMode = void 0; | |
| var ML2 = (() => { | |
| let { | |
| performance: I | |
| } = lQ1.GLOBAL_OBJ; | |
| if (!I || !I.now) { | |
| kQ1._browserPerformanceTimeOriginMode = "none"; | |
| return | |
| } | |
| let d = 3600000, | |
| G = I.now(), | |
| Z = Date.now(), | |
| C = I.timeOrigin ? Math.abs(I.timeOrigin + G - Z) : d, | |
| W = C < d, | |
| w = I.timing && I.timing.navigationStart, | |
| A = typeof w === "number" ? Math.abs(w + G - Z) : d, | |
| V = A < d; | |
| if (W || V) | |
| if (C <= A) return kQ1._browserPerformanceTimeOriginMode = "timeOrigin", I.timeOrigin; | |
| else return kQ1._browserPerformanceTimeOriginMode = "navigationStart", w; | |
| return kQ1._browserPerformanceTimeOriginMode = "dateNow", Z | |
| })(); | |
| kQ1.browserPerformanceTimeOrigin = ML2; | |
| kQ1.dateTimestampInSeconds = hQ1; | |
| kQ1.timestampInSeconds = jQ1; | |
| kQ1.timestampWithMs = EL2 | |
| }); | |
| var lt = Y((iQ1) => { | |
| Object.defineProperty(iQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var $L2 = Zw(), | |
| uL2 = xG(), | |
| TL2 = DC(), | |
| OL2 = "baggage", | |
| mt = "sentry-", | |
| cQ1 = /^sentry-/, | |
| pQ1 = 8192; | |
| function mL2(I) { | |
| if (!uL2.isString(I) && !Array.isArray(I)) return; | |
| let d = {}; | |
| if (Array.isArray(I)) d = I.reduce((Z, C) => { | |
| let W = xQ1(C); | |
| for (let w of Object.keys(W)) Z[w] = W[w]; | |
| return Z | |
| }, {}); | |
| else { | |
| if (!I) return; | |
| d = xQ1(I) | |
| } | |
| let G = Object.entries(d).reduce((Z, [C, W]) => { | |
| if (C.match(cQ1)) { | |
| let w = C.slice(mt.length); | |
| Z[w] = W | |
| } | |
| return Z | |
| }, {}); | |
| if (Object.keys(G).length > 0) return G; | |
| else return | |
| } | |
| function lL2(I) { | |
| if (!I) return; | |
| let d = Object.entries(I).reduce((G, [Z, C]) => { | |
| if (C) G[`${mt}${Z}`] = C; | |
| return G | |
| }, {}); | |
| return bL2(d) | |
| } | |
| function xQ1(I) { | |
| return I.split(",").map((d) => d.split("=").map((G) => decodeURIComponent(G.trim()))).reduce((d, [G, Z]) => { | |
| return d[G] = Z, d | |
| }, {}) | |
| } | |
| function bL2(I) { | |
| if (Object.keys(I).length === 0) return; | |
| return Object.entries(I).reduce((d, [G, Z], C) => { | |
| let W = `${encodeURIComponent(G)}=${encodeURIComponent(Z)}`, | |
| w = C === 0 ? W : `${d},${W}`; | |
| if (w.length > pQ1) return $L2.DEBUG_BUILD && TL2.logger.warn(`Not adding key: ${G} with val: ${Z} to baggage header due to exceeding baggage size limits.`), d; | |
| else return w | |
| }, "") | |
| } | |
| iQ1.BAGGAGE_HEADER_NAME = OL2; | |
| iQ1.MAX_BAGGAGE_STRING_LENGTH = pQ1; | |
| iQ1.SENTRY_BAGGAGE_KEY_PREFIX = mt; | |
| iQ1.SENTRY_BAGGAGE_KEY_PREFIX_REGEX = cQ1; | |
| iQ1.baggageHeaderToDynamicSamplingContext = mL2; | |
| iQ1.dynamicSamplingContextToSentryBaggageHeader = lL2 | |
| }); | |
| var sQ1 = Y((aQ1) => { | |
| Object.defineProperty(aQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var nQ1 = lt(), | |
| pG = Qv(), | |
| rQ1 = new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$"); | |
| function bt(I) { | |
| if (!I) return; | |
| let d = I.match(rQ1); | |
| if (!d) return; | |
| let G; | |
| if (d[3] === "1") G = !0; | |
| else if (d[3] === "0") G = !1; | |
| return { | |
| traceId: d[1], | |
| parentSampled: G, | |
| parentSpanId: d[2] | |
| } | |
| } | |
| function iL2(I, d) { | |
| let G = bt(I), | |
| Z = nQ1.baggageHeaderToDynamicSamplingContext(d), | |
| { | |
| traceId: C, | |
| parentSpanId: W, | |
| parentSampled: w | |
| } = G || {}; | |
| if (!G) return { | |
| traceparentData: G, | |
| dynamicSamplingContext: void 0, | |
| propagationContext: { | |
| traceId: C || pG.uuid4(), | |
| spanId: pG.uuid4().substring(16) | |
| } | |
| }; | |
| else return { | |
| traceparentData: G, | |
| dynamicSamplingContext: Z || {}, | |
| propagationContext: { | |
| traceId: C || pG.uuid4(), | |
| parentSpanId: W || pG.uuid4().substring(16), | |
| spanId: pG.uuid4().substring(16), | |
| sampled: w, | |
| dsc: Z || {} | |
| } | |
| } | |
| } | |
| function nL2(I, d) { | |
| let G = bt(I), | |
| Z = nQ1.baggageHeaderToDynamicSamplingContext(d), | |
| { | |
| traceId: C, | |
| parentSpanId: W, | |
| parentSampled: w | |
| } = G || {}; | |
| if (!G) return { | |
| traceId: C || pG.uuid4(), | |
| spanId: pG.uuid4().substring(16) | |
| }; | |
| else return { | |
| traceId: C || pG.uuid4(), | |
| parentSpanId: W || pG.uuid4().substring(16), | |
| spanId: pG.uuid4().substring(16), | |
| sampled: w, | |
| dsc: Z || {} | |
| } | |
| } | |
| function rL2(I = pG.uuid4(), d = pG.uuid4().substring(16), G) { | |
| let Z = ""; | |
| if (G !== void 0) Z = G ? "-1" : "-0"; | |
| return `${I}-${d}${Z}` | |
| } | |
| aQ1.TRACEPARENT_REGEXP = rQ1; | |
| aQ1.extractTraceparentData = bt; | |
| aQ1.generateSentryTraceHeader = rL2; | |
| aQ1.propagationContextFromHeaders = nL2; | |
| aQ1.tracingContextFromHeaders = iL2 | |
| }); | |
| var jt = Y((tQ1) => { | |
| Object.defineProperty(tQ1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Iy2 = It(), | |
| dy2 = Uv(), | |
| oQ1 = cG(); | |
| function Gy2(I, d = []) { | |
| return [I, d] | |
| } | |
| function Zy2(I, d) { | |
| let [G, Z] = I; | |
| return [G, [...Z, d]] | |
| } | |
| function eQ1(I, d) { | |
| let G = I[1]; | |
| for (let Z of G) { | |
| let C = Z[0].type; | |
| if (d(Z, C)) return !0 | |
| } | |
| return !1 | |
| } | |
| function Cy2(I, d) { | |
| return eQ1(I, (G, Z) => d.includes(Z)) | |
| } | |
| function ht(I, d) { | |
| return (d || new TextEncoder).encode(I) | |
| } | |
| function Wy2(I, d) { | |
| let [G, Z] = I, C = JSON.stringify(G); | |
| function W(w) { | |
| if (typeof C === "string") C = typeof w === "string" ? C + w : [ht(C, d), w]; | |
| else C.push(typeof w === "string" ? ht(w, d) : w) | |
| } | |
| for (let w of Z) { | |
| let [B, A] = w; | |
| if (W(` | |
| ${JSON.stringify(B)} | |
| `), typeof A === "string" || A instanceof Uint8Array) W(A); | |
| else { | |
| let V; | |
| try { | |
| V = JSON.stringify(A) | |
| } catch (X) { | |
| V = JSON.stringify(dy2.normalize(A)) | |
| } | |
| W(V) | |
| } | |
| } | |
| return typeof C === "string" ? C : wy2(C) | |
| } | |
| function wy2(I) { | |
| let d = I.reduce((C, W) => C + W.length, 0), | |
| G = new Uint8Array(d), | |
| Z = 0; | |
| for (let C of I) G.set(C, Z), Z += C.length; | |
| return G | |
| } | |
| function By2(I, d, G) { | |
| let Z = typeof I === "string" ? d.encode(I) : I; | |
| function C(A) { | |
| let V = Z.subarray(0, A); | |
| return Z = Z.subarray(A + 1), V | |
| } | |
| function W() { | |
| let A = Z.indexOf(10); | |
| if (A < 0) A = Z.length; | |
| return JSON.parse(G.decode(C(A))) | |
| } | |
| let w = W(), | |
| B = []; | |
| while (Z.length) { | |
| let A = W(), | |
| V = typeof A.length === "number" ? A.length : void 0; | |
| B.push([A, V ? C(V) : W()]) | |
| } | |
| return [w, B] | |
| } | |
| function Ay2(I, d) { | |
| let G = typeof I.data === "string" ? ht(I.data, d) : I.data; | |
| return [oQ1.dropUndefinedKeys({ | |
| type: "attachment", | |
| length: G.length, | |
| filename: I.filename, | |
| content_type: I.contentType, | |
| attachment_type: I.attachmentType | |
| }), G] | |
| } | |
| var Vy2 = { | |
| session: "session", | |
| sessions: "session", | |
| attachment: "attachment", | |
| transaction: "transaction", | |
| event: "error", | |
| client_report: "internal", | |
| user_report: "default", | |
| profile: "profile", | |
| replay_event: "replay", | |
| replay_recording: "replay", | |
| check_in: "monitor", | |
| feedback: "feedback", | |
| span: "span", | |
| statsd: "metric_bucket" | |
| }; | |
| function Xy2(I) { | |
| return Vy2[I] | |
| } | |
| function Yy2(I) { | |
| if (!I || !I.sdk) return; | |
| let { | |
| name: d, | |
| version: G | |
| } = I.sdk; | |
| return { | |
| name: d, | |
| version: G | |
| } | |
| } | |
| function _y2(I, d, G, Z) { | |
| let C = I.sdkProcessingMetadata && I.sdkProcessingMetadata.dynamicSamplingContext; | |
| return { | |
| event_id: I.event_id, | |
| sent_at: new Date().toISOString(), | |
| ...d && { | |
| sdk: d | |
| }, | |
| ...!!G && Z && { | |
| dsn: Iy2.dsnToString(Z) | |
| }, | |
| ...C && { | |
| trace: oQ1.dropUndefinedKeys({ | |
| ...C | |
| }) | |
| } | |
| } | |
| } | |
| tQ1.addItemToEnvelope = Zy2; | |
| tQ1.createAttachmentEnvelopeItem = Ay2; | |
| tQ1.createEnvelope = Gy2; | |
| tQ1.createEventEnvelopeHeaders = _y2; | |
| tQ1.envelopeContainsItemType = Cy2; | |
| tQ1.envelopeItemTypeToDataCategory = Xy2; | |
| tQ1.forEachEnvelopeItem = eQ1; | |
| tQ1.getSdkMetadataForEnvelopeHeader = Yy2; | |
| tQ1.parseEnvelope = By2; | |
| tQ1.serializeEnvelope = Wy2 | |
| }); | |
| var df1 = Y((If1) => { | |
| Object.defineProperty(If1, "__esModule", { | |
| value: !0 | |
| }); | |
| var qy2 = jt(), | |
| Ry2 = Ot(); | |
| function Uy2(I, d, G) { | |
| let Z = [{ | |
| type: "client_report" | |
| }, { | |
| timestamp: G || Ry2.dateTimestampInSeconds(), | |
| discarded_events: I | |
| }]; | |
| return qy2.createEnvelope(d ? { | |
| dsn: d | |
| } : {}, [Z]) | |
| } | |
| If1.createClientReportEnvelope = Uy2 | |
| }); | |
| var wf1 = Y((Wf1) => { | |
| Object.defineProperty(Wf1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Gf1 = 60000; | |
| function Zf1(I, d = Date.now()) { | |
| let G = parseInt(`${I}`, 10); | |
| if (!isNaN(G)) return G * 1000; | |
| let Z = Date.parse(`${I}`); | |
| if (!isNaN(Z)) return Z - d; | |
| return Gf1 | |
| } | |
| function Cf1(I, d) { | |
| return I[d] || I.all || 0 | |
| } | |
| function Ey2(I, d, G = Date.now()) { | |
| return Cf1(I, d) > G | |
| } | |
| function My2(I, { | |
| statusCode: d, | |
| headers: G | |
| }, Z = Date.now()) { | |
| let C = { | |
| ...I | |
| }, | |
| W = G && G["x-sentry-rate-limits"], | |
| w = G && G["retry-after"]; | |
| if (W) | |
| for (let B of W.trim().split(",")) { | |
| let [A, V, , , X] = B.split(":", 5), _ = parseInt(A, 10), F = (!isNaN(_) ? _ : 60) * 1000; | |
| if (!V) C.all = Z + F; | |
| else | |
| for (let g of V.split(";")) | |
| if (g === "metric_bucket") { | |
| if (!X || X.split(";").includes("custom")) C[g] = Z + F | |
| } else C[g] = Z + F | |
| } else if (w) C.all = Z + Zf1(w, Z); | |
| else if (d === 429) C.all = Z + 60000; | |
| return C | |
| } | |
| Wf1.DEFAULT_RETRY_AFTER = Gf1; | |
| Wf1.disabledUntil = Cf1; | |
| Wf1.isRateLimited = Ey2; | |
| Wf1.parseRetryAfterHeader = Zf1; | |
| Wf1.updateRateLimits = My2 | |
| }); | |
| var Xf1 = Y((Vf1) => { | |
| Object.defineProperty(Vf1, "__esModule", { | |
| value: !0 | |
| }); | |
| function Bf1(I, d, G) { | |
| let Z = d.match(/([a-z_]+)\.(.*)/i); | |
| if (Z === null) I[d] = G; | |
| else { | |
| let C = I[Z[1]]; | |
| Bf1(C, Z[2], G) | |
| } | |
| } | |
| function uy2(I, d, G = {}) { | |
| return Array.isArray(d) ? Af1(I, d, G) : Ty2(I, d, G) | |
| } | |
| function Af1(I, d, G) { | |
| let Z = d.find((C) => C.name === I.name); | |
| if (Z) { | |
| for (let [C, W] of Object.entries(G)) Bf1(Z, C, W); | |
| return d | |
| } | |
| return [...d, I] | |
| } | |
| function Ty2(I, d, G) { | |
| return (C) => { | |
| let W = d(C); | |
| if (I.allowExclusionByUser) { | |
| if (!W.find((B) => B.name === I.name)) return W | |
| } | |
| return Af1(I, W, G) | |
| } | |
| } | |
| Vf1.addOrUpdateIntegration = uy2 | |
| }); | |
| var _f1 = Y((Yf1) => { | |
| Object.defineProperty(Yf1, "__esModule", { | |
| value: !0 | |
| }); | |
| function my2(I) { | |
| let d = [], | |
| G = {}; | |
| return { | |
| add(Z, C) { | |
| while (d.length >= I) { | |
| let W = d.shift(); | |
| if (W !== void 0) delete G[W] | |
| } | |
| if (G[Z]) this.delete(Z); | |
| d.push(Z), G[Z] = C | |
| }, | |
| clear() { | |
| G = {}, d = [] | |
| }, | |
| get(Z) { | |
| return G[Z] | |
| }, | |
| size() { | |
| return d.length | |
| }, | |
| delete(Z) { | |
| if (!G[Z]) return !1; | |
| delete G[Z]; | |
| for (let C = 0; C < d.length; C++) | |
| if (d[C] === Z) { | |
| d.splice(C, 1); | |
| break | |
| } return !0 | |
| } | |
| } | |
| } | |
| Yf1.makeFifoCache = my2 | |
| }); | |
| var gf1 = Y((Ff1) => { | |
| Object.defineProperty(Ff1, "__esModule", { | |
| value: !0 | |
| }); | |
| var kt = xG(), | |
| Df1 = Qv(), | |
| by2 = Uv(), | |
| hy2 = cG(); | |
| function xt(I, d) { | |
| return I(d.stack || "", 1) | |
| } | |
| function Hf1(I, d) { | |
| let G = { | |
| type: d.name || d.constructor.name, | |
| value: d.message | |
| }, | |
| Z = xt(I, d); | |
| if (Z.length) G.stacktrace = { | |
| frames: Z | |
| }; | |
| return G | |
| } | |
| function jy2(I) { | |
| if ("name" in I && typeof I.name === "string") { | |
| let d = `'${I.name}' captured as exception`; | |
| if ("message" in I && typeof I.message === "string") d += ` with message '${I.message}'`; | |
| return d | |
| } else if ("message" in I && typeof I.message === "string") return I.message; | |
| else return `Object captured as exception with keys: ${hy2.extractExceptionKeysForMessage(I)}` | |
| } | |
| function ky2(I, d, G, Z) { | |
| let C = typeof I === "function" ? I().getClient() : I, | |
| W = G, | |
| B = Z && Z.data && Z.data.mechanism || { | |
| handled: !0, | |
| type: "generic" | |
| }, | |
| A; | |
| if (!kt.isError(G)) { | |
| if (kt.isPlainObject(G)) { | |
| let X = C && C.getOptions().normalizeDepth; | |
| A = { | |
| ["__serialized__"]: by2.normalizeToSize(G, X) | |
| }; | |
| let _ = jy2(G); | |
| W = Z && Z.syntheticException || new Error(_), W.message = _ | |
| } else W = Z && Z.syntheticException || new Error(G), W.message = G; | |
| B.synthetic = !0 | |
| } | |
| let V = { | |
| exception: { | |
| values: [Hf1(d, W)] | |
| } | |
| }; | |
| if (A) V.extra = A; | |
| return Df1.addExceptionTypeValue(V, void 0, void 0), Df1.addExceptionMechanism(V, B), { | |
| ...V, | |
| event_id: Z && Z.event_id | |
| } | |
| } | |
| function xy2(I, d, G = "info", Z, C) { | |
| let W = { | |
| event_id: Z && Z.event_id, | |
| level: G | |
| }; | |
| if (C && Z && Z.syntheticException) { | |
| let w = xt(I, Z.syntheticException); | |
| if (w.length) W.exception = { | |
| values: [{ | |
| value: d, | |
| stacktrace: { | |
| frames: w | |
| } | |
| }] | |
| } | |
| } | |
| if (kt.isParameterizedString(d)) { | |
| let { | |
| __sentry_template_string__: w, | |
| __sentry_template_values__: B | |
| } = d; | |
| return W.logentry = { | |
| message: w, | |
| params: B | |
| }, W | |
| } | |
| return W.message = d, W | |
| } | |
| Ff1.eventFromMessage = xy2; | |
| Ff1.eventFromUnknownInput = ky2; | |
| Ff1.exceptionFromError = Hf1; | |
| Ff1.parseStackFrames = xt | |
| }); | |
| var Kf1 = Y((Jf1) => { | |
| Object.defineProperty(Jf1, "__esModule", { | |
| value: !0 | |
| }); | |
| var ry2 = cG(), | |
| ay2 = ZO(); | |
| function sy2(I, d, G, Z) { | |
| let C = I(), | |
| W = !1, | |
| w = !0; | |
| return setInterval(() => { | |
| let B = C.getTimeMs(); | |
| if (W === !1 && B > d + G) { | |
| if (W = !0, w) Z() | |
| } | |
| if (B < d + G) W = !1 | |
| }, 20), { | |
| poll: () => { | |
| C.reset() | |
| }, | |
| enabled: (B) => { | |
| w = B | |
| } | |
| } | |
| } | |
| function oy2(I, d, G) { | |
| let Z = d ? d.replace(/^file:\/\//, "") : void 0, | |
| C = I.location.columnNumber ? I.location.columnNumber + 1 : void 0, | |
| W = I.location.lineNumber ? I.location.lineNumber + 1 : void 0; | |
| return ry2.dropUndefinedKeys({ | |
| filename: Z, | |
| module: G(Z), | |
| function: I.functionName || "?", | |
| colno: C, | |
| lineno: W, | |
| in_app: Z ? ay2.filenameIsInApp(Z) : void 0 | |
| }) | |
| } | |
| Jf1.callFrameToStackFrame = oy2; | |
| Jf1.watchdogTimer = sy2 | |
| }); | |
| var Qf1 = Y((zf1) => { | |
| Object.defineProperty(zf1, "__esModule", { | |
| value: !0 | |
| }); | |
| class Nf1 { | |
| constructor(I) { | |
| this._maxSize = I, this._cache = new Map | |
| } | |
| get size() { | |
| return this._cache.size | |
| } | |
| get(I) { | |
| let d = this._cache.get(I); | |
| if (d === void 0) return; | |
| return this._cache.delete(I), this._cache.set(I, d), d | |
| } | |
| set(I, d) { | |
| if (this._cache.size >= this._maxSize) this._cache.delete(this._cache.keys().next().value); | |
| this._cache.set(I, d) | |
| } | |
| remove(I) { | |
| let d = this._cache.get(I); | |
| if (d) this._cache.delete(I); | |
| return d | |
| } | |
| clear() { | |
| this._cache.clear() | |
| } | |
| keys() { | |
| return Array.from(this._cache.keys()) | |
| } | |
| values() { | |
| let I = []; | |
| return this._cache.forEach((d) => I.push(d)), I | |
| } | |
| } | |
| zf1.LRUMap = Nf1 | |
| }); | |
| var ct = Y((ff1) => { | |
| Object.defineProperty(ff1, "__esModule", { | |
| value: !0 | |
| }); | |
| function dP2(I, d) { | |
| return I != null ? I : d() | |
| } | |
| ff1._nullishCoalesce = dP2 | |
| }); | |
| var Rf1 = Y((qf1) => { | |
| Object.defineProperty(qf1, "__esModule", { | |
| value: !0 | |
| }); | |
| var ZP2 = ct(); | |
| async function CP2(I, d) { | |
| return ZP2._nullishCoalesce(I, d) | |
| } | |
| qf1._asyncNullishCoalesce = CP2 | |
| }); | |
| var pt = Y((Uf1) => { | |
| Object.defineProperty(Uf1, "__esModule", { | |
| value: !0 | |
| }); | |
| async function wP2(I) { | |
| let d = void 0, | |
| G = I[0], | |
| Z = 1; | |
| while (Z < I.length) { | |
| let C = I[Z], | |
| W = I[Z + 1]; | |
| if (Z += 2, (C === "optionalAccess" || C === "optionalCall") && G == null) return; | |
| if (C === "access" || C === "optionalAccess") d = G, G = await W(G); | |
| else if (C === "call" || C === "optionalCall") G = await W((...w) => G.call(d, ...w)), d = void 0 | |
| } | |
| return G | |
| } | |
| Uf1._asyncOptionalChain = wP2 | |
| }); | |
| var Ef1 = Y((vf1) => { | |
| Object.defineProperty(vf1, "__esModule", { | |
| value: !0 | |
| }); | |
| var AP2 = pt(); | |
| async function VP2(I) { | |
| let d = await AP2._asyncOptionalChain(I); | |
| return d == null ? !0 : d | |
| } | |
| vf1._asyncOptionalChainDelete = VP2 | |
| }); | |
| var it = Y((Mf1) => { | |
| Object.defineProperty(Mf1, "__esModule", { | |
| value: !0 | |
| }); | |
| function YP2(I) { | |
| let d = void 0, | |
| G = I[0], | |
| Z = 1; | |
| while (Z < I.length) { | |
| let C = I[Z], | |
| W = I[Z + 1]; | |
| if (Z += 2, (C === "optionalAccess" || C === "optionalCall") && G == null) return; | |
| if (C === "access" || C === "optionalAccess") d = G, G = W(G); | |
| else if (C === "call" || C === "optionalCall") G = W((...w) => G.call(d, ...w)), d = void 0 | |
| } | |
| return G | |
| } | |
| Mf1._optionalChain = YP2 | |
| }); | |
| var Lf1 = Y((Sf1) => { | |
| Object.defineProperty(Sf1, "__esModule", { | |
| value: !0 | |
| }); | |
| var DP2 = it(); | |
| function HP2(I) { | |
| let d = DP2._optionalChain(I); | |
| return d == null ? !0 : d | |
| } | |
| Sf1._optionalChainDelete = HP2 | |
| }); | |
| var Pf1 = Y((yf1) => { | |
| Object.defineProperty(yf1, "__esModule", { | |
| value: !0 | |
| }); | |
| function gP2(I) { | |
| return I.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d") | |
| } | |
| yf1.escapeStringForRegex = gP2 | |
| }); | |
| var V0 = Y((et) => { | |
| Object.defineProperty(et, "__esModule", { | |
| value: !0 | |
| }); | |
| var KP2 = Cz1(), | |
| zO = se(), | |
| nt = It(), | |
| NP2 = dt(), | |
| rt = K7(), | |
| zP2 = WQ1(), | |
| N7 = xG(), | |
| QP2 = XQ1(), | |
| QO = DC(), | |
| fP2 = St(), | |
| xX = Qv(), | |
| at = Mt(), | |
| fO = Uv(), | |
| fA = cG(), | |
| YF = QQ1(), | |
| qP2 = RQ1(), | |
| _F = $Q1(), | |
| st = mQ1(), | |
| Ev = CO(), | |
| Mv = Nv(), | |
| cX = Ht(), | |
| ot = Pt(), | |
| Sv = Ot(), | |
| Lv = sQ1(), | |
| $f1 = Et(), | |
| Ww = jt(), | |
| RP2 = df1(), | |
| yv = wf1(), | |
| BN = lt(), | |
| qO = ut(), | |
| UP2 = Xf1(), | |
| vP2 = _f1(), | |
| RO = gf1(), | |
| uf1 = Kf1(), | |
| EP2 = Qf1(), | |
| MP2 = Rf1(), | |
| SP2 = pt(), | |
| LP2 = Ef1(), | |
| yP2 = ct(), | |
| PP2 = it(), | |
| $P2 = Lf1(), | |
| uP2 = wt(), | |
| TP2 = Yt(), | |
| Tf1 = Ut(), | |
| OP2 = gt(), | |
| mP2 = Rt(), | |
| lP2 = Nt(), | |
| bP2 = ft(), | |
| hP2 = zA(), | |
| jP2 = ZO(), | |
| kP2 = Pf1(), | |
| xP2 = qt(); | |
| et.applyAggregateErrorsToEvent = KP2.applyAggregateErrorsToEvent; | |
| et.getComponentName = zO.getComponentName; | |
| et.getDomElement = zO.getDomElement; | |
| et.getLocationHref = zO.getLocationHref; | |
| et.htmlTreeAsString = zO.htmlTreeAsString; | |
| et.dsnFromString = nt.dsnFromString; | |
| et.dsnToString = nt.dsnToString; | |
| et.makeDsn = nt.makeDsn; | |
| et.SentryError = NP2.SentryError; | |
| et.GLOBAL_OBJ = rt.GLOBAL_OBJ; | |
| et.getGlobalObject = rt.getGlobalObject; | |
| et.getGlobalSingleton = rt.getGlobalSingleton; | |
| et.addInstrumentationHandler = zP2.addInstrumentationHandler; | |
| et.isDOMError = N7.isDOMError; | |
| et.isDOMException = N7.isDOMException; | |
| et.isElement = N7.isElement; | |
| et.isError = N7.isError; | |
| et.isErrorEvent = N7.isErrorEvent; | |
| et.isEvent = N7.isEvent; | |
| et.isInstanceOf = N7.isInstanceOf; | |
| et.isNaN = N7.isNaN; | |
| et.isParameterizedString = N7.isParameterizedString; | |
| et.isPlainObject = N7.isPlainObject; | |
| et.isPrimitive = N7.isPrimitive; | |
| et.isRegExp = N7.isRegExp; | |
| et.isString = N7.isString; | |
| et.isSyntheticEvent = N7.isSyntheticEvent; | |
| et.isThenable = N7.isThenable; | |
| et.isVueViewModel = N7.isVueViewModel; | |
| et.isBrowser = QP2.isBrowser; | |
| et.CONSOLE_LEVELS = QO.CONSOLE_LEVELS; | |
| et.consoleSandbox = QO.consoleSandbox; | |
| et.logger = QO.logger; | |
| et.originalConsoleMethods = QO.originalConsoleMethods; | |
| et.memoBuilder = fP2.memoBuilder; | |
| et.addContextToFrame = xX.addContextToFrame; | |
| et.addExceptionMechanism = xX.addExceptionMechanism; | |
| et.addExceptionTypeValue = xX.addExceptionTypeValue; | |
| et.arrayify = xX.arrayify; | |
| et.checkOrSetAlreadyCaught = xX.checkOrSetAlreadyCaught; | |
| et.getEventDescription = xX.getEventDescription; | |
| et.parseSemver = xX.parseSemver; | |
| et.uuid4 = xX.uuid4; | |
| et.dynamicRequire = at.dynamicRequire; | |
| et.isNodeEnv = at.isNodeEnv; | |
| et.loadModule = at.loadModule; | |
| et.normalize = fO.normalize; | |
| et.normalizeToSize = fO.normalizeToSize; | |
| et.normalizeUrlToBase = fO.normalizeUrlToBase; | |
| et.walk = fO.walk; | |
| et.addNonEnumerableProperty = fA.addNonEnumerableProperty; | |
| et.convertToPlainObject = fA.convertToPlainObject; | |
| et.dropUndefinedKeys = fA.dropUndefinedKeys; | |
| et.extractExceptionKeysForMessage = fA.extractExceptionKeysForMessage; | |
| et.fill = fA.fill; | |
| et.getOriginalFunction = fA.getOriginalFunction; | |
| et.markFunctionWrapped = fA.markFunctionWrapped; | |
| et.objectify = fA.objectify; | |
| et.urlEncode = fA.urlEncode; | |
| et.basename = YF.basename; | |
| et.dirname = YF.dirname; | |
| et.isAbsolute = YF.isAbsolute; | |
| et.join = YF.join; | |
| et.normalizePath = YF.normalizePath; | |
| et.relative = YF.relative; | |
| et.resolve = YF.resolve; | |
| et.makePromiseBuffer = qP2.makePromiseBuffer; | |
| et.DEFAULT_USER_INCLUDES = _F.DEFAULT_USER_INCLUDES; | |
| et.addRequestDataToEvent = _F.addRequestDataToEvent; | |
| et.addRequestDataToTransaction = _F.addRequestDataToTransaction; | |
| et.extractPathForTransaction = _F.extractPathForTransaction; | |
| et.extractRequestData = _F.extractRequestData; | |
| et.winterCGHeadersToDict = _F.winterCGHeadersToDict; | |
| et.winterCGRequestToRequestData = _F.winterCGRequestToRequestData; | |
| et.severityFromString = st.severityFromString; | |
| et.severityLevelFromString = st.severityLevelFromString; | |
| et.validSeverityLevels = st.validSeverityLevels; | |
| et.createStackParser = Ev.createStackParser; | |
| et.getFunctionName = Ev.getFunctionName; | |
| et.nodeStackLineParser = Ev.nodeStackLineParser; | |
| et.stackParserFromStackParserOptions = Ev.stackParserFromStackParserOptions; | |
| et.stripSentryFramesAndReverse = Ev.stripSentryFramesAndReverse; | |
| et.isMatchingPattern = Mv.isMatchingPattern; | |
| et.safeJoin = Mv.safeJoin; | |
| et.snipLine = Mv.snipLine; | |
| et.stringMatchesSomePattern = Mv.stringMatchesSomePattern; | |
| et.truncate = Mv.truncate; | |
| et.isNativeFetch = cX.isNativeFetch; | |
| et.supportsDOMError = cX.supportsDOMError; | |
| et.supportsDOMException = cX.supportsDOMException; | |
| et.supportsErrorEvent = cX.supportsErrorEvent; | |
| et.supportsFetch = cX.supportsFetch; | |
| et.supportsNativeFetch = cX.supportsNativeFetch; | |
| et.supportsReferrerPolicy = cX.supportsReferrerPolicy; | |
| et.supportsReportingObserver = cX.supportsReportingObserver; | |
| et.SyncPromise = ot.SyncPromise; | |
| et.rejectedSyncPromise = ot.rejectedSyncPromise; | |
| et.resolvedSyncPromise = ot.resolvedSyncPromise; | |
| Object.defineProperty(et, "_browserPerformanceTimeOriginMode", { | |
| enumerable: !0, | |
| get: () => Sv._browserPerformanceTimeOriginMode | |
| }); | |
| et.browserPerformanceTimeOrigin = Sv.browserPerformanceTimeOrigin; | |
| et.dateTimestampInSeconds = Sv.dateTimestampInSeconds; | |
| et.timestampInSeconds = Sv.timestampInSeconds; | |
| et.timestampWithMs = Sv.timestampWithMs; | |
| et.TRACEPARENT_REGEXP = Lv.TRACEPARENT_REGEXP; | |
| et.extractTraceparentData = Lv.extractTraceparentData; | |
| et.generateSentryTraceHeader = Lv.generateSentryTraceHeader; | |
| et.propagationContextFromHeaders = Lv.propagationContextFromHeaders; | |
| et.tracingContextFromHeaders = Lv.tracingContextFromHeaders; | |
| et.getSDKSource = $f1.getSDKSource; | |
| et.isBrowserBundle = $f1.isBrowserBundle; | |
| et.addItemToEnvelope = Ww.addItemToEnvelope; | |
| et.createAttachmentEnvelopeItem = Ww.createAttachmentEnvelopeItem; | |
| et.createEnvelope = Ww.createEnvelope; | |
| et.createEventEnvelopeHeaders = Ww.createEventEnvelopeHeaders; | |
| et.envelopeContainsItemType = Ww.envelopeContainsItemType; | |
| et.envelopeItemTypeToDataCategory = Ww.envelopeItemTypeToDataCategory; | |
| et.forEachEnvelopeItem = Ww.forEachEnvelopeItem; | |
| et.getSdkMetadataForEnvelopeHeader = Ww.getSdkMetadataForEnvelopeHeader; | |
| et.parseEnvelope = Ww.parseEnvelope; | |
| et.serializeEnvelope = Ww.serializeEnvelope; | |
| et.createClientReportEnvelope = RP2.createClientReportEnvelope; | |
| et.DEFAULT_RETRY_AFTER = yv.DEFAULT_RETRY_AFTER; | |
| et.disabledUntil = yv.disabledUntil; | |
| et.isRateLimited = yv.isRateLimited; | |
| et.parseRetryAfterHeader = yv.parseRetryAfterHeader; | |
| et.updateRateLimits = yv.updateRateLimits; | |
| et.BAGGAGE_HEADER_NAME = BN.BAGGAGE_HEADER_NAME; | |
| et.MAX_BAGGAGE_STRING_LENGTH = BN.MAX_BAGGAGE_STRING_LENGTH; | |
| et.SENTRY_BAGGAGE_KEY_PREFIX = BN.SENTRY_BAGGAGE_KEY_PREFIX; | |
| et.SENTRY_BAGGAGE_KEY_PREFIX_REGEX = BN.SENTRY_BAGGAGE_KEY_PREFIX_REGEX; | |
| et.baggageHeaderToDynamicSamplingContext = BN.baggageHeaderToDynamicSamplingContext; | |
| et.dynamicSamplingContextToSentryBaggageHeader = BN.dynamicSamplingContextToSentryBaggageHeader; | |
| et.getNumberOfUrlSegments = qO.getNumberOfUrlSegments; | |
| et.getSanitizedUrlString = qO.getSanitizedUrlString; | |
| et.parseUrl = qO.parseUrl; | |
| et.stripUrlQueryAndFragment = qO.stripUrlQueryAndFragment; | |
| et.addOrUpdateIntegration = UP2.addOrUpdateIntegration; | |
| et.makeFifoCache = vP2.makeFifoCache; | |
| et.eventFromMessage = RO.eventFromMessage; | |
| et.eventFromUnknownInput = RO.eventFromUnknownInput; | |
| et.exceptionFromError = RO.exceptionFromError; | |
| et.parseStackFrames = RO.parseStackFrames; | |
| et.callFrameToStackFrame = uf1.callFrameToStackFrame; | |
| et.watchdogTimer = uf1.watchdogTimer; | |
| et.LRUMap = EP2.LRUMap; | |
| et._asyncNullishCoalesce = MP2._asyncNullishCoalesce; | |
| et._asyncOptionalChain = SP2._asyncOptionalChain; | |
| et._asyncOptionalChainDelete = LP2._asyncOptionalChainDelete; | |
| et._nullishCoalesce = yP2._nullishCoalesce; | |
| et._optionalChain = PP2._optionalChain; | |
| et._optionalChainDelete = $P2._optionalChainDelete; | |
| et.addConsoleInstrumentationHandler = uP2.addConsoleInstrumentationHandler; | |
| et.addClickKeypressInstrumentationHandler = TP2.addClickKeypressInstrumentationHandler; | |
| et.SENTRY_XHR_DATA_KEY = Tf1.SENTRY_XHR_DATA_KEY; | |
| et.addXhrInstrumentationHandler = Tf1.addXhrInstrumentationHandler; | |
| et.addFetchInstrumentationHandler = OP2.addFetchInstrumentationHandler; | |
| et.addHistoryInstrumentationHandler = mP2.addHistoryInstrumentationHandler; | |
| et.addGlobalErrorInstrumentationHandler = lP2.addGlobalErrorInstrumentationHandler; | |
| et.addGlobalUnhandledRejectionInstrumentationHandler = bP2.addGlobalUnhandledRejectionInstrumentationHandler; | |
| et.resetInstrumentationHandlers = hP2.resetInstrumentationHandlers; | |
| et.filenameIsInApp = jP2.filenameIsInApp; | |
| et.escapeStringForRegex = kP2.escapeStringForRegex; | |
| et.supportsHistory = xP2.supportsHistory | |
| }); | |
| var F6 = Y((Of1) => { | |
| Object.defineProperty(Of1, "__esModule", { | |
| value: !0 | |
| }); | |
| var cT2 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; | |
| Of1.DEBUG_BUILD = cT2 | |
| }); | |
| var AN = Y((mf1) => { | |
| Object.defineProperty(mf1, "__esModule", { | |
| value: !0 | |
| }); | |
| var iT2 = "production"; | |
| mf1.DEFAULT_ENVIRONMENT = iT2 | |
| }); | |
| var Pv = Y((bf1) => { | |
| Object.defineProperty(bf1, "__esModule", { | |
| value: !0 | |
| }); | |
| var UO = V0(), | |
| rT2 = F6(); | |
| function lf1() { | |
| return UO.getGlobalSingleton("globalEventProcessors", () => []) | |
| } | |
| function aT2(I) { | |
| lf1().push(I) | |
| } | |
| function tt(I, d, G, Z = 0) { | |
| return new UO.SyncPromise((C, W) => { | |
| let w = I[Z]; | |
| if (d === null || typeof w !== "function") C(d); | |
| else { | |
| let B = w({ | |
| ...d | |
| }, G); | |
| if (rT2.DEBUG_BUILD && w.id && B === null && UO.logger.log(`Event processor "${w.id}" dropped event`), UO.isThenable(B)) B.then((A) => tt(I, A, G, Z + 1).then(C)).then(null, W); | |
| else tt(I, B, G, Z + 1).then(C).then(null, W) | |
| } | |
| }) | |
| } | |
| bf1.addGlobalEventProcessor = aT2; | |
| bf1.getGlobalEventProcessors = lf1; | |
| bf1.notifyEventProcessors = tt | |
| }); | |
| var VN = Y((hf1) => { | |
| Object.defineProperty(hf1, "__esModule", { | |
| value: !0 | |
| }); | |
| var $v = V0(); | |
| function tT2(I) { | |
| let d = $v.timestampInSeconds(), | |
| G = { | |
| sid: $v.uuid4(), | |
| init: !0, | |
| timestamp: d, | |
| started: d, | |
| duration: 0, | |
| status: "ok", | |
| errors: 0, | |
| ignoreDuration: !1, | |
| toJSON: () => dO2(G) | |
| }; | |
| if (I) I11(G, I); | |
| return G | |
| } | |
| function I11(I, d = {}) { | |
| if (d.user) { | |
| if (!I.ipAddress && d.user.ip_address) I.ipAddress = d.user.ip_address; | |
| if (!I.did && !d.did) I.did = d.user.id || d.user.email || d.user.username | |
| } | |
| if (I.timestamp = d.timestamp || $v.timestampInSeconds(), d.abnormal_mechanism) I.abnormal_mechanism = d.abnormal_mechanism; | |
| if (d.ignoreDuration) I.ignoreDuration = d.ignoreDuration; | |
| if (d.sid) I.sid = d.sid.length === 32 ? d.sid : $v.uuid4(); | |
| if (d.init !== void 0) I.init = d.init; | |
| if (!I.did && d.did) I.did = `${d.did}`; | |
| if (typeof d.started === "number") I.started = d.started; | |
| if (I.ignoreDuration) I.duration = void 0; | |
| else if (typeof d.duration === "number") I.duration = d.duration; | |
| else { | |
| let G = I.timestamp - I.started; | |
| I.duration = G >= 0 ? G : 0 | |
| } | |
| if (d.release) I.release = d.release; | |
| if (d.environment) I.environment = d.environment; | |
| if (!I.ipAddress && d.ipAddress) I.ipAddress = d.ipAddress; | |
| if (!I.userAgent && d.userAgent) I.userAgent = d.userAgent; | |
| if (typeof d.errors === "number") I.errors = d.errors; | |
| if (d.status) I.status = d.status | |
| } | |
| function IO2(I, d) { | |
| let G = {}; | |
| if (d) G = { | |
| status: d | |
| }; | |
| else if (I.status === "ok") G = { | |
| status: "exited" | |
| }; | |
| I11(I, G) | |
| } | |
| function dO2(I) { | |
| return $v.dropUndefinedKeys({ | |
| sid: `${I.sid}`, | |
| init: I.init, | |
| started: new Date(I.started * 1000).toISOString(), | |
| timestamp: new Date(I.timestamp * 1000).toISOString(), | |
| status: I.status, | |
| errors: I.errors, | |
| did: typeof I.did === "number" || typeof I.did === "string" ? `${I.did}` : void 0, | |
| duration: I.duration, | |
| abnormal_mechanism: I.abnormal_mechanism, | |
| attrs: { | |
| release: I.release, | |
| environment: I.environment, | |
| ip_address: I.ipAddress, | |
| user_agent: I.userAgent | |
| } | |
| }) | |
| } | |
| hf1.closeSession = IO2; | |
| hf1.makeSession = tT2; | |
| hf1.updateSession = I11 | |
| }); | |
| var kI = Y((pf1) => { | |
| Object.defineProperty(pf1, "__esModule", { | |
| value: !0 | |
| }); | |
| var d11 = V0(), | |
| WO2 = 0, | |
| kf1 = 1; | |
| function wO2(I) { | |
| let { | |
| spanId: d, | |
| traceId: G | |
| } = I.spanContext(), { | |
| data: Z, | |
| op: C, | |
| parent_span_id: W, | |
| status: w, | |
| tags: B, | |
| origin: A | |
| } = xf1(I); | |
| return d11.dropUndefinedKeys({ | |
| data: Z, | |
| op: C, | |
| parent_span_id: W, | |
| span_id: d, | |
| status: w, | |
| tags: B, | |
| trace_id: G, | |
| origin: A | |
| }) | |
| } | |
| function BO2(I) { | |
| let { | |
| traceId: d, | |
| spanId: G | |
| } = I.spanContext(), Z = cf1(I); | |
| return d11.generateSentryTraceHeader(d, G, Z) | |
| } | |
| function AO2(I) { | |
| if (typeof I === "number") return jf1(I); | |
| if (Array.isArray(I)) return I[0] + I[1] / 1e9; | |
| if (I instanceof Date) return jf1(I.getTime()); | |
| return d11.timestampInSeconds() | |
| } | |
| function jf1(I) { | |
| return I > 9999999999 ? I / 1000 : I | |
| } | |
| function xf1(I) { | |
| if (VO2(I)) return I.getSpanJSON(); | |
| if (typeof I.toJSON === "function") return I.toJSON(); | |
| return {} | |
| } | |
| function VO2(I) { | |
| return typeof I.getSpanJSON === "function" | |
| } | |
| function cf1(I) { | |
| let { | |
| traceFlags: d | |
| } = I.spanContext(); | |
| return Boolean(d & kf1) | |
| } | |
| pf1.TRACE_FLAG_NONE = WO2; | |
| pf1.TRACE_FLAG_SAMPLED = kf1; | |
| pf1.spanIsSampled = cf1; | |
| pf1.spanTimeInputToSeconds = AO2; | |
| pf1.spanToJSON = xf1; | |
| pf1.spanToTraceContext = wO2; | |
| pf1.spanToTraceHeader = BO2 | |
| }); | |
| var vO = Y((sf1) => { | |
| Object.defineProperty(sf1, "__esModule", { | |
| value: !0 | |
| }); | |
| var jd = V0(), | |
| JO2 = AN(), | |
| if1 = Pv(), | |
| Z11 = MO(), | |
| G11 = EO(), | |
| KO2 = kI(); | |
| function NO2(I, d, G, Z, C, W) { | |
| let { | |
| normalizeDepth: w = 3, | |
| normalizeMaxBreadth: B = 1000 | |
| } = I, A = { | |
| ...d, | |
| event_id: d.event_id || G.event_id || jd.uuid4(), | |
| timestamp: d.timestamp || jd.dateTimestampInSeconds() | |
| }, V = G.integrations || I.integrations.map((Q) => Q.name); | |
| if (zO2(A, I), QO2(A, V), d.type === void 0) rf1(A, I.stackParser); | |
| let X = qO2(Z, G.captureContext); | |
| if (G.mechanism) jd.addExceptionMechanism(A, G.mechanism); | |
| let _ = C && C.getEventProcessors ? C.getEventProcessors() : [], | |
| F = Z11.getGlobalScope().getScopeData(); | |
| if (W) { | |
| let Q = W.getScopeData(); | |
| G11.mergeScopeData(F, Q) | |
| } | |
| if (X) { | |
| let Q = X.getScopeData(); | |
| G11.mergeScopeData(F, Q) | |
| } | |
| let g = [...G.attachments || [], ...F.attachments]; | |
| if (g.length) G.attachments = g; | |
| G11.applyScopeDataToEvent(A, F); | |
| let J = [..._, ...if1.getGlobalEventProcessors(), ...F.eventProcessors]; | |
| return if1.notifyEventProcessors(J, A, G).then((Q) => { | |
| if (Q) af1(Q); | |
| if (typeof w === "number" && w > 0) return fO2(Q, w, B); | |
| return Q | |
| }) | |
| } | |
| function zO2(I, d) { | |
| let { | |
| environment: G, | |
| release: Z, | |
| dist: C, | |
| maxValueLength: W = 250 | |
| } = d; | |
| if (!("environment" in I)) I.environment = "environment" in d ? G : JO2.DEFAULT_ENVIRONMENT; | |
| if (I.release === void 0 && Z !== void 0) I.release = Z; | |
| if (I.dist === void 0 && C !== void 0) I.dist = C; | |
| if (I.message) I.message = jd.truncate(I.message, W); | |
| let w = I.exception && I.exception.values && I.exception.values[0]; | |
| if (w && w.value) w.value = jd.truncate(w.value, W); | |
| let B = I.request; | |
| if (B && B.url) B.url = jd.truncate(B.url, W) | |
| } | |
| var nf1 = new WeakMap; | |
| function rf1(I, d) { | |
| let G = jd.GLOBAL_OBJ._sentryDebugIds; | |
| if (!G) return; | |
| let Z, C = nf1.get(d); | |
| if (C) Z = C; | |
| else Z = new Map, nf1.set(d, Z); | |
| let W = Object.keys(G).reduce((w, B) => { | |
| let A, V = Z.get(B); | |
| if (V) A = V; | |
| else A = d(B), Z.set(B, A); | |
| for (let X = A.length - 1; X >= 0; X--) { | |
| let _ = A[X]; | |
| if (_.filename) { | |
| w[_.filename] = G[B]; | |
| break | |
| } | |
| } | |
| return w | |
| }, {}); | |
| try { | |
| I.exception.values.forEach((w) => { | |
| w.stacktrace.frames.forEach((B) => { | |
| if (B.filename) B.debug_id = W[B.filename] | |
| }) | |
| }) | |
| } catch (w) {} | |
| } | |
| function af1(I) { | |
| let d = {}; | |
| try { | |
| I.exception.values.forEach((Z) => { | |
| Z.stacktrace.frames.forEach((C) => { | |
| if (C.debug_id) { | |
| if (C.abs_path) d[C.abs_path] = C.debug_id; | |
| else if (C.filename) d[C.filename] = C.debug_id; | |
| delete C.debug_id | |
| } | |
| }) | |
| }) | |
| } catch (Z) {} | |
| if (Object.keys(d).length === 0) return; | |
| I.debug_meta = I.debug_meta || {}, I.debug_meta.images = I.debug_meta.images || []; | |
| let G = I.debug_meta.images; | |
| Object.keys(d).forEach((Z) => { | |
| G.push({ | |
| type: "sourcemap", | |
| code_file: Z, | |
| debug_id: d[Z] | |
| }) | |
| }) | |
| } | |
| function QO2(I, d) { | |
| if (d.length > 0) I.sdk = I.sdk || {}, I.sdk.integrations = [...I.sdk.integrations || [], ...d] | |
| } | |
| function fO2(I, d, G) { | |
| if (!I) return null; | |
| let Z = { | |
| ...I, | |
| ...I.breadcrumbs && { | |
| breadcrumbs: I.breadcrumbs.map((C) => ({ | |
| ...C, | |
| ...C.data && { | |
| data: jd.normalize(C.data, d, G) | |
| } | |
| })) | |
| }, | |
| ...I.user && { | |
| user: jd.normalize(I.user, d, G) | |
| }, | |
| ...I.contexts && { | |
| contexts: jd.normalize(I.contexts, d, G) | |
| }, | |
| ...I.extra && { | |
| extra: jd.normalize(I.extra, d, G) | |
| } | |
| }; | |
| if (I.contexts && I.contexts.trace && Z.contexts) { | |
| if (Z.contexts.trace = I.contexts.trace, I.contexts.trace.data) Z.contexts.trace.data = jd.normalize(I.contexts.trace.data, d, G) | |
| } | |
| if (I.spans) Z.spans = I.spans.map((C) => { | |
| let W = KO2.spanToJSON(C).data; | |
| if (W) C.data = jd.normalize(W, d, G); | |
| return C | |
| }); | |
| return Z | |
| } | |
| function qO2(I, d) { | |
| if (!d) return I; | |
| let G = I ? I.clone() : new Z11.Scope; | |
| return G.update(d), G | |
| } | |
| function RO2(I) { | |
| if (!I) return; | |
| if (UO2(I)) return { | |
| captureContext: I | |
| }; | |
| if (EO2(I)) return { | |
| captureContext: I | |
| }; | |
| return I | |
| } | |
| function UO2(I) { | |
| return I instanceof Z11.Scope || typeof I === "function" | |
| } | |
| var vO2 = ["user", "level", "extra", "contexts", "tags", "fingerprint", "requestSession", "propagationContext"]; | |
| function EO2(I) { | |
| return Object.keys(I).some((d) => vO2.includes(d)) | |
| } | |
| sf1.applyDebugIds = rf1; | |
| sf1.applyDebugMeta = af1; | |
| sf1.parseEventHintOrCaptureContext = RO2; | |
| sf1.prepareEvent = NO2 | |
| }); | |
| var iG = Y((tf1) => { | |
| Object.defineProperty(tf1, "__esModule", { | |
| value: !0 | |
| }); | |
| var qA = V0(), | |
| PO2 = AN(), | |
| SO = F6(), | |
| I6 = ww(), | |
| C11 = VN(), | |
| $O2 = vO(); | |
| function uO2(I, d) { | |
| return I6.getCurrentHub().captureException(I, $O2.parseEventHintOrCaptureContext(d)) | |
| } | |
| function TO2(I, d) { | |
| let G = typeof d === "string" ? d : void 0, | |
| Z = typeof d !== "string" ? { | |
| captureContext: d | |
| } : void 0; | |
| return I6.getCurrentHub().captureMessage(I, G, Z) | |
| } | |
| function OO2(I, d) { | |
| return I6.getCurrentHub().captureEvent(I, d) | |
| } | |
| function mO2(I) { | |
| I6.getCurrentHub().configureScope(I) | |
| } | |
| function lO2(I, d) { | |
| I6.getCurrentHub().addBreadcrumb(I, d) | |
| } | |
| function bO2(I, d) { | |
| I6.getCurrentHub().setContext(I, d) | |
| } | |
| function hO2(I) { | |
| I6.getCurrentHub().setExtras(I) | |
| } | |
| function jO2(I, d) { | |
| I6.getCurrentHub().setExtra(I, d) | |
| } | |
| function kO2(I) { | |
| I6.getCurrentHub().setTags(I) | |
| } | |
| function xO2(I, d) { | |
| I6.getCurrentHub().setTag(I, d) | |
| } | |
| function cO2(I) { | |
| I6.getCurrentHub().setUser(I) | |
| } | |
| function of1(...I) { | |
| let d = I6.getCurrentHub(); | |
| if (I.length === 2) { | |
| let [G, Z] = I; | |
| if (!G) return d.withScope(Z); | |
| return d.withScope(() => { | |
| return d.getStackTop().scope = G, Z(G) | |
| }) | |
| } | |
| return d.withScope(I[0]) | |
| } | |
| function pO2(I) { | |
| return I6.runWithAsyncContext(() => { | |
| return I(I6.getIsolationScope()) | |
| }) | |
| } | |
| function iO2(I, d) { | |
| return of1((G) => { | |
| return G.setSpan(I), d(G) | |
| }) | |
| } | |
| function nO2(I, d) { | |
| return I6.getCurrentHub().startTransaction({ | |
| ...I | |
| }, d) | |
| } | |
| function W11(I, d) { | |
| let G = uv(), | |
| Z = DF(); | |
| if (!Z) SO.DEBUG_BUILD && qA.logger.warn("Cannot capture check-in. No client defined."); | |
| else if (!Z.captureCheckIn) SO.DEBUG_BUILD && qA.logger.warn("Cannot capture check-in. Client does not support sending check-ins."); | |
| else return Z.captureCheckIn(I, d, G); | |
| return qA.uuid4() | |
| } | |
| function rO2(I, d, G) { | |
| let Z = W11({ | |
| monitorSlug: I, | |
| status: "in_progress" | |
| }, G), | |
| C = qA.timestampInSeconds(); | |
| function W(B) { | |
| W11({ | |
| monitorSlug: I, | |
| status: B, | |
| checkInId: Z, | |
| duration: qA.timestampInSeconds() - C | |
| }) | |
| } | |
| let w; | |
| try { | |
| w = d() | |
| } catch (B) { | |
| throw W("error"), B | |
| } | |
| if (qA.isThenable(w)) Promise.resolve(w).then(() => { | |
| W("ok") | |
| }, () => { | |
| W("error") | |
| }); | |
| else W("ok"); | |
| return w | |
| } | |
| async function aO2(I) { | |
| let d = DF(); | |
| if (d) return d.flush(I); | |
| return SO.DEBUG_BUILD && qA.logger.warn("Cannot flush events. No client defined."), Promise.resolve(!1) | |
| } | |
| async function sO2(I) { | |
| let d = DF(); | |
| if (d) return d.close(I); | |
| return SO.DEBUG_BUILD && qA.logger.warn("Cannot flush events and disable SDK. No client defined."), Promise.resolve(!1) | |
| } | |
| function oO2() { | |
| return I6.getCurrentHub().lastEventId() | |
| } | |
| function DF() { | |
| return I6.getCurrentHub().getClient() | |
| } | |
| function eO2() { | |
| return !!DF() | |
| } | |
| function uv() { | |
| return I6.getCurrentHub().getScope() | |
| } | |
| function tO2(I) { | |
| let d = DF(), | |
| G = I6.getIsolationScope(), | |
| Z = uv(), | |
| { | |
| release: C, | |
| environment: W = PO2.DEFAULT_ENVIRONMENT | |
| } = d && d.getOptions() || {}, | |
| { | |
| userAgent: w | |
| } = qA.GLOBAL_OBJ.navigator || {}, | |
| B = C11.makeSession({ | |
| release: C, | |
| environment: W, | |
| user: Z.getUser() || G.getUser(), | |
| ...w && { | |
| userAgent: w | |
| }, | |
| ...I | |
| }), | |
| A = G.getSession(); | |
| if (A && A.status === "ok") C11.updateSession(A, { | |
| status: "exited" | |
| }); | |
| return w11(), G.setSession(B), Z.setSession(B), B | |
| } | |
| function w11() { | |
| let I = I6.getIsolationScope(), | |
| d = uv(), | |
| G = d.getSession() || I.getSession(); | |
| if (G) C11.closeSession(G); | |
| ef1(), I.setSession(), d.setSession() | |
| } | |
| function ef1() { | |
| let I = I6.getIsolationScope(), | |
| d = uv(), | |
| G = DF(), | |
| Z = d.getSession() || I.getSession(); | |
| if (Z && G && G.captureSession) G.captureSession(Z) | |
| } | |
| function Im2(I = !1) { | |
| if (I) { | |
| w11(); | |
| return | |
| } | |
| ef1() | |
| } | |
| tf1.addBreadcrumb = lO2; | |
| tf1.captureCheckIn = W11; | |
| tf1.captureEvent = OO2; | |
| tf1.captureException = uO2; | |
| tf1.captureMessage = TO2; | |
| tf1.captureSession = Im2; | |
| tf1.close = sO2; | |
| tf1.configureScope = mO2; | |
| tf1.endSession = w11; | |
| tf1.flush = aO2; | |
| tf1.getClient = DF; | |
| tf1.getCurrentScope = uv; | |
| tf1.isInitialized = eO2; | |
| tf1.lastEventId = oO2; | |
| tf1.setContext = bO2; | |
| tf1.setExtra = jO2; | |
| tf1.setExtras = hO2; | |
| tf1.setTag = xO2; | |
| tf1.setTags = kO2; | |
| tf1.setUser = cO2; | |
| tf1.startSession = tO2; | |
| tf1.startTransaction = nO2; | |
| tf1.withActiveSpan = iO2; | |
| tf1.withIsolationScope = pO2; | |
| tf1.withMonitor = rO2; | |
| tf1.withScope = of1 | |
| }); | |
| var XN = Y((Iq1) => { | |
| Object.defineProperty(Iq1, "__esModule", { | |
| value: !0 | |
| }); | |
| function Em2(I) { | |
| return I.transaction | |
| } | |
| Iq1.getRootSpan = Em2 | |
| }); | |
| var HF = Y((Zq1) => { | |
| Object.defineProperty(Zq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Sm2 = V0(), | |
| Lm2 = AN(), | |
| dq1 = iG(), | |
| ym2 = XN(), | |
| B11 = kI(); | |
| function Gq1(I, d, G) { | |
| let Z = d.getOptions(), | |
| { | |
| publicKey: C | |
| } = d.getDsn() || {}, | |
| { | |
| segment: W | |
| } = G && G.getUser() || {}, | |
| w = Sm2.dropUndefinedKeys({ | |
| environment: Z.environment || Lm2.DEFAULT_ENVIRONMENT, | |
| release: Z.release, | |
| user_segment: W, | |
| public_key: C, | |
| trace_id: I | |
| }); | |
| return d.emit && d.emit("createDsc", w), w | |
| } | |
| function Pm2(I) { | |
| let d = dq1.getClient(); | |
| if (!d) return {}; | |
| let G = Gq1(B11.spanToJSON(I).trace_id || "", d, dq1.getCurrentScope()), | |
| Z = ym2.getRootSpan(I); | |
| if (!Z) return G; | |
| let C = Z && Z._frozenDynamicSamplingContext; | |
| if (C) return C; | |
| let { | |
| sampleRate: W, | |
| source: w | |
| } = Z.metadata; | |
| if (W != null) G.sample_rate = `${W}`; | |
| let B = B11.spanToJSON(Z); | |
| if (w && w !== "url") G.transaction = B.description; | |
| return G.sampled = String(B11.spanIsSampled(Z)), d.emit && d.emit("createDsc", G), G | |
| } | |
| Zq1.getDynamicSamplingContextFromClient = Gq1; | |
| Zq1.getDynamicSamplingContextFromSpan = Pm2 | |
| }); | |
| var EO = Y((Wq1) => { | |
| Object.defineProperty(Wq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Tv = V0(), | |
| Tm2 = HF(), | |
| Om2 = XN(), | |
| Cq1 = kI(); | |
| function mm2(I, d) { | |
| let { | |
| fingerprint: G, | |
| span: Z, | |
| breadcrumbs: C, | |
| sdkProcessingMetadata: W | |
| } = d; | |
| if (bm2(I, d), Z) km2(I, Z); | |
| xm2(I, G), hm2(I, C), jm2(I, W) | |
| } | |
| function lm2(I, d) { | |
| let { | |
| extra: G, | |
| tags: Z, | |
| user: C, | |
| contexts: W, | |
| level: w, | |
| sdkProcessingMetadata: B, | |
| breadcrumbs: A, | |
| fingerprint: V, | |
| eventProcessors: X, | |
| attachments: _, | |
| propagationContext: F, | |
| transactionName: g, | |
| span: J | |
| } = d; | |
| if (YN(I, "extra", G), YN(I, "tags", Z), YN(I, "user", C), YN(I, "contexts", W), YN(I, "sdkProcessingMetadata", B), w) I.level = w; | |
| if (g) I.transactionName = g; | |
| if (J) I.span = J; | |
| if (A.length) I.breadcrumbs = [...I.breadcrumbs, ...A]; | |
| if (V.length) I.fingerprint = [...I.fingerprint, ...V]; | |
| if (X.length) I.eventProcessors = [...I.eventProcessors, ...X]; | |
| if (_.length) I.attachments = [...I.attachments, ..._]; | |
| I.propagationContext = { | |
| ...I.propagationContext, | |
| ...F | |
| } | |
| } | |
| function YN(I, d, G) { | |
| if (G && Object.keys(G).length) { | |
| I[d] = { | |
| ...I[d] | |
| }; | |
| for (let Z in G) | |
| if (Object.prototype.hasOwnProperty.call(G, Z)) I[d][Z] = G[Z] | |
| } | |
| } | |
| function bm2(I, d) { | |
| let { | |
| extra: G, | |
| tags: Z, | |
| user: C, | |
| contexts: W, | |
| level: w, | |
| transactionName: B | |
| } = d, A = Tv.dropUndefinedKeys(G); | |
| if (A && Object.keys(A).length) I.extra = { | |
| ...A, | |
| ...I.extra | |
| }; | |
| let V = Tv.dropUndefinedKeys(Z); | |
| if (V && Object.keys(V).length) I.tags = { | |
| ...V, | |
| ...I.tags | |
| }; | |
| let X = Tv.dropUndefinedKeys(C); | |
| if (X && Object.keys(X).length) I.user = { | |
| ...X, | |
| ...I.user | |
| }; | |
| let _ = Tv.dropUndefinedKeys(W); | |
| if (_ && Object.keys(_).length) I.contexts = { | |
| ..._, | |
| ...I.contexts | |
| }; | |
| if (w) I.level = w; | |
| if (B) I.transaction = B | |
| } | |
| function hm2(I, d) { | |
| let G = [...I.breadcrumbs || [], ...d]; | |
| I.breadcrumbs = G.length ? G : void 0 | |
| } | |
| function jm2(I, d) { | |
| I.sdkProcessingMetadata = { | |
| ...I.sdkProcessingMetadata, | |
| ...d | |
| } | |
| } | |
| function km2(I, d) { | |
| I.contexts = { | |
| trace: Cq1.spanToTraceContext(d), | |
| ...I.contexts | |
| }; | |
| let G = Om2.getRootSpan(d); | |
| if (G) { | |
| I.sdkProcessingMetadata = { | |
| dynamicSamplingContext: Tm2.getDynamicSamplingContextFromSpan(d), | |
| ...I.sdkProcessingMetadata | |
| }; | |
| let Z = Cq1.spanToJSON(G).description; | |
| if (Z) I.tags = { | |
| transaction: Z, | |
| ...I.tags | |
| } | |
| } | |
| } | |
| function xm2(I, d) { | |
| if (I.fingerprint = I.fingerprint ? Tv.arrayify(I.fingerprint) : [], d) I.fingerprint = I.fingerprint.concat(d); | |
| if (I.fingerprint && !I.fingerprint.length) delete I.fingerprint | |
| } | |
| Wq1.applyScopeDataToEvent = mm2; | |
| Wq1.mergeAndOverwriteScopeData = YN; | |
| Wq1.mergeScopeData = lm2 | |
| }); | |
| var MO = Y((Aq1) => { | |
| Object.defineProperty(Aq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Bw = V0(), | |
| wq1 = Pv(), | |
| nm2 = VN(), | |
| rm2 = EO(), | |
| am2 = 100, | |
| LO; | |
| class _N { | |
| constructor() { | |
| this._notifyingListeners = !1, this._scopeListeners = [], this._eventProcessors = [], this._breadcrumbs = [], this._attachments = [], this._user = {}, this._tags = {}, this._extra = {}, this._contexts = {}, this._sdkProcessingMetadata = {}, this._propagationContext = Bq1() | |
| } | |
| static clone(I) { | |
| return I ? I.clone() : new _N | |
| } | |
| clone() { | |
| let I = new _N; | |
| return I._breadcrumbs = [...this._breadcrumbs], I._tags = { | |
| ...this._tags | |
| }, I._extra = { | |
| ...this._extra | |
| }, I._contexts = { | |
| ...this._contexts | |
| }, I._user = this._user, I._level = this._level, I._span = this._span, I._session = this._session, I._transactionName = this._transactionName, I._fingerprint = this._fingerprint, I._eventProcessors = [...this._eventProcessors], I._requestSession = this._requestSession, I._attachments = [...this._attachments], I._sdkProcessingMetadata = { | |
| ...this._sdkProcessingMetadata | |
| }, I._propagationContext = { | |
| ...this._propagationContext | |
| }, I._client = this._client, I | |
| } | |
| setClient(I) { | |
| this._client = I | |
| } | |
| getClient() { | |
| return this._client | |
| } | |
| addScopeListener(I) { | |
| this._scopeListeners.push(I) | |
| } | |
| addEventProcessor(I) { | |
| return this._eventProcessors.push(I), this | |
| } | |
| setUser(I) { | |
| if (this._user = I || { | |
| email: void 0, | |
| id: void 0, | |
| ip_address: void 0, | |
| segment: void 0, | |
| username: void 0 | |
| }, this._session) nm2.updateSession(this._session, { | |
| user: I | |
| }); | |
| return this._notifyScopeListeners(), this | |
| } | |
| getUser() { | |
| return this._user | |
| } | |
| getRequestSession() { | |
| return this._requestSession | |
| } | |
| setRequestSession(I) { | |
| return this._requestSession = I, this | |
| } | |
| setTags(I) { | |
| return this._tags = { | |
| ...this._tags, | |
| ...I | |
| }, this._notifyScopeListeners(), this | |
| } | |
| setTag(I, d) { | |
| return this._tags = { | |
| ...this._tags, | |
| [I]: d | |
| }, this._notifyScopeListeners(), this | |
| } | |
| setExtras(I) { | |
| return this._extra = { | |
| ...this._extra, | |
| ...I | |
| }, this._notifyScopeListeners(), this | |
| } | |
| setExtra(I, d) { | |
| return this._extra = { | |
| ...this._extra, | |
| [I]: d | |
| }, this._notifyScopeListeners(), this | |
| } | |
| setFingerprint(I) { | |
| return this._fingerprint = I, this._notifyScopeListeners(), this | |
| } | |
| setLevel(I) { | |
| return this._level = I, this._notifyScopeListeners(), this | |
| } | |
| setTransactionName(I) { | |
| return this._transactionName = I, this._notifyScopeListeners(), this | |
| } | |
| setContext(I, d) { | |
| if (d === null) delete this._contexts[I]; | |
| else this._contexts[I] = d; | |
| return this._notifyScopeListeners(), this | |
| } | |
| setSpan(I) { | |
| return this._span = I, this._notifyScopeListeners(), this | |
| } | |
| getSpan() { | |
| return this._span | |
| } | |
| getTransaction() { | |
| let I = this._span; | |
| return I && I.transaction | |
| } | |
| setSession(I) { | |
| if (!I) delete this._session; | |
| else this._session = I; | |
| return this._notifyScopeListeners(), this | |
| } | |
| getSession() { | |
| return this._session | |
| } | |
| update(I) { | |
| if (!I) return this; | |
| let d = typeof I === "function" ? I(this) : I; | |
| if (d instanceof _N) { | |
| let G = d.getScopeData(); | |
| if (this._tags = { | |
| ...this._tags, | |
| ...G.tags | |
| }, this._extra = { | |
| ...this._extra, | |
| ...G.extra | |
| }, this._contexts = { | |
| ...this._contexts, | |
| ...G.contexts | |
| }, G.user && Object.keys(G.user).length) this._user = G.user; | |
| if (G.level) this._level = G.level; | |
| if (G.fingerprint.length) this._fingerprint = G.fingerprint; | |
| if (d.getRequestSession()) this._requestSession = d.getRequestSession(); | |
| if (G.propagationContext) this._propagationContext = G.propagationContext | |
| } else if (Bw.isPlainObject(d)) { | |
| let G = I; | |
| if (this._tags = { | |
| ...this._tags, | |
| ...G.tags | |
| }, this._extra = { | |
| ...this._extra, | |
| ...G.extra | |
| }, this._contexts = { | |
| ...this._contexts, | |
| ...G.contexts | |
| }, G.user) this._user = G.user; | |
| if (G.level) this._level = G.level; | |
| if (G.fingerprint) this._fingerprint = G.fingerprint; | |
| if (G.requestSession) this._requestSession = G.requestSession; | |
| if (G.propagationContext) this._propagationContext = G.propagationContext | |
| } | |
| return this | |
| } | |
| clear() { | |
| return this._breadcrumbs = [], this._tags = {}, this._extra = {}, this._user = {}, this._contexts = {}, this._level = void 0, this._transactionName = void 0, this._fingerprint = void 0, this._requestSession = void 0, this._span = void 0, this._session = void 0, this._notifyScopeListeners(), this._attachments = [], this._propagationContext = Bq1(), this | |
| } | |
| addBreadcrumb(I, d) { | |
| let G = typeof d === "number" ? d : am2; | |
| if (G <= 0) return this; | |
| let Z = { | |
| timestamp: Bw.dateTimestampInSeconds(), | |
| ...I | |
| }, | |
| C = this._breadcrumbs; | |
| return C.push(Z), this._breadcrumbs = C.length > G ? C.slice(-G) : C, this._notifyScopeListeners(), this | |
| } | |
| getLastBreadcrumb() { | |
| return this._breadcrumbs[this._breadcrumbs.length - 1] | |
| } | |
| clearBreadcrumbs() { | |
| return this._breadcrumbs = [], this._notifyScopeListeners(), this | |
| } | |
| addAttachment(I) { | |
| return this._attachments.push(I), this | |
| } | |
| getAttachments() { | |
| return this.getScopeData().attachments | |
| } | |
| clearAttachments() { | |
| return this._attachments = [], this | |
| } | |
| getScopeData() { | |
| let { | |
| _breadcrumbs: I, | |
| _attachments: d, | |
| _contexts: G, | |
| _tags: Z, | |
| _extra: C, | |
| _user: W, | |
| _level: w, | |
| _fingerprint: B, | |
| _eventProcessors: A, | |
| _propagationContext: V, | |
| _sdkProcessingMetadata: X, | |
| _transactionName: _, | |
| _span: F | |
| } = this; | |
| return { | |
| breadcrumbs: I, | |
| attachments: d, | |
| contexts: G, | |
| tags: Z, | |
| extra: C, | |
| user: W, | |
| level: w, | |
| fingerprint: B || [], | |
| eventProcessors: A, | |
| propagationContext: V, | |
| sdkProcessingMetadata: X, | |
| transactionName: _, | |
| span: F | |
| } | |
| } | |
| applyToEvent(I, d = {}, G = []) { | |
| rm2.applyScopeDataToEvent(I, this.getScopeData()); | |
| let Z = [...G, ...wq1.getGlobalEventProcessors(), ...this._eventProcessors]; | |
| return wq1.notifyEventProcessors(Z, I, d) | |
| } | |
| setSDKProcessingMetadata(I) { | |
| return this._sdkProcessingMetadata = { | |
| ...this._sdkProcessingMetadata, | |
| ...I | |
| }, this | |
| } | |
| setPropagationContext(I) { | |
| return this._propagationContext = I, this | |
| } | |
| getPropagationContext() { | |
| return this._propagationContext | |
| } | |
| captureException(I, d) { | |
| let G = d && d.event_id ? d.event_id : Bw.uuid4(); | |
| if (!this._client) return Bw.logger.warn("No client configured on scope - will not capture exception!"), G; | |
| let Z = new Error("Sentry syntheticException"); | |
| return this._client.captureException(I, { | |
| originalException: I, | |
| syntheticException: Z, | |
| ...d, | |
| event_id: G | |
| }, this), G | |
| } | |
| captureMessage(I, d, G) { | |
| let Z = G && G.event_id ? G.event_id : Bw.uuid4(); | |
| if (!this._client) return Bw.logger.warn("No client configured on scope - will not capture message!"), Z; | |
| let C = new Error(I); | |
| return this._client.captureMessage(I, d, { | |
| originalException: I, | |
| syntheticException: C, | |
| ...G, | |
| event_id: Z | |
| }, this), Z | |
| } | |
| captureEvent(I, d) { | |
| let G = d && d.event_id ? d.event_id : Bw.uuid4(); | |
| if (!this._client) return Bw.logger.warn("No client configured on scope - will not capture event!"), G; | |
| return this._client.captureEvent(I, { | |
| ...d, | |
| event_id: G | |
| }, this), G | |
| } | |
| _notifyScopeListeners() { | |
| if (!this._notifyingListeners) this._notifyingListeners = !0, this._scopeListeners.forEach((I) => { | |
| I(this) | |
| }), this._notifyingListeners = !1 | |
| } | |
| } | |
| function sm2() { | |
| if (!LO) LO = new _N; | |
| return LO | |
| } | |
| function om2(I) { | |
| LO = I | |
| } | |
| function Bq1() { | |
| return { | |
| traceId: Bw.uuid4(), | |
| spanId: Bw.uuid4().substring(16) | |
| } | |
| } | |
| Aq1.Scope = _N; | |
| Aq1.getGlobalScope = sm2; | |
| Aq1.setGlobalScope = om2 | |
| }); | |
| var yO = Y((Vq1) => { | |
| Object.defineProperty(Vq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var dl2 = "7.120.0"; | |
| Vq1.SDK_VERSION = dl2 | |
| }); | |
| var ww = Y((Hq1) => { | |
| Object.defineProperty(Hq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var s7 = V0(), | |
| Zl2 = AN(), | |
| A11 = F6(), | |
| Xq1 = MO(), | |
| V11 = VN(), | |
| Cl2 = yO(), | |
| PO = parseFloat(Cl2.SDK_VERSION), | |
| Wl2 = 100; | |
| class mv { | |
| constructor(I, d, G, Z = PO) { | |
| this._version = Z; | |
| let C; | |
| if (!d) C = new Xq1.Scope, C.setClient(I); | |
| else C = d; | |
| let W; | |
| if (!G) W = new Xq1.Scope, W.setClient(I); | |
| else W = G; | |
| if (this._stack = [{ | |
| scope: C | |
| }], I) this.bindClient(I); | |
| this._isolationScope = W | |
| } | |
| isOlderThan(I) { | |
| return this._version < I | |
| } | |
| bindClient(I) { | |
| let d = this.getStackTop(); | |
| if (d.client = I, d.scope.setClient(I), I && I.setupIntegrations) I.setupIntegrations() | |
| } | |
| pushScope() { | |
| let I = this.getScope().clone(); | |
| return this.getStack().push({ | |
| client: this.getClient(), | |
| scope: I | |
| }), I | |
| } | |
| popScope() { | |
| if (this.getStack().length <= 1) return !1; | |
| return !!this.getStack().pop() | |
| } | |
| withScope(I) { | |
| let d = this.pushScope(), | |
| G; | |
| try { | |
| G = I(d) | |
| } catch (Z) { | |
| throw this.popScope(), Z | |
| } | |
| if (s7.isThenable(G)) return G.then((Z) => { | |
| return this.popScope(), Z | |
| }, (Z) => { | |
| throw this.popScope(), Z | |
| }); | |
| return this.popScope(), G | |
| } | |
| getClient() { | |
| return this.getStackTop().client | |
| } | |
| getScope() { | |
| return this.getStackTop().scope | |
| } | |
| getIsolationScope() { | |
| return this._isolationScope | |
| } | |
| getStack() { | |
| return this._stack | |
| } | |
| getStackTop() { | |
| return this._stack[this._stack.length - 1] | |
| } | |
| captureException(I, d) { | |
| let G = this._lastEventId = d && d.event_id ? d.event_id : s7.uuid4(), | |
| Z = new Error("Sentry syntheticException"); | |
| return this.getScope().captureException(I, { | |
| originalException: I, | |
| syntheticException: Z, | |
| ...d, | |
| event_id: G | |
| }), G | |
| } | |
| captureMessage(I, d, G) { | |
| let Z = this._lastEventId = G && G.event_id ? G.event_id : s7.uuid4(), | |
| C = new Error(I); | |
| return this.getScope().captureMessage(I, d, { | |
| originalException: I, | |
| syntheticException: C, | |
| ...G, | |
| event_id: Z | |
| }), Z | |
| } | |
| captureEvent(I, d) { | |
| let G = d && d.event_id ? d.event_id : s7.uuid4(); | |
| if (!I.type) this._lastEventId = G; | |
| return this.getScope().captureEvent(I, { | |
| ...d, | |
| event_id: G | |
| }), G | |
| } | |
| lastEventId() { | |
| return this._lastEventId | |
| } | |
| addBreadcrumb(I, d) { | |
| let { | |
| scope: G, | |
| client: Z | |
| } = this.getStackTop(); | |
| if (!Z) return; | |
| let { | |
| beforeBreadcrumb: C = null, | |
| maxBreadcrumbs: W = Wl2 | |
| } = Z.getOptions && Z.getOptions() || {}; | |
| if (W <= 0) return; | |
| let B = { | |
| timestamp: s7.dateTimestampInSeconds(), | |
| ...I | |
| }, | |
| A = C ? s7.consoleSandbox(() => C(B, d)) : B; | |
| if (A === null) return; | |
| if (Z.emit) Z.emit("beforeAddBreadcrumb", A, d); | |
| G.addBreadcrumb(A, W) | |
| } | |
| setUser(I) { | |
| this.getScope().setUser(I), this.getIsolationScope().setUser(I) | |
| } | |
| setTags(I) { | |
| this.getScope().setTags(I), this.getIsolationScope().setTags(I) | |
| } | |
| setExtras(I) { | |
| this.getScope().setExtras(I), this.getIsolationScope().setExtras(I) | |
| } | |
| setTag(I, d) { | |
| this.getScope().setTag(I, d), this.getIsolationScope().setTag(I, d) | |
| } | |
| setExtra(I, d) { | |
| this.getScope().setExtra(I, d), this.getIsolationScope().setExtra(I, d) | |
| } | |
| setContext(I, d) { | |
| this.getScope().setContext(I, d), this.getIsolationScope().setContext(I, d) | |
| } | |
| configureScope(I) { | |
| let { | |
| scope: d, | |
| client: G | |
| } = this.getStackTop(); | |
| if (G) I(d) | |
| } | |
| run(I) { | |
| let d = X11(this); | |
| try { | |
| I(this) | |
| } finally { | |
| X11(d) | |
| } | |
| } | |
| getIntegration(I) { | |
| let d = this.getClient(); | |
| if (!d) return null; | |
| try { | |
| return d.getIntegration(I) | |
| } catch (G) { | |
| return A11.DEBUG_BUILD && s7.logger.warn(`Cannot retrieve integration ${I.id} from the current Hub`), null | |
| } | |
| } | |
| startTransaction(I, d) { | |
| let G = this._callExtensionMethod("startTransaction", I, d); | |
| if (A11.DEBUG_BUILD && !G) | |
| if (!this.getClient()) s7.logger.warn("Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'"); | |
| else s7.logger.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init': | |
| Sentry.addTracingExtensions(); | |
| Sentry.init({...}); | |
| `); | |
| return G | |
| } | |
| traceHeaders() { | |
| return this._callExtensionMethod("traceHeaders") | |
| } | |
| captureSession(I = !1) { | |
| if (I) return this.endSession(); | |
| this._sendSessionUpdate() | |
| } | |
| endSession() { | |
| let d = this.getStackTop().scope, | |
| G = d.getSession(); | |
| if (G) V11.closeSession(G); | |
| this._sendSessionUpdate(), d.setSession() | |
| } | |
| startSession(I) { | |
| let { | |
| scope: d, | |
| client: G | |
| } = this.getStackTop(), { | |
| release: Z, | |
| environment: C = Zl2.DEFAULT_ENVIRONMENT | |
| } = G && G.getOptions() || {}, { | |
| userAgent: W | |
| } = s7.GLOBAL_OBJ.navigator || {}, w = V11.makeSession({ | |
| release: Z, | |
| environment: C, | |
| user: d.getUser(), | |
| ...W && { | |
| userAgent: W | |
| }, | |
| ...I | |
| }), B = d.getSession && d.getSession(); | |
| if (B && B.status === "ok") V11.updateSession(B, { | |
| status: "exited" | |
| }); | |
| return this.endSession(), d.setSession(w), w | |
| } | |
| shouldSendDefaultPii() { | |
| let I = this.getClient(), | |
| d = I && I.getOptions(); | |
| return Boolean(d && d.sendDefaultPii) | |
| } | |
| _sendSessionUpdate() { | |
| let { | |
| scope: I, | |
| client: d | |
| } = this.getStackTop(), G = I.getSession(); | |
| if (G && d && d.captureSession) d.captureSession(G) | |
| } | |
| _callExtensionMethod(I, ...d) { | |
| let Z = FF().__SENTRY__; | |
| if (Z && Z.extensions && typeof Z.extensions[I] === "function") return Z.extensions[I].apply(this, d); | |
| A11.DEBUG_BUILD && s7.logger.warn(`Extension method ${I} couldn't be found, doing nothing.`) | |
| } | |
| } | |
| function FF() { | |
| return s7.GLOBAL_OBJ.__SENTRY__ = s7.GLOBAL_OBJ.__SENTRY__ || { | |
| extensions: {}, | |
| hub: void 0 | |
| }, s7.GLOBAL_OBJ | |
| } | |
| function X11(I) { | |
| let d = FF(), | |
| G = Ov(d); | |
| return $O(d, I), G | |
| } | |
| function Yq1() { | |
| let I = FF(); | |
| if (I.__SENTRY__ && I.__SENTRY__.acs) { | |
| let d = I.__SENTRY__.acs.getCurrentHub(); | |
| if (d) return d | |
| } | |
| return _q1(I) | |
| } | |
| function wl2() { | |
| return Yq1().getIsolationScope() | |
| } | |
| function _q1(I = FF()) { | |
| if (!Dq1(I) || Ov(I).isOlderThan(PO)) $O(I, new mv); | |
| return Ov(I) | |
| } | |
| function Bl2(I, d = _q1()) { | |
| if (!Dq1(I) || Ov(I).isOlderThan(PO)) { | |
| let G = d.getClient(), | |
| Z = d.getScope(), | |
| C = d.getIsolationScope(); | |
| $O(I, new mv(G, Z.clone(), C.clone())) | |
| } | |
| } | |
| function Al2(I) { | |
| let d = FF(); | |
| d.__SENTRY__ = d.__SENTRY__ || {}, d.__SENTRY__.acs = I | |
| } | |
| function Vl2(I, d = {}) { | |
| let G = FF(); | |
| if (G.__SENTRY__ && G.__SENTRY__.acs) return G.__SENTRY__.acs.runWithAsyncContext(I, d); | |
| return I() | |
| } | |
| function Dq1(I) { | |
| return !!(I && I.__SENTRY__ && I.__SENTRY__.hub) | |
| } | |
| function Ov(I) { | |
| return s7.getGlobalSingleton("hub", () => new mv, I) | |
| } | |
| function $O(I, d) { | |
| if (!I) return !1; | |
| let G = I.__SENTRY__ = I.__SENTRY__ || {}; | |
| return G.hub = d, !0 | |
| } | |
| Hq1.API_VERSION = PO; | |
| Hq1.Hub = mv; | |
| Hq1.ensureHubOnCarrier = Bl2; | |
| Hq1.getCurrentHub = Yq1; | |
| Hq1.getHubFromCarrier = Ov; | |
| Hq1.getIsolationScope = wl2; | |
| Hq1.getMainCarrier = FF; | |
| Hq1.makeMain = X11; | |
| Hq1.runWithAsyncContext = Vl2; | |
| Hq1.setAsyncContextStrategy = Al2; | |
| Hq1.setHubOnCarrier = $O | |
| }); | |
| var uO = Y((gq1) => { | |
| Object.defineProperty(gq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Fq1 = V0(), | |
| Ql2 = ww(); | |
| function fl2(I) { | |
| return (I || Ql2.getCurrentHub()).getScope().getTransaction() | |
| } | |
| var ql2 = Fq1.extractTraceparentData; | |
| gq1.stripUrlQueryAndFragment = Fq1.stripUrlQueryAndFragment; | |
| gq1.extractTraceparentData = ql2; | |
| gq1.getActiveTransaction = fl2 | |
| }); | |
| var TO = Y((Kq1) => { | |
| Object.defineProperty(Kq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Y11 = V0(), | |
| El2 = F6(), | |
| Ml2 = uO(), | |
| Jq1 = !1; | |
| function Sl2() { | |
| if (Jq1) return; | |
| Jq1 = !0, Y11.addGlobalErrorInstrumentationHandler(_11), Y11.addGlobalUnhandledRejectionInstrumentationHandler(_11) | |
| } | |
| function _11() { | |
| let I = Ml2.getActiveTransaction(); | |
| if (I) El2.DEBUG_BUILD && Y11.logger.log("[Tracing] Transaction: internal_error -> Global error occured"), I.setStatus("internal_error") | |
| } | |
| _11.tag = "sentry_tracingErrorCallback"; | |
| Kq1.registerErrorInstrumentation = Sl2 | |
| }); | |
| var DN = Y((Nq1) => { | |
| Object.defineProperty(Nq1, "__esModule", { | |
| value: !0 | |
| }); | |
| Nq1.SpanStatus = void 0; | |
| (function(I) { | |
| I.Ok = "ok"; | |
| let G = "deadline_exceeded"; | |
| I.DeadlineExceeded = G; | |
| let Z = "unauthenticated"; | |
| I.Unauthenticated = Z; | |
| let C = "permission_denied"; | |
| I.PermissionDenied = C; | |
| let W = "not_found"; | |
| I.NotFound = W; | |
| let w = "resource_exhausted"; | |
| I.ResourceExhausted = w; | |
| let B = "invalid_argument"; | |
| I.InvalidArgument = B; | |
| let A = "unimplemented"; | |
| I.Unimplemented = A; | |
| let V = "unavailable"; | |
| I.Unavailable = V; | |
| let X = "internal_error"; | |
| I.InternalError = X; | |
| let _ = "unknown_error"; | |
| I.UnknownError = _; | |
| let F = "cancelled"; | |
| I.Cancelled = F; | |
| let g = "already_exists"; | |
| I.AlreadyExists = g; | |
| let J = "failed_precondition"; | |
| I.FailedPrecondition = J; | |
| let K = "aborted"; | |
| I.Aborted = K; | |
| let Q = "out_of_range"; | |
| I.OutOfRange = Q; | |
| let E = "data_loss"; | |
| I.DataLoss = E | |
| })(Nq1.SpanStatus || (Nq1.SpanStatus = {})); | |
| function H11(I) { | |
| if (I < 400 && I >= 100) return "ok"; | |
| if (I >= 400 && I < 500) switch (I) { | |
| case 401: | |
| return "unauthenticated"; | |
| case 403: | |
| return "permission_denied"; | |
| case 404: | |
| return "not_found"; | |
| case 409: | |
| return "already_exists"; | |
| case 413: | |
| return "failed_precondition"; | |
| case 429: | |
| return "resource_exhausted"; | |
| default: | |
| return "invalid_argument" | |
| } | |
| if (I >= 500 && I < 600) switch (I) { | |
| case 501: | |
| return "unimplemented"; | |
| case 503: | |
| return "unavailable"; | |
| case 504: | |
| return "deadline_exceeded"; | |
| default: | |
| return "internal_error" | |
| } | |
| return "unknown_error" | |
| } | |
| var yl2 = H11; | |
| function Pl2(I, d) { | |
| I.setTag("http.status_code", String(d)), I.setData("http.response.status_code", d); | |
| let G = H11(d); | |
| if (G !== "unknown_error") I.setStatus(G) | |
| } | |
| Nq1.getSpanStatusFromHttpCode = H11; | |
| Nq1.setHttpStatus = Pl2; | |
| Nq1.spanStatusfromHttpCode = yl2 | |
| }); | |
| var F11 = Y((zq1) => { | |
| Object.defineProperty(zq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Ol2 = V0(); | |
| function ml2(I, d, G = () => {}) { | |
| let Z; | |
| try { | |
| Z = I() | |
| } catch (C) { | |
| throw d(C), G(), C | |
| } | |
| return ll2(Z, d, G) | |
| } | |
| function ll2(I, d, G) { | |
| if (Ol2.isThenable(I)) return I.then((Z) => { | |
| return G(), Z | |
| }, (Z) => { | |
| throw d(Z), G(), Z | |
| }); | |
| return G(), I | |
| } | |
| zq1.handleCallbackErrors = ml2 | |
| }); | |
| var OO = Y((Qq1) => { | |
| Object.defineProperty(Qq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var hl2 = iG(); | |
| function jl2(I) { | |
| if (typeof __SENTRY_TRACING__ === "boolean" && !__SENTRY_TRACING__) return !1; | |
| let d = hl2.getClient(), | |
| G = I || d && d.getOptions(); | |
| return !!G && (G.enableTracing || ("tracesSampleRate" in G) || ("tracesSampler" in G)) | |
| } | |
| Qq1.hasTracingEnabled = jl2 | |
| }); | |
| var hO = Y((Eq1) => { | |
| Object.defineProperty(Eq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var lv = V0(), | |
| xl2 = F6(), | |
| pX = ww(), | |
| mO = kI(); | |
| TO(); | |
| DN(); | |
| var cl2 = HF(), | |
| HN = iG(), | |
| g11 = F11(), | |
| fq1 = OO(); | |
| function pl2(I, d, G = () => {}, Z = () => {}) { | |
| let C = pX.getCurrentHub(), | |
| W = HN.getCurrentScope(), | |
| w = W.getSpan(), | |
| B = bO(I), | |
| A = lO(C, { | |
| parentSpan: w, | |
| spanContext: B, | |
| forceTransaction: !1, | |
| scope: W | |
| }); | |
| return W.setSpan(A), g11.handleCallbackErrors(() => d(A), (V) => { | |
| A && A.setStatus("internal_error"), G(V, A) | |
| }, () => { | |
| A && A.end(), W.setSpan(w), Z() | |
| }) | |
| } | |
| function qq1(I, d) { | |
| let G = bO(I); | |
| return pX.runWithAsyncContext(() => { | |
| return HN.withScope(I.scope, (Z) => { | |
| let C = pX.getCurrentHub(), | |
| W = Z.getSpan(), | |
| B = I.onlyIfParent && !W ? void 0 : lO(C, { | |
| parentSpan: W, | |
| spanContext: G, | |
| forceTransaction: I.forceTransaction, | |
| scope: Z | |
| }); | |
| return g11.handleCallbackErrors(() => d(B), () => { | |
| if (B) { | |
| let { | |
| status: A | |
| } = mO.spanToJSON(B); | |
| if (!A || A === "ok") B.setStatus("internal_error") | |
| } | |
| }, () => B && B.end()) | |
| }) | |
| }) | |
| } | |
| var il2 = qq1; | |
| function nl2(I, d) { | |
| let G = bO(I); | |
| return pX.runWithAsyncContext(() => { | |
| return HN.withScope(I.scope, (Z) => { | |
| let C = pX.getCurrentHub(), | |
| W = Z.getSpan(), | |
| B = I.onlyIfParent && !W ? void 0 : lO(C, { | |
| parentSpan: W, | |
| spanContext: G, | |
| forceTransaction: I.forceTransaction, | |
| scope: Z | |
| }); | |
| function A() { | |
| B && B.end() | |
| } | |
| return g11.handleCallbackErrors(() => d(B, A), () => { | |
| if (B && B.isRecording()) { | |
| let { | |
| status: V | |
| } = mO.spanToJSON(B); | |
| if (!V || V === "ok") B.setStatus("internal_error") | |
| } | |
| }) | |
| }) | |
| }) | |
| } | |
| function rl2(I) { | |
| if (!fq1.hasTracingEnabled()) return; | |
| let d = bO(I), | |
| G = pX.getCurrentHub(), | |
| Z = I.scope ? I.scope.getSpan() : Rq1(); | |
| if (I.onlyIfParent && !Z) return; | |
| let w = (I.scope || HN.getCurrentScope()).clone(); | |
| return lO(G, { | |
| parentSpan: Z, | |
| spanContext: d, | |
| forceTransaction: I.forceTransaction, | |
| scope: w | |
| }) | |
| } | |
| function Rq1() { | |
| return HN.getCurrentScope().getSpan() | |
| } | |
| var al2 = ({ | |
| sentryTrace: I, | |
| baggage: d | |
| }, G) => { | |
| let Z = HN.getCurrentScope(), | |
| { | |
| traceparentData: C, | |
| dynamicSamplingContext: W, | |
| propagationContext: w | |
| } = lv.tracingContextFromHeaders(I, d); | |
| if (Z.setPropagationContext(w), xl2.DEBUG_BUILD && C) lv.logger.log(`[Tracing] Continuing trace ${C.traceId}.`); | |
| let B = { | |
| ...C, | |
| metadata: lv.dropUndefinedKeys({ | |
| dynamicSamplingContext: W | |
| }) | |
| }; | |
| if (!G) return B; | |
| return pX.runWithAsyncContext(() => { | |
| return G(B) | |
| }) | |
| }; | |
| function lO(I, { | |
| parentSpan: d, | |
| spanContext: G, | |
| forceTransaction: Z, | |
| scope: C | |
| }) { | |
| if (!fq1.hasTracingEnabled()) return; | |
| let W = pX.getIsolationScope(), | |
| w; | |
| if (d && !Z) w = d.startChild(G); | |
| else if (d) { | |
| let B = cl2.getDynamicSamplingContextFromSpan(d), | |
| { | |
| traceId: A, | |
| spanId: V | |
| } = d.spanContext(), | |
| X = mO.spanIsSampled(d); | |
| w = I.startTransaction({ | |
| traceId: A, | |
| parentSpanId: V, | |
| parentSampled: X, | |
| ...G, | |
| metadata: { | |
| dynamicSamplingContext: B, | |
| ...G.metadata | |
| } | |
| }) | |
| } else { | |
| let { | |
| traceId: B, | |
| dsc: A, | |
| parentSpanId: V, | |
| sampled: X | |
| } = { | |
| ...W.getPropagationContext(), | |
| ...C.getPropagationContext() | |
| }; | |
| w = I.startTransaction({ | |
| traceId: B, | |
| parentSpanId: V, | |
| parentSampled: X, | |
| ...G, | |
| metadata: { | |
| dynamicSamplingContext: A, | |
| ...G.metadata | |
| } | |
| }) | |
| } | |
| return C.setSpan(w), sl2(w, C, W), w | |
| } | |
| function bO(I) { | |
| if (I.startTime) { | |
| let d = { | |
| ...I | |
| }; | |
| return d.startTimestamp = mO.spanTimeInputToSeconds(I.startTime), delete d.startTime, d | |
| } | |
| return I | |
| } | |
| var Uq1 = "_sentryScope", | |
| vq1 = "_sentryIsolationScope"; | |
| function sl2(I, d, G) { | |
| if (I) lv.addNonEnumerableProperty(I, vq1, G), lv.addNonEnumerableProperty(I, Uq1, d) | |
| } | |
| function ol2(I) { | |
| return { | |
| scope: I[Uq1], | |
| isolationScope: I[vq1] | |
| } | |
| } | |
| Eq1.continueTrace = al2; | |
| Eq1.getActiveSpan = Rq1; | |
| Eq1.getCapturedScopesOnSpan = ol2; | |
| Eq1.startActiveSpan = il2; | |
| Eq1.startInactiveSpan = rl2; | |
| Eq1.startSpan = qq1; | |
| Eq1.startSpanManual = nl2; | |
| Eq1.trace = pl2 | |
| }); | |
| var hv = Y((Sq1) => { | |
| Object.defineProperty(Sq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var wb2 = V0(); | |
| F6(); | |
| TO(); | |
| DN(); | |
| var Bb2 = hO(), | |
| bv; | |
| function Mq1(I) { | |
| return bv ? bv.get(I) : void 0 | |
| } | |
| function Ab2(I) { | |
| let d = Mq1(I); | |
| if (!d) return; | |
| let G = {}; | |
| for (let [, [Z, C]] of d) { | |
| if (!G[Z]) G[Z] = []; | |
| G[Z].push(wb2.dropUndefinedKeys(C)) | |
| } | |
| return G | |
| } | |
| function Vb2(I, d, G, Z, C, W) { | |
| let w = Bb2.getActiveSpan(); | |
| if (w) { | |
| let B = Mq1(w) || new Map, | |
| A = `${I}:${d}@${Z}`, | |
| V = B.get(W); | |
| if (V) { | |
| let [, X] = V; | |
| B.set(W, [A, { | |
| min: Math.min(X.min, G), | |
| max: Math.max(X.max, G), | |
| count: X.count += 1, | |
| sum: X.sum += G, | |
| tags: X.tags | |
| }]) | |
| } else B.set(W, [A, { | |
| min: G, | |
| max: G, | |
| count: 1, | |
| sum: G, | |
| tags: C | |
| }]); | |
| if (!bv) bv = new WeakMap; | |
| bv.set(w, B) | |
| } | |
| } | |
| Sq1.getMetricSummaryJsonForSpan = Ab2; | |
| Sq1.updateMetricSummaryOnActiveSpan = Vb2 | |
| }); | |
| var jv = Y((Lq1) => { | |
| Object.defineProperty(Lq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var _b2 = "sentry.source", | |
| Db2 = "sentry.sample_rate", | |
| Hb2 = "sentry.op", | |
| Fb2 = "sentry.origin", | |
| gb2 = "profile_id"; | |
| Lq1.SEMANTIC_ATTRIBUTE_PROFILE_ID = gb2; | |
| Lq1.SEMANTIC_ATTRIBUTE_SENTRY_OP = Hb2; | |
| Lq1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = Fb2; | |
| Lq1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = Db2; | |
| Lq1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = _b2 | |
| }); | |
| var jO = Y((uq1) => { | |
| Object.defineProperty(uq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var gF = V0(), | |
| yq1 = F6(), | |
| fb2 = hv(), | |
| RA = jv(), | |
| Pq1 = XN(), | |
| FN = kI(), | |
| qb2 = DN(); | |
| class $q1 { | |
| constructor(I = 1000) { | |
| this._maxlen = I, this.spans = [] | |
| } | |
| add(I) { | |
| if (this.spans.length > this._maxlen) I.spanRecorder = void 0; | |
| else this.spans.push(I) | |
| } | |
| } | |
| class J11 { | |
| constructor(I = {}) { | |
| if (this._traceId = I.traceId || gF.uuid4(), this._spanId = I.spanId || gF.uuid4().substring(16), this._startTime = I.startTimestamp || gF.timestampInSeconds(), this.tags = I.tags ? { | |
| ...I.tags | |
| } : {}, this.data = I.data ? { | |
| ...I.data | |
| } : {}, this.instrumenter = I.instrumenter || "sentry", this._attributes = {}, this.setAttributes({ | |
| [RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: I.origin || "manual", | |
| [RA.SEMANTIC_ATTRIBUTE_SENTRY_OP]: I.op, | |
| ...I.attributes | |
| }), this._name = I.name || I.description, I.parentSpanId) this._parentSpanId = I.parentSpanId; | |
| if ("sampled" in I) this._sampled = I.sampled; | |
| if (I.status) this._status = I.status; | |
| if (I.endTimestamp) this._endTime = I.endTimestamp; | |
| if (I.exclusiveTime !== void 0) this._exclusiveTime = I.exclusiveTime; | |
| this._measurements = I.measurements ? { | |
| ...I.measurements | |
| } : {} | |
| } | |
| get name() { | |
| return this._name || "" | |
| } | |
| set name(I) { | |
| this.updateName(I) | |
| } | |
| get description() { | |
| return this._name | |
| } | |
| set description(I) { | |
| this._name = I | |
| } | |
| get traceId() { | |
| return this._traceId | |
| } | |
| set traceId(I) { | |
| this._traceId = I | |
| } | |
| get spanId() { | |
| return this._spanId | |
| } | |
| set spanId(I) { | |
| this._spanId = I | |
| } | |
| set parentSpanId(I) { | |
| this._parentSpanId = I | |
| } | |
| get parentSpanId() { | |
| return this._parentSpanId | |
| } | |
| get sampled() { | |
| return this._sampled | |
| } | |
| set sampled(I) { | |
| this._sampled = I | |
| } | |
| get attributes() { | |
| return this._attributes | |
| } | |
| set attributes(I) { | |
| this._attributes = I | |
| } | |
| get startTimestamp() { | |
| return this._startTime | |
| } | |
| set startTimestamp(I) { | |
| this._startTime = I | |
| } | |
| get endTimestamp() { | |
| return this._endTime | |
| } | |
| set endTimestamp(I) { | |
| this._endTime = I | |
| } | |
| get status() { | |
| return this._status | |
| } | |
| set status(I) { | |
| this._status = I | |
| } | |
| get op() { | |
| return this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_OP] | |
| } | |
| set op(I) { | |
| this.setAttribute(RA.SEMANTIC_ATTRIBUTE_SENTRY_OP, I) | |
| } | |
| get origin() { | |
| return this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] | |
| } | |
| set origin(I) { | |
| this.setAttribute(RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, I) | |
| } | |
| spanContext() { | |
| let { | |
| _spanId: I, | |
| _traceId: d, | |
| _sampled: G | |
| } = this; | |
| return { | |
| spanId: I, | |
| traceId: d, | |
| traceFlags: G ? FN.TRACE_FLAG_SAMPLED : FN.TRACE_FLAG_NONE | |
| } | |
| } | |
| startChild(I) { | |
| let d = new J11({ | |
| ...I, | |
| parentSpanId: this._spanId, | |
| sampled: this._sampled, | |
| traceId: this._traceId | |
| }); | |
| if (d.spanRecorder = this.spanRecorder, d.spanRecorder) d.spanRecorder.add(d); | |
| let G = Pq1.getRootSpan(this); | |
| if (d.transaction = G, yq1.DEBUG_BUILD && G) { | |
| let Z = I && I.op || "< unknown op >", | |
| C = FN.spanToJSON(d).description || "< unknown name >", | |
| W = G.spanContext().spanId, | |
| w = `[Tracing] Starting '${Z}' span on transaction '${C}' (${W}).`; | |
| gF.logger.log(w), this._logMessage = w | |
| } | |
| return d | |
| } | |
| setTag(I, d) { | |
| return this.tags = { | |
| ...this.tags, | |
| [I]: d | |
| }, this | |
| } | |
| setData(I, d) { | |
| return this.data = { | |
| ...this.data, | |
| [I]: d | |
| }, this | |
| } | |
| setAttribute(I, d) { | |
| if (d === void 0) delete this._attributes[I]; | |
| else this._attributes[I] = d | |
| } | |
| setAttributes(I) { | |
| Object.keys(I).forEach((d) => this.setAttribute(d, I[d])) | |
| } | |
| setStatus(I) { | |
| return this._status = I, this | |
| } | |
| setHttpStatus(I) { | |
| return qb2.setHttpStatus(this, I), this | |
| } | |
| setName(I) { | |
| this.updateName(I) | |
| } | |
| updateName(I) { | |
| return this._name = I, this | |
| } | |
| isSuccess() { | |
| return this._status === "ok" | |
| } | |
| finish(I) { | |
| return this.end(I) | |
| } | |
| end(I) { | |
| if (this._endTime) return; | |
| let d = Pq1.getRootSpan(this); | |
| if (yq1.DEBUG_BUILD && d && d.spanContext().spanId !== this._spanId) { | |
| let G = this._logMessage; | |
| if (G) gF.logger.log(G.replace("Starting", "Finishing")) | |
| } | |
| this._endTime = FN.spanTimeInputToSeconds(I) | |
| } | |
| toTraceparent() { | |
| return FN.spanToTraceHeader(this) | |
| } | |
| toContext() { | |
| return gF.dropUndefinedKeys({ | |
| data: this._getData(), | |
| description: this._name, | |
| endTimestamp: this._endTime, | |
| op: this.op, | |
| parentSpanId: this._parentSpanId, | |
| sampled: this._sampled, | |
| spanId: this._spanId, | |
| startTimestamp: this._startTime, | |
| status: this._status, | |
| tags: this.tags, | |
| traceId: this._traceId | |
| }) | |
| } | |
| updateWithContext(I) { | |
| return this.data = I.data || {}, this._name = I.name || I.description, this._endTime = I.endTimestamp, this.op = I.op, this._parentSpanId = I.parentSpanId, this._sampled = I.sampled, this._spanId = I.spanId || this._spanId, this._startTime = I.startTimestamp || this._startTime, this._status = I.status, this.tags = I.tags || {}, this._traceId = I.traceId || this._traceId, this | |
| } | |
| getTraceContext() { | |
| return FN.spanToTraceContext(this) | |
| } | |
| getSpanJSON() { | |
| return gF.dropUndefinedKeys({ | |
| data: this._getData(), | |
| description: this._name, | |
| op: this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_OP], | |
| parent_span_id: this._parentSpanId, | |
| span_id: this._spanId, | |
| start_timestamp: this._startTime, | |
| status: this._status, | |
| tags: Object.keys(this.tags).length > 0 ? this.tags : void 0, | |
| timestamp: this._endTime, | |
| trace_id: this._traceId, | |
| origin: this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN], | |
| _metrics_summary: fb2.getMetricSummaryJsonForSpan(this), | |
| profile_id: this._attributes[RA.SEMANTIC_ATTRIBUTE_PROFILE_ID], | |
| exclusive_time: this._exclusiveTime, | |
| measurements: Object.keys(this._measurements).length > 0 ? this._measurements : void 0 | |
| }) | |
| } | |
| isRecording() { | |
| return !this._endTime && !!this._sampled | |
| } | |
| toJSON() { | |
| return this.getSpanJSON() | |
| } | |
| _getData() { | |
| let { | |
| data: I, | |
| _attributes: d | |
| } = this, G = Object.keys(I).length > 0, Z = Object.keys(d).length > 0; | |
| if (!G && !Z) return; | |
| if (G && Z) return { | |
| ...I, | |
| ...d | |
| }; | |
| return G ? I : d | |
| } | |
| } | |
| uq1.Span = J11; | |
| uq1.SpanRecorder = $q1 | |
| }); | |
| var cO = Y((lq1) => { | |
| Object.defineProperty(lq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var gN = V0(), | |
| kO = F6(), | |
| vb2 = ww(), | |
| Eb2 = hv(), | |
| kv = jv(), | |
| xO = kI(), | |
| Tq1 = HF(), | |
| Oq1 = jO(), | |
| Mb2 = hO(); | |
| class mq1 extends Oq1.Span { | |
| constructor(I, d) { | |
| super(I); | |
| this._contexts = {}, this._hub = d || vb2.getCurrentHub(), this._name = I.name || "", this._metadata = { | |
| ...I.metadata | |
| }, this._trimEnd = I.trimEnd, this.transaction = this; | |
| let G = this._metadata.dynamicSamplingContext; | |
| if (G) this._frozenDynamicSamplingContext = { | |
| ...G | |
| } | |
| } | |
| get name() { | |
| return this._name | |
| } | |
| set name(I) { | |
| this.setName(I) | |
| } | |
| get metadata() { | |
| return { | |
| source: "custom", | |
| spanMetadata: {}, | |
| ...this._metadata, | |
| ...this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] && { | |
| source: this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] | |
| }, | |
| ...this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] && { | |
| sampleRate: this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] | |
| } | |
| } | |
| } | |
| set metadata(I) { | |
| this._metadata = I | |
| } | |
| setName(I, d = "custom") { | |
| this._name = I, this.setAttribute(kv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, d) | |
| } | |
| updateName(I) { | |
| return this._name = I, this | |
| } | |
| initSpanRecorder(I = 1000) { | |
| if (!this.spanRecorder) this.spanRecorder = new Oq1.SpanRecorder(I); | |
| this.spanRecorder.add(this) | |
| } | |
| setContext(I, d) { | |
| if (d === null) delete this._contexts[I]; | |
| else this._contexts[I] = d | |
| } | |
| setMeasurement(I, d, G = "") { | |
| this._measurements[I] = { | |
| value: d, | |
| unit: G | |
| } | |
| } | |
| setMetadata(I) { | |
| this._metadata = { | |
| ...this._metadata, | |
| ...I | |
| } | |
| } | |
| end(I) { | |
| let d = xO.spanTimeInputToSeconds(I), | |
| G = this._finishTransaction(d); | |
| if (!G) return; | |
| return this._hub.captureEvent(G) | |
| } | |
| toContext() { | |
| let I = super.toContext(); | |
| return gN.dropUndefinedKeys({ | |
| ...I, | |
| name: this._name, | |
| trimEnd: this._trimEnd | |
| }) | |
| } | |
| updateWithContext(I) { | |
| return super.updateWithContext(I), this._name = I.name || "", this._trimEnd = I.trimEnd, this | |
| } | |
| getDynamicSamplingContext() { | |
| return Tq1.getDynamicSamplingContextFromSpan(this) | |
| } | |
| setHub(I) { | |
| this._hub = I | |
| } | |
| getProfileId() { | |
| if (this._contexts !== void 0 && this._contexts.profile !== void 0) return this._contexts.profile.profile_id; | |
| return | |
| } | |
| _finishTransaction(I) { | |
| if (this._endTime !== void 0) return; | |
| if (!this._name) kO.DEBUG_BUILD && gN.logger.warn("Transaction has no name, falling back to `<unlabeled transaction>`."), this._name = "<unlabeled transaction>"; | |
| super.end(I); | |
| let d = this._hub.getClient(); | |
| if (d && d.emit) d.emit("finishTransaction", this); | |
| if (this._sampled !== !0) { | |
| if (kO.DEBUG_BUILD && gN.logger.log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."), d) d.recordDroppedEvent("sample_rate", "transaction"); | |
| return | |
| } | |
| let G = this.spanRecorder ? this.spanRecorder.spans.filter((V) => V !== this && xO.spanToJSON(V).timestamp) : []; | |
| if (this._trimEnd && G.length > 0) { | |
| let V = G.map((X) => xO.spanToJSON(X).timestamp).filter(Boolean); | |
| this._endTime = V.reduce((X, _) => { | |
| return X > _ ? X : _ | |
| }) | |
| } | |
| let { | |
| scope: Z, | |
| isolationScope: C | |
| } = Mb2.getCapturedScopesOnSpan(this), { | |
| metadata: W | |
| } = this, { | |
| source: w | |
| } = W, B = { | |
| contexts: { | |
| ...this._contexts, | |
| trace: xO.spanToTraceContext(this) | |
| }, | |
| spans: G, | |
| start_timestamp: this._startTime, | |
| tags: this.tags, | |
| timestamp: this._endTime, | |
| transaction: this._name, | |
| type: "transaction", | |
| sdkProcessingMetadata: { | |
| ...W, | |
| capturedSpanScope: Z, | |
| capturedSpanIsolationScope: C, | |
| ...gN.dropUndefinedKeys({ | |
| dynamicSamplingContext: Tq1.getDynamicSamplingContextFromSpan(this) | |
| }) | |
| }, | |
| _metrics_summary: Eb2.getMetricSummaryJsonForSpan(this), | |
| ...w && { | |
| transaction_info: { | |
| source: w | |
| } | |
| } | |
| }; | |
| if (Object.keys(this._measurements).length > 0) kO.DEBUG_BUILD && gN.logger.log("[Measurements] Adding measurements to transaction", JSON.stringify(this._measurements, void 0, 2)), B.measurements = this._measurements; | |
| return kO.DEBUG_BUILD && gN.logger.log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`), B | |
| } | |
| } | |
| lq1.Transaction = mq1 | |
| }); | |
| var N11 = Y((hq1) => { | |
| Object.defineProperty(hq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var z7 = V0(), | |
| xI = F6(), | |
| pO = kI(), | |
| Lb2 = jO(), | |
| yb2 = cO(), | |
| iO = { | |
| idleTimeout: 1000, | |
| finalTimeout: 30000, | |
| heartbeatInterval: 5000 | |
| }, | |
| Pb2 = "finishReason", | |
| JN = ["heartbeatFailed", "idleTimeout", "documentHidden", "finalTimeout", "externalFinish", "cancelled"]; | |
| class K11 extends Lb2.SpanRecorder { | |
| constructor(I, d, G, Z) { | |
| super(Z); | |
| this._pushActivity = I, this._popActivity = d, this.transactionSpanId = G | |
| } | |
| add(I) { | |
| if (I.spanContext().spanId !== this.transactionSpanId) { | |
| let d = I.end; | |
| if (I.end = (...G) => { | |
| return this._popActivity(I.spanContext().spanId), d.apply(I, G) | |
| }, pO.spanToJSON(I).timestamp === void 0) this._pushActivity(I.spanContext().spanId) | |
| } | |
| super.add(I) | |
| } | |
| } | |
| class bq1 extends yb2.Transaction { | |
| constructor(I, d, G = iO.idleTimeout, Z = iO.finalTimeout, C = iO.heartbeatInterval, W = !1, w = !1) { | |
| super(I, d); | |
| if (this._idleHub = d, this._idleTimeout = G, this._finalTimeout = Z, this._heartbeatInterval = C, this._onScope = W, this.activities = {}, this._heartbeatCounter = 0, this._finished = !1, this._idleTimeoutCanceledPermanently = !1, this._beforeFinishCallbacks = [], this._finishReason = JN[4], this._autoFinishAllowed = !w, W) xI.DEBUG_BUILD && z7.logger.log(`Setting idle transaction on scope. Span ID: ${this.spanContext().spanId}`), d.getScope().setSpan(this); | |
| if (!w) this._restartIdleTimeout(); | |
| setTimeout(() => { | |
| if (!this._finished) this.setStatus("deadline_exceeded"), this._finishReason = JN[3], this.end() | |
| }, this._finalTimeout) | |
| } | |
| end(I) { | |
| let d = pO.spanTimeInputToSeconds(I); | |
| if (this._finished = !0, this.activities = {}, this.op === "ui.action.click") this.setAttribute(Pb2, this._finishReason); | |
| if (this.spanRecorder) { | |
| xI.DEBUG_BUILD && z7.logger.log("[Tracing] finishing IdleTransaction", new Date(d * 1000).toISOString(), this.op); | |
| for (let G of this._beforeFinishCallbacks) G(this, d); | |
| this.spanRecorder.spans = this.spanRecorder.spans.filter((G) => { | |
| if (G.spanContext().spanId === this.spanContext().spanId) return !0; | |
| if (!pO.spanToJSON(G).timestamp) G.setStatus("cancelled"), G.end(d), xI.DEBUG_BUILD && z7.logger.log("[Tracing] cancelling span since transaction ended early", JSON.stringify(G, void 0, 2)); | |
| let { | |
| start_timestamp: Z, | |
| timestamp: C | |
| } = pO.spanToJSON(G), W = Z && Z < d, w = (this._finalTimeout + this._idleTimeout) / 1000, B = C && Z && C - Z < w; | |
| if (xI.DEBUG_BUILD) { | |
| let A = JSON.stringify(G, void 0, 2); | |
| if (!W) z7.logger.log("[Tracing] discarding Span since it happened after Transaction was finished", A); | |
| else if (!B) z7.logger.log("[Tracing] discarding Span since it finished after Transaction final timeout", A) | |
| } | |
| return W && B | |
| }), xI.DEBUG_BUILD && z7.logger.log("[Tracing] flushing IdleTransaction") | |
| } else xI.DEBUG_BUILD && z7.logger.log("[Tracing] No active IdleTransaction"); | |
| if (this._onScope) { | |
| let G = this._idleHub.getScope(); | |
| if (G.getTransaction() === this) G.setSpan(void 0) | |
| } | |
| return super.end(I) | |
| } | |
| registerBeforeFinishCallback(I) { | |
| this._beforeFinishCallbacks.push(I) | |
| } | |
| initSpanRecorder(I) { | |
| if (!this.spanRecorder) { | |
| let d = (Z) => { | |
| if (this._finished) return; | |
| this._pushActivity(Z) | |
| }, | |
| G = (Z) => { | |
| if (this._finished) return; | |
| this._popActivity(Z) | |
| }; | |
| this.spanRecorder = new K11(d, G, this.spanContext().spanId, I), xI.DEBUG_BUILD && z7.logger.log("Starting heartbeat"), this._pingHeartbeat() | |
| } | |
| this.spanRecorder.add(this) | |
| } | |
| cancelIdleTimeout(I, { | |
| restartOnChildSpanChange: d | |
| } = { | |
| restartOnChildSpanChange: !0 | |
| }) { | |
| if (this._idleTimeoutCanceledPermanently = d === !1, this._idleTimeoutID) { | |
| if (clearTimeout(this._idleTimeoutID), this._idleTimeoutID = void 0, Object.keys(this.activities).length === 0 && this._idleTimeoutCanceledPermanently) this._finishReason = JN[5], this.end(I) | |
| } | |
| } | |
| setFinishReason(I) { | |
| this._finishReason = I | |
| } | |
| sendAutoFinishSignal() { | |
| if (!this._autoFinishAllowed) xI.DEBUG_BUILD && z7.logger.log("[Tracing] Received finish signal for idle transaction."), this._restartIdleTimeout(), this._autoFinishAllowed = !0 | |
| } | |
| _restartIdleTimeout(I) { | |
| this.cancelIdleTimeout(), this._idleTimeoutID = setTimeout(() => { | |
| if (!this._finished && Object.keys(this.activities).length === 0) this._finishReason = JN[1], this.end(I) | |
| }, this._idleTimeout) | |
| } | |
| _pushActivity(I) { | |
| this.cancelIdleTimeout(void 0, { | |
| restartOnChildSpanChange: !this._idleTimeoutCanceledPermanently | |
| }), xI.DEBUG_BUILD && z7.logger.log(`[Tracing] pushActivity: ${I}`), this.activities[I] = !0, xI.DEBUG_BUILD && z7.logger.log("[Tracing] new activities count", Object.keys(this.activities).length) | |
| } | |
| _popActivity(I) { | |
| if (this.activities[I]) xI.DEBUG_BUILD && z7.logger.log(`[Tracing] popActivity ${I}`), delete this.activities[I], xI.DEBUG_BUILD && z7.logger.log("[Tracing] new activities count", Object.keys(this.activities).length); | |
| if (Object.keys(this.activities).length === 0) { | |
| let d = z7.timestampInSeconds(); | |
| if (this._idleTimeoutCanceledPermanently) { | |
| if (this._autoFinishAllowed) this._finishReason = JN[5], this.end(d) | |
| } else this._restartIdleTimeout(d + this._idleTimeout / 1000) | |
| } | |
| } | |
| _beat() { | |
| if (this._finished) return; | |
| let I = Object.keys(this.activities).join(""); | |
| if (I === this._prevHeartbeatString) this._heartbeatCounter++; | |
| else this._heartbeatCounter = 1; | |
| if (this._prevHeartbeatString = I, this._heartbeatCounter >= 3) { | |
| if (this._autoFinishAllowed) xI.DEBUG_BUILD && z7.logger.log("[Tracing] Transaction finished because of no change for 3 heart beats"), this.setStatus("deadline_exceeded"), this._finishReason = JN[0], this.end() | |
| } else this._pingHeartbeat() | |
| } | |
| _pingHeartbeat() { | |
| xI.DEBUG_BUILD && z7.logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`), setTimeout(() => { | |
| this._beat() | |
| }, this._heartbeatInterval) | |
| } | |
| } | |
| hq1.IdleTransaction = bq1; | |
| hq1.IdleTransactionSpanRecorder = K11; | |
| hq1.TRACING_DEFAULTS = iO | |
| }); | |
| var z11 = Y((kq1) => { | |
| Object.defineProperty(kq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var JF = V0(), | |
| KN = F6(), | |
| nO = jv(), | |
| Ob2 = OO(), | |
| mb2 = kI(); | |
| function lb2(I, d, G) { | |
| if (!Ob2.hasTracingEnabled(d)) return I.sampled = !1, I; | |
| if (I.sampled !== void 0) return I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(I.sampled)), I; | |
| let Z; | |
| if (typeof d.tracesSampler === "function") Z = d.tracesSampler(G), I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(Z)); | |
| else if (G.parentSampled !== void 0) Z = G.parentSampled; | |
| else if (typeof d.tracesSampleRate !== "undefined") Z = d.tracesSampleRate, I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(Z)); | |
| else Z = 1, I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Z); | |
| if (!jq1(Z)) return KN.DEBUG_BUILD && JF.logger.warn("[Tracing] Discarding transaction because of invalid sample rate."), I.sampled = !1, I; | |
| if (!Z) return KN.DEBUG_BUILD && JF.logger.log(`[Tracing] Discarding transaction because ${typeof d.tracesSampler==="function"?"tracesSampler returned 0 or false":"a negative sampling decision was inherited or tracesSampleRate is set to 0"}`), I.sampled = !1, I; | |
| if (I.sampled = Math.random() < Z, !I.sampled) return KN.DEBUG_BUILD && JF.logger.log(`[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(Z)})`), I; | |
| return KN.DEBUG_BUILD && JF.logger.log(`[Tracing] starting ${I.op} transaction - ${mb2.spanToJSON(I).description}`), I | |
| } | |
| function jq1(I) { | |
| if (JF.isNaN(I) || !(typeof I === "number" || typeof I === "boolean")) return KN.DEBUG_BUILD && JF.logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(I)} of type ${JSON.stringify(typeof I)}.`), !1; | |
| if (I < 0 || I > 1) return KN.DEBUG_BUILD && JF.logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${I}.`), !1; | |
| return !0 | |
| } | |
| kq1.isValidSampleRate = jq1; | |
| kq1.sampleTransaction = lb2 | |
| }); | |
| var Q11 = Y((cq1) => { | |
| Object.defineProperty(cq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var jb2 = V0(), | |
| kb2 = F6(), | |
| xb2 = ww(), | |
| cb2 = kI(), | |
| pb2 = TO(), | |
| ib2 = N11(), | |
| xq1 = z11(), | |
| nb2 = cO(); | |
| function rb2() { | |
| let d = this.getScope().getSpan(); | |
| return d ? { | |
| "sentry-trace": cb2.spanToTraceHeader(d) | |
| } : {} | |
| } | |
| function ab2(I, d) { | |
| let G = this.getClient(), | |
| Z = G && G.getOptions() || {}, | |
| C = Z.instrumenter || "sentry", | |
| W = I.instrumenter || "sentry"; | |
| if (C !== W) kb2.DEBUG_BUILD && jb2.logger.error(`A transaction was started with instrumenter=\`${W}\`, but the SDK is configured with the \`${C}\` instrumenter. | |
| The transaction will not be sampled. Please use the ${C} instrumentation to start transactions.`), I.sampled = !1; | |
| let w = new nb2.Transaction(I, this); | |
| if (w = xq1.sampleTransaction(w, Z, { | |
| name: I.name, | |
| parentSampled: I.parentSampled, | |
| transactionContext: I, | |
| attributes: { | |
| ...I.data, | |
| ...I.attributes | |
| }, | |
| ...d | |
| }), w.isRecording()) w.initSpanRecorder(Z._experiments && Z._experiments.maxSpans); | |
| if (G && G.emit) G.emit("startTransaction", w); | |
| return w | |
| } | |
| function sb2(I, d, G, Z, C, W, w, B = !1) { | |
| let A = I.getClient(), | |
| V = A && A.getOptions() || {}, | |
| X = new ib2.IdleTransaction(d, I, G, Z, w, C, B); | |
| if (X = xq1.sampleTransaction(X, V, { | |
| name: d.name, | |
| parentSampled: d.parentSampled, | |
| transactionContext: d, | |
| attributes: { | |
| ...d.data, | |
| ...d.attributes | |
| }, | |
| ...W | |
| }), X.isRecording()) X.initSpanRecorder(V._experiments && V._experiments.maxSpans); | |
| if (A && A.emit) A.emit("startTransaction", X); | |
| return X | |
| } | |
| function ob2() { | |
| let I = xb2.getMainCarrier(); | |
| if (!I.__SENTRY__) return; | |
| if (I.__SENTRY__.extensions = I.__SENTRY__.extensions || {}, !I.__SENTRY__.extensions.startTransaction) I.__SENTRY__.extensions.startTransaction = ab2; | |
| if (!I.__SENTRY__.extensions.traceHeaders) I.__SENTRY__.extensions.traceHeaders = rb2; | |
| pb2.registerErrorInstrumentation() | |
| } | |
| cq1.addTracingExtensions = ob2; | |
| cq1.startIdleTransaction = sb2 | |
| }); | |
| var iq1 = Y((pq1) => { | |
| Object.defineProperty(pq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Ih2 = uO(); | |
| function dh2(I, d, G) { | |
| let Z = Ih2.getActiveTransaction(); | |
| if (Z) Z.setMeasurement(I, d, G) | |
| } | |
| pq1.setMeasurement = dh2 | |
| }); | |
| var f11 = Y((nq1) => { | |
| Object.defineProperty(nq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var NN = V0(); | |
| function Zh2(I, d) { | |
| if (!d) return I; | |
| return I.sdk = I.sdk || {}, I.sdk.name = I.sdk.name || d.name, I.sdk.version = I.sdk.version || d.version, I.sdk.integrations = [...I.sdk.integrations || [], ...d.integrations || []], I.sdk.packages = [...I.sdk.packages || [], ...d.packages || []], I | |
| } | |
| function Ch2(I, d, G, Z) { | |
| let C = NN.getSdkMetadataForEnvelopeHeader(G), | |
| W = { | |
| sent_at: new Date().toISOString(), | |
| ...C && { | |
| sdk: C | |
| }, | |
| ...!!Z && d && { | |
| dsn: NN.dsnToString(d) | |
| } | |
| }, | |
| w = "aggregates" in I ? [{ | |
| type: "sessions" | |
| }, I] : [{ | |
| type: "session" | |
| }, I.toJSON()]; | |
| return NN.createEnvelope(W, [w]) | |
| } | |
| function Wh2(I, d, G, Z) { | |
| let C = NN.getSdkMetadataForEnvelopeHeader(G), | |
| W = I.type && I.type !== "replay_event" ? I.type : "event"; | |
| Zh2(I, G && G.sdk); | |
| let w = NN.createEventEnvelopeHeaders(I, C, Z, d); | |
| delete I.sdkProcessingMetadata; | |
| let B = [{ | |
| type: W | |
| }, I]; | |
| return NN.createEnvelope(w, [B]) | |
| } | |
| nq1.createEventEnvelope = Wh2; | |
| nq1.createSessionEnvelope = Ch2 | |
| }); | |
| var q11 = Y((aq1) => { | |
| Object.defineProperty(aq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Ah2 = V0(), | |
| Vh2 = iG(); | |
| class rq1 { | |
| constructor(I, d) { | |
| if (this._client = I, this.flushTimeout = 60, this._pendingAggregates = {}, this._isEnabled = !0, this._intervalId = setInterval(() => this.flush(), this.flushTimeout * 1000), this._intervalId.unref) this._intervalId.unref(); | |
| this._sessionAttrs = d | |
| } | |
| flush() { | |
| let I = this.getSessionAggregates(); | |
| if (I.aggregates.length === 0) return; | |
| this._pendingAggregates = {}, this._client.sendSession(I) | |
| } | |
| getSessionAggregates() { | |
| let I = Object.keys(this._pendingAggregates).map((G) => { | |
| return this._pendingAggregates[parseInt(G)] | |
| }), | |
| d = { | |
| attrs: this._sessionAttrs, | |
| aggregates: I | |
| }; | |
| return Ah2.dropUndefinedKeys(d) | |
| } | |
| close() { | |
| clearInterval(this._intervalId), this._isEnabled = !1, this.flush() | |
| } | |
| incrementSessionStatusCount() { | |
| if (!this._isEnabled) return; | |
| let I = Vh2.getCurrentScope(), | |
| d = I.getRequestSession(); | |
| if (d && d.status) this._incrementSessionStatusCount(d.status, new Date), I.setRequestSession(void 0) | |
| } | |
| _incrementSessionStatusCount(I, d) { | |
| let G = new Date(d).setSeconds(0, 0); | |
| this._pendingAggregates[G] = this._pendingAggregates[G] || {}; | |
| let Z = this._pendingAggregates[G]; | |
| if (!Z.started) Z.started = new Date(G).toISOString(); | |
| switch (I) { | |
| case "errored": | |
| return Z.errored = (Z.errored || 0) + 1, Z.errored; | |
| case "ok": | |
| return Z.exited = (Z.exited || 0) + 1, Z.exited; | |
| default: | |
| return Z.crashed = (Z.crashed || 0) + 1, Z.crashed | |
| } | |
| } | |
| } | |
| aq1.SessionFlusher = rq1 | |
| }); | |
| var rO = Y((oq1) => { | |
| Object.defineProperty(oq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var R11 = V0(), | |
| Yh2 = "7"; | |
| function sq1(I) { | |
| let d = I.protocol ? `${I.protocol}:` : "", | |
| G = I.port ? `:${I.port}` : ""; | |
| return `${d}//${I.host}${G}${I.path?`/${I.path}`:""}/api/` | |
| } | |
| function _h2(I) { | |
| return `${sq1(I)}${I.projectId}/envelope/` | |
| } | |
| function Dh2(I, d) { | |
| return R11.urlEncode({ | |
| sentry_key: I.publicKey, | |
| sentry_version: Yh2, | |
| ...d && { | |
| sentry_client: `${d.name}/${d.version}` | |
| } | |
| }) | |
| } | |
| function Hh2(I, d = {}) { | |
| let G = typeof d === "string" ? d : d.tunnel, | |
| Z = typeof d === "string" || !d._metadata ? void 0 : d._metadata.sdk; | |
| return G ? G : `${_h2(I)}?${Dh2(I,Z)}` | |
| } | |
| function Fh2(I, d) { | |
| let G = R11.makeDsn(I); | |
| if (!G) return ""; | |
| let Z = `${sq1(G)}embed/error-page/`, | |
| C = `dsn=${R11.dsnToString(G)}`; | |
| for (let W in d) { | |
| if (W === "dsn") continue; | |
| if (W === "onClose") continue; | |
| if (W === "user") { | |
| let w = d.user; | |
| if (!w) continue; | |
| if (w.name) C += `&name=${encodeURIComponent(w.name)}`; | |
| if (w.email) C += `&email=${encodeURIComponent(w.email)}` | |
| } else C += `&${encodeURIComponent(W)}=${encodeURIComponent(d[W])}` | |
| } | |
| return `${Z}?${C}` | |
| } | |
| oq1.getEnvelopeEndpointWithUrlEncodedAuth = Hh2; | |
| oq1.getReportDialogEndpoint = Fh2 | |
| }); | |
| var UA = Y((tq1) => { | |
| Object.defineProperty(tq1, "__esModule", { | |
| value: !0 | |
| }); | |
| var aO = V0(), | |
| U11 = F6(), | |
| Kh2 = Pv(), | |
| Nh2 = iG(), | |
| zh2 = ww(), | |
| v11 = []; | |
| function Qh2(I) { | |
| let d = {}; | |
| return I.forEach((G) => { | |
| let { | |
| name: Z | |
| } = G, C = d[Z]; | |
| if (C && !C.isDefaultInstance && G.isDefaultInstance) return; | |
| d[Z] = G | |
| }), Object.keys(d).map((G) => d[G]) | |
| } | |
| function fh2(I) { | |
| let d = I.defaultIntegrations || [], | |
| G = I.integrations; | |
| d.forEach((w) => { | |
| w.isDefaultInstance = !0 | |
| }); | |
| let Z; | |
| if (Array.isArray(G)) Z = [...d, ...G]; | |
| else if (typeof G === "function") Z = aO.arrayify(G(d)); | |
| else Z = d; | |
| let C = Qh2(Z), | |
| W = vh2(C, (w) => w.name === "Debug"); | |
| if (W !== -1) { | |
| let [w] = C.splice(W, 1); | |
| C.push(w) | |
| } | |
| return C | |
| } | |
| function qh2(I, d) { | |
| let G = {}; | |
| return d.forEach((Z) => { | |
| if (Z) eq1(I, Z, G) | |
| }), G | |
| } | |
| function Rh2(I, d) { | |
| for (let G of d) | |
| if (G && G.afterAllSetup) G.afterAllSetup(I) | |
| } | |
| function eq1(I, d, G) { | |
| if (G[d.name]) { | |
| U11.DEBUG_BUILD && aO.logger.log(`Integration skipped because it was already installed: ${d.name}`); | |
| return | |
| } | |
| if (G[d.name] = d, v11.indexOf(d.name) === -1) d.setupOnce(Kh2.addGlobalEventProcessor, zh2.getCurrentHub), v11.push(d.name); | |
| if (d.setup && typeof d.setup === "function") d.setup(I); | |
| if (I.on && typeof d.preprocessEvent === "function") { | |
| let Z = d.preprocessEvent.bind(d); | |
| I.on("preprocessEvent", (C, W) => Z(C, W, I)) | |
| } | |
| if (I.addEventProcessor && typeof d.processEvent === "function") { | |
| let Z = d.processEvent.bind(d), | |
| C = Object.assign((W, w) => Z(W, w, I), { | |
| id: d.name | |
| }); | |
| I.addEventProcessor(C) | |
| } | |
| U11.DEBUG_BUILD && aO.logger.log(`Integration installed: ${d.name}`) | |
| } | |
| function Uh2(I) { | |
| let d = Nh2.getClient(); | |
| if (!d || !d.addIntegration) { | |
| U11.DEBUG_BUILD && aO.logger.warn(`Cannot add integration "${I.name}" because no SDK Client is available.`); | |
| return | |
| } | |
| d.addIntegration(I) | |
| } | |
| function vh2(I, d) { | |
| for (let G = 0; G < I.length; G++) | |
| if (d(I[G]) === !0) return G; | |
| return -1 | |
| } | |
| function Eh2(I, d) { | |
| return Object.assign(function G(...Z) { | |
| return d(...Z) | |
| }, { | |
| id: I | |
| }) | |
| } | |
| function Mh2(I) { | |
| return I | |
| } | |
| tq1.addIntegration = Uh2; | |
| tq1.afterSetupIntegrations = Rh2; | |
| tq1.convertIntegrationFnToClass = Eh2; | |
| tq1.defineIntegration = Mh2; | |
| tq1.getIntegrationsToSetup = fh2; | |
| tq1.installedIntegrations = v11; | |
| tq1.setupIntegration = eq1; | |
| tq1.setupIntegrations = qh2 | |
| }); | |
| var xv = Y((IR1) => { | |
| Object.defineProperty(IR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var mh2 = V0(); | |
| function lh2(I, d, G, Z) { | |
| let C = Object.entries(mh2.dropUndefinedKeys(Z)).sort((W, w) => W[0].localeCompare(w[0])); | |
| return `${I}${d}${G}${C}` | |
| } | |
| function bh2(I) { | |
| let d = 0; | |
| for (let G = 0; G < I.length; G++) { | |
| let Z = I.charCodeAt(G); | |
| d = (d << 5) - d + Z, d &= d | |
| } | |
| return d >>> 0 | |
| } | |
| function hh2(I) { | |
| let d = ""; | |
| for (let G of I) { | |
| let Z = Object.entries(G.tags), | |
| C = Z.length > 0 ? `|#${Z.map(([W,w])=>`${W}:${w}`).join(",")}` : ""; | |
| d += `${G.name}@${G.unit}:${G.metric}|${G.metricType}${C}|T${G.timestamp} | |
| ` | |
| } | |
| return d | |
| } | |
| function jh2(I) { | |
| return I.replace(/[^\w]+/gi, "_") | |
| } | |
| function kh2(I) { | |
| return I.replace(/[^\w\-.]+/gi, "_") | |
| } | |
| function xh2(I) { | |
| return I.replace(/[^\w\-./]+/gi, "") | |
| } | |
| var ch2 = [ | |
| [` | |
| `, "\\n"], | |
| ["\r", "\\r"], | |
| ["\t", "\\t"], | |
| ["\\", "\\\\"], | |
| ["|", "\\u{7c}"], | |
| [",", "\\u{2c}"] | |
| ]; | |
| function ph2(I) { | |
| for (let [d, G] of ch2) | |
| if (I === d) return G; | |
| return I | |
| } | |
| function ih2(I) { | |
| return [...I].reduce((d, G) => d + ph2(G), "") | |
| } | |
| function nh2(I) { | |
| let d = {}; | |
| for (let G in I) | |
| if (Object.prototype.hasOwnProperty.call(I, G)) { | |
| let Z = xh2(G); | |
| d[Z] = ih2(String(I[G])) | |
| } return d | |
| } | |
| IR1.getBucketKey = lh2; | |
| IR1.sanitizeMetricKey = kh2; | |
| IR1.sanitizeTags = nh2; | |
| IR1.sanitizeUnit = jh2; | |
| IR1.serializeMetricBuckets = hh2; | |
| IR1.simpleHash = bh2 | |
| }); | |
| var ZR1 = Y((GR1) => { | |
| Object.defineProperty(GR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var dR1 = V0(), | |
| Ij2 = xv(); | |
| function dj2(I, d, G, Z) { | |
| let C = { | |
| sent_at: new Date().toISOString() | |
| }; | |
| if (G && G.sdk) C.sdk = { | |
| name: G.sdk.name, | |
| version: G.sdk.version | |
| }; | |
| if (!!Z && d) C.dsn = dR1.dsnToString(d); | |
| let W = Gj2(I); | |
| return dR1.createEnvelope(C, [W]) | |
| } | |
| function Gj2(I) { | |
| let d = Ij2.serializeMetricBuckets(I); | |
| return [{ | |
| type: "statsd", | |
| length: d.length | |
| }, d] | |
| } | |
| GR1.createMetricEnvelope = dj2 | |
| }); | |
| var E11 = Y((XR1) => { | |
| Object.defineProperty(XR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var v5 = V0(), | |
| Cj2 = rO(), | |
| Aw = F6(), | |
| CR1 = f11(), | |
| Wj2 = iG(), | |
| wj2 = ww(), | |
| sO = UA(), | |
| Bj2 = ZR1(), | |
| WR1 = VN(), | |
| Aj2 = HF(), | |
| Vj2 = vO(), | |
| wR1 = "Not capturing exception because it's already been captured."; | |
| class BR1 { | |
| constructor(I) { | |
| if (this._options = I, this._integrations = {}, this._integrationsInitialized = !1, this._numProcessing = 0, this._outcomes = {}, this._hooks = {}, this._eventProcessors = [], I.dsn) this._dsn = v5.makeDsn(I.dsn); | |
| else Aw.DEBUG_BUILD && v5.logger.warn("No DSN provided, client will not send events."); | |
| if (this._dsn) { | |
| let d = Cj2.getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, I); | |
| this._transport = I.transport({ | |
| tunnel: this._options.tunnel, | |
| recordDroppedEvent: this.recordDroppedEvent.bind(this), | |
| ...I.transportOptions, | |
| url: d | |
| }) | |
| } | |
| } | |
| captureException(I, d, G) { | |
| if (v5.checkOrSetAlreadyCaught(I)) { | |
| Aw.DEBUG_BUILD && v5.logger.log(wR1); | |
| return | |
| } | |
| let Z = d && d.event_id; | |
| return this._process(this.eventFromException(I, d).then((C) => this._captureEvent(C, d, G)).then((C) => { | |
| Z = C | |
| })), Z | |
| } | |
| captureMessage(I, d, G, Z) { | |
| let C = G && G.event_id, | |
| W = v5.isParameterizedString(I) ? I : String(I), | |
| w = v5.isPrimitive(I) ? this.eventFromMessage(W, d, G) : this.eventFromException(I, G); | |
| return this._process(w.then((B) => this._captureEvent(B, G, Z)).then((B) => { | |
| C = B | |
| })), C | |
| } | |
| captureEvent(I, d, G) { | |
| if (d && d.originalException && v5.checkOrSetAlreadyCaught(d.originalException)) { | |
| Aw.DEBUG_BUILD && v5.logger.log(wR1); | |
| return | |
| } | |
| let Z = d && d.event_id, | |
| W = (I.sdkProcessingMetadata || {}).capturedSpanScope; | |
| return this._process(this._captureEvent(I, d, W || G).then((w) => { | |
| Z = w | |
| })), Z | |
| } | |
| captureSession(I) { | |
| if (typeof I.release !== "string") Aw.DEBUG_BUILD && v5.logger.warn("Discarded session because of missing or non-string release"); | |
| else this.sendSession(I), WR1.updateSession(I, { | |
| init: !1 | |
| }) | |
| } | |
| getDsn() { | |
| return this._dsn | |
| } | |
| getOptions() { | |
| return this._options | |
| } | |
| getSdkMetadata() { | |
| return this._options._metadata | |
| } | |
| getTransport() { | |
| return this._transport | |
| } | |
| flush(I) { | |
| let d = this._transport; | |
| if (d) { | |
| if (this.metricsAggregator) this.metricsAggregator.flush(); | |
| return this._isClientDoneProcessing(I).then((G) => { | |
| return d.flush(I).then((Z) => G && Z) | |
| }) | |
| } else return v5.resolvedSyncPromise(!0) | |
| } | |
| close(I) { | |
| return this.flush(I).then((d) => { | |
| if (this.getOptions().enabled = !1, this.metricsAggregator) this.metricsAggregator.close(); | |
| return d | |
| }) | |
| } | |
| getEventProcessors() { | |
| return this._eventProcessors | |
| } | |
| addEventProcessor(I) { | |
| this._eventProcessors.push(I) | |
| } | |
| setupIntegrations(I) { | |
| if (I && !this._integrationsInitialized || this._isEnabled() && !this._integrationsInitialized) this._setupIntegrations() | |
| } | |
| init() { | |
| if (this._isEnabled()) this._setupIntegrations() | |
| } | |
| getIntegrationById(I) { | |
| return this.getIntegrationByName(I) | |
| } | |
| getIntegrationByName(I) { | |
| return this._integrations[I] | |
| } | |
| getIntegration(I) { | |
| try { | |
| return this._integrations[I.id] || null | |
| } catch (d) { | |
| return Aw.DEBUG_BUILD && v5.logger.warn(`Cannot retrieve integration ${I.id} from the current Client`), null | |
| } | |
| } | |
| addIntegration(I) { | |
| let d = this._integrations[I.name]; | |
| if (sO.setupIntegration(this, I, this._integrations), !d) sO.afterSetupIntegrations(this, [I]) | |
| } | |
| sendEvent(I, d = {}) { | |
| this.emit("beforeSendEvent", I, d); | |
| let G = CR1.createEventEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel); | |
| for (let C of d.attachments || []) G = v5.addItemToEnvelope(G, v5.createAttachmentEnvelopeItem(C, this._options.transportOptions && this._options.transportOptions.textEncoder)); | |
| let Z = this._sendEnvelope(G); | |
| if (Z) Z.then((C) => this.emit("afterSendEvent", I, C), null) | |
| } | |
| sendSession(I) { | |
| let d = CR1.createSessionEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel); | |
| this._sendEnvelope(d) | |
| } | |
| recordDroppedEvent(I, d, G) { | |
| if (this._options.sendClientReports) { | |
| let Z = typeof G === "number" ? G : 1, | |
| C = `${I}:${d}`; | |
| Aw.DEBUG_BUILD && v5.logger.log(`Recording outcome: "${C}"${Z>1?` (${Z} times)`:""}`), this._outcomes[C] = (this._outcomes[C] || 0) + Z | |
| } | |
| } | |
| captureAggregateMetrics(I) { | |
| Aw.DEBUG_BUILD && v5.logger.log(`Flushing aggregated metrics, number of metrics: ${I.length}`); | |
| let d = Bj2.createMetricEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel); | |
| this._sendEnvelope(d) | |
| } | |
| on(I, d) { | |
| if (!this._hooks[I]) this._hooks[I] = []; | |
| this._hooks[I].push(d) | |
| } | |
| emit(I, ...d) { | |
| if (this._hooks[I]) this._hooks[I].forEach((G) => G(...d)) | |
| } | |
| _setupIntegrations() { | |
| let { | |
| integrations: I | |
| } = this._options; | |
| this._integrations = sO.setupIntegrations(this, I), sO.afterSetupIntegrations(this, I), this._integrationsInitialized = !0 | |
| } | |
| _updateSessionFromEvent(I, d) { | |
| let G = !1, | |
| Z = !1, | |
| C = d.exception && d.exception.values; | |
| if (C) { | |
| Z = !0; | |
| for (let B of C) { | |
| let A = B.mechanism; | |
| if (A && A.handled === !1) { | |
| G = !0; | |
| break | |
| } | |
| } | |
| } | |
| let W = I.status === "ok"; | |
| if (W && I.errors === 0 || W && G) WR1.updateSession(I, { | |
| ...G && { | |
| status: "crashed" | |
| }, | |
| errors: I.errors || Number(Z || G) | |
| }), this.captureSession(I) | |
| } | |
| _isClientDoneProcessing(I) { | |
| return new v5.SyncPromise((d) => { | |
| let G = 0, | |
| Z = 1, | |
| C = setInterval(() => { | |
| if (this._numProcessing == 0) clearInterval(C), d(!0); | |
| else if (G += Z, I && G >= I) clearInterval(C), d(!1) | |
| }, Z) | |
| }) | |
| } | |
| _isEnabled() { | |
| return this.getOptions().enabled !== !1 && this._transport !== void 0 | |
| } | |
| _prepareEvent(I, d, G, Z = wj2.getIsolationScope()) { | |
| let C = this.getOptions(), | |
| W = Object.keys(this._integrations); | |
| if (!d.integrations && W.length > 0) d.integrations = W; | |
| return this.emit("preprocessEvent", I, d), Vj2.prepareEvent(C, I, d, G, this, Z).then((w) => { | |
| if (w === null) return w; | |
| let B = { | |
| ...Z.getPropagationContext(), | |
| ...G ? G.getPropagationContext() : void 0 | |
| }; | |
| if (!(w.contexts && w.contexts.trace) && B) { | |
| let { | |
| traceId: V, | |
| spanId: X, | |
| parentSpanId: _, | |
| dsc: F | |
| } = B; | |
| w.contexts = { | |
| trace: { | |
| trace_id: V, | |
| span_id: X, | |
| parent_span_id: _ | |
| }, | |
| ...w.contexts | |
| }; | |
| let g = F ? F : Aj2.getDynamicSamplingContextFromClient(V, this, G); | |
| w.sdkProcessingMetadata = { | |
| dynamicSamplingContext: g, | |
| ...w.sdkProcessingMetadata | |
| } | |
| } | |
| return w | |
| }) | |
| } | |
| _captureEvent(I, d = {}, G) { | |
| return this._processEvent(I, d, G).then((Z) => { | |
| return Z.event_id | |
| }, (Z) => { | |
| if (Aw.DEBUG_BUILD) { | |
| let C = Z; | |
| if (C.logLevel === "log") v5.logger.log(C.message); | |
| else v5.logger.warn(C) | |
| } | |
| return | |
| }) | |
| } | |
| _processEvent(I, d, G) { | |
| let Z = this.getOptions(), | |
| { | |
| sampleRate: C | |
| } = Z, | |
| W = VR1(I), | |
| w = AR1(I), | |
| B = I.type || "error", | |
| A = `before send for type \`${B}\``; | |
| if (w && typeof C === "number" && Math.random() > C) return this.recordDroppedEvent("sample_rate", "error", I), v5.rejectedSyncPromise(new v5.SentryError(`Discarding event because it's not included in the random sample (sampling rate = ${C})`, "log")); | |
| let V = B === "replay_event" ? "replay" : B, | |
| _ = (I.sdkProcessingMetadata || {}).capturedSpanIsolationScope; | |
| return this._prepareEvent(I, d, G, _).then((F) => { | |
| if (F === null) throw this.recordDroppedEvent("event_processor", V, I), new v5.SentryError("An event processor returned `null`, will not send event.", "log"); | |
| if (d.data && d.data.__sentry__ === !0) return F; | |
| let J = Yj2(Z, F, d); | |
| return Xj2(J, A) | |
| }).then((F) => { | |
| if (F === null) { | |
| if (this.recordDroppedEvent("before_send", V, I), W) { | |
| let Q = 1 + (I.spans || []).length; | |
| this.recordDroppedEvent("before_send", "span", Q) | |
| } | |
| throw new v5.SentryError(`${A} returned \`null\`, will not send event.`, "log") | |
| } | |
| let g = G && G.getSession(); | |
| if (!W && g) this._updateSessionFromEvent(g, F); | |
| if (W) { | |
| let K = F.sdkProcessingMetadata && F.sdkProcessingMetadata.spanCountBeforeProcessing || 0, | |
| Q = F.spans ? F.spans.length : 0, | |
| E = K - Q; | |
| if (E > 0) this.recordDroppedEvent("before_send", "span", E) | |
| } | |
| let J = F.transaction_info; | |
| if (W && J && F.transaction !== I.transaction) F.transaction_info = { | |
| ...J, | |
| source: "custom" | |
| }; | |
| return this.sendEvent(F, d), F | |
| }).then(null, (F) => { | |
| if (F instanceof v5.SentryError) throw F; | |
| throw this.captureException(F, { | |
| data: { | |
| __sentry__: !0 | |
| }, | |
| originalException: F | |
| }), new v5.SentryError(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. | |
| Reason: ${F}`) | |
| }) | |
| } | |
| _process(I) { | |
| this._numProcessing++, I.then((d) => { | |
| return this._numProcessing--, d | |
| }, (d) => { | |
| return this._numProcessing--, d | |
| }) | |
| } | |
| _sendEnvelope(I) { | |
| if (this.emit("beforeEnvelope", I), this._isEnabled() && this._transport) return this._transport.send(I).then(null, (d) => { | |
| Aw.DEBUG_BUILD && v5.logger.error("Error while sending event:", d) | |
| }); | |
| else Aw.DEBUG_BUILD && v5.logger.error("Transport disabled") | |
| } | |
| _clearOutcomes() { | |
| let I = this._outcomes; | |
| return this._outcomes = {}, Object.keys(I).map((d) => { | |
| let [G, Z] = d.split(":"); | |
| return { | |
| reason: G, | |
| category: Z, | |
| quantity: I[d] | |
| } | |
| }) | |
| } | |
| } | |
| function Xj2(I, d) { | |
| let G = `${d} must return \`null\` or a valid event.`; | |
| if (v5.isThenable(I)) return I.then((Z) => { | |
| if (!v5.isPlainObject(Z) && Z !== null) throw new v5.SentryError(G); | |
| return Z | |
| }, (Z) => { | |
| throw new v5.SentryError(`${d} rejected with ${Z}`) | |
| }); | |
| else if (!v5.isPlainObject(I) && I !== null) throw new v5.SentryError(G); | |
| return I | |
| } | |
| function Yj2(I, d, G) { | |
| let { | |
| beforeSend: Z, | |
| beforeSendTransaction: C | |
| } = I; | |
| if (AR1(d) && Z) return Z(d, G); | |
| if (VR1(d) && C) { | |
| if (d.spans) { | |
| let W = d.spans.length; | |
| d.sdkProcessingMetadata = { | |
| ...d.sdkProcessingMetadata, | |
| spanCountBeforeProcessing: W | |
| } | |
| } | |
| return C(d, G) | |
| } | |
| return d | |
| } | |
| function AR1(I) { | |
| return I.type === void 0 | |
| } | |
| function VR1(I) { | |
| return I.type === "transaction" | |
| } | |
| function _j2(I) { | |
| let d = Wj2.getClient(); | |
| if (!d || !d.addEventProcessor) return; | |
| d.addEventProcessor(I) | |
| } | |
| XR1.BaseClient = BR1; | |
| XR1.addEventProcessor = _j2 | |
| }); | |
| var S11 = Y((YR1) => { | |
| Object.defineProperty(YR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var M11 = V0(); | |
| function Fj2(I, d, G, Z, C) { | |
| let W = { | |
| sent_at: new Date().toISOString() | |
| }; | |
| if (G && G.sdk) W.sdk = { | |
| name: G.sdk.name, | |
| version: G.sdk.version | |
| }; | |
| if (!!Z && !!C) W.dsn = M11.dsnToString(C); | |
| if (d) W.trace = M11.dropUndefinedKeys(d); | |
| let w = gj2(I); | |
| return M11.createEnvelope(W, [w]) | |
| } | |
| function gj2(I) { | |
| return [{ | |
| type: "check_in" | |
| }, I] | |
| } | |
| YR1.createCheckInEnvelope = Fj2 | |
| }); | |
| var cv = Y((_R1) => { | |
| Object.defineProperty(_R1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Kj2 = "c", | |
| Nj2 = "g", | |
| zj2 = "s", | |
| Qj2 = "d", | |
| fj2 = 5000, | |
| qj2 = 1e4, | |
| Rj2 = 1e4; | |
| _R1.COUNTER_METRIC_TYPE = Kj2; | |
| _R1.DEFAULT_BROWSER_FLUSH_INTERVAL = fj2; | |
| _R1.DEFAULT_FLUSH_INTERVAL = qj2; | |
| _R1.DISTRIBUTION_METRIC_TYPE = Qj2; | |
| _R1.GAUGE_METRIC_TYPE = Nj2; | |
| _R1.MAX_WEIGHT = Rj2; | |
| _R1.SET_METRIC_TYPE = zj2 | |
| }); | |
| var u11 = Y((DR1) => { | |
| Object.defineProperty(DR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var oO = cv(), | |
| Pj2 = xv(); | |
| class L11 { | |
| constructor(I) { | |
| this._value = I | |
| } | |
| get weight() { | |
| return 1 | |
| } | |
| add(I) { | |
| this._value += I | |
| } | |
| toString() { | |
| return `${this._value}` | |
| } | |
| } | |
| class y11 { | |
| constructor(I) { | |
| this._last = I, this._min = I, this._max = I, this._sum = I, this._count = 1 | |
| } | |
| get weight() { | |
| return 5 | |
| } | |
| add(I) { | |
| if (this._last = I, I < this._min) this._min = I; | |
| if (I > this._max) this._max = I; | |
| this._sum += I, this._count++ | |
| } | |
| toString() { | |
| return `${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}` | |
| } | |
| } | |
| class P11 { | |
| constructor(I) { | |
| this._value = [I] | |
| } | |
| get weight() { | |
| return this._value.length | |
| } | |
| add(I) { | |
| this._value.push(I) | |
| } | |
| toString() { | |
| return this._value.join(":") | |
| } | |
| } | |
| class $11 { | |
| constructor(I) { | |
| this.first = I, this._value = new Set([I]) | |
| } | |
| get weight() { | |
| return this._value.size | |
| } | |
| add(I) { | |
| this._value.add(I) | |
| } | |
| toString() { | |
| return Array.from(this._value).map((I) => typeof I === "string" ? Pj2.simpleHash(I) : I).join(":") | |
| } | |
| } | |
| var $j2 = { | |
| [oO.COUNTER_METRIC_TYPE]: L11, | |
| [oO.GAUGE_METRIC_TYPE]: y11, | |
| [oO.DISTRIBUTION_METRIC_TYPE]: P11, | |
| [oO.SET_METRIC_TYPE]: $11 | |
| }; | |
| DR1.CounterMetric = L11; | |
| DR1.DistributionMetric = P11; | |
| DR1.GaugeMetric = y11; | |
| DR1.METRIC_MAP = $j2; | |
| DR1.SetMetric = $11 | |
| }); | |
| var JR1 = Y((gR1) => { | |
| Object.defineProperty(gR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var HR1 = V0(), | |
| pv = cv(), | |
| bj2 = u11(), | |
| hj2 = hv(), | |
| eO = xv(); | |
| class FR1 { | |
| constructor(I) { | |
| if (this._client = I, this._buckets = new Map, this._bucketsTotalWeight = 0, this._interval = setInterval(() => this._flush(), pv.DEFAULT_FLUSH_INTERVAL), this._interval.unref) this._interval.unref(); | |
| this._flushShift = Math.floor(Math.random() * pv.DEFAULT_FLUSH_INTERVAL / 1000), this._forceFlush = !1 | |
| } | |
| add(I, d, G, Z = "none", C = {}, W = HR1.timestampInSeconds()) { | |
| let w = Math.floor(W), | |
| B = eO.sanitizeMetricKey(d), | |
| A = eO.sanitizeTags(C), | |
| V = eO.sanitizeUnit(Z), | |
| X = eO.getBucketKey(I, B, V, A), | |
| _ = this._buckets.get(X), | |
| F = _ && I === pv.SET_METRIC_TYPE ? _.metric.weight : 0; | |
| if (_) { | |
| if (_.metric.add(G), _.timestamp < w) _.timestamp = w | |
| } else _ = { | |
| metric: new bj2.METRIC_MAP[I](G), | |
| timestamp: w, | |
| metricType: I, | |
| name: B, | |
| unit: V, | |
| tags: A | |
| }, this._buckets.set(X, _); | |
| let g = typeof G === "string" ? _.metric.weight - F : G; | |
| if (hj2.updateMetricSummaryOnActiveSpan(I, B, g, V, C, X), this._bucketsTotalWeight += _.metric.weight, this._bucketsTotalWeight >= pv.MAX_WEIGHT) this.flush() | |
| } | |
| flush() { | |
| this._forceFlush = !0, this._flush() | |
| } | |
| close() { | |
| this._forceFlush = !0, clearInterval(this._interval), this._flush() | |
| } | |
| _flush() { | |
| if (this._forceFlush) { | |
| this._forceFlush = !1, this._bucketsTotalWeight = 0, this._captureMetrics(this._buckets), this._buckets.clear(); | |
| return | |
| } | |
| let I = Math.floor(HR1.timestampInSeconds()) - pv.DEFAULT_FLUSH_INTERVAL / 1000 - this._flushShift, | |
| d = new Map; | |
| for (let [G, Z] of this._buckets) | |
| if (Z.timestamp <= I) d.set(G, Z), this._bucketsTotalWeight -= Z.metric.weight; | |
| for (let [G] of d) this._buckets.delete(G); | |
| this._captureMetrics(d) | |
| } | |
| _captureMetrics(I) { | |
| if (I.size > 0 && this._client.captureAggregateMetrics) { | |
| let d = Array.from(I).map(([, G]) => G); | |
| this._client.captureAggregateMetrics(d) | |
| } | |
| } | |
| } | |
| gR1.MetricsAggregator = FR1 | |
| }); | |
| var QR1 = Y((zR1) => { | |
| Object.defineProperty(zR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var vA = V0(), | |
| kj2 = E11(), | |
| xj2 = S11(), | |
| tO = F6(), | |
| cj2 = iG(), | |
| pj2 = JR1(), | |
| ij2 = q11(), | |
| nj2 = Q11(), | |
| rj2 = kI(), | |
| aj2 = XN(); | |
| DN(); | |
| var KR1 = HF(); | |
| class NR1 extends kj2.BaseClient { | |
| constructor(I) { | |
| nj2.addTracingExtensions(); | |
| super(I); | |
| if (I._experiments && I._experiments.metricsAggregator) this.metricsAggregator = new pj2.MetricsAggregator(this) | |
| } | |
| eventFromException(I, d) { | |
| return vA.resolvedSyncPromise(vA.eventFromUnknownInput(cj2.getClient(), this._options.stackParser, I, d)) | |
| } | |
| eventFromMessage(I, d = "info", G) { | |
| return vA.resolvedSyncPromise(vA.eventFromMessage(this._options.stackParser, I, d, G, this._options.attachStacktrace)) | |
| } | |
| captureException(I, d, G) { | |
| if (this._options.autoSessionTracking && this._sessionFlusher && G) { | |
| let Z = G.getRequestSession(); | |
| if (Z && Z.status === "ok") Z.status = "errored" | |
| } | |
| return super.captureException(I, d, G) | |
| } | |
| captureEvent(I, d, G) { | |
| if (this._options.autoSessionTracking && this._sessionFlusher && G) { | |
| if ((I.type || "exception") === "exception" && I.exception && I.exception.values && I.exception.values.length > 0) { | |
| let W = G.getRequestSession(); | |
| if (W && W.status === "ok") W.status = "errored" | |
| } | |
| } | |
| return super.captureEvent(I, d, G) | |
| } | |
| close(I) { | |
| if (this._sessionFlusher) this._sessionFlusher.close(); | |
| return super.close(I) | |
| } | |
| initSessionFlusher() { | |
| let { | |
| release: I, | |
| environment: d | |
| } = this._options; | |
| if (!I) tO.DEBUG_BUILD && vA.logger.warn("Cannot initialise an instance of SessionFlusher if no release is provided!"); | |
| else this._sessionFlusher = new ij2.SessionFlusher(this, { | |
| release: I, | |
| environment: d | |
| }) | |
| } | |
| captureCheckIn(I, d, G) { | |
| let Z = "checkInId" in I && I.checkInId ? I.checkInId : vA.uuid4(); | |
| if (!this._isEnabled()) return tO.DEBUG_BUILD && vA.logger.warn("SDK not enabled, will not capture checkin."), Z; | |
| let C = this.getOptions(), | |
| { | |
| release: W, | |
| environment: w, | |
| tunnel: B | |
| } = C, | |
| A = { | |
| check_in_id: Z, | |
| monitor_slug: I.monitorSlug, | |
| status: I.status, | |
| release: W, | |
| environment: w | |
| }; | |
| if ("duration" in I) A.duration = I.duration; | |
| if (d) A.monitor_config = { | |
| schedule: d.schedule, | |
| checkin_margin: d.checkinMargin, | |
| max_runtime: d.maxRuntime, | |
| timezone: d.timezone | |
| }; | |
| let [V, X] = this._getTraceInfoFromScope(G); | |
| if (X) A.contexts = { | |
| trace: X | |
| }; | |
| let _ = xj2.createCheckInEnvelope(A, V, this.getSdkMetadata(), B, this.getDsn()); | |
| return tO.DEBUG_BUILD && vA.logger.info("Sending checkin:", I.monitorSlug, I.status), this._sendEnvelope(_), Z | |
| } | |
| _captureRequestSession() { | |
| if (!this._sessionFlusher) tO.DEBUG_BUILD && vA.logger.warn("Discarded request mode session because autoSessionTracking option was disabled"); | |
| else this._sessionFlusher.incrementSessionStatusCount() | |
| } | |
| _prepareEvent(I, d, G, Z) { | |
| if (this._options.platform) I.platform = I.platform || this._options.platform; | |
| if (this._options.runtime) I.contexts = { | |
| ...I.contexts, | |
| runtime: (I.contexts || {}).runtime || this._options.runtime | |
| }; | |
| if (this._options.serverName) I.server_name = I.server_name || this._options.serverName; | |
| return super._prepareEvent(I, d, G, Z) | |
| } | |
| _getTraceInfoFromScope(I) { | |
| if (!I) return [void 0, void 0]; | |
| let d = I.getSpan(); | |
| if (d) return [aj2.getRootSpan(d) ? KR1.getDynamicSamplingContextFromSpan(d) : void 0, rj2.spanToTraceContext(d)]; | |
| let { | |
| traceId: G, | |
| spanId: Z, | |
| parentSpanId: C, | |
| dsc: W | |
| } = I.getPropagationContext(), w = { | |
| trace_id: G, | |
| span_id: Z, | |
| parent_span_id: C | |
| }; | |
| if (W) return [W, w]; | |
| return [KR1.getDynamicSamplingContextFromClient(G, this, I), w] | |
| } | |
| } | |
| zR1.ServerRuntimeClient = NR1 | |
| }); | |
| var UR1 = Y((RR1) => { | |
| Object.defineProperty(RR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var fR1 = V0(), | |
| oj2 = F6(), | |
| ej2 = iG(), | |
| tj2 = ww(); | |
| function Ik2(I, d) { | |
| if (d.debug === !0) | |
| if (oj2.DEBUG_BUILD) fR1.logger.enable(); | |
| else fR1.consoleSandbox(() => { | |
| console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.") | |
| }); | |
| ej2.getCurrentScope().update(d.initialScope); | |
| let Z = new I(d); | |
| qR1(Z), dk2(Z) | |
| } | |
| function qR1(I) { | |
| let G = tj2.getCurrentHub().getStackTop(); | |
| G.client = I, G.scope.setClient(I) | |
| } | |
| function dk2(I) { | |
| if (I.init) I.init(); | |
| else if (I.setupIntegrations) I.setupIntegrations() | |
| } | |
| RR1.initAndBind = Ik2; | |
| RR1.setCurrentClient = qR1 | |
| }); | |
| var LR1 = Y((SR1) => { | |
| Object.defineProperty(SR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var cI = V0(), | |
| vR1 = F6(), | |
| MR1 = 30; | |
| function Ck2(I, d, G = cI.makePromiseBuffer(I.bufferSize || MR1)) { | |
| let Z = {}, | |
| C = (w) => G.drain(w); | |
| function W(w) { | |
| let B = []; | |
| if (cI.forEachEnvelopeItem(w, (_, F) => { | |
| let g = cI.envelopeItemTypeToDataCategory(F); | |
| if (cI.isRateLimited(Z, g)) { | |
| let J = ER1(_, F); | |
| I.recordDroppedEvent("ratelimit_backoff", g, J) | |
| } else B.push(_) | |
| }), B.length === 0) return cI.resolvedSyncPromise(); | |
| let A = cI.createEnvelope(w[0], B), | |
| V = (_) => { | |
| cI.forEachEnvelopeItem(A, (F, g) => { | |
| let J = ER1(F, g); | |
| I.recordDroppedEvent(_, cI.envelopeItemTypeToDataCategory(g), J) | |
| }) | |
| }, | |
| X = () => d({ | |
| body: cI.serializeEnvelope(A, I.textEncoder) | |
| }).then((_) => { | |
| if (_.statusCode !== void 0 && (_.statusCode < 200 || _.statusCode >= 300)) vR1.DEBUG_BUILD && cI.logger.warn(`Sentry responded with status code ${_.statusCode} to sent event.`); | |
| return Z = cI.updateRateLimits(Z, _), _ | |
| }, (_) => { | |
| throw V("network_error"), _ | |
| }); | |
| return G.add(X).then((_) => _, (_) => { | |
| if (_ instanceof cI.SentryError) return vR1.DEBUG_BUILD && cI.logger.error("Skipped sending event because buffer is full."), V("queue_overflow"), cI.resolvedSyncPromise(); | |
| else throw _ | |
| }) | |
| } | |
| return W.__sentry__baseTransport__ = !0, { | |
| send: W, | |
| flush: C | |
| } | |
| } | |
| function ER1(I, d) { | |
| if (d !== "event" && d !== "transaction") return; | |
| return Array.isArray(I) ? I[1] : void 0 | |
| } | |
| SR1.DEFAULT_TRANSPORT_BUFFER_SIZE = MR1; | |
| SR1.createTransport = Ck2 | |
| }); | |
| var $R1 = Y((PR1) => { | |
| Object.defineProperty(PR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var O11 = V0(), | |
| Bk2 = F6(), | |
| yR1 = 100, | |
| m11 = 5000, | |
| Ak2 = 3600000; | |
| function T11(I, d) { | |
| Bk2.DEBUG_BUILD && O11.logger.info(`[Offline]: ${I}`, d) | |
| } | |
| function Vk2(I) { | |
| return (d) => { | |
| let G = I(d), | |
| Z = d.createStore ? d.createStore(d) : void 0, | |
| C = m11, | |
| W; | |
| function w(X, _, F) { | |
| if (O11.envelopeContainsItemType(X, ["replay_event", "replay_recording", "client_report"])) return !1; | |
| if (d.shouldStore) return d.shouldStore(X, _, F); | |
| return !0 | |
| } | |
| function B(X) { | |
| if (!Z) return; | |
| if (W) clearTimeout(W); | |
| if (W = setTimeout(async () => { | |
| W = void 0; | |
| let _ = await Z.pop(); | |
| if (_) T11("Attempting to send previously queued event"), V(_).catch((F) => { | |
| T11("Failed to retry sending", F) | |
| }) | |
| }, X), typeof W !== "number" && W.unref) W.unref() | |
| } | |
| function A() { | |
| if (W) return; | |
| B(C), C = Math.min(C * 2, Ak2) | |
| } | |
| async function V(X) { | |
| try { | |
| let _ = await G.send(X), | |
| F = yR1; | |
| if (_) { | |
| if (_.headers && _.headers["retry-after"]) F = O11.parseRetryAfterHeader(_.headers["retry-after"]); | |
| else if ((_.statusCode || 0) >= 400) return _ | |
| } | |
| return B(F), C = m11, _ | |
| } catch (_) { | |
| if (Z && await w(X, _, C)) return await Z.insert(X), A(), T11("Error sending. Event queued", _), {}; | |
| else throw _ | |
| } | |
| } | |
| if (d.flushAtStartup) A(); | |
| return { | |
| send: V, | |
| flush: (X) => G.flush(X) | |
| } | |
| } | |
| } | |
| PR1.MIN_DELAY = yR1; | |
| PR1.START_DELAY = m11; | |
| PR1.makeOfflineTransport = Vk2 | |
| }); | |
| var TR1 = Y((uR1) => { | |
| Object.defineProperty(uR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var l11 = V0(), | |
| Dk2 = rO(); | |
| function b11(I, d) { | |
| let G; | |
| return l11.forEachEnvelopeItem(I, (Z, C) => { | |
| if (d.includes(C)) G = Array.isArray(Z) ? Z[1] : void 0; | |
| return !!G | |
| }), G | |
| } | |
| function Hk2(I, d) { | |
| return (G) => { | |
| let Z = I(G); | |
| return { | |
| ...Z, | |
| send: async (C) => { | |
| let W = b11(C, ["event", "transaction", "profile", "replay_event"]); | |
| if (W) W.release = d; | |
| return Z.send(C) | |
| } | |
| } | |
| } | |
| } | |
| function Fk2(I, d) { | |
| return l11.createEnvelope(d ? { | |
| ...I[0], | |
| dsn: d | |
| } : I[0], I[1]) | |
| } | |
| function gk2(I, d) { | |
| return (G) => { | |
| let Z = I(G), | |
| C = new Map; | |
| function W(A, V) { | |
| let X = V ? `${A}:${V}` : A, | |
| _ = C.get(X); | |
| if (!_) { | |
| let F = l11.dsnFromString(A); | |
| if (!F) return; | |
| let g = Dk2.getEnvelopeEndpointWithUrlEncodedAuth(F, G.tunnel); | |
| _ = V ? Hk2(I, V)({ | |
| ...G, | |
| url: g | |
| }) : I({ | |
| ...G, | |
| url: g | |
| }), C.set(X, _) | |
| } | |
| return [A, _] | |
| } | |
| async function w(A) { | |
| function V(F) { | |
| let g = F && F.length ? F : ["event"]; | |
| return b11(A, g) | |
| } | |
| let X = d({ | |
| envelope: A, | |
| getEvent: V | |
| }).map((F) => { | |
| if (typeof F === "string") return W(F, void 0); | |
| else return W(F.dsn, F.release) | |
| }).filter((F) => !!F); | |
| if (X.length === 0) X.push(["", Z]); | |
| return (await Promise.all(X.map(([F, g]) => g.send(Fk2(A, F)))))[0] | |
| } | |
| async function B(A) { | |
| let V = [await Z.flush(A)]; | |
| for (let [, X] of C) V.push(await X.flush(A)); | |
| return V.every((X) => X) | |
| } | |
| return { | |
| send: w, | |
| flush: B | |
| } | |
| } | |
| } | |
| uR1.eventFromEnvelope = b11; | |
| uR1.makeMultiplexedTransport = gk2 | |
| }); | |
| var lR1 = Y((mR1) => { | |
| Object.defineProperty(mR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var OR1 = V0(); | |
| function Nk2(I, d) { | |
| let G = { | |
| sent_at: new Date().toISOString() | |
| }; | |
| if (d) G.dsn = OR1.dsnToString(d); | |
| let Z = I.map(zk2); | |
| return OR1.createEnvelope(G, Z) | |
| } | |
| function zk2(I) { | |
| return [{ | |
| type: "span" | |
| }, I] | |
| } | |
| mR1.createSpanEnvelope = Nk2 | |
| }); | |
| var jR1 = Y((hR1) => { | |
| Object.defineProperty(hR1, "__esModule", { | |
| value: !0 | |
| }); | |
| function fk2(I, d) { | |
| let G = d && Uk2(d) ? d.getClient() : d, | |
| Z = G && G.getDsn(), | |
| C = G && G.getOptions().tunnel; | |
| return Rk2(I, Z) || qk2(I, C) | |
| } | |
| function qk2(I, d) { | |
| if (!d) return !1; | |
| return bR1(I) === bR1(d) | |
| } | |
| function Rk2(I, d) { | |
| return d ? I.includes(d.host) : !1 | |
| } | |
| function bR1(I) { | |
| return I[I.length - 1] === "/" ? I.slice(0, -1) : I | |
| } | |
| function Uk2(I) { | |
| return I.getClient !== void 0 | |
| } | |
| hR1.isSentryRequestUrl = fk2 | |
| }); | |
| var xR1 = Y((kR1) => { | |
| Object.defineProperty(kR1, "__esModule", { | |
| value: !0 | |
| }); | |
| function Ek2(I, ...d) { | |
| let G = new String(String.raw(I, ...d)); | |
| return G.__sentry_template_string__ = I.join("\x00").replace(/%/g, "%%").replace(/\0/g, "%s"), G.__sentry_template_values__ = d, G | |
| } | |
| kR1.parameterize = Ek2 | |
| }); | |
| var iR1 = Y((pR1) => { | |
| Object.defineProperty(pR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var cR1 = yO(); | |
| function Sk2(I, d, G = [d], Z = "npm") { | |
| let C = I._metadata || {}; | |
| if (!C.sdk) C.sdk = { | |
| name: `sentry.javascript.${d}`, | |
| packages: G.map((W) => ({ | |
| name: `${Z}:@sentry/${W}`, | |
| version: cR1.SDK_VERSION | |
| })), | |
| version: cR1.SDK_VERSION | |
| }; | |
| I._metadata = C | |
| } | |
| pR1.applySdkMetadata = Sk2 | |
| }); | |
| var oR1 = Y((sR1) => { | |
| Object.defineProperty(sR1, "__esModule", { | |
| value: !0 | |
| }); | |
| var h11 = V0(), | |
| rR1 = new Map, | |
| nR1 = new Set; | |
| function yk2(I) { | |
| if (!h11.GLOBAL_OBJ._sentryModuleMetadata) return; | |
| for (let d of Object.keys(h11.GLOBAL_OBJ._sentryModuleMetadata)) { | |
| let G = h11.GLOBAL_OBJ._sentryModuleMetadata[d]; | |
| if (nR1.has(d)) continue; | |
| nR1.add(d); | |
| let Z = I(d); | |
| for (let C of Z.reverse()) | |
| if (C.filename) { | |
| rR1.set(C.filename, G); | |
| break | |
| } | |
| } | |
| } | |
| function aR1(I, d) { | |
| return yk2(I), rR1.get(d) | |
| } | |
| function Pk2(I, d) { | |
| try { | |
| d.exception.values.forEach((G) => { | |
| if (!G.stacktrace) return; | |
| for (let Z of G.stacktrace.frames || []) { | |
| if (!Z.filename) continue; | |
| let C = aR1(I, Z.filename); | |
| if (C) Z.module_metadata = C | |
| } | |
| }) | |
| } catch (G) {} | |
| } | |
| function $k2(I) { | |
| try { | |
| I.exception.values.forEach((d) => { | |
| if (!d.stacktrace) return; | |
| for (let G of d.stacktrace.frames || []) delete G.module_metadata | |
| }) | |
| } catch (d) {} | |
| } | |
| sR1.addMetadataToStackFrames = Pk2; | |
| sR1.getMetadataForUrl = aR1; | |
| sR1.stripMetadataFromStackFrames = $k2 | |
| }); | |
| var ZU1 = Y((GU1) => { | |
| Object.defineProperty(GU1, "__esModule", { | |
| value: !0 | |
| }); | |
| var mk2 = V0(), | |
| tR1 = UA(), | |
| eR1 = oR1(), | |
| IU1 = "ModuleMetadata", | |
| lk2 = () => { | |
| return { | |
| name: IU1, | |
| setupOnce() {}, | |
| setup(I) { | |
| if (typeof I.on !== "function") return; | |
| I.on("beforeEnvelope", (d) => { | |
| mk2.forEachEnvelopeItem(d, (G, Z) => { | |
| if (Z === "event") { | |
| let C = Array.isArray(G) ? G[1] : void 0; | |
| if (C) eR1.stripMetadataFromStackFrames(C), G[1] = C | |
| } | |
| }) | |
| }) | |
| }, | |
| processEvent(I, d, G) { | |
| let Z = G.getOptions().stackParser; | |
| return eR1.addMetadataToStackFrames(Z, I), I | |
| } | |
| } | |
| }, | |
| dU1 = tR1.defineIntegration(lk2), | |
| bk2 = tR1.convertIntegrationFnToClass(IU1, dU1); | |
| GU1.ModuleMetadata = bk2; | |
| GU1.moduleMetadataIntegration = dU1 | |
| }); | |
| var VU1 = Y((AU1) => { | |
| Object.defineProperty(AU1, "__esModule", { | |
| value: !0 | |
| }); | |
| var CU1 = V0(), | |
| WU1 = UA(), | |
| kk2 = kI(), | |
| j11 = { | |
| include: { | |
| cookies: !0, | |
| data: !0, | |
| headers: !0, | |
| ip: !1, | |
| query_string: !0, | |
| url: !0, | |
| user: { | |
| id: !0, | |
| username: !0, | |
| email: !0 | |
| } | |
| }, | |
| transactionNamingScheme: "methodPath" | |
| }, | |
| wU1 = "RequestData", | |
| xk2 = (I = {}) => { | |
| let d = CU1.addRequestDataToEvent, | |
| G = { | |
| ...j11, | |
| ...I, | |
| include: { | |
| method: !0, | |
| ...j11.include, | |
| ...I.include, | |
| user: I.include && typeof I.include.user === "boolean" ? I.include.user : { | |
| ...j11.include.user, | |
| ...(I.include || {}).user | |
| } | |
| } | |
| }; | |
| return { | |
| name: wU1, | |
| setupOnce() {}, | |
| processEvent(Z, C, W) { | |
| let { | |
| transactionNamingScheme: w | |
| } = G, { | |
| sdkProcessingMetadata: B = {} | |
| } = Z, A = B.request; | |
| if (!A) return Z; | |
| let V = B.requestDataOptionsFromExpressHandler || B.requestDataOptionsFromGCPWrapper || pk2(G), | |
| X = d(Z, A, V); | |
| if (Z.type === "transaction" || w === "handler") return X; | |
| let F = A._sentryTransaction; | |
| if (F) { | |
| let g = kk2.spanToJSON(F).description || "", | |
| J = ik2(W) === "sentry.javascript.nextjs" ? g.startsWith("/api") : w !== "path", | |
| [K] = CU1.extractPathForTransaction(A, { | |
| path: !0, | |
| method: J, | |
| customRoute: g | |
| }); | |
| X.transaction = K | |
| } | |
| return X | |
| } | |
| } | |
| }, | |
| BU1 = WU1.defineIntegration(xk2), | |
| ck2 = WU1.convertIntegrationFnToClass(wU1, BU1); | |
| function pk2(I) { | |
| let { | |
| transactionNamingScheme: d, | |
| include: { | |
| ip: G, | |
| user: Z, | |
| ...C | |
| } | |
| } = I, W = []; | |
| for (let [B, A] of Object.entries(C)) | |
| if (A) W.push(B); | |
| let w; | |
| if (Z === void 0) w = !0; | |
| else if (typeof Z === "boolean") w = Z; | |
| else { | |
| let B = []; | |
| for (let [A, V] of Object.entries(Z)) | |
| if (V) B.push(A); | |
| w = B | |
| } | |
| return { | |
| include: { | |
| ip: G, | |
| user: w, | |
| request: W.length !== 0 ? W : void 0, | |
| transaction: d | |
| } | |
| } | |
| } | |
| function ik2(I) { | |
| try { | |
| return I.getOptions()._metadata.sdk.name | |
| } catch (d) { | |
| return | |
| } | |
| } | |
| AU1.RequestData = ck2; | |
| AU1.requestDataIntegration = BU1 | |
| }); | |
| var k11 = Y((DU1) => { | |
| Object.defineProperty(DU1, "__esModule", { | |
| value: !0 | |
| }); | |
| var W8 = V0(), | |
| KF = F6(), | |
| XU1 = UA(), | |
| ak2 = [/^Script error\.?$/, /^Javascript error: Script error\.? on line 0$/, /^ResizeObserver loop completed with undelivered notifications.$/, /^Cannot redefine property: googletag$/], | |
| sk2 = [/^.*\/healthcheck$/, /^.*\/healthy$/, /^.*\/live$/, /^.*\/ready$/, /^.*\/heartbeat$/, /^.*\/health$/, /^.*\/healthz$/], | |
| YU1 = "InboundFilters", | |
| ok2 = (I = {}) => { | |
| return { | |
| name: YU1, | |
| setupOnce() {}, | |
| processEvent(d, G, Z) { | |
| let C = Z.getOptions(), | |
| W = tk2(I, C); | |
| return Ix2(d, W) ? null : d | |
| } | |
| } | |
| }, | |
| _U1 = XU1.defineIntegration(ok2), | |
| ek2 = XU1.convertIntegrationFnToClass(YU1, _U1); | |
| function tk2(I = {}, d = {}) { | |
| return { | |
| allowUrls: [...I.allowUrls || [], ...d.allowUrls || []], | |
| denyUrls: [...I.denyUrls || [], ...d.denyUrls || []], | |
| ignoreErrors: [...I.ignoreErrors || [], ...d.ignoreErrors || [], ...I.disableErrorDefaults ? [] : ak2], | |
| ignoreTransactions: [...I.ignoreTransactions || [], ...d.ignoreTransactions || [], ...I.disableTransactionDefaults ? [] : sk2], | |
| ignoreInternal: I.ignoreInternal !== void 0 ? I.ignoreInternal : !0 | |
| } | |
| } | |
| function Ix2(I, d) { | |
| if (d.ignoreInternal && wx2(I)) return KF.DEBUG_BUILD && W8.logger.warn(`Event dropped due to being internal Sentry Error. | |
| Event: ${W8.getEventDescription(I)}`), !0; | |
| if (dx2(I, d.ignoreErrors)) return KF.DEBUG_BUILD && W8.logger.warn(`Event dropped due to being matched by \`ignoreErrors\` option. | |
| Event: ${W8.getEventDescription(I)}`), !0; | |
| if (Gx2(I, d.ignoreTransactions)) return KF.DEBUG_BUILD && W8.logger.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. | |
| Event: ${W8.getEventDescription(I)}`), !0; | |
| if (Zx2(I, d.denyUrls)) return KF.DEBUG_BUILD && W8.logger.warn(`Event dropped due to being matched by \`denyUrls\` option. | |
| Event: ${W8.getEventDescription(I)}. | |
| Url: ${Im(I)}`), !0; | |
| if (!Cx2(I, d.allowUrls)) return KF.DEBUG_BUILD && W8.logger.warn(`Event dropped due to not being matched by \`allowUrls\` option. | |
| Event: ${W8.getEventDescription(I)}. | |
| Url: ${Im(I)}`), !0; | |
| return !1 | |
| } | |
| function dx2(I, d) { | |
| if (I.type || !d || !d.length) return !1; | |
| return Wx2(I).some((G) => W8.stringMatchesSomePattern(G, d)) | |
| } | |
| function Gx2(I, d) { | |
| if (I.type !== "transaction" || !d || !d.length) return !1; | |
| let G = I.transaction; | |
| return G ? W8.stringMatchesSomePattern(G, d) : !1 | |
| } | |
| function Zx2(I, d) { | |
| if (!d || !d.length) return !1; | |
| let G = Im(I); | |
| return !G ? !1 : W8.stringMatchesSomePattern(G, d) | |
| } | |
| function Cx2(I, d) { | |
| if (!d || !d.length) return !0; | |
| let G = Im(I); | |
| return !G ? !0 : W8.stringMatchesSomePattern(G, d) | |
| } | |
| function Wx2(I) { | |
| let d = []; | |
| if (I.message) d.push(I.message); | |
| let G; | |
| try { | |
| G = I.exception.values[I.exception.values.length - 1] | |
| } catch (Z) {} | |
| if (G) { | |
| if (G.value) { | |
| if (d.push(G.value), G.type) d.push(`${G.type}: ${G.value}`) | |
| } | |
| } | |
| if (KF.DEBUG_BUILD && d.length === 0) W8.logger.error(`Could not extract message for event ${W8.getEventDescription(I)}`); | |
| return d | |
| } | |
| function wx2(I) { | |
| try { | |
| return I.exception.values[0].type === "SentryError" | |
| } catch (d) {} | |
| return !1 | |
| } | |
| function Bx2(I = []) { | |
| for (let d = I.length - 1; d >= 0; d--) { | |
| let G = I[d]; | |
| if (G && G.filename !== "<anonymous>" && G.filename !== "[native code]") return G.filename || null | |
| } | |
| return null | |
| } | |
| function Im(I) { | |
| try { | |
| let d; | |
| try { | |
| d = I.exception.values[0].stacktrace.frames | |
| } catch (G) {} | |
| return d ? Bx2(d) : null | |
| } catch (d) { | |
| return KF.DEBUG_BUILD && W8.logger.error(`Cannot extract url for event ${W8.getEventDescription(I)}`), null | |
| } | |
| } | |
| DU1.InboundFilters = ek2; | |
| DU1.inboundFiltersIntegration = _U1 | |
| }); | |
| var x11 = Y((NU1) => { | |
| Object.defineProperty(NU1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Xx2 = V0(), | |
| Yx2 = iG(), | |
| gU1 = UA(), | |
| HU1, JU1 = "FunctionToString", | |
| FU1 = new WeakMap, | |
| _x2 = () => { | |
| return { | |
| name: JU1, | |
| setupOnce() { | |
| HU1 = Function.prototype.toString; | |
| try { | |
| Function.prototype.toString = function(...I) { | |
| let d = Xx2.getOriginalFunction(this), | |
| G = FU1.has(Yx2.getClient()) && d !== void 0 ? d : this; | |
| return HU1.apply(G, I) | |
| } | |
| } catch (I) {} | |
| }, | |
| setup(I) { | |
| FU1.set(I, !0) | |
| } | |
| } | |
| }, | |
| KU1 = gU1.defineIntegration(_x2), | |
| Dx2 = gU1.convertIntegrationFnToClass(JU1, KU1); | |
| NU1.FunctionToString = Dx2; | |
| NU1.functionToStringIntegration = KU1 | |
| }); | |
| var c11 = Y((RU1) => { | |
| Object.defineProperty(RU1, "__esModule", { | |
| value: !0 | |
| }); | |
| var zU1 = V0(), | |
| QU1 = UA(), | |
| gx2 = "cause", | |
| Jx2 = 5, | |
| fU1 = "LinkedErrors", | |
| Kx2 = (I = {}) => { | |
| let d = I.limit || Jx2, | |
| G = I.key || gx2; | |
| return { | |
| name: fU1, | |
| setupOnce() {}, | |
| preprocessEvent(Z, C, W) { | |
| let w = W.getOptions(); | |
| zU1.applyAggregateErrorsToEvent(zU1.exceptionFromError, w.stackParser, w.maxValueLength, G, d, Z, C) | |
| } | |
| } | |
| }, | |
| qU1 = QU1.defineIntegration(Kx2), | |
| Nx2 = QU1.convertIntegrationFnToClass(fU1, qU1); | |
| RU1.LinkedErrors = Nx2; | |
| RU1.linkedErrorsIntegration = qU1 | |
| }); | |
| var vU1 = Y((UU1) => { | |
| Object.defineProperty(UU1, "__esModule", { | |
| value: !0 | |
| }); | |
| var fx2 = x11(), | |
| qx2 = k11(), | |
| Rx2 = c11(); | |
| UU1.FunctionToString = fx2.FunctionToString; | |
| UU1.InboundFilters = qx2.InboundFilters; | |
| UU1.LinkedErrors = Rx2.LinkedErrors | |
| }); | |
| var LU1 = Y((SU1) => { | |
| Object.defineProperty(SU1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Mx2 = V0(), | |
| EU1 = cv(), | |
| Sx2 = u11(), | |
| Lx2 = hv(), | |
| dm = xv(); | |
| class MU1 { | |
| constructor(I) { | |
| this._client = I, this._buckets = new Map, this._interval = setInterval(() => this.flush(), EU1.DEFAULT_BROWSER_FLUSH_INTERVAL) | |
| } | |
| add(I, d, G, Z = "none", C = {}, W = Mx2.timestampInSeconds()) { | |
| let w = Math.floor(W), | |
| B = dm.sanitizeMetricKey(d), | |
| A = dm.sanitizeTags(C), | |
| V = dm.sanitizeUnit(Z), | |
| X = dm.getBucketKey(I, B, V, A), | |
| _ = this._buckets.get(X), | |
| F = _ && I === EU1.SET_METRIC_TYPE ? _.metric.weight : 0; | |
| if (_) { | |
| if (_.metric.add(G), _.timestamp < w) _.timestamp = w | |
| } else _ = { | |
| metric: new Sx2.METRIC_MAP[I](G), | |
| timestamp: w, | |
| metricType: I, | |
| name: B, | |
| unit: V, | |
| tags: A | |
| }, this._buckets.set(X, _); | |
| let g = typeof G === "string" ? _.metric.weight - F : G; | |
| Lx2.updateMetricSummaryOnActiveSpan(I, B, g, V, C, X) | |
| } | |
| flush() { | |
| if (this._buckets.size === 0) return; | |
| if (this._client.captureAggregateMetrics) { | |
| let I = Array.from(this._buckets).map(([, d]) => d); | |
| this._client.captureAggregateMetrics(I) | |
| } | |
| this._buckets.clear() | |
| } | |
| close() { | |
| clearInterval(this._interval), this.flush() | |
| } | |
| } | |
| SU1.BrowserMetricsAggregator = MU1 | |
| }); | |
| var TU1 = Y((uU1) => { | |
| Object.defineProperty(uU1, "__esModule", { | |
| value: !0 | |
| }); | |
| var yU1 = UA(), | |
| Px2 = LU1(), | |
| PU1 = "MetricsAggregator", | |
| $x2 = () => { | |
| return { | |
| name: PU1, | |
| setupOnce() {}, | |
| setup(I) { | |
| I.metricsAggregator = new Px2.BrowserMetricsAggregator(I) | |
| } | |
| } | |
| }, | |
| $U1 = yU1.defineIntegration($x2), | |
| ux2 = yU1.convertIntegrationFnToClass(PU1, $U1); | |
| uU1.MetricsAggregator = ux2; | |
| uU1.metricsAggregatorIntegration = $U1 | |
| }); | |
| var pU1 = Y((cU1) => { | |
| Object.defineProperty(cU1, "__esModule", { | |
| value: !0 | |
| }); | |
| var OU1 = V0(), | |
| mU1 = F6(), | |
| lU1 = iG(), | |
| mx2 = kI(), | |
| Gm = cv(), | |
| bU1 = TU1(); | |
| function Zm(I, d, G, Z = {}) { | |
| let C = lU1.getClient(), | |
| W = lU1.getCurrentScope(); | |
| if (C) { | |
| if (!C.metricsAggregator) { | |
| mU1.DEBUG_BUILD && OU1.logger.warn("No metrics aggregator enabled. Please add the MetricsAggregator integration to use metrics APIs"); | |
| return | |
| } | |
| let { | |
| unit: w, | |
| tags: B, | |
| timestamp: A | |
| } = Z, { | |
| release: V, | |
| environment: X | |
| } = C.getOptions(), _ = W.getTransaction(), F = {}; | |
| if (V) F.release = V; | |
| if (X) F.environment = X; | |
| if (_) F.transaction = mx2.spanToJSON(_).description || ""; | |
| mU1.DEBUG_BUILD && OU1.logger.log(`Adding value of ${G} to ${I} metric ${d}`), C.metricsAggregator.add(I, d, G, w, { | |
| ...F, | |
| ...B | |
| }, A) | |
| } | |
| } | |
| function hU1(I, d = 1, G) { | |
| Zm(Gm.COUNTER_METRIC_TYPE, I, d, G) | |
| } | |
| function jU1(I, d, G) { | |
| Zm(Gm.DISTRIBUTION_METRIC_TYPE, I, d, G) | |
| } | |
| function kU1(I, d, G) { | |
| Zm(Gm.SET_METRIC_TYPE, I, d, G) | |
| } | |
| function xU1(I, d, G) { | |
| Zm(Gm.GAUGE_METRIC_TYPE, I, d, G) | |
| } | |
| var lx2 = { | |
| increment: hU1, | |
| distribution: jU1, | |
| set: kU1, | |
| gauge: xU1, | |
| MetricsAggregator: bU1.MetricsAggregator, | |
| metricsAggregatorIntegration: bU1.metricsAggregatorIntegration | |
| }; | |
| cU1.distribution = jU1; | |
| cU1.gauge = xU1; | |
| cU1.increment = hU1; | |
| cU1.metrics = lx2; | |
| cU1.set = kU1 | |
| }); | |
| var V4 = Y((n11) => { | |
| Object.defineProperty(n11, "__esModule", { | |
| value: !0 | |
| }); | |
| var iU1 = Q11(), | |
| nU1 = N11(), | |
| cx2 = jO(), | |
| px2 = cO(), | |
| rU1 = uO(), | |
| Cm = DN(), | |
| NF = hO(), | |
| aU1 = HF(), | |
| ix2 = iq1(), | |
| nx2 = z11(), | |
| iv = jv(), | |
| sU1 = f11(), | |
| L9 = iG(), | |
| Vw = ww(), | |
| p11 = VN(), | |
| rx2 = q11(), | |
| i11 = MO(), | |
| oU1 = Pv(), | |
| eU1 = rO(), | |
| tU1 = E11(), | |
| ax2 = QR1(), | |
| Iv1 = UR1(), | |
| sx2 = LR1(), | |
| ox2 = $R1(), | |
| ex2 = TR1(), | |
| tx2 = yO(), | |
| Wm = UA(), | |
| dv1 = EO(), | |
| Ic2 = vO(), | |
| dc2 = S11(), | |
| Gc2 = lR1(), | |
| Zc2 = OO(), | |
| Cc2 = jR1(), | |
| Wc2 = F11(), | |
| wc2 = xR1(), | |
| wm = kI(), | |
| Bc2 = XN(), | |
| Ac2 = iR1(), | |
| Vc2 = AN(), | |
| Gv1 = ZU1(), | |
| Zv1 = VU1(), | |
| Cv1 = k11(), | |
| Wv1 = x11(), | |
| wv1 = c11(), | |
| Xc2 = vU1(), | |
| Yc2 = pU1(), | |
| _c2 = Xc2; | |
| n11.addTracingExtensions = iU1.addTracingExtensions; | |
| n11.startIdleTransaction = iU1.startIdleTransaction; | |
| n11.IdleTransaction = nU1.IdleTransaction; | |
| n11.TRACING_DEFAULTS = nU1.TRACING_DEFAULTS; | |
| n11.Span = cx2.Span; | |
| n11.Transaction = px2.Transaction; | |
| n11.extractTraceparentData = rU1.extractTraceparentData; | |
| n11.getActiveTransaction = rU1.getActiveTransaction; | |
| Object.defineProperty(n11, "SpanStatus", { | |
| enumerable: !0, | |
| get: () => Cm.SpanStatus | |
| }); | |
| n11.getSpanStatusFromHttpCode = Cm.getSpanStatusFromHttpCode; | |
| n11.setHttpStatus = Cm.setHttpStatus; | |
| n11.spanStatusfromHttpCode = Cm.spanStatusfromHttpCode; | |
| n11.continueTrace = NF.continueTrace; | |
| n11.getActiveSpan = NF.getActiveSpan; | |
| n11.startActiveSpan = NF.startActiveSpan; | |
| n11.startInactiveSpan = NF.startInactiveSpan; | |
| n11.startSpan = NF.startSpan; | |
| n11.startSpanManual = NF.startSpanManual; | |
| n11.trace = NF.trace; | |
| n11.getDynamicSamplingContextFromClient = aU1.getDynamicSamplingContextFromClient; | |
| n11.getDynamicSamplingContextFromSpan = aU1.getDynamicSamplingContextFromSpan; | |
| n11.setMeasurement = ix2.setMeasurement; | |
| n11.isValidSampleRate = nx2.isValidSampleRate; | |
| n11.SEMANTIC_ATTRIBUTE_PROFILE_ID = iv.SEMANTIC_ATTRIBUTE_PROFILE_ID; | |
| n11.SEMANTIC_ATTRIBUTE_SENTRY_OP = iv.SEMANTIC_ATTRIBUTE_SENTRY_OP; | |
| n11.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = iv.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN; | |
| n11.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = iv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE; | |
| n11.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = iv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE; | |
| n11.createEventEnvelope = sU1.createEventEnvelope; | |
| n11.createSessionEnvelope = sU1.createSessionEnvelope; | |
| n11.addBreadcrumb = L9.addBreadcrumb; | |
| n11.captureCheckIn = L9.captureCheckIn; | |
| n11.captureEvent = L9.captureEvent; | |
| n11.captureException = L9.captureException; | |
| n11.captureMessage = L9.captureMessage; | |
| n11.captureSession = L9.captureSession; | |
| n11.close = L9.close; | |
| n11.configureScope = L9.configureScope; | |
| n11.endSession = L9.endSession; | |
| n11.flush = L9.flush; | |
| n11.getClient = L9.getClient; | |
| n11.getCurrentScope = L9.getCurrentScope; | |
| n11.isInitialized = L9.isInitialized; | |
| n11.lastEventId = L9.lastEventId; | |
| n11.setContext = L9.setContext; | |
| n11.setExtra = L9.setExtra; | |
| n11.setExtras = L9.setExtras; | |
| n11.setTag = L9.setTag; | |
| n11.setTags = L9.setTags; | |
| n11.setUser = L9.setUser; | |
| n11.startSession = L9.startSession; | |
| n11.startTransaction = L9.startTransaction; | |
| n11.withActiveSpan = L9.withActiveSpan; | |
| n11.withIsolationScope = L9.withIsolationScope; | |
| n11.withMonitor = L9.withMonitor; | |
| n11.withScope = L9.withScope; | |
| n11.Hub = Vw.Hub; | |
| n11.ensureHubOnCarrier = Vw.ensureHubOnCarrier; | |
| n11.getCurrentHub = Vw.getCurrentHub; | |
| n11.getHubFromCarrier = Vw.getHubFromCarrier; | |
| n11.getIsolationScope = Vw.getIsolationScope; | |
| n11.getMainCarrier = Vw.getMainCarrier; | |
| n11.makeMain = Vw.makeMain; | |
| n11.runWithAsyncContext = Vw.runWithAsyncContext; | |
| n11.setAsyncContextStrategy = Vw.setAsyncContextStrategy; | |
| n11.setHubOnCarrier = Vw.setHubOnCarrier; | |
| n11.closeSession = p11.closeSession; | |
| n11.makeSession = p11.makeSession; | |
| n11.updateSession = p11.updateSession; | |
| n11.SessionFlusher = rx2.SessionFlusher; | |
| n11.Scope = i11.Scope; | |
| n11.getGlobalScope = i11.getGlobalScope; | |
| n11.setGlobalScope = i11.setGlobalScope; | |
| n11.addGlobalEventProcessor = oU1.addGlobalEventProcessor; | |
| n11.notifyEventProcessors = oU1.notifyEventProcessors; | |
| n11.getEnvelopeEndpointWithUrlEncodedAuth = eU1.getEnvelopeEndpointWithUrlEncodedAuth; | |
| n11.getReportDialogEndpoint = eU1.getReportDialogEndpoint; | |
| n11.BaseClient = tU1.BaseClient; | |
| n11.addEventProcessor = tU1.addEventProcessor; | |
| n11.ServerRuntimeClient = ax2.ServerRuntimeClient; | |
| n11.initAndBind = Iv1.initAndBind; | |
| n11.setCurrentClient = Iv1.setCurrentClient; | |
| n11.createTransport = sx2.createTransport; | |
| n11.makeOfflineTransport = ox2.makeOfflineTransport; | |
| n11.makeMultiplexedTransport = ex2.makeMultiplexedTransport; | |
| n11.SDK_VERSION = tx2.SDK_VERSION; | |
| n11.addIntegration = Wm.addIntegration; | |
| n11.convertIntegrationFnToClass = Wm.convertIntegrationFnToClass; | |
| n11.defineIntegration = Wm.defineIntegration; | |
| n11.getIntegrationsToSetup = Wm.getIntegrationsToSetup; | |
| n11.applyScopeDataToEvent = dv1.applyScopeDataToEvent; | |
| n11.mergeScopeData = dv1.mergeScopeData; | |
| n11.prepareEvent = Ic2.prepareEvent; | |
| n11.createCheckInEnvelope = dc2.createCheckInEnvelope; | |
| n11.createSpanEnvelope = Gc2.createSpanEnvelope; | |
| n11.hasTracingEnabled = Zc2.hasTracingEnabled; | |
| n11.isSentryRequestUrl = Cc2.isSentryRequestUrl; | |
| n11.handleCallbackErrors = Wc2.handleCallbackErrors; | |
| n11.parameterize = wc2.parameterize; | |
| n11.spanIsSampled = wm.spanIsSampled; | |
| n11.spanToJSON = wm.spanToJSON; | |
| n11.spanToTraceContext = wm.spanToTraceContext; | |
| n11.spanToTraceHeader = wm.spanToTraceHeader; | |
| n11.getRootSpan = Bc2.getRootSpan; | |
| n11.applySdkMetadata = Ac2.applySdkMetadata; | |
| n11.DEFAULT_ENVIRONMENT = Vc2.DEFAULT_ENVIRONMENT; | |
| n11.ModuleMetadata = Gv1.ModuleMetadata; | |
| n11.moduleMetadataIntegration = Gv1.moduleMetadataIntegration; | |
| n11.RequestData = Zv1.RequestData; | |
| n11.requestDataIntegration = Zv1.requestDataIntegration; | |
| n11.InboundFilters = Cv1.InboundFilters; | |
| n11.inboundFiltersIntegration = Cv1.inboundFiltersIntegration; | |
| n11.FunctionToString = Wv1.FunctionToString; | |
| n11.functionToStringIntegration = Wv1.functionToStringIntegration; | |
| n11.LinkedErrors = wv1.LinkedErrors; | |
| n11.linkedErrorsIntegration = wv1.linkedErrorsIntegration; | |
| n11.metrics = Yc2.metrics; | |
| n11.Integrations = _c2 | |
| }); | |
| var pI = Y((Bv1) => { | |
| Object.defineProperty(Bv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var fi2 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; | |
| Bv1.DEBUG_BUILD = fi2 | |
| }); | |
| var iX = Y((Vv1) => { | |
| var { | |
| _optionalChain: Av1 | |
| } = V0(); | |
| Object.defineProperty(Vv1, "__esModule", { | |
| value: !0 | |
| }); | |
| function Ri2(I) { | |
| let d = Av1([I, "call", (Z) => Z(), "access", (Z) => Z.getClient, "call", (Z) => Z(), "optionalAccess", (Z) => Z.getOptions, "call", (Z) => Z()]); | |
| return (Av1([d, "optionalAccess", (Z) => Z.instrumenter]) || "sentry") !== "sentry" | |
| } | |
| Vv1.shouldDisableAutoInstrumentation = Ri2 | |
| }); | |
| var Hv1 = Y((Dv1) => { | |
| var { | |
| _optionalChain: Xw | |
| } = V0(); | |
| Object.defineProperty(Dv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var r11 = V4(), | |
| iI = V0(), | |
| Bm = pI(), | |
| vi2 = iX(); | |
| class Am { | |
| static __initStatic() { | |
| this.id = "Express" | |
| } | |
| constructor(I = {}) { | |
| this.name = Am.id, this._router = I.router || I.app, this._methods = (Array.isArray(I.methods) ? I.methods : []).concat("use") | |
| } | |
| setupOnce(I, d) { | |
| if (!this._router) { | |
| Bm.DEBUG_BUILD && iI.logger.error("ExpressIntegration is missing an Express instance"); | |
| return | |
| } | |
| if (vi2.shouldDisableAutoInstrumentation(d)) { | |
| Bm.DEBUG_BUILD && iI.logger.log("Express Integration is skipped because of instrumenter configuration."); | |
| return | |
| } | |
| Si2(this._router, this._methods), Li2(this._router) | |
| } | |
| } | |
| Am.__initStatic(); | |
| function Xv1(I, d) { | |
| let G = I.length; | |
| switch (G) { | |
| case 2: | |
| return function(Z, C) { | |
| let W = C.__sentry_transaction; | |
| if (W) { | |
| let w = W.startChild({ | |
| description: I.name, | |
| op: `middleware.express.${d}`, | |
| origin: "auto.middleware.express" | |
| }); | |
| C.once("finish", () => { | |
| w.end() | |
| }) | |
| } | |
| return I.call(this, Z, C) | |
| }; | |
| case 3: | |
| return function(Z, C, W) { | |
| let w = C.__sentry_transaction, | |
| B = Xw([w, "optionalAccess", (A) => A.startChild, "call", (A) => A({ | |
| description: I.name, | |
| op: `middleware.express.${d}`, | |
| origin: "auto.middleware.express" | |
| })]); | |
| I.call(this, Z, C, function(...A) { | |
| Xw([B, "optionalAccess", (V) => V.end, "call", (V) => V()]), W.call(this, ...A) | |
| }) | |
| }; | |
| case 4: | |
| return function(Z, C, W, w) { | |
| let B = W.__sentry_transaction, | |
| A = Xw([B, "optionalAccess", (V) => V.startChild, "call", (V) => V({ | |
| description: I.name, | |
| op: `middleware.express.${d}`, | |
| origin: "auto.middleware.express" | |
| })]); | |
| I.call(this, Z, C, W, function(...V) { | |
| Xw([A, "optionalAccess", (X) => X.end, "call", (X) => X()]), w.call(this, ...V) | |
| }) | |
| }; | |
| default: | |
| throw new Error(`Express middleware takes 2-4 arguments. Got: ${G}`) | |
| } | |
| } | |
| function Ei2(I, d) { | |
| return I.map((G) => { | |
| if (typeof G === "function") return Xv1(G, d); | |
| if (Array.isArray(G)) return G.map((Z) => { | |
| if (typeof Z === "function") return Xv1(Z, d); | |
| return Z | |
| }); | |
| return G | |
| }) | |
| } | |
| function Mi2(I, d) { | |
| let G = I[d]; | |
| return I[d] = function(...Z) { | |
| return G.call(this, ...Ei2(Z, d)) | |
| }, I | |
| } | |
| function Si2(I, d = []) { | |
| d.forEach((G) => Mi2(I, G)) | |
| } | |
| function Li2(I) { | |
| let d = "settings" in I; | |
| if (d && I._router === void 0 && I.lazyrouter) I.lazyrouter(); | |
| let G = d ? I._router : I; | |
| if (!G) { | |
| Bm.DEBUG_BUILD && iI.logger.debug("Cannot instrument router for URL Parameterization (did not find a valid router)."), Bm.DEBUG_BUILD && iI.logger.debug("Routing instrumentation is currently only supported in Express 4."); | |
| return | |
| } | |
| let Z = Object.getPrototypeOf(G), | |
| C = Z.process_params; | |
| Z.process_params = function W(w, B, A, V, X) { | |
| if (!A._reconstructedRoute) A._reconstructedRoute = ""; | |
| let { | |
| layerRoutePath: _, | |
| isRegex: F, | |
| isArray: g, | |
| numExtraSegments: J | |
| } = yi2(w); | |
| if (_ || F || g) A._hasParameters = !0; | |
| let K; | |
| if (_) K = _; | |
| else K = _v1(A.originalUrl, A._reconstructedRoute, w.path) || ""; | |
| let Q = K.split("/").filter((P) => P.length > 0 && (F || g || !P.includes("*"))).join("/"); | |
| if (Q && Q.length > 0) A._reconstructedRoute += `/${Q}${F?"/":""}`; | |
| let E = iI.getNumberOfUrlSegments(iI.stripUrlQueryAndFragment(A.originalUrl || "")) + J, | |
| S = iI.getNumberOfUrlSegments(A._reconstructedRoute); | |
| if (E === S) { | |
| if (!A._hasParameters) { | |
| if (A._reconstructedRoute !== A.originalUrl) A._reconstructedRoute = A.originalUrl ? iI.stripUrlQueryAndFragment(A.originalUrl) : A.originalUrl | |
| } | |
| let P = V.__sentry_transaction, | |
| $ = P && r11.spanToJSON(P).data || {}; | |
| if (P && $[r11.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] !== "custom") { | |
| let h = A._reconstructedRoute || "/", | |
| [O, T] = iI.extractPathForTransaction(A, { | |
| path: !0, | |
| method: !0, | |
| customRoute: h | |
| }); | |
| P.updateName(O), P.setAttribute(r11.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, T) | |
| } | |
| } | |
| return C.call(this, w, B, A, V, X) | |
| } | |
| } | |
| var Yv1 = (I, d, G) => { | |
| if (!I || !d || !G || Object.keys(G).length === 0 || !Xw([G, "access", (V) => V[0], "optionalAccess", (V) => V.offset])) return; | |
| let Z = G.sort((V, X) => V.offset - X.offset), | |
| W = new RegExp(d, `${d.flags}d`).exec(I); | |
| if (!W || !W.indices) return; | |
| let [, ...w] = W.indices; | |
| if (w.length !== Z.length) return; | |
| let B = I, | |
| A = 0; | |
| return w.forEach((V, X) => { | |
| if (V) { | |
| let [_, F] = V, g = B.substring(0, _ - A), J = `:${Z[X].name}`, K = B.substring(F - A); | |
| B = g + J + K, A = A + (F - _ - J.length) | |
| } | |
| }), B | |
| }; | |
| function yi2(I) { | |
| let d = Xw([I, "access", (w) => w.route, "optionalAccess", (w) => w.path]), | |
| G = iI.isRegExp(d), | |
| Z = Array.isArray(d); | |
| if (!d) { | |
| let [w] = iI.GLOBAL_OBJ.process.versions.node.split(".").map(Number); | |
| if (w >= 16) d = Yv1(I.path, I.regexp, I.keys) | |
| } | |
| if (!d) return { | |
| isRegex: G, | |
| isArray: Z, | |
| numExtraSegments: 0 | |
| }; | |
| let C = Z ? Math.max(Pi2(d) - iI.getNumberOfUrlSegments(I.path || ""), 0) : 0; | |
| return { | |
| layerRoutePath: $i2(Z, d), | |
| isRegex: G, | |
| isArray: Z, | |
| numExtraSegments: C | |
| } | |
| } | |
| function Pi2(I) { | |
| return I.reduce((d, G) => { | |
| return d + iI.getNumberOfUrlSegments(G.toString()) | |
| }, 0) | |
| } | |
| function $i2(I, d) { | |
| if (I) return d.map((G) => G.toString()).join(","); | |
| return d && d.toString() | |
| } | |
| function _v1(I, d, G) { | |
| let Z = iI.stripUrlQueryAndFragment(I || ""), | |
| C = Xw([Z, "optionalAccess", (A) => A.split, "call", (A) => A("/"), "access", (A) => A.filter, "call", (A) => A((V) => !!V)]), | |
| W = 0, | |
| w = Xw([d, "optionalAccess", (A) => A.split, "call", (A) => A("/"), "access", (A) => A.filter, "call", (A) => A((V) => !!V), "access", (A) => A.length]) || 0; | |
| return Xw([G, "optionalAccess", (A) => A.split, "call", (A) => A("/"), "access", (A) => A.filter, "call", (A) => A((V) => { | |
| if (Xw([C, "optionalAccess", (X) => X[w + W]]) === V) return W += 1, !0; | |
| return !1 | |
| }), "access", (A) => A.join, "call", (A) => A("/")]) | |
| } | |
| Dv1.Express = Am; | |
| Dv1.extractOriginalRoute = Yv1; | |
| Dv1.preventDuplicateSegments = _v1 | |
| }); | |
| var gv1 = Y((Fv1) => { | |
| var { | |
| _optionalChain: zN | |
| } = V0(); | |
| Object.defineProperty(Fv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var QN = V0(), | |
| a11 = pI(), | |
| mi2 = iX(); | |
| class Vm { | |
| static __initStatic() { | |
| this.id = "Postgres" | |
| } | |
| constructor(I = {}) { | |
| this.name = Vm.id, this._usePgNative = !!I.usePgNative, this._module = I.module | |
| } | |
| loadDependency() { | |
| return this._module = this._module || QN.loadModule("pg") | |
| } | |
| setupOnce(I, d) { | |
| if (mi2.shouldDisableAutoInstrumentation(d)) { | |
| a11.DEBUG_BUILD && QN.logger.log("Postgres Integration is skipped because of instrumenter configuration."); | |
| return | |
| } | |
| let G = this.loadDependency(); | |
| if (!G) { | |
| a11.DEBUG_BUILD && QN.logger.error("Postgres Integration was unable to require `pg` package."); | |
| return | |
| } | |
| let Z = this._usePgNative ? zN([G, "access", (C) => C.native, "optionalAccess", (C) => C.Client]) : G.Client; | |
| if (!Z) { | |
| a11.DEBUG_BUILD && QN.logger.error("Postgres Integration was unable to access 'pg-native' bindings."); | |
| return | |
| } | |
| QN.fill(Z.prototype, "query", function(C) { | |
| return function(W, w, B) { | |
| let V = d().getScope().getSpan(), | |
| X = { | |
| "db.system": "postgresql" | |
| }; | |
| try { | |
| if (this.database) X["db.name"] = this.database; | |
| if (this.host) X["server.address"] = this.host; | |
| if (this.port) X["server.port"] = this.port; | |
| if (this.user) X["db.user"] = this.user | |
| } catch (g) {} | |
| let _ = zN([V, "optionalAccess", (g) => g.startChild, "call", (g) => g({ | |
| description: typeof W === "string" ? W : W.text, | |
| op: "db", | |
| origin: "auto.db.postgres", | |
| data: X | |
| })]); | |
| if (typeof B === "function") return C.call(this, W, w, function(g, J) { | |
| zN([_, "optionalAccess", (K) => K.end, "call", (K) => K()]), B(g, J) | |
| }); | |
| if (typeof w === "function") return C.call(this, W, function(g, J) { | |
| zN([_, "optionalAccess", (K) => K.end, "call", (K) => K()]), w(g, J) | |
| }); | |
| let F = typeof w !== "undefined" ? C.call(this, W, w) : C.call(this, W); | |
| if (QN.isThenable(F)) return F.then((g) => { | |
| return zN([_, "optionalAccess", (J) => J.end, "call", (J) => J()]), g | |
| }); | |
| return zN([_, "optionalAccess", (g) => g.end, "call", (g) => g()]), F | |
| } | |
| }) | |
| } | |
| } | |
| Vm.__initStatic(); | |
| Fv1.Postgres = Vm | |
| }); | |
| var Kv1 = Y((Jv1) => { | |
| var { | |
| _optionalChain: bi2 | |
| } = V0(); | |
| Object.defineProperty(Jv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var nv = V0(), | |
| s11 = pI(), | |
| hi2 = iX(); | |
| class Xm { | |
| static __initStatic() { | |
| this.id = "Mysql" | |
| } | |
| constructor() { | |
| this.name = Xm.id | |
| } | |
| loadDependency() { | |
| return this._module = this._module || nv.loadModule("mysql/lib/Connection.js") | |
| } | |
| setupOnce(I, d) { | |
| if (hi2.shouldDisableAutoInstrumentation(d)) { | |
| s11.DEBUG_BUILD && nv.logger.log("Mysql Integration is skipped because of instrumenter configuration."); | |
| return | |
| } | |
| let G = this.loadDependency(); | |
| if (!G) { | |
| s11.DEBUG_BUILD && nv.logger.error("Mysql Integration was unable to require `mysql` package."); | |
| return | |
| } | |
| let Z = void 0; | |
| try { | |
| G.prototype.connect = new Proxy(G.prototype.connect, { | |
| apply(w, B, A) { | |
| if (!Z) Z = B.config; | |
| return w.apply(B, A) | |
| } | |
| }) | |
| } catch (w) { | |
| s11.DEBUG_BUILD && nv.logger.error("Mysql Integration was unable to instrument `mysql` config.") | |
| } | |
| function C() { | |
| if (!Z) return {}; | |
| return { | |
| "server.address": Z.host, | |
| "server.port": Z.port, | |
| "db.user": Z.user | |
| } | |
| } | |
| function W(w) { | |
| if (!w) return; | |
| let B = C(); | |
| Object.keys(B).forEach((A) => { | |
| w.setAttribute(A, B[A]) | |
| }), w.end() | |
| } | |
| nv.fill(G, "createQuery", function(w) { | |
| return function(B, A, V) { | |
| let _ = d().getScope().getSpan(), | |
| F = bi2([_, "optionalAccess", (J) => J.startChild, "call", (J) => J({ | |
| description: typeof B === "string" ? B : B.sql, | |
| op: "db", | |
| origin: "auto.db.mysql", | |
| data: { | |
| "db.system": "mysql" | |
| } | |
| })]); | |
| if (typeof V === "function") return w.call(this, B, A, function(J, K, Q) { | |
| W(F), V(J, K, Q) | |
| }); | |
| if (typeof A === "function") return w.call(this, B, function(J, K, Q) { | |
| W(F), A(J, K, Q) | |
| }); | |
| let g = w.call(this, B, A); | |
| return g.on("end", () => { | |
| W(F) | |
| }), g | |
| } | |
| }) | |
| } | |
| } | |
| Xm.__initStatic(); | |
| Jv1.Mysql = Xm | |
| }); | |
| var Qv1 = Y((zv1) => { | |
| var { | |
| _optionalChain: nX | |
| } = V0(); | |
| Object.defineProperty(zv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var rv = V0(), | |
| Nv1 = pI(), | |
| ki2 = iX(), | |
| xi2 = ["aggregate", "bulkWrite", "countDocuments", "createIndex", "createIndexes", "deleteMany", "deleteOne", "distinct", "drop", "dropIndex", "dropIndexes", "estimatedDocumentCount", "find", "findOne", "findOneAndDelete", "findOneAndReplace", "findOneAndUpdate", "indexes", "indexExists", "indexInformation", "initializeOrderedBulkOp", "insertMany", "insertOne", "isCapped", "mapReduce", "options", "parallelCollectionScan", "rename", "replaceOne", "stats", "updateMany", "updateOne"], | |
| ci2 = { | |
| bulkWrite: ["operations"], | |
| countDocuments: ["query"], | |
| createIndex: ["fieldOrSpec"], | |
| createIndexes: ["indexSpecs"], | |
| deleteMany: ["filter"], | |
| deleteOne: ["filter"], | |
| distinct: ["key", "query"], | |
| dropIndex: ["indexName"], | |
| find: ["query"], | |
| findOne: ["query"], | |
| findOneAndDelete: ["filter"], | |
| findOneAndReplace: ["filter", "replacement"], | |
| findOneAndUpdate: ["filter", "update"], | |
| indexExists: ["indexes"], | |
| insertMany: ["docs"], | |
| insertOne: ["doc"], | |
| mapReduce: ["map", "reduce"], | |
| rename: ["newName"], | |
| replaceOne: ["filter", "doc"], | |
| updateMany: ["filter", "update"], | |
| updateOne: ["filter", "update"] | |
| }; | |
| function pi2(I) { | |
| return I && typeof I === "object" && I.once && typeof I.once === "function" | |
| } | |
| class Ym { | |
| static __initStatic() { | |
| this.id = "Mongo" | |
| } | |
| constructor(I = {}) { | |
| this.name = Ym.id, this._operations = Array.isArray(I.operations) ? I.operations : xi2, this._describeOperations = "describeOperations" in I ? I.describeOperations : !0, this._useMongoose = !!I.useMongoose | |
| } | |
| loadDependency() { | |
| let I = this._useMongoose ? "mongoose" : "mongodb"; | |
| return this._module = this._module || rv.loadModule(I) | |
| } | |
| setupOnce(I, d) { | |
| if (ki2.shouldDisableAutoInstrumentation(d)) { | |
| Nv1.DEBUG_BUILD && rv.logger.log("Mongo Integration is skipped because of instrumenter configuration."); | |
| return | |
| } | |
| let G = this.loadDependency(); | |
| if (!G) { | |
| let Z = this._useMongoose ? "mongoose" : "mongodb"; | |
| Nv1.DEBUG_BUILD && rv.logger.error(`Mongo Integration was unable to require \`${Z}\` package.`); | |
| return | |
| } | |
| this._instrumentOperations(G.Collection, this._operations, d) | |
| } | |
| _instrumentOperations(I, d, G) { | |
| d.forEach((Z) => this._patchOperation(I, Z, G)) | |
| } | |
| _patchOperation(I, d, G) { | |
| if (!(d in I.prototype)) return; | |
| let Z = this._getSpanContextFromOperationArguments.bind(this); | |
| rv.fill(I.prototype, d, function(C) { | |
| return function(...W) { | |
| let w = W[W.length - 1], | |
| B = G(), | |
| A = B.getScope(), | |
| V = B.getClient(), | |
| X = A.getSpan(), | |
| _ = nX([V, "optionalAccess", (g) => g.getOptions, "call", (g) => g(), "access", (g) => g.sendDefaultPii]); | |
| if (typeof w !== "function" || d === "mapReduce" && W.length === 2) { | |
| let g = nX([X, "optionalAccess", (K) => K.startChild, "call", (K) => K(Z(this, d, W, _))]), | |
| J = C.call(this, ...W); | |
| if (rv.isThenable(J)) return J.then((K) => { | |
| return nX([g, "optionalAccess", (Q) => Q.end, "call", (Q) => Q()]), K | |
| }); | |
| else if (pi2(J)) { | |
| let K = J; | |
| try { | |
| K.once("close", () => { | |
| nX([g, "optionalAccess", (Q) => Q.end, "call", (Q) => Q()]) | |
| }) | |
| } catch (Q) { | |
| nX([g, "optionalAccess", (E) => E.end, "call", (E) => E()]) | |
| } | |
| return K | |
| } else return nX([g, "optionalAccess", (K) => K.end, "call", (K) => K()]), J | |
| } | |
| let F = nX([X, "optionalAccess", (g) => g.startChild, "call", (g) => g(Z(this, d, W.slice(0, -1)))]); | |
| return C.call(this, ...W.slice(0, -1), function(g, J) { | |
| nX([F, "optionalAccess", (K) => K.end, "call", (K) => K()]), w(g, J) | |
| }) | |
| } | |
| }) | |
| } | |
| _getSpanContextFromOperationArguments(I, d, G, Z = !1) { | |
| let C = { | |
| "db.system": "mongodb", | |
| "db.name": I.dbName, | |
| "db.operation": d, | |
| "db.mongodb.collection": I.collectionName | |
| }, | |
| W = { | |
| op: "db", | |
| origin: "auto.db.mongo", | |
| description: d, | |
| data: C | |
| }, | |
| w = ci2[d], | |
| B = Array.isArray(this._describeOperations) ? this._describeOperations.includes(d) : this._describeOperations; | |
| if (!w || !B || !Z) return W; | |
| try { | |
| if (d === "mapReduce") { | |
| let [A, V] = G; | |
| C[w[0]] = typeof A === "string" ? A : A.name || "<anonymous>", C[w[1]] = typeof V === "string" ? V : V.name || "<anonymous>" | |
| } else | |
| for (let A = 0; A < w.length; A++) C[`db.mongodb.${w[A]}`] = JSON.stringify(G[A]) | |
| } catch (A) {} | |
| return W | |
| } | |
| } | |
| Ym.__initStatic(); | |
| zv1.Mongo = Ym | |
| }); | |
| var Rv1 = Y((qv1) => { | |
| Object.defineProperty(qv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var o11 = V4(), | |
| fv1 = V0(), | |
| ni2 = pI(), | |
| ri2 = iX(); | |
| function ai2(I) { | |
| return !!I && !!I.$use | |
| } | |
| class _m { | |
| static __initStatic() { | |
| this.id = "Prisma" | |
| } | |
| constructor(I = {}) { | |
| if (this.name = _m.id, ai2(I.client) && !I.client._sentryInstrumented) { | |
| fv1.addNonEnumerableProperty(I.client, "_sentryInstrumented", !0); | |
| let d = {}; | |
| try { | |
| let G = I.client._engineConfig; | |
| if (G) { | |
| let { | |
| activeProvider: Z, | |
| clientVersion: C | |
| } = G; | |
| if (Z) d["db.system"] = Z; | |
| if (C) d["db.prisma.version"] = C | |
| } | |
| } catch (G) {} | |
| I.client.$use((G, Z) => { | |
| if (ri2.shouldDisableAutoInstrumentation(o11.getCurrentHub)) return Z(G); | |
| let { | |
| action: C, | |
| model: W | |
| } = G; | |
| return o11.startSpan({ | |
| name: W ? `${W} ${C}` : C, | |
| onlyIfParent: !0, | |
| op: "db.prisma", | |
| attributes: { | |
| [o11.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.db.prisma" | |
| }, | |
| data: { | |
| ...d, | |
| "db.operation": C | |
| } | |
| }, () => Z(G)) | |
| }) | |
| } else ni2.DEBUG_BUILD && fv1.logger.warn("Unsupported Prisma client provided to PrismaIntegration. Provided client:", I.client) | |
| } | |
| setupOnce() {} | |
| } | |
| _m.__initStatic(); | |
| qv1.Prisma = _m | |
| }); | |
| var Ev1 = Y((vv1) => { | |
| var { | |
| _optionalChain: fN | |
| } = V0(); | |
| Object.defineProperty(vv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var av = V0(), | |
| Uv1 = pI(), | |
| oi2 = iX(); | |
| class Dm { | |
| static __initStatic() { | |
| this.id = "GraphQL" | |
| } | |
| constructor() { | |
| this.name = Dm.id | |
| } | |
| loadDependency() { | |
| return this._module = this._module || av.loadModule("graphql/execution/execute.js") | |
| } | |
| setupOnce(I, d) { | |
| if (oi2.shouldDisableAutoInstrumentation(d)) { | |
| Uv1.DEBUG_BUILD && av.logger.log("GraphQL Integration is skipped because of instrumenter configuration."); | |
| return | |
| } | |
| let G = this.loadDependency(); | |
| if (!G) { | |
| Uv1.DEBUG_BUILD && av.logger.error("GraphQL Integration was unable to require graphql/execution package."); | |
| return | |
| } | |
| av.fill(G, "execute", function(Z) { | |
| return function(...C) { | |
| let W = d().getScope(), | |
| w = W.getSpan(), | |
| B = fN([w, "optionalAccess", (V) => V.startChild, "call", (V) => V({ | |
| description: "execute", | |
| op: "graphql.execute", | |
| origin: "auto.graphql.graphql" | |
| })]); | |
| fN([W, "optionalAccess", (V) => V.setSpan, "call", (V) => V(B)]); | |
| let A = Z.call(this, ...C); | |
| if (av.isThenable(A)) return A.then((V) => { | |
| return fN([B, "optionalAccess", (X) => X.end, "call", (X) => X()]), fN([W, "optionalAccess", (X) => X.setSpan, "call", (X) => X(w)]), V | |
| }); | |
| return fN([B, "optionalAccess", (V) => V.end, "call", (V) => V()]), fN([W, "optionalAccess", (V) => V.setSpan, "call", (V) => V(w)]), A | |
| } | |
| }) | |
| } | |
| } | |
| Dm.__initStatic(); | |
| vv1.GraphQL = Dm | |
| }); | |
| var Lv1 = Y((Sv1) => { | |
| var { | |
| _optionalChain: e11 | |
| } = V0(); | |
| Object.defineProperty(Sv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Q7 = V0(), | |
| Hm = pI(), | |
| ti2 = iX(); | |
| class Fm { | |
| static __initStatic() { | |
| this.id = "Apollo" | |
| } | |
| constructor(I = { | |
| useNestjs: !1 | |
| }) { | |
| this.name = Fm.id, this._useNest = !!I.useNestjs | |
| } | |
| loadDependency() { | |
| if (this._useNest) this._module = this._module || Q7.loadModule("@nestjs/graphql"); | |
| else this._module = this._module || Q7.loadModule("apollo-server-core"); | |
| return this._module | |
| } | |
| setupOnce(I, d) { | |
| if (ti2.shouldDisableAutoInstrumentation(d)) { | |
| Hm.DEBUG_BUILD && Q7.logger.log("Apollo Integration is skipped because of instrumenter configuration."); | |
| return | |
| } | |
| if (this._useNest) { | |
| let G = this.loadDependency(); | |
| if (!G) { | |
| Hm.DEBUG_BUILD && Q7.logger.error("Apollo-NestJS Integration was unable to require @nestjs/graphql package."); | |
| return | |
| } | |
| Q7.fill(G.GraphQLFactory.prototype, "mergeWithSchema", function(Z) { | |
| return function(...C) { | |
| return Q7.fill(this.resolversExplorerService, "explore", function(W) { | |
| return function() { | |
| let w = Q7.arrayify(W.call(this)); | |
| return Mv1(w, d) | |
| } | |
| }), Z.call(this, ...C) | |
| } | |
| }) | |
| } else { | |
| let G = this.loadDependency(); | |
| if (!G) { | |
| Hm.DEBUG_BUILD && Q7.logger.error("Apollo Integration was unable to require apollo-server-core package."); | |
| return | |
| } | |
| Q7.fill(G.ApolloServerBase.prototype, "constructSchema", function(Z) { | |
| return function() { | |
| if (!this.config.resolvers) { | |
| if (Hm.DEBUG_BUILD) { | |
| if (this.config.schema) Q7.logger.warn("Apollo integration is not able to trace `ApolloServer` instances constructed via `schema` property.If you are using NestJS with Apollo, please use `Sentry.Integrations.Apollo({ useNestjs: true })` instead."), Q7.logger.warn(); | |
| else if (this.config.modules) Q7.logger.warn("Apollo integration is not able to trace `ApolloServer` instances constructed via `modules` property."); | |
| Q7.logger.error("Skipping tracing as no resolvers found on the `ApolloServer` instance.") | |
| } | |
| return Z.call(this) | |
| } | |
| let C = Q7.arrayify(this.config.resolvers); | |
| return this.config.resolvers = Mv1(C, d), Z.call(this) | |
| } | |
| }) | |
| } | |
| } | |
| } | |
| Fm.__initStatic(); | |
| function Mv1(I, d) { | |
| return I.map((G) => { | |
| return Object.keys(G).forEach((Z) => { | |
| Object.keys(G[Z]).forEach((C) => { | |
| if (typeof G[Z][C] !== "function") return; | |
| In2(G, Z, C, d) | |
| }) | |
| }), G | |
| }) | |
| } | |
| function In2(I, d, G, Z) { | |
| Q7.fill(I[d], G, function(C) { | |
| return function(...W) { | |
| let B = Z().getScope().getSpan(), | |
| A = e11([B, "optionalAccess", (X) => X.startChild, "call", (X) => X({ | |
| description: `${d}.${G}`, | |
| op: "graphql.resolve", | |
| origin: "auto.graphql.apollo" | |
| })]), | |
| V = C.call(this, ...W); | |
| if (Q7.isThenable(V)) return V.then((X) => { | |
| return e11([A, "optionalAccess", (_) => _.end, "call", (_) => _()]), X | |
| }); | |
| return e11([A, "optionalAccess", (X) => X.end, "call", (X) => X()]), V | |
| } | |
| }) | |
| } | |
| Sv1.Apollo = Fm | |
| }); | |
| var Pv1 = Y((yv1, rX) => { | |
| Object.defineProperty(yv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var zF = V0(), | |
| Gn2 = [() => { | |
| return new(zF.dynamicRequire(rX, "./apollo")).Apollo | |
| }, () => { | |
| return new(zF.dynamicRequire(rX, "./apollo")).Apollo({ | |
| useNestjs: !0 | |
| }) | |
| }, () => { | |
| return new(zF.dynamicRequire(rX, "./graphql")).GraphQL | |
| }, () => { | |
| return new(zF.dynamicRequire(rX, "./mongo")).Mongo | |
| }, () => { | |
| return new(zF.dynamicRequire(rX, "./mongo")).Mongo({ | |
| mongoose: !0 | |
| }) | |
| }, () => { | |
| return new(zF.dynamicRequire(rX, "./mysql")).Mysql | |
| }, () => { | |
| return new(zF.dynamicRequire(rX, "./postgres")).Postgres | |
| }]; | |
| yv1.lazyLoadedNodePerformanceMonitoringIntegrations = Gn2 | |
| }); | |
| var kd = Y(($v1) => { | |
| Object.defineProperty($v1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Cn2 = V0(), | |
| Wn2 = Cn2.GLOBAL_OBJ; | |
| $v1.WINDOW = Wn2 | |
| }); | |
| var I01 = Y((mv1) => { | |
| Object.defineProperty(mv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var uv1 = V4(), | |
| Tv1 = V0(), | |
| Ov1 = pI(), | |
| t11 = kd(); | |
| function Bn2() { | |
| if (t11.WINDOW.document) t11.WINDOW.document.addEventListener("visibilitychange", () => { | |
| let I = uv1.getActiveTransaction(); | |
| if (t11.WINDOW.document.hidden && I) { | |
| let { | |
| op: G, | |
| status: Z | |
| } = uv1.spanToJSON(I); | |
| if (Ov1.DEBUG_BUILD && Tv1.logger.log(`[Tracing] Transaction: cancelled -> since tab moved to the background, op: ${G}`), !Z) I.setStatus("cancelled"); | |
| I.setTag("visibilitychange", "document.hidden"), I.end() | |
| } | |
| }); | |
| else Ov1.DEBUG_BUILD && Tv1.logger.warn("[Tracing] Could not set up background tab detection due to lack of global document") | |
| } | |
| mv1.registerBackgroundTabDetection = Bn2 | |
| }); | |
| var qN = Y((lv1) => { | |
| Object.defineProperty(lv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Vn2 = (I, d, G) => { | |
| let Z, C; | |
| return (W) => { | |
| if (d.value >= 0) { | |
| if (W || G) { | |
| if (C = d.value - (Z || 0), C || Z === void 0) Z = d.value, d.delta = C, I(d) | |
| } | |
| } | |
| } | |
| }; | |
| lv1.bindReporter = Vn2 | |
| }); | |
| var hv1 = Y((bv1) => { | |
| Object.defineProperty(bv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Yn2 = () => { | |
| return `v3-${Date.now()}-${Math.floor(Math.random()*8999999999999)+1000000000000}` | |
| }; | |
| bv1.generateUniqueID = Yn2 | |
| }); | |
| var ov = Y((jv1) => { | |
| Object.defineProperty(jv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var sv = kd(), | |
| Dn2 = () => { | |
| let I = sv.WINDOW.performance.timing, | |
| d = sv.WINDOW.performance.navigation.type, | |
| G = { | |
| entryType: "navigation", | |
| startTime: 0, | |
| type: d == 2 ? "back_forward" : d === 1 ? "reload" : "navigate" | |
| }; | |
| for (let Z in I) | |
| if (Z !== "navigationStart" && Z !== "toJSON") G[Z] = Math.max(I[Z] - I.navigationStart, 0); | |
| return G | |
| }, | |
| Hn2 = () => { | |
| if (sv.WINDOW.__WEB_VITALS_POLYFILL__) return sv.WINDOW.performance && (performance.getEntriesByType && performance.getEntriesByType("navigation")[0] || Dn2()); | |
| else return sv.WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType("navigation")[0] | |
| }; | |
| jv1.getNavigationEntry = Hn2 | |
| }); | |
| var gm = Y((kv1) => { | |
| Object.defineProperty(kv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var gn2 = ov(), | |
| Jn2 = () => { | |
| let I = gn2.getNavigationEntry(); | |
| return I && I.activationStart || 0 | |
| }; | |
| kv1.getActivationStart = Jn2 | |
| }); | |
| var RN = Y((cv1) => { | |
| Object.defineProperty(cv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var xv1 = kd(), | |
| Nn2 = hv1(), | |
| zn2 = gm(), | |
| Qn2 = ov(), | |
| fn2 = (I, d) => { | |
| let G = Qn2.getNavigationEntry(), | |
| Z = "navigate"; | |
| if (G) | |
| if (xv1.WINDOW.document && xv1.WINDOW.document.prerendering || zn2.getActivationStart() > 0) Z = "prerender"; | |
| else Z = G.type.replace(/_/g, "-"); | |
| return { | |
| name: I, | |
| value: typeof d === "undefined" ? -1 : d, | |
| rating: "good", | |
| delta: 0, | |
| entries: [], | |
| id: Nn2.generateUniqueID(), | |
| navigationType: Z | |
| } | |
| }; | |
| cv1.initMetric = fn2 | |
| }); | |
| var QF = Y((pv1) => { | |
| Object.defineProperty(pv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Rn2 = (I, d, G) => { | |
| try { | |
| if (PerformanceObserver.supportedEntryTypes.includes(I)) { | |
| let Z = new PerformanceObserver((C) => { | |
| d(C.getEntries()) | |
| }); | |
| return Z.observe(Object.assign({ | |
| type: I, | |
| buffered: !0 | |
| }, G || {})), Z | |
| } | |
| } catch (Z) {} | |
| return | |
| }; | |
| pv1.observe = Rn2 | |
| }); | |
| var UN = Y((nv1) => { | |
| Object.defineProperty(nv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var iv1 = kd(), | |
| vn2 = (I, d) => { | |
| let G = (Z) => { | |
| if (Z.type === "pagehide" || iv1.WINDOW.document.visibilityState === "hidden") { | |
| if (I(Z), d) removeEventListener("visibilitychange", G, !0), removeEventListener("pagehide", G, !0) | |
| } | |
| }; | |
| if (iv1.WINDOW.document) addEventListener("visibilitychange", G, !0), addEventListener("pagehide", G, !0) | |
| }; | |
| nv1.onHidden = vn2 | |
| }); | |
| var av1 = Y((rv1) => { | |
| Object.defineProperty(rv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Mn2 = qN(), | |
| Sn2 = RN(), | |
| Ln2 = QF(), | |
| yn2 = UN(), | |
| Pn2 = (I, d = {}) => { | |
| let G = Sn2.initMetric("CLS", 0), | |
| Z, C = 0, | |
| W = [], | |
| w = (A) => { | |
| A.forEach((V) => { | |
| if (!V.hadRecentInput) { | |
| let X = W[0], | |
| _ = W[W.length - 1]; | |
| if (C && W.length !== 0 && V.startTime - _.startTime < 1000 && V.startTime - X.startTime < 5000) C += V.value, W.push(V); | |
| else C = V.value, W = [V]; | |
| if (C > G.value) { | |
| if (G.value = C, G.entries = W, Z) Z() | |
| } | |
| } | |
| }) | |
| }, | |
| B = Ln2.observe("layout-shift", w); | |
| if (B) { | |
| Z = Mn2.bindReporter(I, G, d.reportAllChanges); | |
| let A = () => { | |
| w(B.takeRecords()), Z(!0) | |
| }; | |
| return yn2.onHidden(A), A | |
| } | |
| return | |
| }; | |
| rv1.onCLS = Pn2 | |
| }); | |
| var Nm = Y((sv1) => { | |
| Object.defineProperty(sv1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Jm = kd(), | |
| un2 = UN(), | |
| Km = -1, | |
| Tn2 = () => { | |
| if (Jm.WINDOW.document && Jm.WINDOW.document.visibilityState) Km = Jm.WINDOW.document.visibilityState === "hidden" && !Jm.WINDOW.document.prerendering ? 0 : 1 / 0 | |
| }, | |
| On2 = () => { | |
| un2.onHidden(({ | |
| timeStamp: I | |
| }) => { | |
| Km = I | |
| }, !0) | |
| }, | |
| mn2 = () => { | |
| if (Km < 0) Tn2(), On2(); | |
| return { | |
| get firstHiddenTime() { | |
| return Km | |
| } | |
| } | |
| }; | |
| sv1.getVisibilityWatcher = mn2 | |
| }); | |
| var ev1 = Y((ov1) => { | |
| Object.defineProperty(ov1, "__esModule", { | |
| value: !0 | |
| }); | |
| var bn2 = qN(), | |
| hn2 = Nm(), | |
| jn2 = RN(), | |
| kn2 = QF(), | |
| xn2 = UN(), | |
| cn2 = (I) => { | |
| let d = hn2.getVisibilityWatcher(), | |
| G = jn2.initMetric("FID"), | |
| Z, C = (B) => { | |
| if (B.startTime < d.firstHiddenTime) G.value = B.processingStart - B.startTime, G.entries.push(B), Z(!0) | |
| }, | |
| W = (B) => { | |
| B.forEach(C) | |
| }, | |
| w = kn2.observe("first-input", W); | |
| if (Z = bn2.bindReporter(I, G), w) xn2.onHidden(() => { | |
| W(w.takeRecords()), w.disconnect() | |
| }, !0) | |
| }; | |
| ov1.onFID = cn2 | |
| }); | |
| var dE1 = Y((IE1) => { | |
| Object.defineProperty(IE1, "__esModule", { | |
| value: !0 | |
| }); | |
| var in2 = QF(), | |
| tv1 = 0, | |
| d01 = 1 / 0, | |
| zm = 0, | |
| nn2 = (I) => { | |
| I.forEach((d) => { | |
| if (d.interactionId) d01 = Math.min(d01, d.interactionId), zm = Math.max(zm, d.interactionId), tv1 = zm ? (zm - d01) / 7 + 1 : 0 | |
| }) | |
| }, | |
| G01, rn2 = () => { | |
| return G01 ? tv1 : performance.interactionCount || 0 | |
| }, | |
| an2 = () => { | |
| if ("interactionCount" in performance || G01) return; | |
| G01 = in2.observe("event", nn2, { | |
| type: "event", | |
| buffered: !0, | |
| durationThreshold: 0 | |
| }) | |
| }; | |
| IE1.getInteractionCount = rn2; | |
| IE1.initInteractionCountPolyfill = an2 | |
| }); | |
| var BE1 = Y((wE1) => { | |
| Object.defineProperty(wE1, "__esModule", { | |
| value: !0 | |
| }); | |
| var en2 = qN(), | |
| tn2 = RN(), | |
| Ir2 = QF(), | |
| dr2 = UN(), | |
| CE1 = dE1(), | |
| WE1 = () => { | |
| return CE1.getInteractionCount() | |
| }, | |
| GE1 = 10, | |
| EA = [], | |
| Z01 = {}, | |
| ZE1 = (I) => { | |
| let d = EA[EA.length - 1], | |
| G = Z01[I.interactionId]; | |
| if (G || EA.length < GE1 || I.duration > d.latency) { | |
| if (G) G.entries.push(I), G.latency = Math.max(G.latency, I.duration); | |
| else { | |
| let Z = { | |
| id: I.interactionId, | |
| latency: I.duration, | |
| entries: [I] | |
| }; | |
| Z01[Z.id] = Z, EA.push(Z) | |
| } | |
| EA.sort((Z, C) => C.latency - Z.latency), EA.splice(GE1).forEach((Z) => { | |
| delete Z01[Z.id] | |
| }) | |
| } | |
| }, | |
| Gr2 = () => { | |
| let I = Math.min(EA.length - 1, Math.floor(WE1() / 50)); | |
| return EA[I] | |
| }, | |
| Zr2 = (I, d) => { | |
| d = d || {}, CE1.initInteractionCountPolyfill(); | |
| let G = tn2.initMetric("INP"), | |
| Z, C = (w) => { | |
| w.forEach((A) => { | |
| if (A.interactionId) ZE1(A); | |
| if (A.entryType === "first-input") { | |
| if (!EA.some((X) => { | |
| return X.entries.some((_) => { | |
| return A.duration === _.duration && A.startTime === _.startTime | |
| }) | |
| })) ZE1(A) | |
| } | |
| }); | |
| let B = Gr2(); | |
| if (B && B.latency !== G.value) G.value = B.latency, G.entries = B.entries, Z() | |
| }, | |
| W = Ir2.observe("event", C, { | |
| durationThreshold: d.durationThreshold || 40 | |
| }); | |
| if (Z = en2.bindReporter(I, G, d.reportAllChanges), W) W.observe({ | |
| type: "first-input", | |
| buffered: !0 | |
| }), dr2.onHidden(() => { | |
| if (C(W.takeRecords()), G.value < 0 && WE1() > 0) G.value = 0, G.entries = []; | |
| Z(!0) | |
| }) | |
| }; | |
| wE1.onINP = Zr2 | |
| }); | |
| var XE1 = Y((VE1) => { | |
| Object.defineProperty(VE1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Wr2 = kd(), | |
| wr2 = qN(), | |
| Br2 = gm(), | |
| Ar2 = Nm(), | |
| Vr2 = RN(), | |
| Xr2 = QF(), | |
| Yr2 = UN(), | |
| AE1 = {}, | |
| _r2 = (I) => { | |
| let d = Ar2.getVisibilityWatcher(), | |
| G = Vr2.initMetric("LCP"), | |
| Z, C = (w) => { | |
| let B = w[w.length - 1]; | |
| if (B) { | |
| let A = Math.max(B.startTime - Br2.getActivationStart(), 0); | |
| if (A < d.firstHiddenTime) G.value = A, G.entries = [B], Z() | |
| } | |
| }, | |
| W = Xr2.observe("largest-contentful-paint", C); | |
| if (W) { | |
| Z = wr2.bindReporter(I, G); | |
| let w = () => { | |
| if (!AE1[G.id]) C(W.takeRecords()), W.disconnect(), AE1[G.id] = !0, Z(!0) | |
| }; | |
| return ["keydown", "click"].forEach((B) => { | |
| if (Wr2.WINDOW.document) addEventListener(B, w, { | |
| once: !0, | |
| capture: !0 | |
| }) | |
| }), Yr2.onHidden(w, !0), w | |
| } | |
| return | |
| }; | |
| VE1.onLCP = _r2 | |
| }); | |
| var _E1 = Y((YE1) => { | |
| Object.defineProperty(YE1, "__esModule", { | |
| value: !0 | |
| }); | |
| var C01 = kd(), | |
| Hr2 = qN(), | |
| Fr2 = gm(), | |
| gr2 = ov(), | |
| Jr2 = RN(), | |
| W01 = (I) => { | |
| if (!C01.WINDOW.document) return; | |
| if (C01.WINDOW.document.prerendering) addEventListener("prerenderingchange", () => W01(I), !0); | |
| else if (C01.WINDOW.document.readyState !== "complete") addEventListener("load", () => W01(I), !0); | |
| else setTimeout(I, 0) | |
| }, | |
| Kr2 = (I, d) => { | |
| d = d || {}; | |
| let G = Jr2.initMetric("TTFB"), | |
| Z = Hr2.bindReporter(I, G, d.reportAllChanges); | |
| W01(() => { | |
| let C = gr2.getNavigationEntry(); | |
| if (C) { | |
| if (G.value = Math.max(C.responseStart - Fr2.getActivationStart(), 0), G.value < 0 || G.value > performance.now()) return; | |
| G.entries = [C], Z(!0) | |
| } | |
| }) | |
| }; | |
| YE1.onTTFB = Kr2 | |
| }); | |
| var EN = Y((QE1) => { | |
| Object.defineProperty(QE1, "__esModule", { | |
| value: !0 | |
| }); | |
| var DE1 = V0(), | |
| zr2 = pI(), | |
| Qr2 = av1(), | |
| fr2 = ev1(), | |
| qr2 = BE1(), | |
| Rr2 = XE1(), | |
| Ur2 = QF(), | |
| vr2 = _E1(), | |
| ev = {}, | |
| Qm = {}, | |
| HE1, FE1, gE1, JE1, KE1; | |
| function Er2(I, d = !1) { | |
| return tv("cls", I, $r2, HE1, d) | |
| } | |
| function Mr2(I, d = !1) { | |
| return tv("lcp", I, Tr2, gE1, d) | |
| } | |
| function Sr2(I) { | |
| return tv("ttfb", I, Or2, JE1) | |
| } | |
| function Lr2(I) { | |
| return tv("fid", I, ur2, FE1) | |
| } | |
| function yr2(I) { | |
| return tv("inp", I, mr2, KE1) | |
| } | |
| function Pr2(I, d) { | |
| if (NE1(I, d), !Qm[I]) lr2(I), Qm[I] = !0; | |
| return zE1(I, d) | |
| } | |
| function vN(I, d) { | |
| let G = ev[I]; | |
| if (!G || !G.length) return; | |
| for (let Z of G) try { | |
| Z(d) | |
| } catch (C) { | |
| zr2.DEBUG_BUILD && DE1.logger.error(`Error while triggering instrumentation handler. | |
| Type: ${I} | |
| Name: ${DE1.getFunctionName(Z)} | |
| Error:`, C) | |
| } | |
| } | |
| function $r2() { | |
| return Qr2.onCLS((I) => { | |
| vN("cls", { | |
| metric: I | |
| }), HE1 = I | |
| }, { | |
| reportAllChanges: !0 | |
| }) | |
| } | |
| function ur2() { | |
| return fr2.onFID((I) => { | |
| vN("fid", { | |
| metric: I | |
| }), FE1 = I | |
| }) | |
| } | |
| function Tr2() { | |
| return Rr2.onLCP((I) => { | |
| vN("lcp", { | |
| metric: I | |
| }), gE1 = I | |
| }) | |
| } | |
| function Or2() { | |
| return vr2.onTTFB((I) => { | |
| vN("ttfb", { | |
| metric: I | |
| }), JE1 = I | |
| }) | |
| } | |
| function mr2() { | |
| return qr2.onINP((I) => { | |
| vN("inp", { | |
| metric: I | |
| }), KE1 = I | |
| }) | |
| } | |
| function tv(I, d, G, Z, C = !1) { | |
| NE1(I, d); | |
| let W; | |
| if (!Qm[I]) W = G(), Qm[I] = !0; | |
| if (Z) d({ | |
| metric: Z | |
| }); | |
| return zE1(I, d, C ? W : void 0) | |
| } | |
| function lr2(I) { | |
| let d = {}; | |
| if (I === "event") d.durationThreshold = 0; | |
| Ur2.observe(I, (G) => { | |
| vN(I, { | |
| entries: G | |
| }) | |
| }, d) | |
| } | |
| function NE1(I, d) { | |
| ev[I] = ev[I] || [], ev[I].push(d) | |
| } | |
| function zE1(I, d, G) { | |
| return () => { | |
| if (G) G(); | |
| let Z = ev[I]; | |
| if (!Z) return; | |
| let C = Z.indexOf(d); | |
| if (C !== -1) Z.splice(C, 1) | |
| } | |
| } | |
| QE1.addClsInstrumentationHandler = Er2; | |
| QE1.addFidInstrumentationHandler = Lr2; | |
| QE1.addInpInstrumentationHandler = yr2; | |
| QE1.addLcpInstrumentationHandler = Mr2; | |
| QE1.addPerformanceInstrumentationHandler = Pr2; | |
| QE1.addTtfbInstrumentationHandler = Sr2 | |
| }); | |
| var qE1 = Y((fE1) => { | |
| Object.defineProperty(fE1, "__esModule", { | |
| value: !0 | |
| }); | |
| function pr2(I) { | |
| return typeof I === "number" && isFinite(I) | |
| } | |
| function ir2(I, { | |
| startTimestamp: d, | |
| ...G | |
| }) { | |
| if (d && I.startTimestamp > d) I.startTimestamp = d; | |
| return I.startChild({ | |
| startTimestamp: d, | |
| ...G | |
| }) | |
| } | |
| fE1._startChild = ir2; | |
| fE1.isMeasurementValue = pr2 | |
| }); | |
| var A01 = Y((ME1) => { | |
| Object.defineProperty(ME1, "__esModule", { | |
| value: !0 | |
| }); | |
| var MA = V4(), | |
| N9 = V0(), | |
| xd = pI(), | |
| fF = EN(), | |
| SA = kd(), | |
| ar2 = Nm(), | |
| LA = qE1(), | |
| sr2 = ov(), | |
| or2 = 2147483647; | |
| function x6(I) { | |
| return I / 1000 | |
| } | |
| function B01() { | |
| return SA.WINDOW && SA.WINDOW.addEventListener && SA.WINDOW.performance | |
| } | |
| var RE1 = 0, | |
| T3 = {}, | |
| Yw, IE; | |
| function er2() { | |
| let I = B01(); | |
| if (I && N9.browserPerformanceTimeOrigin) { | |
| if (I.mark) SA.WINDOW.performance.mark("sentry-tracing-init"); | |
| let d = Ca2(), | |
| G = Ga2(), | |
| Z = Za2(), | |
| C = Wa2(); | |
| return () => { | |
| d(), G(), Z(), C() | |
| } | |
| } | |
| return () => { | |
| return | |
| } | |
| } | |
| function tr2() { | |
| fF.addPerformanceInstrumentationHandler("longtask", ({ | |
| entries: I | |
| }) => { | |
| for (let d of I) { | |
| let G = MA.getActiveTransaction(); | |
| if (!G) return; | |
| let Z = x6(N9.browserPerformanceTimeOrigin + d.startTime), | |
| C = x6(d.duration); | |
| G.startChild({ | |
| description: "Main UI thread blocked", | |
| op: "ui.long-task", | |
| origin: "auto.ui.browser.metrics", | |
| startTimestamp: Z, | |
| endTimestamp: Z + C | |
| }) | |
| } | |
| }) | |
| } | |
| function Ia2() { | |
| fF.addPerformanceInstrumentationHandler("event", ({ | |
| entries: I | |
| }) => { | |
| for (let d of I) { | |
| let G = MA.getActiveTransaction(); | |
| if (!G) return; | |
| if (d.name === "click") { | |
| let Z = x6(N9.browserPerformanceTimeOrigin + d.startTime), | |
| C = x6(d.duration), | |
| W = { | |
| description: N9.htmlTreeAsString(d.target), | |
| op: `ui.interaction.${d.name}`, | |
| origin: "auto.ui.browser.metrics", | |
| startTimestamp: Z, | |
| endTimestamp: Z + C | |
| }, | |
| w = N9.getComponentName(d.target); | |
| if (w) W.attributes = { | |
| "ui.component_name": w | |
| }; | |
| G.startChild(W) | |
| } | |
| } | |
| }) | |
| } | |
| function da2(I, d) { | |
| if (B01() && N9.browserPerformanceTimeOrigin) { | |
| let Z = wa2(I, d); | |
| return () => { | |
| Z() | |
| } | |
| } | |
| return () => { | |
| return | |
| } | |
| } | |
| function Ga2() { | |
| return fF.addClsInstrumentationHandler(({ | |
| metric: I | |
| }) => { | |
| let d = I.entries[I.entries.length - 1]; | |
| if (!d) return; | |
| xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding CLS"), T3.cls = { | |
| value: I.value, | |
| unit: "" | |
| }, IE = d | |
| }, !0) | |
| } | |
| function Za2() { | |
| return fF.addLcpInstrumentationHandler(({ | |
| metric: I | |
| }) => { | |
| let d = I.entries[I.entries.length - 1]; | |
| if (!d) return; | |
| xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding LCP"), T3.lcp = { | |
| value: I.value, | |
| unit: "millisecond" | |
| }, Yw = d | |
| }, !0) | |
| } | |
| function Ca2() { | |
| return fF.addFidInstrumentationHandler(({ | |
| metric: I | |
| }) => { | |
| let d = I.entries[I.entries.length - 1]; | |
| if (!d) return; | |
| let G = x6(N9.browserPerformanceTimeOrigin), | |
| Z = x6(d.startTime); | |
| xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding FID"), T3.fid = { | |
| value: I.value, | |
| unit: "millisecond" | |
| }, T3["mark.fid"] = { | |
| value: G + Z, | |
| unit: "second" | |
| } | |
| }) | |
| } | |
| function Wa2() { | |
| return fF.addTtfbInstrumentationHandler(({ | |
| metric: I | |
| }) => { | |
| if (!I.entries[I.entries.length - 1]) return; | |
| xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding TTFB"), T3.ttfb = { | |
| value: I.value, | |
| unit: "millisecond" | |
| } | |
| }) | |
| } | |
| var UE1 = { | |
| click: "click", | |
| pointerdown: "click", | |
| pointerup: "click", | |
| mousedown: "click", | |
| mouseup: "click", | |
| touchstart: "click", | |
| touchend: "click", | |
| mouseover: "hover", | |
| mouseout: "hover", | |
| mouseenter: "hover", | |
| mouseleave: "hover", | |
| pointerover: "hover", | |
| pointerout: "hover", | |
| pointerenter: "hover", | |
| pointerleave: "hover", | |
| dragstart: "drag", | |
| dragend: "drag", | |
| drag: "drag", | |
| dragenter: "drag", | |
| dragleave: "drag", | |
| dragover: "drag", | |
| drop: "drag", | |
| keydown: "press", | |
| keyup: "press", | |
| keypress: "press", | |
| input: "press" | |
| }; | |
| function wa2(I, d) { | |
| return fF.addInpInstrumentationHandler(({ | |
| metric: G | |
| }) => { | |
| if (G.value === void 0) return; | |
| let Z = G.entries.find((P) => P.duration === G.value && UE1[P.name] !== void 0), | |
| C = MA.getClient(); | |
| if (!Z || !C) return; | |
| let W = UE1[Z.name], | |
| w = C.getOptions(), | |
| B = x6(N9.browserPerformanceTimeOrigin + Z.startTime), | |
| A = x6(G.value), | |
| V = Z.interactionId !== void 0 ? I[Z.interactionId] : void 0; | |
| if (V === void 0) return; | |
| let { | |
| routeName: X, | |
| parentContext: _, | |
| activeTransaction: F, | |
| user: g, | |
| replayId: J | |
| } = V, K = g !== void 0 ? g.email || g.id || g.ip_address : void 0, Q = F !== void 0 ? F.getProfileId() : void 0, E = new MA.Span({ | |
| startTimestamp: B, | |
| endTimestamp: B + A, | |
| op: `ui.interaction.${W}`, | |
| name: N9.htmlTreeAsString(Z.target), | |
| attributes: { | |
| release: w.release, | |
| environment: w.environment, | |
| transaction: X, | |
| ...K !== void 0 && K !== "" ? { | |
| user: K | |
| } : {}, | |
| ...Q !== void 0 ? { | |
| profile_id: Q | |
| } : {}, | |
| ...J !== void 0 ? { | |
| replay_id: J | |
| } : {} | |
| }, | |
| exclusiveTime: G.value, | |
| measurements: { | |
| inp: { | |
| value: G.value, | |
| unit: "millisecond" | |
| } | |
| } | |
| }), S = Da2(_, w, d); | |
| if (!S) return; | |
| if (Math.random() < S) { | |
| let P = E ? MA.createSpanEnvelope([E], C.getDsn()) : void 0, | |
| $ = C && C.getTransport(); | |
| if ($ && P) $.send(P).then(null, (h) => { | |
| xd.DEBUG_BUILD && N9.logger.error("Error while sending interaction:", h) | |
| }); | |
| return | |
| } | |
| }) | |
| } | |
| function Ba2(I) { | |
| let d = B01(); | |
| if (!d || !SA.WINDOW.performance.getEntries || !N9.browserPerformanceTimeOrigin) return; | |
| xd.DEBUG_BUILD && N9.logger.log("[Tracing] Adding & adjusting spans using Performance API"); | |
| let G = x6(N9.browserPerformanceTimeOrigin), | |
| Z = d.getEntries(), | |
| { | |
| op: C, | |
| start_timestamp: W | |
| } = MA.spanToJSON(I); | |
| if (Z.slice(RE1).forEach((w) => { | |
| let B = x6(w.startTime), | |
| A = x6(w.duration); | |
| if (I.op === "navigation" && W && G + B < W) return; | |
| switch (w.entryType) { | |
| case "navigation": { | |
| Aa2(I, w, G); | |
| break | |
| } | |
| case "mark": | |
| case "paint": | |
| case "measure": { | |
| vE1(I, w, B, A, G); | |
| let V = ar2.getVisibilityWatcher(), | |
| X = w.startTime < V.firstHiddenTime; | |
| if (w.name === "first-paint" && X) xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding FP"), T3.fp = { | |
| value: w.startTime, | |
| unit: "millisecond" | |
| }; | |
| if (w.name === "first-contentful-paint" && X) xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding FCP"), T3.fcp = { | |
| value: w.startTime, | |
| unit: "millisecond" | |
| }; | |
| break | |
| } | |
| case "resource": { | |
| EE1(I, w, w.name, B, A, G); | |
| break | |
| } | |
| } | |
| }), RE1 = Math.max(Z.length - 1, 0), Xa2(I), C === "pageload") { | |
| _a2(T3), ["fcp", "fp", "lcp"].forEach((B) => { | |
| if (!T3[B] || !W || G >= W) return; | |
| let A = T3[B].value, | |
| V = G + x6(A), | |
| X = Math.abs((V - W) * 1000), | |
| _ = X - A; | |
| xd.DEBUG_BUILD && N9.logger.log(`[Measurements] Normalized ${B} from ${A} to ${X} (${_})`), T3[B].value = X | |
| }); | |
| let w = T3["mark.fid"]; | |
| if (w && T3.fid) LA._startChild(I, { | |
| description: "first input delay", | |
| endTimestamp: w.value + x6(T3.fid.value), | |
| op: "ui.action", | |
| origin: "auto.ui.browser.metrics", | |
| startTimestamp: w.value | |
| }), delete T3["mark.fid"]; | |
| if (!("fcp" in T3)) delete T3.cls; | |
| Object.keys(T3).forEach((B) => { | |
| MA.setMeasurement(B, T3[B].value, T3[B].unit) | |
| }), Ya2(I) | |
| } | |
| Yw = void 0, IE = void 0, T3 = {} | |
| } | |
| function vE1(I, d, G, Z, C) { | |
| let W = C + G, | |
| w = W + Z; | |
| return LA._startChild(I, { | |
| description: d.name, | |
| endTimestamp: w, | |
| op: d.entryType, | |
| origin: "auto.resource.browser.metrics", | |
| startTimestamp: W | |
| }), W | |
| } | |
| function Aa2(I, d, G) { | |
| ["unloadEvent", "redirect", "domContentLoadedEvent", "loadEvent", "connect"].forEach((Z) => { | |
| fm(I, d, Z, G) | |
| }), fm(I, d, "secureConnection", G, "TLS/SSL", "connectEnd"), fm(I, d, "fetch", G, "cache", "domainLookupStart"), fm(I, d, "domainLookup", G, "DNS"), Va2(I, d, G) | |
| } | |
| function fm(I, d, G, Z, C, W) { | |
| let w = W ? d[W] : d[`${G}End`], | |
| B = d[`${G}Start`]; | |
| if (!B || !w) return; | |
| LA._startChild(I, { | |
| op: "browser", | |
| origin: "auto.browser.browser.metrics", | |
| description: C || G, | |
| startTimestamp: Z + x6(B), | |
| endTimestamp: Z + x6(w) | |
| }) | |
| } | |
| function Va2(I, d, G) { | |
| if (d.responseEnd) LA._startChild(I, { | |
| op: "browser", | |
| origin: "auto.browser.browser.metrics", | |
| description: "request", | |
| startTimestamp: G + x6(d.requestStart), | |
| endTimestamp: G + x6(d.responseEnd) | |
| }), LA._startChild(I, { | |
| op: "browser", | |
| origin: "auto.browser.browser.metrics", | |
| description: "response", | |
| startTimestamp: G + x6(d.responseStart), | |
| endTimestamp: G + x6(d.responseEnd) | |
| }) | |
| } | |
| function EE1(I, d, G, Z, C, W) { | |
| if (d.initiatorType === "xmlhttprequest" || d.initiatorType === "fetch") return; | |
| let w = N9.parseUrl(G), | |
| B = {}; | |
| if (w01(B, d, "transferSize", "http.response_transfer_size"), w01(B, d, "encodedBodySize", "http.response_content_length"), w01(B, d, "decodedBodySize", "http.decoded_response_content_length"), "renderBlockingStatus" in d) B["resource.render_blocking_status"] = d.renderBlockingStatus; | |
| if (w.protocol) B["url.scheme"] = w.protocol.split(":").pop(); | |
| if (w.host) B["server.address"] = w.host; | |
| B["url.same_origin"] = G.includes(SA.WINDOW.location.origin); | |
| let A = W + Z, | |
| V = A + C; | |
| LA._startChild(I, { | |
| description: G.replace(SA.WINDOW.location.origin, ""), | |
| endTimestamp: V, | |
| op: d.initiatorType ? `resource.${d.initiatorType}` : "resource.other", | |
| origin: "auto.resource.browser.metrics", | |
| startTimestamp: A, | |
| data: B | |
| }) | |
| } | |
| function Xa2(I) { | |
| let d = SA.WINDOW.navigator; | |
| if (!d) return; | |
| let G = d.connection; | |
| if (G) { | |
| if (G.effectiveType) I.setTag("effectiveConnectionType", G.effectiveType); | |
| if (G.type) I.setTag("connectionType", G.type); | |
| if (LA.isMeasurementValue(G.rtt)) T3["connection.rtt"] = { | |
| value: G.rtt, | |
| unit: "millisecond" | |
| } | |
| } | |
| if (LA.isMeasurementValue(d.deviceMemory)) I.setTag("deviceMemory", `${d.deviceMemory} GB`); | |
| if (LA.isMeasurementValue(d.hardwareConcurrency)) I.setTag("hardwareConcurrency", String(d.hardwareConcurrency)) | |
| } | |
| function Ya2(I) { | |
| if (Yw) { | |
| if (xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding LCP Data"), Yw.element) I.setTag("lcp.element", N9.htmlTreeAsString(Yw.element)); | |
| if (Yw.id) I.setTag("lcp.id", Yw.id); | |
| if (Yw.url) I.setTag("lcp.url", Yw.url.trim().slice(0, 200)); | |
| I.setTag("lcp.size", Yw.size) | |
| } | |
| if (IE && IE.sources) xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding CLS Data"), IE.sources.forEach((d, G) => I.setTag(`cls.source.${G+1}`, N9.htmlTreeAsString(d.node))) | |
| } | |
| function w01(I, d, G, Z) { | |
| let C = d[G]; | |
| if (C != null && C < or2) I[Z] = C | |
| } | |
| function _a2(I) { | |
| let d = sr2.getNavigationEntry(); | |
| if (!d) return; | |
| let { | |
| responseStart: G, | |
| requestStart: Z | |
| } = d; | |
| if (Z <= G) xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding TTFB Request Time"), I["ttfb.requestTime"] = { | |
| value: G - Z, | |
| unit: "millisecond" | |
| } | |
| } | |
| function Da2(I, d, G) { | |
| if (!MA.hasTracingEnabled(d)) return !1; | |
| let Z; | |
| if (I !== void 0 && typeof d.tracesSampler === "function") Z = d.tracesSampler({ | |
| transactionContext: I, | |
| name: I.name, | |
| parentSampled: I.parentSampled, | |
| attributes: { | |
| ...I.data, | |
| ...I.attributes | |
| }, | |
| location: SA.WINDOW.location | |
| }); | |
| else if (I !== void 0 && I.sampled !== void 0) Z = I.sampled; | |
| else if (typeof d.tracesSampleRate !== "undefined") Z = d.tracesSampleRate; | |
| else Z = 1; | |
| if (!MA.isValidSampleRate(Z)) return xd.DEBUG_BUILD && N9.logger.warn("[Tracing] Discarding interaction span because of invalid sample rate."), !1; | |
| if (Z === !0) return G; | |
| else if (Z === !1) return 0; | |
| return Z * G | |
| } | |
| ME1._addMeasureSpans = vE1; | |
| ME1._addResourceSpans = EE1; | |
| ME1.addPerformanceEntries = Ba2; | |
| ME1.startTrackingINP = da2; | |
| ME1.startTrackingInteractions = Ia2; | |
| ME1.startTrackingLongTasks = tr2; | |
| ME1.startTrackingWebVitals = er2 | |
| }); | |
| var V01 = Y((LE1) => { | |
| Object.defineProperty(LE1, "__esModule", { | |
| value: !0 | |
| }); | |
| var _w = V4(), | |
| qF = V0(); | |
| function Qa2(I, d, G, Z, C = "auto.http.browser") { | |
| if (!_w.hasTracingEnabled() || !I.fetchData) return; | |
| let W = d(I.fetchData.url); | |
| if (I.endTimestamp && W) { | |
| let g = I.fetchData.__span; | |
| if (!g) return; | |
| let J = Z[g]; | |
| if (J) qa2(J, I), delete Z[g]; | |
| return | |
| } | |
| let w = _w.getCurrentScope(), | |
| B = _w.getClient(), | |
| { | |
| method: A, | |
| url: V | |
| } = I.fetchData, | |
| X = fa2(V), | |
| _ = X ? qF.parseUrl(X).host : void 0, | |
| F = W ? _w.startInactiveSpan({ | |
| name: `${A} ${V}`, | |
| onlyIfParent: !0, | |
| attributes: { | |
| url: V, | |
| type: "fetch", | |
| "http.method": A, | |
| "http.url": X, | |
| "server.address": _, | |
| [_w.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: C | |
| }, | |
| op: "http.client" | |
| }) : void 0; | |
| if (F) I.fetchData.__span = F.spanContext().spanId, Z[F.spanContext().spanId] = F; | |
| if (G(I.fetchData.url) && B) { | |
| let g = I.args[0]; | |
| I.args[1] = I.args[1] || {}; | |
| let J = I.args[1]; | |
| J.headers = SE1(g, B, w, J, F) | |
| } | |
| return F | |
| } | |
| function SE1(I, d, G, Z, C) { | |
| let W = C || G.getSpan(), | |
| w = _w.getIsolationScope(), | |
| { | |
| traceId: B, | |
| spanId: A, | |
| sampled: V, | |
| dsc: X | |
| } = { | |
| ...w.getPropagationContext(), | |
| ...G.getPropagationContext() | |
| }, | |
| _ = W ? _w.spanToTraceHeader(W) : qF.generateSentryTraceHeader(B, A, V), | |
| F = qF.dynamicSamplingContextToSentryBaggageHeader(X || (W ? _w.getDynamicSamplingContextFromSpan(W) : _w.getDynamicSamplingContextFromClient(B, d, G))), | |
| g = Z.headers || (typeof Request !== "undefined" && qF.isInstanceOf(I, Request) ? I.headers : void 0); | |
| if (!g) return { | |
| "sentry-trace": _, | |
| baggage: F | |
| }; | |
| else if (typeof Headers !== "undefined" && qF.isInstanceOf(g, Headers)) { | |
| let J = new Headers(g); | |
| if (J.append("sentry-trace", _), F) J.append(qF.BAGGAGE_HEADER_NAME, F); | |
| return J | |
| } else if (Array.isArray(g)) { | |
| let J = [...g, ["sentry-trace", _]]; | |
| if (F) J.push([qF.BAGGAGE_HEADER_NAME, F]); | |
| return J | |
| } else { | |
| let J = "baggage" in g ? g.baggage : void 0, | |
| K = []; | |
| if (Array.isArray(J)) K.push(...J); | |
| else if (J) K.push(J); | |
| if (F) K.push(F); | |
| return { | |
| ...g, | |
| "sentry-trace": _, | |
| baggage: K.length > 0 ? K.join(",") : void 0 | |
| } | |
| } | |
| } | |
| function fa2(I) { | |
| try { | |
| return new URL(I).href | |
| } catch (d) { | |
| return | |
| } | |
| } | |
| function qa2(I, d) { | |
| if (d.response) { | |
| _w.setHttpStatus(I, d.response.status); | |
| let G = d.response && d.response.headers && d.response.headers.get("content-length"); | |
| if (G) { | |
| let Z = parseInt(G); | |
| if (Z > 0) I.setAttribute("http.response_content_length", Z) | |
| } | |
| } else if (d.error) I.setStatus("internal_error"); | |
| I.end() | |
| } | |
| LE1.addTracingHeadersToFetchRequest = SE1; | |
| LE1.instrumentFetchRequest = Qa2 | |
| }); | |
| var Rm = Y((OE1) => { | |
| Object.defineProperty(OE1, "__esModule", { | |
| value: !0 | |
| }); | |
| var HC = V4(), | |
| FC = V0(), | |
| va2 = V01(), | |
| Ea2 = EN(), | |
| Ma2 = kd(), | |
| qm = ["localhost", /^\/(?!\/)/], | |
| X01 = { | |
| traceFetch: !0, | |
| traceXHR: !0, | |
| enableHTTPTimings: !0, | |
| tracingOrigins: qm, | |
| tracePropagationTargets: qm | |
| }; | |
| function Sa2(I) { | |
| let { | |
| traceFetch: d, | |
| traceXHR: G, | |
| tracePropagationTargets: Z, | |
| tracingOrigins: C, | |
| shouldCreateSpanForRequest: W, | |
| enableHTTPTimings: w | |
| } = { | |
| traceFetch: X01.traceFetch, | |
| traceXHR: X01.traceXHR, | |
| ...I | |
| }, B = typeof W === "function" ? W : (X) => !0, A = (X) => $E1(X, Z || C), V = {}; | |
| if (d) FC.addFetchInstrumentationHandler((X) => { | |
| let _ = va2.instrumentFetchRequest(X, B, A, V); | |
| if (_) { | |
| let F = TE1(X.fetchData.url), | |
| g = F ? FC.parseUrl(F).host : void 0; | |
| _.setAttributes({ | |
| "http.url": F, | |
| "server.address": g | |
| }) | |
| } | |
| if (w && _) yE1(_) | |
| }); | |
| if (G) FC.addXhrInstrumentationHandler((X) => { | |
| let _ = uE1(X, B, A, V); | |
| if (w && _) yE1(_) | |
| }) | |
| } | |
| function La2(I) { | |
| return I.entryType === "resource" && "initiatorType" in I && typeof I.nextHopProtocol === "string" && (I.initiatorType === "fetch" || I.initiatorType === "xmlhttprequest") | |
| } | |
| function yE1(I) { | |
| let { | |
| url: d | |
| } = HC.spanToJSON(I).data || {}; | |
| if (!d || typeof d !== "string") return; | |
| let G = Ea2.addPerformanceInstrumentationHandler("resource", ({ | |
| entries: Z | |
| }) => { | |
| Z.forEach((C) => { | |
| if (La2(C) && C.name.endsWith(d)) ya2(C).forEach((w) => I.setAttribute(...w)), setTimeout(G) | |
| }) | |
| }) | |
| } | |
| function PE1(I) { | |
| let d = "unknown", | |
| G = "unknown", | |
| Z = ""; | |
| for (let C of I) { | |
| if (C === "/") { | |
| [d, G] = I.split("/"); | |
| break | |
| } | |
| if (!isNaN(Number(C))) { | |
| d = Z === "h" ? "http" : Z, G = I.split(Z)[1]; | |
| break | |
| } | |
| Z += C | |
| } | |
| if (Z === I) d = Z; | |
| return { | |
| name: d, | |
| version: G | |
| } | |
| } | |
| function Dw(I = 0) { | |
| return ((FC.browserPerformanceTimeOrigin || performance.timeOrigin) + I) / 1000 | |
| } | |
| function ya2(I) { | |
| let { | |
| name: d, | |
| version: G | |
| } = PE1(I.nextHopProtocol), Z = []; | |
| if (Z.push(["network.protocol.version", G], ["network.protocol.name", d]), !FC.browserPerformanceTimeOrigin) return Z; | |
| return [...Z, ["http.request.redirect_start", Dw(I.redirectStart)], | |
| ["http.request.fetch_start", Dw(I.fetchStart)], | |
| ["http.request.domain_lookup_start", Dw(I.domainLookupStart)], | |
| ["http.request.domain_lookup_end", Dw(I.domainLookupEnd)], | |
| ["http.request.connect_start", Dw(I.connectStart)], | |
| ["http.request.secure_connection_start", Dw(I.secureConnectionStart)], | |
| ["http.request.connection_end", Dw(I.connectEnd)], | |
| ["http.request.request_start", Dw(I.requestStart)], | |
| ["http.request.response_start", Dw(I.responseStart)], | |
| ["http.request.response_end", Dw(I.responseEnd)] | |
| ] | |
| } | |
| function $E1(I, d) { | |
| return FC.stringMatchesSomePattern(I, d || qm) | |
| } | |
| function uE1(I, d, G, Z) { | |
| let C = I.xhr, | |
| W = C && C[FC.SENTRY_XHR_DATA_KEY]; | |
| if (!HC.hasTracingEnabled() || !C || C.__sentry_own_request__ || !W) return; | |
| let w = d(W.url); | |
| if (I.endTimestamp && w) { | |
| let g = C.__sentry_xhr_span_id__; | |
| if (!g) return; | |
| let J = Z[g]; | |
| if (J && W.status_code !== void 0) HC.setHttpStatus(J, W.status_code), J.end(), delete Z[g]; | |
| return | |
| } | |
| let B = HC.getCurrentScope(), | |
| A = HC.getIsolationScope(), | |
| V = TE1(W.url), | |
| X = V ? FC.parseUrl(V).host : void 0, | |
| _ = w ? HC.startInactiveSpan({ | |
| name: `${W.method} ${W.url}`, | |
| onlyIfParent: !0, | |
| attributes: { | |
| type: "xhr", | |
| "http.method": W.method, | |
| "http.url": V, | |
| url: W.url, | |
| "server.address": X, | |
| [HC.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.http.browser" | |
| }, | |
| op: "http.client" | |
| }) : void 0; | |
| if (_) C.__sentry_xhr_span_id__ = _.spanContext().spanId, Z[C.__sentry_xhr_span_id__] = _; | |
| let F = HC.getClient(); | |
| if (C.setRequestHeader && G(W.url) && F) { | |
| let { | |
| traceId: g, | |
| spanId: J, | |
| sampled: K, | |
| dsc: Q | |
| } = { | |
| ...A.getPropagationContext(), | |
| ...B.getPropagationContext() | |
| }, E = _ ? HC.spanToTraceHeader(_) : FC.generateSentryTraceHeader(g, J, K), S = FC.dynamicSamplingContextToSentryBaggageHeader(Q || (_ ? HC.getDynamicSamplingContextFromSpan(_) : HC.getDynamicSamplingContextFromClient(g, F, B))); | |
| Pa2(C, E, S) | |
| } | |
| return _ | |
| } | |
| function Pa2(I, d, G) { | |
| try { | |
| if (I.setRequestHeader("sentry-trace", d), G) I.setRequestHeader(FC.BAGGAGE_HEADER_NAME, G) | |
| } catch (Z) {} | |
| } | |
| function TE1(I) { | |
| try { | |
| return new URL(I, Ma2.WINDOW.location.origin).href | |
| } catch (d) { | |
| return | |
| } | |
| } | |
| OE1.DEFAULT_TRACE_PROPAGATION_TARGETS = qm; | |
| OE1.defaultRequestInstrumentationOptions = X01; | |
| OE1.extractNetworkProtocol = PE1; | |
| OE1.instrumentOutgoingRequests = Sa2; | |
| OE1.shouldAttachHeaders = $E1; | |
| OE1.xhrCallback = uE1 | |
| }); | |
| var bE1 = Y((lE1) => { | |
| Object.defineProperty(lE1, "__esModule", { | |
| value: !0 | |
| }); | |
| var dE = V0(), | |
| mE1 = pI(), | |
| GE = kd(); | |
| function ba2(I, d = !0, G = !0) { | |
| if (!GE.WINDOW || !GE.WINDOW.location) { | |
| mE1.DEBUG_BUILD && dE.logger.warn("Could not initialize routing instrumentation due to invalid location"); | |
| return | |
| } | |
| let Z = GE.WINDOW.location.href, | |
| C; | |
| if (d) C = I({ | |
| name: GE.WINDOW.location.pathname, | |
| startTimestamp: dE.browserPerformanceTimeOrigin ? dE.browserPerformanceTimeOrigin / 1000 : void 0, | |
| op: "pageload", | |
| origin: "auto.pageload.browser", | |
| metadata: { | |
| source: "url" | |
| } | |
| }); | |
| if (G) dE.addHistoryInstrumentationHandler(({ | |
| to: W, | |
| from: w | |
| }) => { | |
| if (w === void 0 && Z && Z.indexOf(W) !== -1) { | |
| Z = void 0; | |
| return | |
| } | |
| if (w !== W) { | |
| if (Z = void 0, C) mE1.DEBUG_BUILD && dE.logger.log(`[Tracing] Finishing current transaction with op: ${C.op}`), C.end(); | |
| C = I({ | |
| name: GE.WINDOW.location.pathname, | |
| op: "navigation", | |
| origin: "auto.navigation.browser", | |
| metadata: { | |
| source: "url" | |
| } | |
| }) | |
| } | |
| }) | |
| } | |
| lE1.instrumentRoutingWithDefaults = ba2 | |
| }); | |
| var iE1 = Y((pE1) => { | |
| Object.defineProperty(pE1, "__esModule", { | |
| value: !0 | |
| }); | |
| var gC = V4(), | |
| yA = V0(), | |
| aX = pI(), | |
| ja2 = I01(), | |
| hE1 = EN(), | |
| ZE = A01(), | |
| kE1 = Rm(), | |
| ka2 = bE1(), | |
| RF = kd(), | |
| xE1 = "BrowserTracing", | |
| xa2 = { | |
| ...gC.TRACING_DEFAULTS, | |
| markBackgroundTransactions: !0, | |
| routingInstrumentation: ka2.instrumentRoutingWithDefaults, | |
| startTransactionOnLocationChange: !0, | |
| startTransactionOnPageLoad: !0, | |
| enableLongTask: !0, | |
| enableInp: !1, | |
| interactionsSampleRate: 1, | |
| _experiments: {}, | |
| ...kE1.defaultRequestInstrumentationOptions | |
| }, | |
| jE1 = 10; | |
| class cE1 { | |
| constructor(I) { | |
| if (this.name = xE1, this._hasSetTracePropagationTargets = !1, gC.addTracingExtensions(), aX.DEBUG_BUILD) this._hasSetTracePropagationTargets = !!(I && (I.tracePropagationTargets || I.tracingOrigins)); | |
| if (this.options = { | |
| ...xa2, | |
| ...I | |
| }, this.options._experiments.enableLongTask !== void 0) this.options.enableLongTask = this.options._experiments.enableLongTask; | |
| if (I && !I.tracePropagationTargets && I.tracingOrigins) this.options.tracePropagationTargets = I.tracingOrigins; | |
| if (this._collectWebVitals = ZE.startTrackingWebVitals(), this._interactionIdToRouteNameMapping = {}, this.options.enableInp) ZE.startTrackingINP(this._interactionIdToRouteNameMapping, this.options.interactionsSampleRate); | |
| if (this.options.enableLongTask) ZE.startTrackingLongTasks(); | |
| if (this.options._experiments.enableInteractions) ZE.startTrackingInteractions(); | |
| this._latestRoute = { | |
| name: void 0, | |
| context: void 0 | |
| } | |
| } | |
| setupOnce(I, d) { | |
| this._getCurrentHub = d; | |
| let Z = d().getClient(), | |
| C = Z && Z.getOptions(), | |
| { | |
| routingInstrumentation: W, | |
| startTransactionOnLocationChange: w, | |
| startTransactionOnPageLoad: B, | |
| markBackgroundTransactions: A, | |
| traceFetch: V, | |
| traceXHR: X, | |
| shouldCreateSpanForRequest: _, | |
| enableHTTPTimings: F, | |
| _experiments: g | |
| } = this.options, | |
| J = C && C.tracePropagationTargets, | |
| K = J || this.options.tracePropagationTargets; | |
| if (aX.DEBUG_BUILD && this._hasSetTracePropagationTargets && J) yA.logger.warn("[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used."); | |
| if (W((Q) => { | |
| let E = this._createRouteTransaction(Q); | |
| return this.options._experiments.onStartRouteTransaction && this.options._experiments.onStartRouteTransaction(E, Q, d), E | |
| }, B, w), A) ja2.registerBackgroundTabDetection(); | |
| if (g.enableInteractions) this._registerInteractionListener(); | |
| if (this.options.enableInp) this._registerInpInteractionListener(); | |
| kE1.instrumentOutgoingRequests({ | |
| traceFetch: V, | |
| traceXHR: X, | |
| tracePropagationTargets: K, | |
| shouldCreateSpanForRequest: _, | |
| enableHTTPTimings: F | |
| }) | |
| } | |
| _createRouteTransaction(I) { | |
| if (!this._getCurrentHub) { | |
| aX.DEBUG_BUILD && yA.logger.warn(`[Tracing] Did not create ${I.op} transaction because _getCurrentHub is invalid.`); | |
| return | |
| } | |
| let d = this._getCurrentHub(), | |
| { | |
| beforeNavigate: G, | |
| idleTimeout: Z, | |
| finalTimeout: C, | |
| heartbeatInterval: W | |
| } = this.options, | |
| w = I.op === "pageload", | |
| B; | |
| if (w) { | |
| let F = w ? Y01("sentry-trace") : "", | |
| g = w ? Y01("baggage") : void 0, | |
| { | |
| traceId: J, | |
| dsc: K, | |
| parentSpanId: Q, | |
| sampled: E | |
| } = yA.propagationContextFromHeaders(F, g); | |
| B = { | |
| traceId: J, | |
| parentSpanId: Q, | |
| parentSampled: E, | |
| ...I, | |
| metadata: { | |
| ...I.metadata, | |
| dynamicSamplingContext: K | |
| }, | |
| trimEnd: !0 | |
| } | |
| } else B = { | |
| trimEnd: !0, | |
| ...I | |
| }; | |
| let A = typeof G === "function" ? G(B) : B, | |
| V = A === void 0 ? { | |
| ...B, | |
| sampled: !1 | |
| } : A; | |
| if (V.metadata = V.name !== B.name ? { | |
| ...V.metadata, | |
| source: "custom" | |
| } : V.metadata, this._latestRoute.name = V.name, this._latestRoute.context = V, V.sampled === !1) aX.DEBUG_BUILD && yA.logger.log(`[Tracing] Will not send ${V.op} transaction because of beforeNavigate.`); | |
| aX.DEBUG_BUILD && yA.logger.log(`[Tracing] Starting ${V.op} transaction on scope`); | |
| let { | |
| location: X | |
| } = RF.WINDOW, _ = gC.startIdleTransaction(d, V, Z, C, !0, { | |
| location: X | |
| }, W, w); | |
| if (w) { | |
| if (RF.WINDOW.document) { | |
| if (RF.WINDOW.document.addEventListener("readystatechange", () => { | |
| if (["interactive", "complete"].includes(RF.WINDOW.document.readyState)) _.sendAutoFinishSignal() | |
| }), ["interactive", "complete"].includes(RF.WINDOW.document.readyState)) _.sendAutoFinishSignal() | |
| } | |
| } | |
| return _.registerBeforeFinishCallback((F) => { | |
| this._collectWebVitals(), ZE.addPerformanceEntries(F) | |
| }), _ | |
| } | |
| _registerInteractionListener() { | |
| let I, d = () => { | |
| let { | |
| idleTimeout: G, | |
| finalTimeout: Z, | |
| heartbeatInterval: C | |
| } = this.options, W = "ui.action.click", w = gC.getActiveTransaction(); | |
| if (w && w.op && ["navigation", "pageload"].includes(w.op)) { | |
| aX.DEBUG_BUILD && yA.logger.warn("[Tracing] Did not create ui.action.click transaction because a pageload or navigation transaction is in progress."); | |
| return | |
| } | |
| if (I) I.setFinishReason("interactionInterrupted"), I.end(), I = void 0; | |
| if (!this._getCurrentHub) { | |
| aX.DEBUG_BUILD && yA.logger.warn("[Tracing] Did not create ui.action.click transaction because _getCurrentHub is invalid."); | |
| return | |
| } | |
| if (!this._latestRoute.name) { | |
| aX.DEBUG_BUILD && yA.logger.warn("[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing."); | |
| return | |
| } | |
| let B = this._getCurrentHub(), | |
| { | |
| location: A | |
| } = RF.WINDOW, | |
| V = { | |
| name: this._latestRoute.name, | |
| op: "ui.action.click", | |
| trimEnd: !0, | |
| data: { | |
| [gC.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: this._latestRoute.context ? ca2(this._latestRoute.context) : "url" | |
| } | |
| }; | |
| I = gC.startIdleTransaction(B, V, G, Z, !0, { | |
| location: A | |
| }, C) | |
| }; | |
| ["click"].forEach((G) => { | |
| if (RF.WINDOW.document) addEventListener(G, d, { | |
| once: !1, | |
| capture: !0 | |
| }) | |
| }) | |
| } | |
| _registerInpInteractionListener() { | |
| let I = ({ | |
| entries: d | |
| }) => { | |
| let G = gC.getClient(), | |
| Z = G !== void 0 && G.getIntegrationByName !== void 0 ? G.getIntegrationByName("Replay") : void 0, | |
| C = Z !== void 0 ? Z.getReplayId() : void 0, | |
| W = gC.getActiveTransaction(), | |
| w = gC.getCurrentScope(), | |
| B = w !== void 0 ? w.getUser() : void 0; | |
| d.forEach((A) => { | |
| if (pa2(A)) { | |
| let V = A.interactionId; | |
| if (V === void 0) return; | |
| let X = this._interactionIdToRouteNameMapping[V], | |
| _ = A.duration, | |
| F = A.startTime, | |
| g = Object.keys(this._interactionIdToRouteNameMapping), | |
| J = g.length > 0 ? g.reduce((K, Q) => { | |
| return this._interactionIdToRouteNameMapping[K].duration < this._interactionIdToRouteNameMapping[Q].duration ? K : Q | |
| }) : void 0; | |
| if (A.entryType === "first-input") { | |
| if (g.map((Q) => this._interactionIdToRouteNameMapping[Q]).some((Q) => { | |
| return Q.duration === _ && Q.startTime === F | |
| })) return | |
| } | |
| if (!V) return; | |
| if (X) X.duration = Math.max(X.duration, _); | |
| else if (g.length < jE1 || J === void 0 || _ > this._interactionIdToRouteNameMapping[J].duration) { | |
| let K = this._latestRoute.name, | |
| Q = this._latestRoute.context; | |
| if (K && Q) { | |
| if (J && Object.keys(this._interactionIdToRouteNameMapping).length >= jE1) delete this._interactionIdToRouteNameMapping[J]; | |
| this._interactionIdToRouteNameMapping[V] = { | |
| routeName: K, | |
| duration: _, | |
| parentContext: Q, | |
| user: B, | |
| activeTransaction: W, | |
| replayId: C, | |
| startTime: F | |
| } | |
| } | |
| } | |
| } | |
| }) | |
| }; | |
| hE1.addPerformanceInstrumentationHandler("event", I), hE1.addPerformanceInstrumentationHandler("first-input", I) | |
| } | |
| } | |
| function Y01(I) { | |
| let d = yA.getDomElement(`meta[name=${I}]`); | |
| return d ? d.getAttribute("content") : void 0 | |
| } | |
| function ca2(I) { | |
| let d = I.attributes && I.attributes[gC.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
| G = I.data && I.data[gC.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
| Z = I.metadata && I.metadata.source; | |
| return d || G || Z | |
| } | |
| function pa2(I) { | |
| return "duration" in I | |
| } | |
| pE1.BROWSER_TRACING_INTEGRATION_ID = xE1; | |
| pE1.BrowserTracing = cE1; | |
| pE1.getMetaContent = Y01 | |
| }); | |
| var IM1 = Y((tE1) => { | |
| Object.defineProperty(tE1, "__esModule", { | |
| value: !0 | |
| }); | |
| var d6 = V4(), | |
| nG = V0(), | |
| sX = pI(), | |
| aa2 = I01(), | |
| nE1 = EN(), | |
| CE = A01(), | |
| aE1 = Rm(), | |
| cd = kd(), | |
| sE1 = "BrowserTracing", | |
| sa2 = { | |
| ...d6.TRACING_DEFAULTS, | |
| instrumentNavigation: !0, | |
| instrumentPageLoad: !0, | |
| markBackgroundSpan: !0, | |
| enableLongTask: !0, | |
| enableInp: !1, | |
| interactionsSampleRate: 1, | |
| _experiments: {}, | |
| ...aE1.defaultRequestInstrumentationOptions | |
| }, | |
| oa2 = (I = {}) => { | |
| let d = sX.DEBUG_BUILD ? !!(I.tracePropagationTargets || I.tracingOrigins) : !1; | |
| if (d6.addTracingExtensions(), !I.tracePropagationTargets && I.tracingOrigins) I.tracePropagationTargets = I.tracingOrigins; | |
| let G = { | |
| ...sa2, | |
| ...I | |
| }, | |
| Z = CE.startTrackingWebVitals(), | |
| C = {}; | |
| if (G.enableInp) CE.startTrackingINP(C, G.interactionsSampleRate); | |
| if (G.enableLongTask) CE.startTrackingLongTasks(); | |
| if (G._experiments.enableInteractions) CE.startTrackingInteractions(); | |
| let W = { | |
| name: void 0, | |
| context: void 0 | |
| }; | |
| function w(B) { | |
| let A = d6.getCurrentHub(), | |
| { | |
| beforeStartSpan: V, | |
| idleTimeout: X, | |
| finalTimeout: _, | |
| heartbeatInterval: F | |
| } = G, | |
| g = B.op === "pageload", | |
| J; | |
| if (g) { | |
| let S = g ? _01("sentry-trace") : "", | |
| P = g ? _01("baggage") : void 0, | |
| { | |
| traceId: $, | |
| dsc: h, | |
| parentSpanId: O, | |
| sampled: T | |
| } = nG.propagationContextFromHeaders(S, P); | |
| J = { | |
| traceId: $, | |
| parentSpanId: O, | |
| parentSampled: T, | |
| ...B, | |
| metadata: { | |
| ...B.metadata, | |
| dynamicSamplingContext: h | |
| }, | |
| trimEnd: !0 | |
| } | |
| } else J = { | |
| trimEnd: !0, | |
| ...B | |
| }; | |
| let K = V ? V(J) : J; | |
| if (K.metadata = K.name !== J.name ? { | |
| ...K.metadata, | |
| source: "custom" | |
| } : K.metadata, W.name = K.name, W.context = K, K.sampled === !1) sX.DEBUG_BUILD && nG.logger.log(`[Tracing] Will not send ${K.op} transaction because of beforeNavigate.`); | |
| sX.DEBUG_BUILD && nG.logger.log(`[Tracing] Starting ${K.op} transaction on scope`); | |
| let { | |
| location: Q | |
| } = cd.WINDOW, E = d6.startIdleTransaction(A, K, X, _, !0, { | |
| location: Q | |
| }, F, g); | |
| if (g && cd.WINDOW.document) { | |
| if (cd.WINDOW.document.addEventListener("readystatechange", () => { | |
| if (["interactive", "complete"].includes(cd.WINDOW.document.readyState)) E.sendAutoFinishSignal() | |
| }), ["interactive", "complete"].includes(cd.WINDOW.document.readyState)) E.sendAutoFinishSignal() | |
| } | |
| return E.registerBeforeFinishCallback((S) => { | |
| Z(), CE.addPerformanceEntries(S) | |
| }), E | |
| } | |
| return { | |
| name: sE1, | |
| setupOnce: () => {}, | |
| afterAllSetup(B) { | |
| let A = B.getOptions(), | |
| { | |
| markBackgroundSpan: V, | |
| traceFetch: X, | |
| traceXHR: _, | |
| shouldCreateSpanForRequest: F, | |
| enableHTTPTimings: g, | |
| _experiments: J | |
| } = G, | |
| K = A && A.tracePropagationTargets, | |
| Q = K || G.tracePropagationTargets; | |
| if (sX.DEBUG_BUILD && d && K) nG.logger.warn("[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used."); | |
| let E, S = cd.WINDOW.location && cd.WINDOW.location.href; | |
| if (B.on) B.on("startNavigationSpan", (P) => { | |
| if (E) sX.DEBUG_BUILD && nG.logger.log(`[Tracing] Finishing current transaction with op: ${d6.spanToJSON(E).op}`), E.end(); | |
| E = w({ | |
| op: "navigation", | |
| ...P | |
| }) | |
| }), B.on("startPageLoadSpan", (P) => { | |
| if (E) sX.DEBUG_BUILD && nG.logger.log(`[Tracing] Finishing current transaction with op: ${d6.spanToJSON(E).op}`), E.end(); | |
| E = w({ | |
| op: "pageload", | |
| ...P | |
| }) | |
| }); | |
| if (G.instrumentPageLoad && B.emit && cd.WINDOW.location) { | |
| let P = { | |
| name: cd.WINDOW.location.pathname, | |
| startTimestamp: nG.browserPerformanceTimeOrigin ? nG.browserPerformanceTimeOrigin / 1000 : void 0, | |
| origin: "auto.pageload.browser", | |
| attributes: { | |
| [d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "url" | |
| } | |
| }; | |
| oE1(B, P) | |
| } | |
| if (G.instrumentNavigation && B.emit && cd.WINDOW.location) nG.addHistoryInstrumentationHandler(({ | |
| to: P, | |
| from: $ | |
| }) => { | |
| if ($ === void 0 && S && S.indexOf(P) !== -1) { | |
| S = void 0; | |
| return | |
| } | |
| if ($ !== P) { | |
| S = void 0; | |
| let h = { | |
| name: cd.WINDOW.location.pathname, | |
| origin: "auto.navigation.browser", | |
| attributes: { | |
| [d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "url" | |
| } | |
| }; | |
| eE1(B, h) | |
| } | |
| }); | |
| if (V) aa2.registerBackgroundTabDetection(); | |
| if (J.enableInteractions) ea2(G, W); | |
| if (G.enableInp) Is2(C, W); | |
| aE1.instrumentOutgoingRequests({ | |
| traceFetch: X, | |
| traceXHR: _, | |
| tracePropagationTargets: Q, | |
| shouldCreateSpanForRequest: F, | |
| enableHTTPTimings: g | |
| }) | |
| }, | |
| options: G | |
| } | |
| }; | |
| function oE1(I, d) { | |
| if (!I.emit) return; | |
| I.emit("startPageLoadSpan", d); | |
| let G = d6.getActiveSpan(); | |
| return (G && d6.spanToJSON(G).op) === "pageload" ? G : void 0 | |
| } | |
| function eE1(I, d) { | |
| if (!I.emit) return; | |
| I.emit("startNavigationSpan", d); | |
| let G = d6.getActiveSpan(); | |
| return (G && d6.spanToJSON(G).op) === "navigation" ? G : void 0 | |
| } | |
| function _01(I) { | |
| let d = nG.getDomElement(`meta[name=${I}]`); | |
| return d ? d.getAttribute("content") : void 0 | |
| } | |
| function ea2(I, d) { | |
| let G, Z = () => { | |
| let { | |
| idleTimeout: C, | |
| finalTimeout: W, | |
| heartbeatInterval: w | |
| } = I, B = "ui.action.click", A = d6.getActiveTransaction(); | |
| if (A && A.op && ["navigation", "pageload"].includes(A.op)) { | |
| sX.DEBUG_BUILD && nG.logger.warn("[Tracing] Did not create ui.action.click transaction because a pageload or navigation transaction is in progress."); | |
| return | |
| } | |
| if (G) G.setFinishReason("interactionInterrupted"), G.end(), G = void 0; | |
| if (!d.name) { | |
| sX.DEBUG_BUILD && nG.logger.warn("[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing."); | |
| return | |
| } | |
| let { | |
| location: V | |
| } = cd.WINDOW, X = { | |
| name: d.name, | |
| op: "ui.action.click", | |
| trimEnd: !0, | |
| data: { | |
| [d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: d.context ? ds2(d.context) : "url" | |
| } | |
| }; | |
| G = d6.startIdleTransaction(d6.getCurrentHub(), X, C, W, !0, { | |
| location: V | |
| }, w) | |
| }; | |
| ["click"].forEach((C) => { | |
| if (cd.WINDOW.document) addEventListener(C, Z, { | |
| once: !1, | |
| capture: !0 | |
| }) | |
| }) | |
| } | |
| function ta2(I) { | |
| return "duration" in I | |
| } | |
| var rE1 = 10; | |
| function Is2(I, d) { | |
| let G = ({ | |
| entries: Z | |
| }) => { | |
| let C = d6.getClient(), | |
| W = C !== void 0 && C.getIntegrationByName !== void 0 ? C.getIntegrationByName("Replay") : void 0, | |
| w = W !== void 0 ? W.getReplayId() : void 0, | |
| B = d6.getActiveTransaction(), | |
| A = d6.getCurrentScope(), | |
| V = A !== void 0 ? A.getUser() : void 0; | |
| Z.forEach((X) => { | |
| if (ta2(X)) { | |
| let _ = X.interactionId; | |
| if (_ === void 0) return; | |
| let F = I[_], | |
| g = X.duration, | |
| J = X.startTime, | |
| K = Object.keys(I), | |
| Q = K.length > 0 ? K.reduce((E, S) => { | |
| return I[E].duration < I[S].duration ? E : S | |
| }) : void 0; | |
| if (X.entryType === "first-input") { | |
| if (K.map((S) => I[S]).some((S) => { | |
| return S.duration === g && S.startTime === J | |
| })) return | |
| } | |
| if (!_) return; | |
| if (F) F.duration = Math.max(F.duration, g); | |
| else if (K.length < rE1 || Q === void 0 || g > I[Q].duration) { | |
| let { | |
| name: E, | |
| context: S | |
| } = d; | |
| if (E && S) { | |
| if (Q && Object.keys(I).length >= rE1) delete I[Q]; | |
| I[_] = { | |
| routeName: E, | |
| duration: g, | |
| parentContext: S, | |
| user: V, | |
| activeTransaction: B, | |
| replayId: w, | |
| startTime: J | |
| } | |
| } | |
| } | |
| } | |
| }) | |
| }; | |
| nE1.addPerformanceInstrumentationHandler("event", G), nE1.addPerformanceInstrumentationHandler("first-input", G) | |
| } | |
| function ds2(I) { | |
| let d = I.attributes && I.attributes[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
| G = I.data && I.data[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
| Z = I.metadata && I.metadata.source; | |
| return d || G || Z | |
| } | |
| tE1.BROWSER_TRACING_INTEGRATION_ID = sE1; | |
| tE1.browserTracingIntegration = oa2; | |
| tE1.getMetaContent = _01; | |
| tE1.startBrowserTracingNavigationSpan = eE1; | |
| tE1.startBrowserTracingPageLoadSpan = oE1 | |
| }); | |
| var ZM1 = Y((GM1, WE) => { | |
| Object.defineProperty(GM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var dM1 = V4(), | |
| MN = V0(); | |
| function Bs2() { | |
| let I = dM1.getMainCarrier(); | |
| if (!I.__SENTRY__) return; | |
| let d = { | |
| mongodb() { | |
| return new(MN.dynamicRequire(WE, "./node/integrations/mongo")).Mongo | |
| }, | |
| mongoose() { | |
| return new(MN.dynamicRequire(WE, "./node/integrations/mongo")).Mongo | |
| }, | |
| mysql() { | |
| return new(MN.dynamicRequire(WE, "./node/integrations/mysql")).Mysql | |
| }, | |
| pg() { | |
| return new(MN.dynamicRequire(WE, "./node/integrations/postgres")).Postgres | |
| } | |
| }, | |
| G = Object.keys(d).filter((Z) => !!MN.loadModule(Z)).map((Z) => { | |
| try { | |
| return d[Z]() | |
| } catch (C) { | |
| return | |
| } | |
| }).filter((Z) => Z); | |
| if (G.length > 0) I.__SENTRY__.integrations = [...I.__SENTRY__.integrations || [], ...G] | |
| } | |
| function As2() { | |
| if (dM1.addTracingExtensions(), MN.isNodeEnv()) Bs2() | |
| } | |
| GM1.addExtensionMethods = As2 | |
| }); | |
| var H01 = Y((AM1) => { | |
| Object.defineProperty(AM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var PA = V4(), | |
| CM1 = V0(), | |
| Xs2 = Hv1(), | |
| Ys2 = gv1(), | |
| _s2 = Kv1(), | |
| Ds2 = Qv1(), | |
| Hs2 = Rv1(), | |
| Fs2 = Ev1(), | |
| gs2 = Lv1(), | |
| Js2 = Pv1(), | |
| WM1 = iE1(), | |
| D01 = IM1(), | |
| wM1 = Rm(), | |
| Um = EN(), | |
| BM1 = V01(), | |
| Ks2 = ZM1(); | |
| AM1.IdleTransaction = PA.IdleTransaction; | |
| AM1.Span = PA.Span; | |
| AM1.SpanStatus = PA.SpanStatus; | |
| AM1.Transaction = PA.Transaction; | |
| AM1.extractTraceparentData = PA.extractTraceparentData; | |
| AM1.getActiveTransaction = PA.getActiveTransaction; | |
| AM1.hasTracingEnabled = PA.hasTracingEnabled; | |
| AM1.spanStatusfromHttpCode = PA.spanStatusfromHttpCode; | |
| AM1.startIdleTransaction = PA.startIdleTransaction; | |
| AM1.TRACEPARENT_REGEXP = CM1.TRACEPARENT_REGEXP; | |
| AM1.stripUrlQueryAndFragment = CM1.stripUrlQueryAndFragment; | |
| AM1.Express = Xs2.Express; | |
| AM1.Postgres = Ys2.Postgres; | |
| AM1.Mysql = _s2.Mysql; | |
| AM1.Mongo = Ds2.Mongo; | |
| AM1.Prisma = Hs2.Prisma; | |
| AM1.GraphQL = Fs2.GraphQL; | |
| AM1.Apollo = gs2.Apollo; | |
| AM1.lazyLoadedNodePerformanceMonitoringIntegrations = Js2.lazyLoadedNodePerformanceMonitoringIntegrations; | |
| AM1.BROWSER_TRACING_INTEGRATION_ID = WM1.BROWSER_TRACING_INTEGRATION_ID; | |
| AM1.BrowserTracing = WM1.BrowserTracing; | |
| AM1.browserTracingIntegration = D01.browserTracingIntegration; | |
| AM1.startBrowserTracingNavigationSpan = D01.startBrowserTracingNavigationSpan; | |
| AM1.startBrowserTracingPageLoadSpan = D01.startBrowserTracingPageLoadSpan; | |
| AM1.defaultRequestInstrumentationOptions = wM1.defaultRequestInstrumentationOptions; | |
| AM1.instrumentOutgoingRequests = wM1.instrumentOutgoingRequests; | |
| AM1.addClsInstrumentationHandler = Um.addClsInstrumentationHandler; | |
| AM1.addFidInstrumentationHandler = Um.addFidInstrumentationHandler; | |
| AM1.addLcpInstrumentationHandler = Um.addLcpInstrumentationHandler; | |
| AM1.addPerformanceInstrumentationHandler = Um.addPerformanceInstrumentationHandler; | |
| AM1.addTracingHeadersToFetchRequest = BM1.addTracingHeadersToFetchRequest; | |
| AM1.instrumentFetchRequest = BM1.instrumentFetchRequest; | |
| AM1.addExtensionMethods = Ks2.addExtensionMethods | |
| }); | |
| var XM1 = Y((VM1) => { | |
| Object.defineProperty(VM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var es2 = H01(), | |
| ts2 = V0(); | |
| function Io2() { | |
| let I = es2.lazyLoadedNodePerformanceMonitoringIntegrations.map((d) => { | |
| try { | |
| return d() | |
| } catch (G) { | |
| return | |
| } | |
| }).filter((d) => !!d); | |
| if (I.length === 0) ts2.logger.warn("Performance monitoring integrations could not be automatically loaded."); | |
| return I.filter((d) => !!d.loadDependency()) | |
| } | |
| VM1.autoDiscoverNodePerformanceMonitoringIntegrations = Io2 | |
| }); | |
| var F01 = Y((DM1) => { | |
| Object.defineProperty(DM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Go2 = B1("os"), | |
| Zo2 = B1("util"), | |
| YM1 = V4(); | |
| class _M1 extends YM1.ServerRuntimeClient { | |
| constructor(I) { | |
| YM1.applySdkMetadata(I, "node"), I.transportOptions = { | |
| textEncoder: new Zo2.TextEncoder, | |
| ...I.transportOptions | |
| }; | |
| let d = { | |
| ...I, | |
| platform: "node", | |
| runtime: { | |
| name: "node", | |
| version: global.process.version | |
| }, | |
| serverName: I.serverName || global.process.env.SENTRY_NAME || Go2.hostname() | |
| }; | |
| super(d) | |
| } | |
| } | |
| DM1.NodeClient = _M1 | |
| }); | |
| var KM1 = Y((JM1) => { | |
| var { | |
| _nullishCoalesce: HM1 | |
| } = V0(); | |
| Object.defineProperty(JM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var FM1 = B1("http"); | |
| B1("https"); | |
| var Hw = Symbol("AgentBaseInternalState"); | |
| class gM1 extends FM1.Agent { | |
| constructor(I) { | |
| super(I); | |
| this[Hw] = {} | |
| } | |
| isSecureEndpoint(I) { | |
| if (I) { | |
| if (typeof I.secureEndpoint === "boolean") return I.secureEndpoint; | |
| if (typeof I.protocol === "string") return I.protocol === "https:" | |
| } | |
| let { | |
| stack: d | |
| } = new Error; | |
| if (typeof d !== "string") return !1; | |
| return d.split(` | |
| `).some((G) => G.indexOf("(https.js:") !== -1 || G.indexOf("node:https:") !== -1) | |
| } | |
| createSocket(I, d, G) { | |
| let Z = { | |
| ...d, | |
| secureEndpoint: this.isSecureEndpoint(d) | |
| }; | |
| Promise.resolve().then(() => this.connect(I, Z)).then((C) => { | |
| if (C instanceof FM1.Agent) return C.addRequest(I, Z); | |
| this[Hw].currentSocket = C, super.createSocket(I, d, G) | |
| }, G) | |
| } | |
| createConnection() { | |
| let I = this[Hw].currentSocket; | |
| if (this[Hw].currentSocket = void 0, !I) throw new Error("No socket was returned in the `connect()` function"); | |
| return I | |
| } | |
| get defaultPort() { | |
| return HM1(this[Hw].defaultPort, () => this.protocol === "https:" ? 443 : 80) | |
| } | |
| set defaultPort(I) { | |
| if (this[Hw]) this[Hw].defaultPort = I | |
| } | |
| get protocol() { | |
| return HM1(this[Hw].protocol, () => this.isSecureEndpoint() ? "https:" : "http:") | |
| } | |
| set protocol(I) { | |
| if (this[Hw]) this[Hw].protocol = I | |
| } | |
| } | |
| JM1.Agent = gM1 | |
| }); | |
| var zM1 = Y((NM1) => { | |
| Object.defineProperty(NM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var wo2 = V0(); | |
| function vm(...I) { | |
| wo2.logger.log("[https-proxy-agent:parse-proxy-response]", ...I) | |
| } | |
| function Bo2(I) { | |
| return new Promise((d, G) => { | |
| let Z = 0, | |
| C = []; | |
| function W() { | |
| let X = I.read(); | |
| if (X) V(X); | |
| else I.once("readable", W) | |
| } | |
| function w() { | |
| I.removeListener("end", B), I.removeListener("error", A), I.removeListener("readable", W) | |
| } | |
| function B() { | |
| w(), vm("onend"), G(new Error("Proxy connection ended before receiving CONNECT response")) | |
| } | |
| function A(X) { | |
| w(), vm("onerror %o", X), G(X) | |
| } | |
| function V(X) { | |
| C.push(X), Z += X.length; | |
| let _ = Buffer.concat(C, Z), | |
| F = _.indexOf(`\r | |
| \r | |
| `); | |
| if (F === -1) { | |
| vm("have not received end of HTTP headers yet..."), W(); | |
| return | |
| } | |
| let g = _.slice(0, F).toString("ascii").split(`\r | |
| `), | |
| J = g.shift(); | |
| if (!J) return I.destroy(), G(new Error("No header received from proxy CONNECT response")); | |
| let K = J.split(" "), | |
| Q = +K[1], | |
| E = K.slice(2).join(" "), | |
| S = {}; | |
| for (let P of g) { | |
| if (!P) continue; | |
| let $ = P.indexOf(":"); | |
| if ($ === -1) return I.destroy(), G(new Error(`Invalid header from proxy CONNECT response: "${P}"`)); | |
| let h = P.slice(0, $).toLowerCase(), | |
| O = P.slice($ + 1).trimStart(), | |
| T = S[h]; | |
| if (typeof T === "string") S[h] = [T, O]; | |
| else if (Array.isArray(T)) T.push(O); | |
| else S[h] = O | |
| } | |
| vm("got proxy server response: %o %o", J, S), w(), d({ | |
| connect: { | |
| statusCode: Q, | |
| statusText: E, | |
| headers: S | |
| }, | |
| buffered: _ | |
| }) | |
| } | |
| I.on("error", A), I.on("end", B), W() | |
| }) | |
| } | |
| NM1.parseProxyResponse = Bo2 | |
| }); | |
| var RM1 = Y((qM1) => { | |
| var { | |
| _nullishCoalesce: Vo2, | |
| _optionalChain: Xo2 | |
| } = V0(); | |
| Object.defineProperty(qM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var wE = B1("net"), | |
| QM1 = B1("tls"), | |
| Yo2 = B1("url"), | |
| _o2 = V0(), | |
| Do2 = KM1(), | |
| Ho2 = zM1(); | |
| function BE(...I) { | |
| _o2.logger.log("[https-proxy-agent]", ...I) | |
| } | |
| class g01 extends Do2.Agent { | |
| static __initStatic() { | |
| this.protocols = ["http", "https"] | |
| } | |
| constructor(I, d) { | |
| super(d); | |
| this.options = {}, this.proxy = typeof I === "string" ? new Yo2.URL(I) : I, this.proxyHeaders = Vo2(Xo2([d, "optionalAccess", (C) => C.headers]), () => ({})), BE("Creating new HttpsProxyAgent instance: %o", this.proxy.href); | |
| let G = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, ""), | |
| Z = this.proxy.port ? parseInt(this.proxy.port, 10) : this.proxy.protocol === "https:" ? 443 : 80; | |
| this.connectOpts = { | |
| ALPNProtocols: ["http/1.1"], | |
| ...d ? fM1(d, "headers") : null, | |
| host: G, | |
| port: Z | |
| } | |
| } | |
| async connect(I, d) { | |
| let { | |
| proxy: G | |
| } = this; | |
| if (!d.host) throw new TypeError('No "host" provided'); | |
| let Z; | |
| if (G.protocol === "https:") { | |
| BE("Creating `tls.Socket`: %o", this.connectOpts); | |
| let _ = this.connectOpts.servername || this.connectOpts.host; | |
| Z = QM1.connect({ | |
| ...this.connectOpts, | |
| servername: _ && wE.isIP(_) ? void 0 : _ | |
| }) | |
| } else BE("Creating `net.Socket`: %o", this.connectOpts), Z = wE.connect(this.connectOpts); | |
| let C = typeof this.proxyHeaders === "function" ? this.proxyHeaders() : { | |
| ...this.proxyHeaders | |
| }, | |
| W = wE.isIPv6(d.host) ? `[${d.host}]` : d.host, | |
| w = `CONNECT ${W}:${d.port} HTTP/1.1\r | |
| `; | |
| if (G.username || G.password) { | |
| let _ = `${decodeURIComponent(G.username)}:${decodeURIComponent(G.password)}`; | |
| C["Proxy-Authorization"] = `Basic ${Buffer.from(_).toString("base64")}` | |
| } | |
| if (C.Host = `${W}:${d.port}`, !C["Proxy-Connection"]) C["Proxy-Connection"] = this.keepAlive ? "Keep-Alive" : "close"; | |
| for (let _ of Object.keys(C)) w += `${_}: ${C[_]}\r | |
| `; | |
| let B = Ho2.parseProxyResponse(Z); | |
| Z.write(`${w}\r | |
| `); | |
| let { | |
| connect: A, | |
| buffered: V | |
| } = await B; | |
| if (I.emit("proxyConnect", A), this.emit("proxyConnect", A, I), A.statusCode === 200) { | |
| if (I.once("socket", Fo2), d.secureEndpoint) { | |
| BE("Upgrading socket connection to TLS"); | |
| let _ = d.servername || d.host; | |
| return QM1.connect({ | |
| ...fM1(d, "host", "path", "port"), | |
| socket: Z, | |
| servername: wE.isIP(_) ? void 0 : _ | |
| }) | |
| } | |
| return Z | |
| } | |
| Z.destroy(); | |
| let X = new wE.Socket({ | |
| writable: !1 | |
| }); | |
| return X.readable = !0, I.once("socket", (_) => { | |
| BE("Replaying proxy buffer for failed request"), _.push(V), _.push(null) | |
| }), X | |
| } | |
| } | |
| g01.__initStatic(); | |
| function Fo2(I) { | |
| I.resume() | |
| } | |
| function fM1(I, ...d) { | |
| let G = {}, | |
| Z; | |
| for (Z in I) | |
| if (!d.includes(Z)) G[Z] = I[Z]; | |
| return G | |
| } | |
| qM1.HttpsProxyAgent = g01 | |
| }); | |
| var K01 = Y((EM1) => { | |
| var { | |
| _nullishCoalesce: J01 | |
| } = V0(); | |
| Object.defineProperty(EM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Jo2 = B1("http"), | |
| Ko2 = B1("https"), | |
| No2 = B1("stream"), | |
| vM1 = B1("url"), | |
| zo2 = B1("zlib"), | |
| UM1 = V4(), | |
| Qo2 = V0(), | |
| fo2 = RM1(), | |
| qo2 = 32768; | |
| function Ro2(I) { | |
| return new No2.Readable({ | |
| read() { | |
| this.push(I), this.push(null) | |
| } | |
| }) | |
| } | |
| function Uo2(I) { | |
| let d; | |
| try { | |
| d = new vM1.URL(I.url) | |
| } catch (A) { | |
| return Qo2.consoleSandbox(() => { | |
| console.warn("[@sentry/node]: Invalid dsn or tunnel option, will not send any events. The tunnel option must be a full URL when used.") | |
| }), UM1.createTransport(I, () => Promise.resolve({})) | |
| } | |
| let G = d.protocol === "https:", | |
| Z = vo2(d, I.proxy || (G ? process.env.https_proxy : void 0) || process.env.http_proxy), | |
| C = G ? Ko2 : Jo2, | |
| W = I.keepAlive === void 0 ? !1 : I.keepAlive, | |
| w = Z ? new fo2.HttpsProxyAgent(Z) : new C.Agent({ | |
| keepAlive: W, | |
| maxSockets: 30, | |
| timeout: 2000 | |
| }), | |
| B = Eo2(I, J01(I.httpModule, () => C), w); | |
| return UM1.createTransport(I, B) | |
| } | |
| function vo2(I, d) { | |
| let { | |
| no_proxy: G | |
| } = process.env; | |
| if (G && G.split(",").some((C) => I.host.endsWith(C) || I.hostname.endsWith(C))) return; | |
| else return d | |
| } | |
| function Eo2(I, d, G) { | |
| let { | |
| hostname: Z, | |
| pathname: C, | |
| port: W, | |
| protocol: w, | |
| search: B | |
| } = new vM1.URL(I.url); | |
| return function A(V) { | |
| return new Promise((X, _) => { | |
| let F = Ro2(V.body), | |
| g = { | |
| ...I.headers | |
| }; | |
| if (V.body.length > qo2) g["content-encoding"] = "gzip", F = F.pipe(zo2.createGzip()); | |
| let J = d.request({ | |
| method: "POST", | |
| agent: G, | |
| headers: g, | |
| hostname: Z, | |
| path: `${C}${B}`, | |
| port: W, | |
| protocol: w, | |
| ca: I.caCerts | |
| }, (K) => { | |
| K.on("data", () => {}), K.on("end", () => {}), K.setEncoding("utf8"); | |
| let Q = J01(K.headers["retry-after"], () => null), | |
| E = J01(K.headers["x-sentry-rate-limits"], () => null); | |
| X({ | |
| statusCode: K.statusCode, | |
| headers: { | |
| "retry-after": Q, | |
| "x-sentry-rate-limits": Array.isArray(E) ? E[0] : E | |
| } | |
| }) | |
| }); | |
| J.on("error", _), F.pipe(J) | |
| }) | |
| } | |
| } | |
| EM1.makeNodeTransport = Uo2 | |
| }); | |
| var UF = Y((MM1) => { | |
| Object.defineProperty(MM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var So2 = V0(), | |
| Lo2 = So2.parseSemver(process.versions.node); | |
| MM1.NODE_VERSION = Lo2 | |
| }); | |
| var PM1 = Y((yM1) => { | |
| var { | |
| _optionalChain: Po2 | |
| } = V0(); | |
| Object.defineProperty(yM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var SM1 = B1("domain"), | |
| vF = V4(); | |
| function LM1() { | |
| return SM1.active | |
| } | |
| function $o2() { | |
| let I = LM1(); | |
| if (!I) return; | |
| return vF.ensureHubOnCarrier(I), vF.getHubFromCarrier(I) | |
| } | |
| function uo2(I) { | |
| let d = {}; | |
| return vF.ensureHubOnCarrier(d, I), vF.getHubFromCarrier(d) | |
| } | |
| function To2(I, d) { | |
| let G = LM1(); | |
| if (G && Po2([d, "optionalAccess", (w) => w.reuseExisting])) return I(); | |
| let Z = SM1.create(), | |
| C = G ? vF.getHubFromCarrier(G) : void 0, | |
| W = uo2(C); | |
| return vF.setHubOnCarrier(Z, W), Z.bind(() => { | |
| return I() | |
| })() | |
| } | |
| function Oo2() { | |
| vF.setAsyncContextStrategy({ | |
| getCurrentHub: $o2, | |
| runWithAsyncContext: To2 | |
| }) | |
| } | |
| yM1.setDomainAsyncContextStrategy = Oo2 | |
| }); | |
| var uM1 = Y(($M1) => { | |
| var { | |
| _optionalChain: lo2 | |
| } = V0(); | |
| Object.defineProperty($M1, "__esModule", { | |
| value: !0 | |
| }); | |
| var N01 = V4(), | |
| bo2 = B1("async_hooks"), | |
| Em; | |
| function ho2() { | |
| if (!Em) Em = new bo2.AsyncLocalStorage; | |
| function I() { | |
| return Em.getStore() | |
| } | |
| function d(Z) { | |
| let C = {}; | |
| return N01.ensureHubOnCarrier(C, Z), N01.getHubFromCarrier(C) | |
| } | |
| function G(Z, C) { | |
| let W = I(); | |
| if (W && lo2([C, "optionalAccess", (B) => B.reuseExisting])) return Z(); | |
| let w = d(W); | |
| return Em.run(w, () => { | |
| return Z() | |
| }) | |
| } | |
| N01.setAsyncContextStrategy({ | |
| getCurrentHub: I, | |
| runWithAsyncContext: G | |
| }) | |
| } | |
| $M1.setHooksAsyncContextStrategy = ho2 | |
| }); | |
| var OM1 = Y((TM1) => { | |
| Object.defineProperty(TM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var ko2 = UF(), | |
| xo2 = PM1(), | |
| co2 = uM1(); | |
| function po2() { | |
| if (ko2.NODE_VERSION.major >= 14) co2.setHooksAsyncContextStrategy(); | |
| else xo2.setDomainAsyncContextStrategy() | |
| } | |
| TM1.setNodeAsyncContextStrategy = po2 | |
| }); | |
| var Sm = Y((hM1) => { | |
| Object.defineProperty(hM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var no2 = B1("util"), | |
| Mm = V4(), | |
| mM1 = V0(), | |
| lM1 = "Console", | |
| ro2 = () => { | |
| return { | |
| name: lM1, | |
| setupOnce() {}, | |
| setup(I) { | |
| mM1.addConsoleInstrumentationHandler(({ | |
| args: d, | |
| level: G | |
| }) => { | |
| if (Mm.getClient() !== I) return; | |
| Mm.addBreadcrumb({ | |
| category: "console", | |
| level: mM1.severityLevelFromString(G), | |
| message: no2.format.apply(void 0, d) | |
| }, { | |
| input: [...d], | |
| level: G | |
| }) | |
| }) | |
| } | |
| } | |
| }, | |
| bM1 = Mm.defineIntegration(ro2), | |
| ao2 = Mm.convertIntegrationFnToClass(lM1, bM1); | |
| hM1.Console = ao2; | |
| hM1.consoleIntegration = bM1 | |
| }); | |
| var Lm = Y((sM1) => { | |
| var { | |
| _optionalChain: EF | |
| } = V0(); | |
| Object.defineProperty(sM1, "__esModule", { | |
| value: !0 | |
| }); | |
| var eo2 = B1("child_process"), | |
| kM1 = B1("fs"), | |
| rG = B1("os"), | |
| to2 = B1("path"), | |
| xM1 = B1("util"), | |
| cM1 = V4(), | |
| pM1 = xM1.promisify(kM1.readFile), | |
| iM1 = xM1.promisify(kM1.readdir), | |
| nM1 = "Context", | |
| Ie2 = (I = {}) => { | |
| let d, G = { | |
| app: !0, | |
| os: !0, | |
| device: !0, | |
| culture: !0, | |
| cloudResource: !0, | |
| ...I | |
| }; | |
| async function Z(W) { | |
| if (d === void 0) d = C(); | |
| let w = Ge2(await d); | |
| return W.contexts = { | |
| ...W.contexts, | |
| app: { | |
| ...w.app, | |
| ...EF([W, "access", (B) => B.contexts, "optionalAccess", (B) => B.app]) | |
| }, | |
| os: { | |
| ...w.os, | |
| ...EF([W, "access", (B) => B.contexts, "optionalAccess", (B) => B.os]) | |
| }, | |
| device: { | |
| ...w.device, | |
| ...EF([W, "access", (B) => B.contexts, "optionalAccess", (B) => B.device]) | |
| }, | |
| culture: { | |
| ...w.culture, | |
| ...EF([W, "access", (B) => B.contexts, "optionalAccess", (B) => B.culture]) | |
| }, | |
| cloud_resource: { | |
| ...w.cloud_resource, | |
| ...EF([W, "access", (B) => B.contexts, "optionalAccess", (B) => B.cloud_resource]) | |
| } | |
| }, W | |
| } | |
| async function C() { | |
| let W = {}; | |
| if (G.os) W.os = await Ze2(); | |
| if (G.app) W.app = We2(); | |
| if (G.device) W.device = aM1(G.device); | |
| if (G.culture) { | |
| let w = Ce2(); | |
| if (w) W.culture = w | |
| } | |
| if (G.cloudResource) W.cloud_resource = Ye2(); | |
| return W | |
| } | |
| return { | |
| name: nM1, | |
| setupOnce() {}, | |
| processEvent(W) { | |
| return Z(W) | |
| } | |
| } | |
| }, | |
| rM1 = cM1.defineIntegration(Ie2), | |
| de2 = cM1.convertIntegrationFnToClass(nM1, rM1); | |
| function Ge2(I) { | |
| if (EF([I, "optionalAccess", (d) => d.app, "optionalAccess", (d) => d.app_memory])) I.app.app_memory = process.memoryUsage().rss; | |
| if (EF([I, "optionalAccess", (d) => d.device, "optionalAccess", (d) => d.free_memory])) I.device.free_memory = rG.freemem(); | |
| return I | |
| } | |
| async function Ze2() { | |
| let I = rG.platform(); | |
| switch (I) { | |
| case "darwin": | |
| return Ve2(); | |
| case "linux": | |
| return Xe2(); | |
| default: | |
| return { | |
| name: we2[I] || I, version: rG.release() | |
| } | |
| } | |
| } | |
| function Ce2() { | |
| try { | |
| if (typeof process.versions.icu !== "string") return; | |
| let I = new Date(900000000); | |
| if (new Intl.DateTimeFormat("es", { | |
| month: "long" | |
| }).format(I) === "enero") { | |
| let G = Intl.DateTimeFormat().resolvedOptions(); | |
| return { | |
| locale: G.locale, | |
| timezone: G.timeZone | |
| } | |
| } | |
| } catch (I) {} | |
| return | |
| } | |
| function We2() { | |
| let I = process.memoryUsage().rss; | |
| return { | |
| app_start_time: new Date(Date.now() - process.uptime() * 1000).toISOString(), | |
| app_memory: I | |
| } | |
| } | |
| function aM1(I) { | |
| let d = {}, | |
| G; | |
| try { | |
| G = rG.uptime && rG.uptime() | |
| } catch (Z) {} | |
| if (typeof G === "number") d.boot_time = new Date(Date.now() - G * 1000).toISOString(); | |
| if (d.arch = rG.arch(), I === !0 || I.memory) d.memory_size = rG.totalmem(), d.free_memory = rG.freemem(); | |
| if (I === !0 || I.cpu) { | |
| let Z = rG.cpus(); | |
| if (Z && Z.length) { | |
| let C = Z[0]; | |
| d.processor_count = Z.length, d.cpu_description = C.model, d.processor_frequency = C.speed | |
| } | |
| } | |
| return d | |
| } | |
| var we2 = { | |
| aix: "IBM AIX", | |
| freebsd: "FreeBSD", | |
| openbsd: "OpenBSD", | |
| sunos: "SunOS", | |
| win32: "Windows" | |
| }, | |
| Be2 = [{ | |
| name: "fedora-release", | |
| distros: ["Fedora"] | |
| }, { | |
| name: "redhat-release", | |
| distros: ["Red Hat Linux", "Centos"] | |
| }, { | |
| name: "redhat_version", | |
| distros: ["Red Hat Linux"] | |
| }, { | |
| name: "SuSE-release", | |
| distros: ["SUSE Linux"] | |
| }, { | |
| name: "lsb-release", | |
| distros: ["Ubuntu Linux", "Arch Linux"] | |
| }, { | |
| name: "debian_version", | |
| distros: ["Debian"] | |
| }, { | |
| name: "debian_release", | |
| distros: ["Debian"] | |
| }, { | |
| name: "arch-release", | |
| distros: ["Arch Linux"] | |
| }, { | |
| name: "gentoo-release", | |
| distros: ["Gentoo Linux"] | |
| }, { | |
| name: "novell-release", | |
| distros: ["SUSE Linux"] | |
| }, { | |
| name: "alpine-release", | |
| distros: ["Alpine Linux"] | |
| }], | |
| Ae2 = { | |
| alpine: (I) => I, | |
| arch: (I) => Fw(/distrib_release=(.*)/, I), | |
| centos: (I) => Fw(/release ([^ ]+)/, I), | |
| debian: (I) => I, | |
| fedora: (I) => Fw(/release (..)/, I), | |
| mint: (I) => Fw(/distrib_release=(.*)/, I), | |
| red: (I) => Fw(/release ([^ ]+)/, I), | |
| suse: (I) => Fw(/VERSION = (.*)\n/, I), | |
| ubuntu: (I) => Fw(/distrib_release=(.*)/, I) | |
| }; | |
| function Fw(I, d) { | |
| let G = I.exec(d); | |
| return G ? G[1] : void 0 | |
| } | |
| async function Ve2() { | |
| let I = { | |
| kernel_version: rG.release(), | |
| name: "Mac OS X", | |
| version: `10.${Number(rG.release().split(".")[0])-4}` | |
| }; | |
| try { | |
| let d = await new Promise((G, Z) => { | |
| eo2.execFile("/usr/bin/sw_vers", (C, W) => { | |
| if (C) { | |
| Z(C); | |
| return | |
| } | |
| G(W) | |
| }) | |
| }); | |
| I.name = Fw(/^ProductName:\s+(.*)$/m, d), I.version = Fw(/^ProductVersion:\s+(.*)$/m, d), I.build = Fw(/^BuildVersion:\s+(.*)$/m, d) | |
| } catch (d) {} | |
| return I | |
| } | |
| function jM1(I) { | |
| return I.split(" ")[0].toLowerCase() | |
| } | |
| async function Xe2() { | |
| let I = { | |
| kernel_version: rG.release(), | |
| name: "Linux" | |
| }; | |
| try { | |
| let d = await iM1("/etc"), | |
| G = Be2.find((B) => d.includes(B.name)); | |
| if (!G) return I; | |
| let Z = to2.join("/etc", G.name), | |
| C = (await pM1(Z, { | |
| encoding: "utf-8" | |
| })).toLowerCase(), | |
| { | |
| distros: W | |
| } = G; | |
| I.name = W.find((B) => C.indexOf(jM1(B)) >= 0) || W[0]; | |
| let w = jM1(I.name); | |
| I.version = Ae2[w](C) | |
| } catch (d) {} | |
| return I | |
| } | |
| function Ye2() { | |
| if (process.env.VERCEL) return { | |
| "cloud.provider": "vercel", | |
| "cloud.region": process.env.VERCEL_REGION | |
| }; | |
| else if (process.env.AWS_REGION) return { | |
| "cloud.provider": "aws", | |
| "cloud.region": process.env.AWS_REGION, | |
| "cloud.platform": process.env.AWS_EXECUTION_ENV | |
| }; | |
| else if (process.env.GCP_PROJECT) return { | |
| "cloud.provider": "gcp" | |
| }; | |
| else if (process.env.ALIYUN_REGION_ID) return { | |
| "cloud.provider": "alibaba_cloud", | |
| "cloud.region": process.env.ALIYUN_REGION_ID | |
| }; | |
| else if (process.env.WEBSITE_SITE_NAME && process.env.REGION_NAME) return { | |
| "cloud.provider": "azure", | |
| "cloud.region": process.env.REGION_NAME | |
| }; | |
| else if (process.env.IBM_CLOUD_REGION) return { | |
| "cloud.provider": "ibm_cloud", | |
| "cloud.region": process.env.IBM_CLOUD_REGION | |
| }; | |
| else if (process.env.TENCENTCLOUD_REGION) return { | |
| "cloud.provider": "tencent_cloud", | |
| "cloud.region": process.env.TENCENTCLOUD_REGION, | |
| "cloud.account.id": process.env.TENCENTCLOUD_APPID, | |
| "cloud.availability_zone": process.env.TENCENTCLOUD_ZONE | |
| }; | |
| else if (process.env.NETLIFY) return { | |
| "cloud.provider": "netlify" | |
| }; | |
| else if (process.env.FLY_REGION) return { | |
| "cloud.provider": "fly.io", | |
| "cloud.region": process.env.FLY_REGION | |
| }; | |
| else if (process.env.DYNO) return { | |
| "cloud.provider": "heroku" | |
| }; | |
| else return | |
| } | |
| sM1.Context = de2; | |
| sM1.getDeviceContext = aM1; | |
| sM1.nodeContextIntegration = rM1; | |
| sM1.readDirAsync = iM1; | |
| sM1.readFileAsync = pM1 | |
| }); | |
| var Pm = Y((dS1) => { | |
| var { | |
| _optionalChain: z01 | |
| } = V0(); | |
| Object.defineProperty(dS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Je2 = B1("fs"), | |
| oM1 = V4(), | |
| eM1 = V0(), | |
| ym = new eM1.LRUMap(100), | |
| Ke2 = 7, | |
| tM1 = "ContextLines"; | |
| function Ne2(I) { | |
| return new Promise((d, G) => { | |
| Je2.readFile(I, "utf8", (Z, C) => { | |
| if (Z) G(Z); | |
| else d(C) | |
| }) | |
| }) | |
| } | |
| var ze2 = (I = {}) => { | |
| let d = I.frameContextLines !== void 0 ? I.frameContextLines : Ke2; | |
| return { | |
| name: tM1, | |
| setupOnce() {}, | |
| processEvent(G) { | |
| return fe2(G, d) | |
| } | |
| } | |
| }, | |
| IS1 = oM1.defineIntegration(ze2), | |
| Qe2 = oM1.convertIntegrationFnToClass(tM1, IS1); | |
| async function fe2(I, d) { | |
| let G = {}, | |
| Z = []; | |
| if (d > 0 && z01([I, "access", (C) => C.exception, "optionalAccess", (C) => C.values])) | |
| for (let C of I.exception.values) { | |
| if (!z01([C, "access", (W) => W.stacktrace, "optionalAccess", (W) => W.frames])) continue; | |
| for (let W = C.stacktrace.frames.length - 1; W >= 0; W--) { | |
| let w = C.stacktrace.frames[W]; | |
| if (w.filename && !G[w.filename] && !ym.get(w.filename)) Z.push(Re2(w.filename)), G[w.filename] = 1 | |
| } | |
| } | |
| if (Z.length > 0) await Promise.all(Z); | |
| if (d > 0 && z01([I, "access", (C) => C.exception, "optionalAccess", (C) => C.values])) { | |
| for (let C of I.exception.values) | |
| if (C.stacktrace && C.stacktrace.frames) await qe2(C.stacktrace.frames, d) | |
| } | |
| return I | |
| } | |
| function qe2(I, d) { | |
| for (let G of I) | |
| if (G.filename && G.context_line === void 0) { | |
| let Z = ym.get(G.filename); | |
| if (Z) try { | |
| eM1.addContextToFrame(Z, G, d) | |
| } catch (C) {} | |
| } | |
| } | |
| async function Re2(I) { | |
| let d = ym.get(I); | |
| if (d === null) return null; | |
| if (d !== void 0) return d; | |
| let G = null; | |
| try { | |
| G = (await Ne2(I)).split(` | |
| `) | |
| } catch (Z) {} | |
| return ym.set(I, G), G | |
| } | |
| dS1.ContextLines = Qe2; | |
| dS1.contextLinesIntegration = IS1 | |
| }); | |
| var AE = Y((GS1) => { | |
| Object.defineProperty(GS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Ee2 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; | |
| GS1.DEBUG_BUILD = Ee2 | |
| }); | |
| var wS1 = Y((WS1) => { | |
| var { | |
| _optionalChain: gw | |
| } = V0(); | |
| Object.defineProperty(WS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Q01 = B1("url"), | |
| Se2 = UF(); | |
| function Le2(I) { | |
| let { | |
| protocol: d, | |
| hostname: G, | |
| port: Z | |
| } = CS1(I), C = I.path ? I.path : "/"; | |
| return `${d}//${G}${Z}${C}` | |
| } | |
| function ZS1(I) { | |
| let { | |
| protocol: d, | |
| hostname: G, | |
| port: Z | |
| } = CS1(I), C = I.pathname || "/", W = I.auth ? ye2(I.auth) : ""; | |
| return `${d}//${W}${G}${Z}${C}` | |
| } | |
| function ye2(I) { | |
| let [d, G] = I.split(":"); | |
| return `${d?"[Filtered]":""}:${G?"[Filtered]":""}@` | |
| } | |
| function Pe2(I, d, G) { | |
| if (!I) return I; | |
| let [Z, C] = I.split(" "); | |
| if (d.host && !d.protocol) d.protocol = gw([G, "optionalAccess", (W) => W.agent, "optionalAccess", (W) => W.protocol]), C = ZS1(d); | |
| if (gw([C, "optionalAccess", (W) => W.startsWith, "call", (W) => W("///")])) C = C.slice(2); | |
| return `${Z} ${C}` | |
| } | |
| function f01(I) { | |
| let d = { | |
| protocol: I.protocol, | |
| hostname: typeof I.hostname === "string" && I.hostname.startsWith("[") ? I.hostname.slice(1, -1) : I.hostname, | |
| hash: I.hash, | |
| search: I.search, | |
| pathname: I.pathname, | |
| path: `${I.pathname||""}${I.search||""}`, | |
| href: I.href | |
| }; | |
| if (I.port !== "") d.port = Number(I.port); | |
| if (I.username || I.password) d.auth = `${I.username}:${I.password}`; | |
| return d | |
| } | |
| function $e2(I, d) { | |
| let G, Z; | |
| if (typeof d[d.length - 1] === "function") G = d.pop(); | |
| if (typeof d[0] === "string") Z = f01(new Q01.URL(d[0])); | |
| else if (d[0] instanceof Q01.URL) Z = f01(d[0]); | |
| else { | |
| Z = d[0]; | |
| try { | |
| let C = new Q01.URL(Z.path || "", `${Z.protocol||"http:"}//${Z.hostname}`); | |
| Z = { | |
| pathname: C.pathname, | |
| search: C.search, | |
| hash: C.hash, | |
| ...Z | |
| } | |
| } catch (C) {} | |
| } | |
| if (d.length === 2) Z = { | |
| ...Z, | |
| ...d[1] | |
| }; | |
| if (Z.protocol === void 0) | |
| if (Se2.NODE_VERSION.major > 8) Z.protocol = gw([gw([I, "optionalAccess", (C) => C.globalAgent]), "optionalAccess", (C) => C.protocol]) || gw([Z.agent, "optionalAccess", (C) => C.protocol]) || gw([Z._defaultAgent, "optionalAccess", (C) => C.protocol]); | |
| else Z.protocol = gw([Z.agent, "optionalAccess", (C) => C.protocol]) || gw([Z._defaultAgent, "optionalAccess", (C) => C.protocol]) || gw([gw([I, "optionalAccess", (C) => C.globalAgent]), "optionalAccess", (C) => C.protocol]); | |
| if (G) return [Z, G]; | |
| else return [Z] | |
| } | |
| function CS1(I) { | |
| let d = I.protocol || "", | |
| G = I.hostname || I.host || "", | |
| Z = !I.port || I.port === 80 || I.port === 443 || /^(.*):(\d+)$/.test(G) ? "" : `:${I.port}`; | |
| return { | |
| protocol: d, | |
| hostname: G, | |
| port: Z | |
| } | |
| } | |
| WS1.cleanSpanDescription = Pe2; | |
| WS1.extractRawUrl = Le2; | |
| WS1.extractUrl = ZS1; | |
| WS1.normalizeRequestArgs = $e2; | |
| WS1.urlToOptions = f01 | |
| }); | |
| var $m = Y((XS1) => { | |
| var { | |
| _optionalChain: SN | |
| } = V0(); | |
| Object.defineProperty(XS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var f7 = V4(), | |
| pd = V0(), | |
| q01 = AE(), | |
| be2 = UF(), | |
| VE = wS1(), | |
| he2 = (I = {}) => { | |
| let { | |
| breadcrumbs: d, | |
| tracing: G, | |
| shouldCreateSpanForRequest: Z | |
| } = I, C = { | |
| breadcrumbs: d, | |
| tracing: G === !1 ? !1 : pd.dropUndefinedKeys({ | |
| enableIfHasTracingEnabled: G === !0 ? void 0 : !0, | |
| shouldCreateSpanForRequest: Z | |
| }) | |
| }; | |
| return new MF(C) | |
| }, | |
| je2 = f7.defineIntegration(he2); | |
| class MF { | |
| static __initStatic() { | |
| this.id = "Http" | |
| } | |
| __init() { | |
| this.name = MF.id | |
| } | |
| constructor(I = {}) { | |
| MF.prototype.__init.call(this), this._breadcrumbs = typeof I.breadcrumbs === "undefined" ? !0 : I.breadcrumbs, this._tracing = !I.tracing ? void 0 : I.tracing === !0 ? {} : I.tracing | |
| } | |
| setupOnce(I, d) { | |
| let G = SN([d, "call", (A) => A(), "access", (A) => A.getClient, "call", (A) => A(), "optionalAccess", (A) => A.getOptions, "call", (A) => A()]), | |
| Z = AS1(this._tracing, G); | |
| if (!this._breadcrumbs && !Z) return; | |
| if (G && G.instrumenter !== "sentry") { | |
| q01.DEBUG_BUILD && pd.logger.log("HTTP Integration is skipped because of instrumenter configuration."); | |
| return | |
| } | |
| let C = VS1(Z, this._tracing, G), | |
| W = SN([G, "optionalAccess", (A) => A.tracePropagationTargets]) || SN([this, "access", (A) => A._tracing, "optionalAccess", (A) => A.tracePropagationTargets]), | |
| w = B1("http"), | |
| B = BS1(w, this._breadcrumbs, C, W); | |
| if (pd.fill(w, "get", B), pd.fill(w, "request", B), be2.NODE_VERSION.major > 8) { | |
| let A = B1("https"), | |
| V = BS1(A, this._breadcrumbs, C, W); | |
| pd.fill(A, "get", V), pd.fill(A, "request", V) | |
| } | |
| } | |
| } | |
| MF.__initStatic(); | |
| function BS1(I, d, G, Z) { | |
| let C = new pd.LRUMap(100), | |
| W = new pd.LRUMap(100), | |
| w = (V) => { | |
| if (G === void 0) return !0; | |
| let X = C.get(V); | |
| if (X !== void 0) return X; | |
| let _ = G(V); | |
| return C.set(V, _), _ | |
| }, | |
| B = (V) => { | |
| if (Z === void 0) return !0; | |
| let X = W.get(V); | |
| if (X !== void 0) return X; | |
| let _ = pd.stringMatchesSomePattern(V, Z); | |
| return W.set(V, _), _ | |
| }; | |
| function A(V, X, _, F) { | |
| if (!f7.getCurrentHub().getIntegration(MF)) return; | |
| f7.addBreadcrumb({ | |
| category: "http", | |
| data: { | |
| status_code: F && F.statusCode, | |
| ...X | |
| }, | |
| type: "http" | |
| }, { | |
| event: V, | |
| request: _, | |
| response: F | |
| }) | |
| } | |
| return function V(X) { | |
| return function _(...F) { | |
| let g = VE.normalizeRequestArgs(I, F), | |
| J = g[0], | |
| K = VE.extractRawUrl(J), | |
| Q = VE.extractUrl(J), | |
| E = f7.getClient(); | |
| if (f7.isSentryRequestUrl(Q, E)) return X.apply(I, g); | |
| let S = f7.getCurrentScope(), | |
| P = f7.getIsolationScope(), | |
| $ = f7.getActiveSpan(), | |
| h = xe2(Q, J), | |
| O = w(K) ? SN([$, "optionalAccess", (T) => T.startChild, "call", (T) => T({ | |
| op: "http.client", | |
| origin: "auto.http.node.http", | |
| description: `${h["http.method"]} ${h.url}`, | |
| data: h | |
| })]) : void 0; | |
| if (E && B(K)) { | |
| let { | |
| traceId: T, | |
| spanId: V1, | |
| sampled: c, | |
| dsc: c1 | |
| } = { | |
| ...P.getPropagationContext(), | |
| ...S.getPropagationContext() | |
| }, o1 = O ? f7.spanToTraceHeader(O) : pd.generateSentryTraceHeader(T, V1, c), a1 = pd.dynamicSamplingContextToSentryBaggageHeader(c1 || (O ? f7.getDynamicSamplingContextFromSpan(O) : f7.getDynamicSamplingContextFromClient(T, E, S))); | |
| ke2(J, Q, o1, a1) | |
| } else q01.DEBUG_BUILD && pd.logger.log(`[Tracing] Not adding sentry-trace header to outgoing request (${Q}) due to mismatching tracePropagationTargets option.`); | |
| return X.apply(I, g).once("response", function(T) { | |
| let V1 = this; | |
| if (d) A("response", h, V1, T); | |
| if (O) { | |
| if (T.statusCode) f7.setHttpStatus(O, T.statusCode); | |
| O.updateName(VE.cleanSpanDescription(f7.spanToJSON(O).description || "", J, V1) || ""), O.end() | |
| } | |
| }).once("error", function() { | |
| let T = this; | |
| if (d) A("error", h, T); | |
| if (O) f7.setHttpStatus(O, 500), O.updateName(VE.cleanSpanDescription(f7.spanToJSON(O).description || "", J, T) || ""), O.end() | |
| }) | |
| } | |
| } | |
| } | |
| function ke2(I, d, G, Z) { | |
| if ((I.headers || {})["sentry-trace"]) return; | |
| q01.DEBUG_BUILD && pd.logger.log(`[Tracing] Adding sentry-trace header ${G} to outgoing request to "${d}": `), I.headers = { | |
| ...I.headers, | |
| "sentry-trace": G, | |
| ...Z && Z.length > 0 && { | |
| baggage: ce2(I, Z) | |
| } | |
| } | |
| } | |
| function xe2(I, d) { | |
| let G = d.method || "GET", | |
| Z = { | |
| url: I, | |
| "http.method": G | |
| }; | |
| if (d.hash) Z["http.fragment"] = d.hash.substring(1); | |
| if (d.search) Z["http.query"] = d.search.substring(1); | |
| return Z | |
| } | |
| function ce2(I, d) { | |
| if (!I.headers || !I.headers.baggage) return d; | |
| else if (!d) return I.headers.baggage; | |
| else if (Array.isArray(I.headers.baggage)) return [...I.headers.baggage, d]; | |
| return [I.headers.baggage, d] | |
| } | |
| function AS1(I, d) { | |
| return I === void 0 ? !1 : I.enableIfHasTracingEnabled ? f7.hasTracingEnabled(d) : !0 | |
| } | |
| function VS1(I, d, G) { | |
| return I ? SN([d, "optionalAccess", (C) => C.shouldCreateSpanForRequest]) || SN([G, "optionalAccess", (C) => C.shouldCreateSpanForRequest]) : () => !1 | |
| } | |
| XS1.Http = MF; | |
| XS1._getShouldCreateSpanForRequest = VS1; | |
| XS1._shouldCreateSpans = AS1; | |
| XS1.httpIntegration = je2 | |
| }); | |
| var DS1 = Y((_S1) => { | |
| Object.defineProperty(_S1, "__esModule", { | |
| value: !0 | |
| }); | |
| function ae2(I, d, G) { | |
| let Z = 0, | |
| C = 5, | |
| W = 0; | |
| return setInterval(() => { | |
| if (W === 0) { | |
| if (Z > I) { | |
| if (C *= 2, G(C), C > 86400) C = 86400; | |
| W = C | |
| } | |
| } else if (W -= 1, W === 0) d(); | |
| Z = 0 | |
| }, 1000).unref(), () => { | |
| Z += 1 | |
| } | |
| } | |
| function R01(I) { | |
| return I !== void 0 && (I.length === 0 || I === "?" || I === "<anonymous>") | |
| } | |
| function se2(I, d) { | |
| return I === d || R01(I) && R01(d) | |
| } | |
| function YS1(I) { | |
| if (I === void 0) return; | |
| return I.slice(-10).reduce((d, G) => `${d},${G.function},${G.lineno},${G.colno}`, "") | |
| } | |
| function oe2(I, d) { | |
| if (d === void 0) return; | |
| return YS1(I(d, 1)) | |
| } | |
| _S1.createRateLimiter = ae2; | |
| _S1.functionNamesMatch = se2; | |
| _S1.hashFrames = YS1; | |
| _S1.hashFromStack = oe2; | |
| _S1.isAnonymous = R01 | |
| }); | |
| var KS1 = Y((JS1) => { | |
| var { | |
| _optionalChain: O3 | |
| } = V0(); | |
| Object.defineProperty(JS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var U01 = V4(), | |
| um = V0(), | |
| Zt2 = UF(), | |
| Tm = DS1(); | |
| function v01(I) { | |
| let d = [], | |
| G = !1; | |
| function Z(w) { | |
| if (d = [], G) return; | |
| G = !0, I(w) | |
| } | |
| d.push(Z); | |
| function C(w) { | |
| d.push(w) | |
| } | |
| function W(w) { | |
| let B = d.pop() || Z; | |
| try { | |
| B(w) | |
| } catch (A) { | |
| Z(w) | |
| } | |
| } | |
| return { | |
| add: C, | |
| next: W | |
| } | |
| } | |
| class HS1 { | |
| constructor() { | |
| let { | |
| Session: I | |
| } = B1("inspector"); | |
| this._session = new I | |
| } | |
| configureAndConnect(I, d) { | |
| this._session.connect(), this._session.on("Debugger.paused", (G) => { | |
| I(G, () => { | |
| this._session.post("Debugger.resume") | |
| }) | |
| }), this._session.post("Debugger.enable"), this._session.post("Debugger.setPauseOnExceptions", { | |
| state: d ? "all" : "uncaught" | |
| }) | |
| } | |
| setPauseOnExceptions(I) { | |
| this._session.post("Debugger.setPauseOnExceptions", { | |
| state: I ? "all" : "uncaught" | |
| }) | |
| } | |
| getLocalVariables(I, d) { | |
| this._getProperties(I, (G) => { | |
| let { | |
| add: Z, | |
| next: C | |
| } = v01(d); | |
| for (let W of G) | |
| if (O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.objectId]) && O3([W, "optionalAccess", (w) => w.value, "access", (w) => w.className]) === "Array") { | |
| let w = W.value.objectId; | |
| Z((B) => this._unrollArray(w, W.name, B, C)) | |
| } else if (O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.objectId]) && O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.className]) === "Object") { | |
| let w = W.value.objectId; | |
| Z((B) => this._unrollObject(w, W.name, B, C)) | |
| } else if (O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.value]) != null || O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.description]) != null) Z((w) => this._unrollOther(W, w, C)); | |
| C({}) | |
| }) | |
| } | |
| _getProperties(I, d) { | |
| this._session.post("Runtime.getProperties", { | |
| objectId: I, | |
| ownProperties: !0 | |
| }, (G, Z) => { | |
| if (G) d([]); | |
| else d(Z.result) | |
| }) | |
| } | |
| _unrollArray(I, d, G, Z) { | |
| this._getProperties(I, (C) => { | |
| G[d] = C.filter((W) => W.name !== "length" && !isNaN(parseInt(W.name, 10))).sort((W, w) => parseInt(W.name, 10) - parseInt(w.name, 10)).map((W) => O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.value])), Z(G) | |
| }) | |
| } | |
| _unrollObject(I, d, G, Z) { | |
| this._getProperties(I, (C) => { | |
| G[d] = C.map((W) => [W.name, O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.value])]).reduce((W, [w, B]) => { | |
| return W[w] = B, W | |
| }, {}), Z(G) | |
| }) | |
| } | |
| _unrollOther(I, d, G) { | |
| if (O3([I, "optionalAccess", (Z) => Z.value, "optionalAccess", (Z) => Z.value]) != null) d[I.name] = I.value.value; | |
| else if (O3([I, "optionalAccess", (Z) => Z.value, "optionalAccess", (Z) => Z.description]) != null && O3([I, "optionalAccess", (Z) => Z.value, "optionalAccess", (Z) => Z.type]) !== "function") d[I.name] = `<${I.value.description}>`; | |
| G(d) | |
| } | |
| } | |
| function Ct2() { | |
| try { | |
| return new HS1 | |
| } catch (I) { | |
| return | |
| } | |
| } | |
| var FS1 = "LocalVariables", | |
| Wt2 = (I = {}, d = Ct2()) => { | |
| let G = new um.LRUMap(20), | |
| Z, C = !1; | |
| function W(A, { | |
| params: { | |
| reason: V, | |
| data: X, | |
| callFrames: _ | |
| } | |
| }, F) { | |
| if (V !== "exception" && V !== "promiseRejection") { | |
| F(); | |
| return | |
| } | |
| O3([Z, "optionalCall", (Q) => Q()]); | |
| let g = Tm.hashFromStack(A, O3([X, "optionalAccess", (Q) => Q.description])); | |
| if (g == null) { | |
| F(); | |
| return | |
| } | |
| let { | |
| add: J, | |
| next: K | |
| } = v01((Q) => { | |
| G.set(g, Q), F() | |
| }); | |
| for (let Q = 0; Q < Math.min(_.length, 5); Q++) { | |
| let { | |
| scopeChain: E, | |
| functionName: S, | |
| this: P | |
| } = _[Q], $ = E.find((O) => O.type === "local"), h = P.className === "global" || !P.className ? S : `${P.className}.${S}`; | |
| if (O3([$, "optionalAccess", (O) => O.object, "access", (O) => O.objectId]) === void 0) J((O) => { | |
| O[Q] = { | |
| function: h | |
| }, K(O) | |
| }); | |
| else { | |
| let O = $.object.objectId; | |
| J((T) => O3([d, "optionalAccess", (V1) => V1.getLocalVariables, "call", (V1) => V1(O, (c) => { | |
| T[Q] = { | |
| function: h, | |
| vars: c | |
| }, K(T) | |
| })])) | |
| } | |
| } | |
| K([]) | |
| } | |
| function w(A) { | |
| let V = Tm.hashFrames(O3([A, "optionalAccess", (F) => F.stacktrace, "optionalAccess", (F) => F.frames])); | |
| if (V === void 0) return; | |
| let X = G.remove(V); | |
| if (X === void 0) return; | |
| let _ = (O3([A, "access", (F) => F.stacktrace, "optionalAccess", (F) => F.frames]) || []).filter((F) => F.function !== "new Promise"); | |
| for (let F = 0; F < _.length; F++) { | |
| let g = _.length - F - 1; | |
| if (!_[g] || !X[F]) break; | |
| if (X[F].vars === void 0 || _[g].in_app === !1 || !Tm.functionNamesMatch(_[g].function, X[F].function)) continue; | |
| _[g].vars = X[F].vars | |
| } | |
| } | |
| function B(A) { | |
| for (let V of O3([A, "optionalAccess", (X) => X.exception, "optionalAccess", (X) => X.values]) || []) w(V); | |
| return A | |
| } | |
| return { | |
| name: FS1, | |
| setupOnce() { | |
| let A = U01.getClient(), | |
| V = O3([A, "optionalAccess", (X) => X.getOptions, "call", (X) => X()]); | |
| if (d && O3([V, "optionalAccess", (X) => X.includeLocalVariables])) { | |
| if (Zt2.NODE_VERSION.major < 18) { | |
| um.logger.log("The `LocalVariables` integration is only supported on Node >= v18."); | |
| return | |
| } | |
| let _ = I.captureAllExceptions !== !1; | |
| if (d.configureAndConnect((F, g) => W(V.stackParser, F, g), _), _) { | |
| let F = I.maxExceptionsPerSecond || 50; | |
| Z = Tm.createRateLimiter(F, () => { | |
| um.logger.log("Local variables rate-limit lifted."), O3([d, "optionalAccess", (g) => g.setPauseOnExceptions, "call", (g) => g(!0)]) | |
| }, (g) => { | |
| um.logger.log(`Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${g} seconds.`), O3([d, "optionalAccess", (J) => J.setPauseOnExceptions, "call", (J) => J(!1)]) | |
| }) | |
| } | |
| C = !0 | |
| } | |
| }, | |
| processEvent(A) { | |
| if (C) return B(A); | |
| return A | |
| }, | |
| _getCachedFramesCount() { | |
| return G.size | |
| }, | |
| _getFirstCachedFrame() { | |
| return G.values()[0] | |
| } | |
| } | |
| }, | |
| gS1 = U01.defineIntegration(Wt2), | |
| wt2 = U01.convertIntegrationFnToClass(FS1, gS1); | |
| JS1.LocalVariablesSync = wt2; | |
| JS1.createCallbackList = v01; | |
| JS1.localVariablesSyncIntegration = gS1 | |
| }); | |
| var Om = Y((zS1) => { | |
| Object.defineProperty(zS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var NS1 = KS1(), | |
| Xt2 = NS1.LocalVariablesSync, | |
| Yt2 = NS1.localVariablesSyncIntegration; | |
| zS1.LocalVariables = Xt2; | |
| zS1.localVariablesIntegration = Yt2 | |
| }); | |
| var mm = Y((vS1) => { | |
| Object.defineProperty(vS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var QS1 = B1("fs"), | |
| fS1 = B1("path"), | |
| qS1 = V4(), | |
| E01, RS1 = "Modules"; | |
| function Ht2() { | |
| try { | |
| return B1.cache ? Object.keys(B1.cache) : [] | |
| } catch (I) { | |
| return [] | |
| } | |
| } | |
| function Ft2() { | |
| let I = B1.main && B1.main.paths || [], | |
| d = Ht2(), | |
| G = {}, | |
| Z = {}; | |
| return d.forEach((C) => { | |
| let W = C, | |
| w = () => { | |
| let B = W; | |
| if (W = fS1.dirname(B), !W || B === W || Z[B]) return; | |
| if (I.indexOf(W) < 0) return w(); | |
| let A = fS1.join(B, "package.json"); | |
| if (Z[B] = !0, !QS1.existsSync(A)) return w(); | |
| try { | |
| let V = JSON.parse(QS1.readFileSync(A, "utf8")); | |
| G[V.name] = V.version | |
| } catch (V) {} | |
| }; | |
| w() | |
| }), G | |
| } | |
| function gt2() { | |
| if (!E01) E01 = Ft2(); | |
| return E01 | |
| } | |
| var Jt2 = () => { | |
| return { | |
| name: RS1, | |
| setupOnce() {}, | |
| processEvent(I) { | |
| return I.modules = { | |
| ...I.modules, | |
| ...gt2() | |
| }, I | |
| } | |
| } | |
| }, | |
| US1 = qS1.defineIntegration(Jt2), | |
| Kt2 = qS1.convertIntegrationFnToClass(RS1, US1); | |
| vS1.Modules = Kt2; | |
| vS1.modulesIntegration = US1 | |
| }); | |
| var S01 = Y((ES1) => { | |
| Object.defineProperty(ES1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Qt2 = V4(), | |
| lm = V0(), | |
| M01 = AE(), | |
| ft2 = 2000; | |
| function qt2(I) { | |
| lm.consoleSandbox(() => { | |
| console.error(I) | |
| }); | |
| let d = Qt2.getClient(); | |
| if (d === void 0) M01.DEBUG_BUILD && lm.logger.warn("No NodeClient was defined, we are exiting the process now."), global.process.exit(1); | |
| let G = d.getOptions(), | |
| Z = G && G.shutdownTimeout && G.shutdownTimeout > 0 && G.shutdownTimeout || ft2; | |
| d.close(Z).then((C) => { | |
| if (!C) M01.DEBUG_BUILD && lm.logger.warn("We reached the timeout for emptying the request buffer, still exiting now!"); | |
| global.process.exit(1) | |
| }, (C) => { | |
| M01.DEBUG_BUILD && lm.logger.error(C) | |
| }) | |
| } | |
| ES1.logAndExitProcess = qt2 | |
| }); | |
| var hm = Y((PS1) => { | |
| Object.defineProperty(PS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var bm = V4(), | |
| Ut2 = V0(), | |
| vt2 = AE(), | |
| MS1 = S01(), | |
| SS1 = "OnUncaughtException", | |
| Et2 = (I = {}) => { | |
| let d = { | |
| exitEvenIfOtherHandlersAreRegistered: !0, | |
| ...I | |
| }; | |
| return { | |
| name: SS1, | |
| setupOnce() {}, | |
| setup(G) { | |
| global.process.on("uncaughtException", yS1(G, d)) | |
| } | |
| } | |
| }, | |
| LS1 = bm.defineIntegration(Et2), | |
| Mt2 = bm.convertIntegrationFnToClass(SS1, LS1); | |
| function yS1(I, d) { | |
| let Z = !1, | |
| C = !1, | |
| W = !1, | |
| w, B = I.getOptions(); | |
| return Object.assign((A) => { | |
| let V = MS1.logAndExitProcess; | |
| if (d.onFatalError) V = d.onFatalError; | |
| else if (B.onFatalError) V = B.onFatalError; | |
| let _ = global.process.listeners("uncaughtException").reduce((g, J) => { | |
| if (J.name === "domainUncaughtExceptionClear" || J.tag && J.tag === "sentry_tracingErrorCallback" || J._errorHandler) return g; | |
| else return g + 1 | |
| }, 0) === 0, | |
| F = d.exitEvenIfOtherHandlersAreRegistered || _; | |
| if (!Z) { | |
| if (w = A, Z = !0, bm.getClient() === I) bm.captureException(A, { | |
| originalException: A, | |
| captureContext: { | |
| level: "fatal" | |
| }, | |
| mechanism: { | |
| handled: !1, | |
| type: "onuncaughtexception" | |
| } | |
| }); | |
| if (!W && F) W = !0, V(A) | |
| } else if (F) { | |
| if (W) vt2.DEBUG_BUILD && Ut2.logger.warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"), MS1.logAndExitProcess(A); | |
| else if (!C) C = !0, setTimeout(() => { | |
| if (!W) W = !0, V(w, A) | |
| }, 2000) | |
| } | |
| }, { | |
| _errorHandler: !0 | |
| }) | |
| } | |
| PS1.OnUncaughtException = Mt2; | |
| PS1.makeErrorHandler = yS1; | |
| PS1.onUncaughtExceptionIntegration = LS1 | |
| }); | |
| var km = Y((mS1) => { | |
| Object.defineProperty(mS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var jm = V4(), | |
| $S1 = V0(), | |
| Pt2 = S01(), | |
| uS1 = "OnUnhandledRejection", | |
| $t2 = (I = {}) => { | |
| let d = I.mode || "warn"; | |
| return { | |
| name: uS1, | |
| setupOnce() {}, | |
| setup(G) { | |
| global.process.on("unhandledRejection", OS1(G, { | |
| mode: d | |
| })) | |
| } | |
| } | |
| }, | |
| TS1 = jm.defineIntegration($t2), | |
| ut2 = jm.convertIntegrationFnToClass(uS1, TS1); | |
| function OS1(I, d) { | |
| return function G(Z, C) { | |
| if (jm.getClient() !== I) return; | |
| jm.captureException(Z, { | |
| originalException: C, | |
| captureContext: { | |
| extra: { | |
| unhandledPromiseRejection: !0 | |
| } | |
| }, | |
| mechanism: { | |
| handled: !1, | |
| type: "onunhandledrejection" | |
| } | |
| }), Tt2(Z, d) | |
| } | |
| } | |
| function Tt2(I, d) { | |
| let G = "This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:"; | |
| if (d.mode === "warn") $S1.consoleSandbox(() => { | |
| console.warn(G), console.error(I && I.stack ? I.stack : I) | |
| }); | |
| else if (d.mode === "strict") $S1.consoleSandbox(() => { | |
| console.warn(G) | |
| }), Pt2.logAndExitProcess(I) | |
| } | |
| mS1.OnUnhandledRejection = ut2; | |
| mS1.makeUnhandledPromiseHandler = OS1; | |
| mS1.onUnhandledRejectionIntegration = TS1 | |
| }); | |
| var xm = Y((kS1) => { | |
| Object.defineProperty(kS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var bt2 = B1("http"), | |
| ht2 = B1("url"), | |
| lS1 = V4(), | |
| LN = V0(), | |
| bS1 = "Spotlight", | |
| jt2 = (I = {}) => { | |
| let d = { | |
| sidecarUrl: I.sidecarUrl || "http://localhost:8969/stream" | |
| }; | |
| return { | |
| name: bS1, | |
| setupOnce() {}, | |
| setup(G) { | |
| if (typeof process === "object" && process.env) LN.logger.warn("[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?"); | |
| xt2(G, d) | |
| } | |
| } | |
| }, | |
| hS1 = lS1.defineIntegration(jt2), | |
| kt2 = lS1.convertIntegrationFnToClass(bS1, hS1); | |
| function xt2(I, d) { | |
| let G = ct2(d.sidecarUrl); | |
| if (!G) return; | |
| let Z = 0; | |
| if (typeof I.on !== "function") { | |
| LN.logger.warn("[Spotlight] Cannot connect to spotlight due to missing method on SDK client (`client.on`)"); | |
| return | |
| } | |
| I.on("beforeEnvelope", (C) => { | |
| if (Z > 3) { | |
| LN.logger.warn("[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests"); | |
| return | |
| } | |
| let W = LN.serializeEnvelope(C), | |
| B = jS1()({ | |
| method: "POST", | |
| path: G.pathname, | |
| hostname: G.hostname, | |
| port: G.port, | |
| headers: { | |
| "Content-Type": "application/x-sentry-envelope" | |
| } | |
| }, (A) => { | |
| A.on("data", () => {}), A.on("end", () => {}), A.setEncoding("utf8") | |
| }); | |
| B.on("error", () => { | |
| Z++, LN.logger.warn("[Spotlight] Failed to send envelope to Spotlight Sidecar") | |
| }), B.write(W), B.end() | |
| }) | |
| } | |
| function ct2(I) { | |
| try { | |
| return new ht2.URL(`${I}`) | |
| } catch (d) { | |
| LN.logger.warn(`[Spotlight] Invalid sidecar URL: ${I}`); | |
| return | |
| } | |
| } | |
| function jS1() { | |
| let { | |
| request: I | |
| } = bt2; | |
| if (pt2(I)) return I.__sentry_original__; | |
| return I | |
| } | |
| function pt2(I) { | |
| return "__sentry_original__" in I | |
| } | |
| kS1.Spotlight = kt2; | |
| kS1.getNativeHttpRequest = jS1; | |
| kS1.spotlightIntegration = hS1 | |
| }); | |
| var pm = Y((xS1) => { | |
| var { | |
| _optionalChain: cm | |
| } = V0(); | |
| Object.defineProperty(xS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var g6 = V4(), | |
| SF = V0(), | |
| at2 = UF(); | |
| xS1.ChannelName = void 0; | |
| (function(I) { | |
| I.RequestCreate = "undici:request:create"; | |
| let G = "undici:request:headers"; | |
| I.RequestEnd = G; | |
| let Z = "undici:request:error"; | |
| I.RequestError = Z | |
| })(xS1.ChannelName || (xS1.ChannelName = {})); | |
| var st2 = (I) => { | |
| return new nI(I) | |
| }, | |
| ot2 = g6.defineIntegration(st2); | |
| class nI { | |
| static __initStatic() { | |
| this.id = "Undici" | |
| } | |
| __init() { | |
| this.name = nI.id | |
| } | |
| __init2() { | |
| this._createSpanUrlMap = new SF.LRUMap(100) | |
| } | |
| __init3() { | |
| this._headersUrlMap = new SF.LRUMap(100) | |
| } | |
| constructor(I = {}) { | |
| nI.prototype.__init.call(this), nI.prototype.__init2.call(this), nI.prototype.__init3.call(this), nI.prototype.__init4.call(this), nI.prototype.__init5.call(this), nI.prototype.__init6.call(this), this._options = { | |
| breadcrumbs: I.breadcrumbs === void 0 ? !0 : I.breadcrumbs, | |
| tracing: I.tracing, | |
| shouldCreateSpanForRequest: I.shouldCreateSpanForRequest | |
| } | |
| } | |
| setupOnce(I) { | |
| if (at2.NODE_VERSION.major < 16) return; | |
| let d; | |
| try { | |
| d = B1("diagnostics_channel") | |
| } catch (G) {} | |
| if (!d || !d.subscribe) return; | |
| d.subscribe(xS1.ChannelName.RequestCreate, this._onRequestCreate), d.subscribe(xS1.ChannelName.RequestEnd, this._onRequestEnd), d.subscribe(xS1.ChannelName.RequestError, this._onRequestError) | |
| } | |
| _shouldCreateSpan(I) { | |
| if (this._options.tracing === !1 || this._options.tracing === void 0 && !g6.hasTracingEnabled()) return !1; | |
| if (this._options.shouldCreateSpanForRequest === void 0) return !0; | |
| let d = this._createSpanUrlMap.get(I); | |
| if (d !== void 0) return d; | |
| let G = this._options.shouldCreateSpanForRequest(I); | |
| return this._createSpanUrlMap.set(I, G), G | |
| } | |
| __init4() { | |
| this._onRequestCreate = (I) => { | |
| if (!cm([g6.getClient, "call", (X) => X(), "optionalAccess", (X) => X.getIntegration, "call", (X) => X(nI)])) return; | |
| let { | |
| request: d | |
| } = I, G = d.origin ? d.origin.toString() + d.path : d.path, Z = g6.getClient(); | |
| if (!Z) return; | |
| if (g6.isSentryRequestUrl(G, Z) || d.__sentry_span__ !== void 0) return; | |
| let C = Z.getOptions(), | |
| W = g6.getCurrentScope(), | |
| w = g6.getIsolationScope(), | |
| B = g6.getActiveSpan(), | |
| A = this._shouldCreateSpan(G) ? tt2(B, d, G) : void 0; | |
| if (A) d.__sentry_span__ = A; | |
| if (((X) => { | |
| if (C.tracePropagationTargets === void 0) return !0; | |
| let _ = this._headersUrlMap.get(X); | |
| if (_ !== void 0) return _; | |
| let F = SF.stringMatchesSomePattern(X, C.tracePropagationTargets); | |
| return this._headersUrlMap.set(X, F), F | |
| })(G)) { | |
| let { | |
| traceId: X, | |
| spanId: _, | |
| sampled: F, | |
| dsc: g | |
| } = { | |
| ...w.getPropagationContext(), | |
| ...W.getPropagationContext() | |
| }, J = A ? g6.spanToTraceHeader(A) : SF.generateSentryTraceHeader(X, _, F), K = SF.dynamicSamplingContextToSentryBaggageHeader(g || (A ? g6.getDynamicSamplingContextFromSpan(A) : g6.getDynamicSamplingContextFromClient(X, Z, W))); | |
| et2(d, J, K) | |
| } | |
| } | |
| } | |
| __init5() { | |
| this._onRequestEnd = (I) => { | |
| if (!cm([g6.getClient, "call", (W) => W(), "optionalAccess", (W) => W.getIntegration, "call", (W) => W(nI)])) return; | |
| let { | |
| request: d, | |
| response: G | |
| } = I, Z = d.origin ? d.origin.toString() + d.path : d.path; | |
| if (g6.isSentryRequestUrl(Z, g6.getClient())) return; | |
| let C = d.__sentry_span__; | |
| if (C) g6.setHttpStatus(C, G.statusCode), C.end(); | |
| if (this._options.breadcrumbs) g6.addBreadcrumb({ | |
| category: "http", | |
| data: { | |
| method: d.method, | |
| status_code: G.statusCode, | |
| url: Z | |
| }, | |
| type: "http" | |
| }, { | |
| event: "response", | |
| request: d, | |
| response: G | |
| }) | |
| } | |
| } | |
| __init6() { | |
| this._onRequestError = (I) => { | |
| if (!cm([g6.getClient, "call", (C) => C(), "optionalAccess", (C) => C.getIntegration, "call", (C) => C(nI)])) return; | |
| let { | |
| request: d | |
| } = I, G = d.origin ? d.origin.toString() + d.path : d.path; | |
| if (g6.isSentryRequestUrl(G, g6.getClient())) return; | |
| let Z = d.__sentry_span__; | |
| if (Z) Z.setStatus("internal_error"), Z.end(); | |
| if (this._options.breadcrumbs) g6.addBreadcrumb({ | |
| category: "http", | |
| data: { | |
| method: d.method, | |
| url: G | |
| }, | |
| level: "error", | |
| type: "http" | |
| }, { | |
| event: "error", | |
| request: d | |
| }) | |
| } | |
| } | |
| } | |
| nI.__initStatic(); | |
| function et2(I, d, G) { | |
| let Z; | |
| if (Array.isArray(I.headers)) Z = I.headers.some((C) => C === "sentry-trace"); | |
| else Z = I.headers.split(`\r | |
| `).some((W) => W.startsWith("sentry-trace:")); | |
| if (Z) return; | |
| if (I.addHeader("sentry-trace", d), G) I.addHeader("baggage", G) | |
| } | |
| function tt2(I, d, G) { | |
| let Z = SF.parseUrl(G), | |
| C = d.method || "GET", | |
| W = { | |
| "http.method": C | |
| }; | |
| if (Z.search) W["http.query"] = Z.search; | |
| if (Z.hash) W["http.fragment"] = Z.hash; | |
| return cm([I, "optionalAccess", (w) => w.startChild, "call", (w) => w({ | |
| op: "http.client", | |
| origin: "auto.http.node.undici", | |
| description: `${C} ${SF.getSanitizedUrlString(Z)}`, | |
| data: W | |
| })]) | |
| } | |
| xS1.Undici = nI; | |
| xS1.nativeNodeFetchintegration = ot2 | |
| }); | |
| var L01 = Y((iS1) => { | |
| Object.defineProperty(iS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var cS1 = B1("path"), | |
| G14 = V0(); | |
| function pS1(I) { | |
| return I.replace(/^[A-Z]:/, "").replace(/\\/g, "/") | |
| } | |
| function Z14(I = process.argv[1] ? G14.dirname(process.argv[1]) : process.cwd(), d = cS1.sep === "\\") { | |
| let G = d ? pS1(I) : I; | |
| return (Z) => { | |
| if (!Z) return; | |
| let C = d ? pS1(Z) : Z, | |
| { | |
| dir: W, | |
| base: w, | |
| ext: B | |
| } = cS1.posix.parse(C); | |
| if (B === ".js" || B === ".mjs" || B === ".cjs") w = w.slice(0, B.length * -1); | |
| if (!W) W = "."; | |
| let A = W.lastIndexOf("/node_modules"); | |
| if (A > -1) return `${W.slice(A+14).replace(/\//g,".")}:${w}`; | |
| if (W.startsWith(G)) { | |
| let V = W.slice(G.length + 1).replace(/\//g, "."); | |
| if (V) V += ":"; | |
| return V += w, V | |
| } | |
| return w | |
| } | |
| } | |
| iS1.createGetModuleFromFilename = Z14 | |
| }); | |
| var y01 = Y((oS1) => { | |
| var { | |
| _optionalChain: W14 | |
| } = V0(); | |
| Object.defineProperty(oS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var aG = V4(), | |
| LF = V0(), | |
| w14 = OM1(), | |
| B14 = F01(), | |
| A14 = Sm(), | |
| V14 = Lm(), | |
| X14 = Pm(), | |
| Y14 = $m(), | |
| _14 = Om(), | |
| D14 = mm(), | |
| H14 = hm(), | |
| F14 = km(), | |
| g14 = xm(), | |
| J14 = pm(), | |
| K14 = L01(), | |
| N14 = K01(), | |
| nS1 = [aG.inboundFiltersIntegration(), aG.functionToStringIntegration(), aG.linkedErrorsIntegration(), aG.requestDataIntegration(), A14.consoleIntegration(), Y14.httpIntegration(), J14.nativeNodeFetchintegration(), H14.onUncaughtExceptionIntegration(), F14.onUnhandledRejectionIntegration(), X14.contextLinesIntegration(), _14.localVariablesIntegration(), V14.nodeContextIntegration(), D14.modulesIntegration()]; | |
| function rS1(I) { | |
| let d = aG.getMainCarrier(), | |
| G = W14([d, "access", (Z) => Z.__SENTRY__, "optionalAccess", (Z) => Z.integrations]) || []; | |
| return [...nS1, ...G] | |
| } | |
| function z14(I = {}) { | |
| if (w14.setNodeAsyncContextStrategy(), I.defaultIntegrations === void 0) I.defaultIntegrations = rS1(); | |
| if (I.dsn === void 0 && process.env.SENTRY_DSN) I.dsn = process.env.SENTRY_DSN; | |
| let d = process.env.SENTRY_TRACES_SAMPLE_RATE; | |
| if (I.tracesSampleRate === void 0 && d) { | |
| let Z = parseFloat(d); | |
| if (isFinite(Z)) I.tracesSampleRate = Z | |
| } | |
| if (I.release === void 0) { | |
| let Z = aS1(); | |
| if (Z !== void 0) I.release = Z; | |
| else I.autoSessionTracking = !1 | |
| } | |
| if (I.environment === void 0 && process.env.SENTRY_ENVIRONMENT) I.environment = process.env.SENTRY_ENVIRONMENT; | |
| if (I.autoSessionTracking === void 0 && I.dsn !== void 0) I.autoSessionTracking = !0; | |
| if (I.instrumenter === void 0) I.instrumenter = "sentry"; | |
| let G = { | |
| ...I, | |
| stackParser: LF.stackParserFromStackParserOptions(I.stackParser || sS1), | |
| integrations: aG.getIntegrationsToSetup(I), | |
| transport: I.transport || N14.makeNodeTransport | |
| }; | |
| if (aG.initAndBind(I.clientClass || B14.NodeClient, G), I.autoSessionTracking) f14(); | |
| if (q14(), I.spotlight) { | |
| let Z = aG.getClient(); | |
| if (Z && Z.addIntegration) { | |
| let C = Z.getOptions().integrations; | |
| for (let W of C) Z.addIntegration(W); | |
| Z.addIntegration(g14.spotlightIntegration({ | |
| sidecarUrl: typeof I.spotlight === "string" ? I.spotlight : void 0 | |
| })) | |
| } | |
| } | |
| } | |
| function Q14(I) { | |
| if (I === void 0) return !1; | |
| let d = I && I.getOptions(); | |
| if (d && d.autoSessionTracking !== void 0) return d.autoSessionTracking; | |
| return !1 | |
| } | |
| function aS1(I) { | |
| if (process.env.SENTRY_RELEASE) return process.env.SENTRY_RELEASE; | |
| if (LF.GLOBAL_OBJ.SENTRY_RELEASE && LF.GLOBAL_OBJ.SENTRY_RELEASE.id) return LF.GLOBAL_OBJ.SENTRY_RELEASE.id; | |
| return process.env.GITHUB_SHA || process.env.COMMIT_REF || process.env.VERCEL_GIT_COMMIT_SHA || process.env.VERCEL_GITHUB_COMMIT_SHA || process.env.VERCEL_GITLAB_COMMIT_SHA || process.env.VERCEL_BITBUCKET_COMMIT_SHA || process.env.ZEIT_GITHUB_COMMIT_SHA || process.env.ZEIT_GITLAB_COMMIT_SHA || process.env.ZEIT_BITBUCKET_COMMIT_SHA || process.env.CF_PAGES_COMMIT_SHA || I | |
| } | |
| var sS1 = LF.createStackParser(LF.nodeStackLineParser(K14.createGetModuleFromFilename())); | |
| function f14() { | |
| aG.startSession(), process.on("beforeExit", () => { | |
| let I = aG.getIsolationScope().getSession(); | |
| if (I && !["exited", "crashed"].includes(I.status)) aG.endSession() | |
| }) | |
| } | |
| function q14() { | |
| let I = (process.env.SENTRY_USE_ENVIRONMENT || "").toLowerCase(); | |
| if (!["false", "n", "no", "off", "0"].includes(I)) { | |
| let d = process.env.SENTRY_TRACE, | |
| G = process.env.SENTRY_BAGGAGE, | |
| Z = LF.propagationContextFromHeaders(d, G); | |
| aG.getCurrentScope().setPropagationContext(Z) | |
| } | |
| } | |
| oS1.defaultIntegrations = nS1; | |
| oS1.defaultStackParser = sS1; | |
| oS1.getDefaultIntegrations = rS1; | |
| oS1.getSentryRelease = aS1; | |
| oS1.init = z14; | |
| oS1.isAutoSessionTrackingEnabled = Q14 | |
| }); | |
| var tS1 = Y((eS1) => { | |
| Object.defineProperty(eS1, "__esModule", { | |
| value: !0 | |
| }); | |
| var im = B1("fs"), | |
| P01 = B1("path"); | |
| function L14(I) { | |
| let d = P01.resolve(I); | |
| if (!im.existsSync(d)) throw new Error(`Cannot read contents of ${d}. Directory does not exist.`); | |
| if (!im.statSync(d).isDirectory()) throw new Error(`Cannot read contents of ${d}, because it is not a directory.`); | |
| let G = (Z) => { | |
| return im.readdirSync(Z).reduce((C, W) => { | |
| let w = P01.join(Z, W); | |
| if (im.statSync(w).isDirectory()) return C.concat(G(w)); | |
| return C.push(w), C | |
| }, []) | |
| }; | |
| return G(d).map((Z) => P01.relative(d, Z)) | |
| } | |
| eS1.deepReadDirSync = L14 | |
| }); | |
| var IL1 = Y((P14) => { | |
| /*! @sentry/node 7.120.0 (611282e) | https://github.com/getsentry/sentry-javascript */ | |
| P14.base64WorkerScript = "aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ2luc3BlY3Rvcic7CmltcG9ydCB7IHdvcmtlckRhdGEsIHBhcmVudFBvcnQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7CmltcG9ydCB7IHBvc2l4LCBzZXAgfSBmcm9tICdwYXRoJzsKaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJzsKaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnOwppbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7CmltcG9ydCB7IGNyZWF0ZUd6aXAgfSBmcm9tICd6bGliJzsKaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7CmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZApjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlCiAqIHtAbGluayBpc0Vycm9yfS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7CiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHsKICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzoKICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6CiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7CiAgfQp9Ci8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYnVpbHQtaW4gY2xhc3MuCiAqCiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQKICogQHBhcmFtIGNsYXNzTmFtZQogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0J1aWx0aW4od2F0LCBjbGFzc05hbWUpIHsKICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZwogKiB7QGxpbmsgaXNTdHJpbmd9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7CiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdTdHJpbmcnKTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS4KICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHsKICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ09iamVjdCcpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlCiAqIHtAbGluayBpc0V2ZW50fS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UKICoge0BsaW5rIGlzRWxlbWVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0VsZW1lbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKi8KZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7Cn0KCi8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudAogKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkgewogIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0Owp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgTmFOCiAqIHtAbGluayBpc05hTn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc05hTiQxKHdhdCkgewogIHJldHVybiB0eXBlb2Ygd2F0ID09PSAnbnVtYmVyJyAmJiB3YXQgIT09IHdhdDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci4KICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkgewogIHRyeSB7CiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTsKICB9IGNhdGNoIChfZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHsKICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuCiAgcmV0dXJuICEhKHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmIHdhdCAhPT0gbnVsbCAmJiAoKHdhdCApLl9faXNWdWUgfHwgKHdhdCApLl9pc1Z1ZSkpOwp9CgovKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqLwoKLy8gVGhlIGNvZGUgYmVsb3cgZm9yICdpc0dsb2JhbE9iaicgYW5kICdHTE9CQUxfT0JKJyB3YXMgY29waWVkIGZyb20gY29yZS1qcyBiZWZvcmUgbW9kaWZpY2F0aW9uCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMKLy8gY29yZS1qcyBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbmNlOgovLwovLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYKLy8KLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQovLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAovLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8vCi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgovLwovLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgovLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgovLyBUSEUgU09GVFdBUkUuCgovKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi8KZnVuY3Rpb24gaXNHbG9iYWxPYmoob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiBvYmouTWF0aCA9PSBNYXRoID8gb2JqIDogdW5kZWZpbmVkOwp9CgovKiogR2V0J3MgdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcnVudGltZSAqLwpjb25zdCBHTE9CQUxfT0JKID0KICAodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsVGhpcykpIHx8CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8CiAgKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHNlbGYpKSB8fAogICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbCkpIHx8CiAgKGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzOwogIH0pKCkgfHwKICB7fTsKCi8qKgogKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjgKICovCmZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHsKICByZXR1cm4gR0xPQkFMX09CSiA7Cn0KCi8qKgogKiBSZXR1cm5zIGEgZ2xvYmFsIHNpbmdsZXRvbiBjb250YWluZWQgaW4gdGhlIGdsb2JhbCBgX19TRU5UUllfX2Agb2JqZWN0LgogKgogKiBJZiB0aGUgc2luZ2xldG9uIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiBgX19TRU5UUllfX2AsIGl0IHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGUgZ2l2ZW4gZmFjdG9yeQogKiBmdW5jdGlvbiBhbmQgYWRkZWQgdG8gdGhlIGBfX1NFTlRSWV9fYCBvYmplY3QuCiAqCiAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIGdsb2JhbCBzaW5nbGV0b24gb24gX19TRU5UUllfXwogKiBAcGFyYW0gY3JlYXRvciBjcmVhdG9yIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBzaW5nbGV0b24gaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uIGBfX1NFTlRSWV9fYAogKiBAcGFyYW0gb2JqIChPcHRpb25hbCkgVGhlIGdsb2JhbCBvYmplY3Qgb24gd2hpY2ggdG8gbG9vayBmb3IgYF9fU0VOVFJZX19gLCBpZiBub3QgYEdMT0JBTF9PQkpgJ3MgcmV0dXJuIHZhbHVlCiAqIEByZXR1cm5zIHRoZSBzaW5nbGV0b24KICovCmZ1bmN0aW9uIGdldEdsb2JhbFNpbmdsZXRvbihuYW1lLCBjcmVhdG9yLCBvYmopIHsKICBjb25zdCBnYmwgPSAob2JqIHx8IEdMT0JBTF9PQkopIDsKICBjb25zdCBfX1NFTlRSWV9fID0gKGdibC5fX1NFTlRSWV9fID0gZ2JsLl9fU0VOVFJZX18gfHwge30pOwogIGNvbnN0IHNpbmdsZXRvbiA9IF9fU0VOVFJZX19bbmFtZV0gfHwgKF9fU0VOVFJZX19bbmFtZV0gPSBjcmVhdG9yKCkpOwogIHJldHVybiBzaW5nbGV0b247Cn0KCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpjb25zdCBXSU5ET1cgPSBnZXRHbG9iYWxPYmplY3QoKTsKCmNvbnN0IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEggPSA4MDsKCi8qKgogKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdAogKiBhbmQgaXRzIGFuY2VzdG9ycwogKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZygKICBlbGVtLAogIG9wdGlvbnMgPSB7fSwKKSB7CiAgaWYgKCFlbGVtKSB7CiAgICByZXR1cm4gJzx1bmtub3duPic7CiAgfQoKICAvLyB0cnkvY2F0Y2ggYm90aDoKICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KQogIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseQogIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAgdHJ5IHsKICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gOwogICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBoZWlnaHQgPSAwOwogICAgbGV0IGxlbiA9IDA7CiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJzsKICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7CiAgICBsZXQgbmV4dFN0cjsKICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzOwogICAgY29uc3QgbWF4U3RyaW5nTGVuZ3RoID0gKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoKSB8fCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIOwoKICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHsKICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7CiAgICAgIC8vIGJhaWwgb3V0IGlmCiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnQKICAgICAgLy8gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGV4Y2VlZHMgbWF4U3RyaW5nTGVuZ3RoCiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKQogICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIG91dC5wdXNoKG5leHRTdHIpOwoKICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoOwogICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpOwogIH0gY2F0Y2ggKF9vTykgewogICAgcmV0dXJuICc8dW5rbm93bj4nOwogIH0KfQoKLyoqCiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnQKICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7CiAgY29uc3QgZWxlbSA9IGVsCgo7CgogIGNvbnN0IG91dCA9IFtdOwogIGxldCBjbGFzc05hbWU7CiAgbGV0IGNsYXNzZXM7CiAgbGV0IGtleTsKICBsZXQgYXR0cjsKICBsZXQgaTsKCiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHsKICAgIHJldHVybiAnJzsKICB9CgogIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudAogIGlmIChXSU5ET1cuSFRNTEVsZW1lbnQpIHsKICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZQogICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkgewogICAgICByZXR1cm4gZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXTsKICAgIH0KICB9CgogIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKCiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuCiAgY29uc3Qga2V5QXR0clBhaXJzID0KICAgIGtleUF0dHJzICYmIGtleUF0dHJzLmxlbmd0aAogICAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKQogICAgICA6IG51bGw7CgogIGlmIChrZXlBdHRyUGFpcnMgJiYga2V5QXR0clBhaXJzLmxlbmd0aCkgewogICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4gewogICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PSIke2tleUF0dHJQYWlyWzFdfSJdYCk7CiAgICB9KTsKICB9IGVsc2UgewogICAgaWYgKGVsZW0uaWQpIHsKICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7CiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTsKICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBhbGxvd2VkQXR0cnNbaV07CiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTsKICAgIGlmIChhdHRyKSB7CiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PSIke2F0dHJ9Il1gKTsKICAgIH0KICB9CiAgcmV0dXJuIG91dC5qb2luKCcnKTsKfQoKLyoqCiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLgogKgogKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuCiAqLwpjb25zdCBERUJVR19CVUlMRCQxID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqLwpjb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnOwoKY29uc3QgQ09OU09MRV9MRVZFTFMgPSBbCiAgJ2RlYnVnJywKICAnaW5mbycsCiAgJ3dhcm4nLAogICdlcnJvcicsCiAgJ2xvZycsCiAgJ2Fzc2VydCcsCiAgJ3RyYWNlJywKXSA7CgovKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovCmNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZHMKCiA9IHt9OwoKLyoqIEpTRG9jICovCgovKioKICogVGVtcG9yYXJpbHkgZGlzYWJsZSBzZW50cnkgY29uc29sZSBpbnN0cnVtZW50YXRpb25zLgogKgogKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXMKICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykgewogIGlmICghKCdjb25zb2xlJyBpbiBHTE9CQUxfT0JKKSkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfQoKICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDsKICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTsKCiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDsKCiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHMKICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gOwogICAgd3JhcHBlZEZ1bmNzW2xldmVsXSA9IGNvbnNvbGVbbGV2ZWxdIDsKICAgIGNvbnNvbGVbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kOwogIH0pOwoKICB0cnkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfSBmaW5hbGx5IHsKICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlCiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgICBjb25zb2xlW2xldmVsXSA9IHdyYXBwZWRGdW5jc1tsZXZlbF0gOwogICAgfSk7CiAgfQp9CgpmdW5jdGlvbiBtYWtlTG9nZ2VyKCkgewogIGxldCBlbmFibGVkID0gZmFsc2U7CiAgY29uc3QgbG9nZ2VyID0gewogICAgZW5hYmxlOiAoKSA9PiB7CiAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgfSwKICAgIGRpc2FibGU6ICgpID0+IHsKICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgfSwKICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCwKICB9OwoKICBpZiAoREVCVUdfQlVJTEQkMSkgewogICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAgICAgICBHTE9CQUxfT0JKLmNvbnNvbGVbbmFtZV0oYCR7UFJFRklYfVske25hbWV9XTpgLCAuLi5hcmdzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4gewogICAgICBsb2dnZXJbbmFtZV0gPSAoKSA9PiB1bmRlZmluZWQ7CiAgICB9KTsKICB9CgogIHJldHVybiBsb2dnZXIgOwp9Cgpjb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7CgovKioKICogUmVuZGVycyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHNuLgogKgogKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmVuZGVyIHRoZSBwdWJsaWMgcmVwcmVzZW50YXRpb24gd2l0aG91dCB0aGUgcGFzc3dvcmQKICogY29tcG9uZW50LiBUbyBnZXQgdGhlIGRlcHJlY2F0ZWQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgCiAqIHRvIHRydWUuCiAqCiAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuCiAqLwpmdW5jdGlvbiBkc25Ub1N0cmluZyhkc24sIHdpdGhQYXNzd29yZCA9IGZhbHNlKSB7CiAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IGRzbjsKICByZXR1cm4gKAogICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICsKICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YAogICk7Cn0KCi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi8KY2xhc3MgU2VudHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqLwoKICAgY29uc3RydWN0b3IoIG1lc3NhZ2UsIGxvZ0xldmVsID0gJ3dhcm4nKSB7CiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTsKICAgIC8vIFRoaXMgc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIGBFcnJvcmAsIG5vdCBgU2VudHJ5RXJyb3JgLiBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIHRoaXMsIGJ1dCBjb21tZW50aW5nIHRoaXMgbGluZQogICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXMKICAgIC8vIGluc3RhbmNlcyBvZiBgU2VudHJ5RXJyb3JgIGZhaWwgYG9iaiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yYCBjaGVja3MuCiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOwogICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsOwogIH0KfQoKLyoqCiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdAogKgogKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXMKICogQHJldHVybnMgc3RyaW5nIEVuY29kZWQKICovCmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KQogICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKQogICAgLmpvaW4oJyYnKTsKfQoKLyoqCiAqIFRyYW5zZm9ybXMgYW55IGBFcnJvcmAgb3IgYEV2ZW50YCBpbnRvIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIG9mIHRoZWlyIGVudW1lcmFibGUgcHJvcGVydGllcywgYW5kIHNvbWUgb2YgdGhlaXIKICogbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdHRhY2hlZC4KICoKICogQHBhcmFtIHZhbHVlIEluaXRpYWwgc291cmNlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2Zvcm0gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplcgogKiBAcmV0dXJucyBBbiBFdmVudCBvciBFcnJvciB0dXJuZWQgaW50byBhbiBvYmplY3QgLSBvciB0aGUgdmFsdWUgYXJndXJtZW50IGl0c2VsZiwgd2hlbiB2YWx1ZSBpcyBuZWl0aGVyIGFuIEV2ZW50IG5vcgogKiAgYW4gRXJyb3IuCiAqLwpmdW5jdGlvbiBjb252ZXJ0VG9QbGFpbk9iamVjdCgKICB2YWx1ZSwKKQoKIHsKICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIHJldHVybiB7CiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsCiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjaywKICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksCiAgICB9OwogIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHsKICAgIGNvbnN0IG5ld09iagoKID0gewogICAgICB0eXBlOiB2YWx1ZS50eXBlLAogICAgICB0YXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLnRhcmdldCksCiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLAogICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSwKICAgIH07CgogICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHsKICAgICAgbmV3T2JqLmRldGFpbCA9IHZhbHVlLmRldGFpbDsKICAgIH0KCiAgICByZXR1cm4gbmV3T2JqOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovKiogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IG9mIGFuIGBFdmVudGAgb2JqZWN0ICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkgewogIHRyeSB7CiAgICByZXR1cm4gaXNFbGVtZW50KHRhcmdldCkgPyBodG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTsKICB9IGNhdGNoIChfb08pIHsKICAgIHJldHVybiAnPHVua25vd24+JzsKICB9Cn0KCi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovCmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewogICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTsKICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHsKICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7CiAgfSBlbHNlIHsKICAgIHJldHVybiB7fTsKICB9Cn0KCi8qKgogKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gYSBuZXcgb2JqZWN0IGhhdmluZyByZW1vdmVkIGFsbCBmaWVsZHMgd2hvc2UgdmFsdWUgd2FzIGB1bmRlZmluZWRgLgogKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuCiAqCiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBrZWVwcyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7CiAgLy8gVGhpcyBtYXAga2VlcHMgdHJhY2sgb2Ygd2hhdCBhbHJlYWR5IHZpc2l0ZWQgbm9kZXMgbWFwIHRvLgogIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhcgogIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC4KICBjb25zdCBtZW1vaXphdGlvbk1hcCA9IG5ldyBNYXAoKTsKCiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSQogIHJldHVybiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApOwp9CgpmdW5jdGlvbiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApIHsKICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBvYmplY3QgaXQgd2FzIG1hcHBlZCB0byBpbiB0aGUgbmV3IG9iamVjdAogICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTsKICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIG1lbW9WYWwgOwogICAgfQoKICAgIGNvbnN0IHJldHVyblZhbHVlID0ge307CiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YQogICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTsKCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKSkgewogICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWVba2V5XSwgbWVtb2l6YXRpb25NYXApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0CiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpOwogICAgaWYgKG1lbW9WYWwgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gbWVtb1ZhbCA7CiAgICB9CgogICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTsKICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhCiAgICBtZW1vaXphdGlvbk1hcC5zZXQoaW5wdXRWYWx1ZSwgcmV0dXJuVmFsdWUpOwoKICAgIGlucHV0VmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyhpdGVtLCBtZW1vaXphdGlvbk1hcCkpOwogICAgfSk7CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIHJldHVybiBpbnB1dFZhbHVlOwp9CgpmdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHsKICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB0cnkgewogICAgY29uc3QgbmFtZSA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICkuY29uc3RydWN0b3IubmFtZTsKICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JzsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8qKgogKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/CiAqLwpmdW5jdGlvbiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUsIGlzTmF0aXZlID0gZmFsc2UpIHsKICBjb25zdCBpc0ludGVybmFsID0KICAgIGlzTmF0aXZlIHx8CiAgICAoZmlsZW5hbWUgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoCiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcvJykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgKICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBhIGRvdAogICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmCiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFjawogICAgICAhZmlsZW5hbWUubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpOyAvLyBTY2hlbWEgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2NDE3ODIKCiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlcwogIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXMKICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzYKCiAgcmV0dXJuICFpc0ludGVybmFsICYmIGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgIWZpbGVuYW1lLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvJyk7Cn0KCmNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDsKY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vOwoKLyoqCiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy4KICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlCiAqIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSBjcmFzaCBpcyB0aGUgbGFzdCBmcmFtZSBpbiB0aGUgYXJyYXkuCiAqIEBoaWRkZW4KICovCmZ1bmN0aW9uIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZShzdGFjaykgewogIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICByZXR1cm4gW107CiAgfQoKICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CgogIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbCkKICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgbG9jYWxTdGFjay5wb3AoKTsKICB9CgogIC8vIFJldmVyc2luZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9jZWR1cmUgYWxsb3dzIHVzIHRvIGp1c3QgcG9wIHRoZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjawogIGxvY2FsU3RhY2sucmV2ZXJzZSgpOwoKICAvLyBJZiBzdGFjayBlbmRzIHdpdGggb25lIG9mIG91ciBpbnRlcm5hbCBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoZW5kcywgbWVhbmluZyBpdCdzIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIC0gYWthIHRvcC1tb3N0IGNhbGwpCiAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHsKICAgIGxvY2FsU3RhY2sucG9wKCk7CgogICAgLy8gV2hlbiB1c2luZyBzeW50aGV0aWMgZXZlbnRzLCB3ZSB3aWxsIGhhdmUgYSAyIGxldmVscyBkZWVwIHN0YWNrLCBhcyBgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJylgCiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDoKICAgIC8vCiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKCkKICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKQogICAgLy8KICAgIC8vIGluc3RlYWQgb2YganVzdCB0aGUgdG9wIGBTZW50cnlgIGNhbGwgaXRzZWxmLgogICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuCiAgICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgICBsb2NhbFN0YWNrLnBvcCgpOwogICAgfQogIH0KCiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7CiAgICAuLi5mcmFtZSwKICAgIGZpbGVuYW1lOiBmcmFtZS5maWxlbmFtZSB8fCBsb2NhbFN0YWNrW2xvY2FsU3RhY2subGVuZ3RoIC0gMV0uZmlsZW5hbWUsCiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLAogIH0pKTsKfQoKY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7CgovKioKICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZgogKi8KZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7CiAgdHJ5IHsKICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogICAgfQogICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHMKICAgIC8vIGNhbiBjYXVzZSBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS4KICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogIH0KfQoKLyoqCiAqIFVVSUQ0IGdlbmVyYXRvcgogKgogKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LgogKi8KZnVuY3Rpb24gdXVpZDQoKSB7CiAgY29uc3QgZ2JsID0gR0xPQkFMX09CSiA7CiAgY29uc3QgY3J5cHRvID0gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87CgogIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2OwogIHRyeSB7CiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21VVUlEKSB7CiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpOwogICAgfQogICAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7CiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5CiAgICAgICAgLy8gaW4gb2xkIENocm9taXVtIHZlcnNpb25zIChlLmcuIDIzLjAuMTIzNS4wICgxNTE0MjIpKQogICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuCiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5CiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7CiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07CiAgICAgIH07CiAgICB9CiAgfSBjYXRjaCAoXykgewogICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzCiAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXMgc3RyaW5ncyByZXN1bHRzIGluICcxMDAwMDAwMDEwMDA0MDAwODAwMDEwMDAwMDAwMDAwMCcKICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UKICAgICgoYyApIF4gKChnZXRSYW5kb21CeXRlKCkgJiAxNSkgPj4gKChjICkgLyA0KSkpLnRvU3RyaW5nKDE2KSwKICApOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IGlzIGFscmVhZHkgYW4gYXJyYXksIGFuZCBpZiBpdCBpc24ndCwgd3JhcHMgaXQgaW4gb25lLgogKgogKiBAcGFyYW0gbWF5YmVBcnJheSBJbnB1dCB0byB0dXJuIGludG8gYW4gYXJyYXksIGlmIG5lY2Vzc2FyeQogKiBAcmV0dXJucyBUaGUgaW5wdXQsIGlmIGFscmVhZHkgYW4gYXJyYXksIG9yIGFuIGFycmF5IHdpdGggdGhlIGlucHV0IGFzIHRoZSBvbmx5IGVsZW1lbnQsIGlmIG5vdAogKi8KZnVuY3Rpb24gYXJyYXlpZnkobWF5YmVBcnJheSkgewogIHJldHVybiBBcnJheS5pc0FycmF5KG1heWJlQXJyYXkpID8gbWF5YmVBcnJheSA6IFttYXliZUFycmF5XTsKfQoKLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovCi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi8KCi8qKgogKiBIZWxwZXIgdG8gZGVjeWNsZSBqc29uIG9iamVjdHMKICovCmZ1bmN0aW9uIG1lbW9CdWlsZGVyKCkgewogIGNvbnN0IGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJzsKICBjb25zdCBpbm5lciA9IGhhc1dlYWtTZXQgPyBuZXcgV2Vha1NldCgpIDogW107CiAgZnVuY3Rpb24gbWVtb2l6ZShvYmopIHsKICAgIGlmIChoYXNXZWFrU2V0KSB7CiAgICAgIGlmIChpbm5lci5oYXMob2JqKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlubmVyLmFkZChvYmopOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2YKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgdmFsdWUgPSBpbm5lcltpXTsKICAgICAgaWYgKHZhbHVlID09PSBvYmopIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaW5uZXIucHVzaChvYmopOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gdW5tZW1vaXplKG9iaikgewogICAgaWYgKGhhc1dlYWtTZXQpIHsKICAgICAgaW5uZXIuZGVsZXRlKG9iaik7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGlubmVyW2ldID09PSBvYmopIHsKICAgICAgICAgIGlubmVyLnNwbGljZShpLCAxKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gW21lbW9pemUsIHVubWVtb2l6ZV07Cn0KCi8qKgogKiBSZWN1cnNpdmVseSBub3JtYWxpemVzIHRoZSBnaXZlbiBvYmplY3QuCiAqCiAqIC0gQ3JlYXRlcyBhIGNvcHkgdG8gcHJldmVudCBvcmlnaW5hbCBpbnB1dCBtdXRhdGlvbgogKiAtIFNraXBzIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMKICogLSBXaGVuIHN0cmluZ2lmeWluZywgY2FsbHMgYHRvSlNPTmAgaWYgaW1wbGVtZW50ZWQKICogLSBSZW1vdmVzIGNpcmN1bGFyIHJlZmVyZW5jZXMKICogLSBUcmFuc2xhdGVzIG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIChgdW5kZWZpbmVkYC9gTmFOYC9mdW5jdGlvbnMpIHRvIHNlcmlhbGl6YWJsZSBmb3JtYXQKICogLSBUcmFuc2xhdGVzIGtub3duIGdsb2JhbCBvYmplY3RzL2NsYXNzZXMgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25zCiAqIC0gVGFrZXMgY2FyZSBvZiBgRXJyb3JgIG9iamVjdCBzZXJpYWxpemF0aW9uCiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgZGVwdGggb2YgZmluYWwgb3V0cHV0CiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXkKICoKICogQHBhcmFtIGlucHV0IFRoZSBvYmplY3QgdG8gYmUgbm9ybWFsaXplZC4KICogQHBhcmFtIGRlcHRoIFRoZSBtYXggZGVwdGggdG8gd2hpY2ggdG8gbm9ybWFsaXplIHRoZSBvYmplY3QuIChBbnl0aGluZyBkZWVwZXIgc3RyaW5naWZpZWQgd2hvbGUuKQogKiBAcGFyYW0gbWF4UHJvcGVydGllcyBUaGUgbWF4IG51bWJlciBvZiBlbGVtZW50cyBvciBwcm9wZXJ0aWVzIHRvIGJlIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgYXJyYXkgb3IKICogb2JqZWN0IGluIHRoZSBub3JtYWxsaXplZCBvdXRwdXQuCiAqIEByZXR1cm5zIEEgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBvYmplY3QsIG9yIGAiKipub24tc2VyaWFsaXphYmxlKioiYCBpZiBhbnkgZXJyb3JzIGFyZSB0aHJvd24gZHVyaW5nIG5vcm1hbGl6YXRpb24uCiAqLwovLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQpmdW5jdGlvbiBub3JtYWxpemUoaW5wdXQsIGRlcHRoID0gMTAwLCBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5KSB7CiAgdHJ5IHsKICAgIC8vIHNpbmNlIHdlJ3JlIGF0IHRoZSBvdXRlcm1vc3QgbGV2ZWwsIHdlIGRvbid0IHByb3ZpZGUgYSBrZXkKICAgIHJldHVybiB2aXNpdCgnJywgaW5wdXQsIGRlcHRoLCBtYXhQcm9wZXJ0aWVzKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiB7IEVSUk9SOiBgKipub24tc2VyaWFsaXphYmxlKiogKCR7ZXJyfSlgIH07CiAgfQp9CgovKioKICogVmlzaXRzIGEgbm9kZSB0byBwZXJmb3JtIG5vcm1hbGl6YXRpb24gb24gaXQKICoKICogQHBhcmFtIGtleSBUaGUga2V5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIG5vZGUKICogQHBhcmFtIHZhbHVlIFRoZSBub2RlIHRvIGJlIHZpc2l0ZWQKICogQHBhcmFtIGRlcHRoIE9wdGlvbmFsIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aAogKiBAcGFyYW0gbWF4UHJvcGVydGllcyBPcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzL2VsZW1lbnRzIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgb2JqZWN0L2FycmF5CiAqIEBwYXJhbSBtZW1vIE9wdGlvbmFsIE1lbW8gY2xhc3MgaGFuZGxpbmcgZGVjeWNsaW5nCiAqLwpmdW5jdGlvbiB2aXNpdCgKICBrZXksCiAgdmFsdWUsCiAgZGVwdGggPSArSW5maW5pdHksCiAgbWF4UHJvcGVydGllcyA9ICtJbmZpbml0eSwKICBtZW1vID0gbWVtb0J1aWxkZXIoKSwKKSB7CiAgY29uc3QgW21lbW9pemUsIHVubWVtb2l6ZV0gPSBtZW1vOwoKICAvLyBHZXQgdGhlIHNpbXBsZSBjYXNlcyBvdXQgb2YgdGhlIHdheSBmaXJzdAogIGlmICgKICAgIHZhbHVlID09IG51bGwgfHwgLy8gdGhpcyBtYXRjaGVzIG51bGwgYW5kIHVuZGVmaW5lZCAtPiBlcWVxIG5vdCBlcWVxZXEKICAgIChbJ251bWJlcicsICdib29sZWFuJywgJ3N0cmluZyddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkgJiYgIWlzTmFOJDEodmFsdWUpKQogICkgewogICAgcmV0dXJuIHZhbHVlIDsKICB9CgogIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5VmFsdWUoa2V5LCB2YWx1ZSk7CgogIC8vIEFueXRoaW5nIHdlIGNvdWxkIHBvdGVudGlhbGx5IGRpZyBpbnRvIG1vcmUgKG9iamVjdHMgb3IgYXJyYXlzKSB3aWxsIGhhdmUgY29tZSBiYWNrIGFzIGAiW29iamVjdCBYWFhYXSJgLgogIC8vIEV2ZXJ5dGhpbmcgZWxzZSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHNlcmlhbGl6ZWQsIHNvIGlmIHdlIGRvbid0IHNlZSB0aGF0IHBhdHRlcm4sIHdlJ3JlIGRvbmUuCiAgaWYgKCFzdHJpbmdpZmllZC5zdGFydHNXaXRoKCdbb2JqZWN0ICcpKSB7CiAgICByZXR1cm4gc3RyaW5naWZpZWQ7CiAgfQoKICAvLyBGcm9tIGhlcmUgb24sIHdlIGNhbiBhc3NlcnQgdGhhdCBgdmFsdWVgIGlzIGVpdGhlciBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuCgogIC8vIERvIG5vdCBub3JtYWxpemUgb2JqZWN0cyB0aGF0IHdlIGtub3cgaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gQXMgYSBnZW5lcmFsIHJ1bGUsIHRoZQogIC8vICJfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXyIgcHJvcGVydHkgc2hvdWxkIG9ubHkgYmUgdXNlZCBzcGFyaW5nbHkgYW5kIG9ubHkgc2hvdWxkIG9ubHkgYmUgc2V0IG9uIG9iamVjdHMgdGhhdAogIC8vIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuCiAgaWYgKCh2YWx1ZSApWydfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXyddKSB7CiAgICByZXR1cm4gdmFsdWUgOwogIH0KCiAgLy8gV2UgY2FuIHNldCBgX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fYCBvbiBhbiBvYmplY3QgdG8gZW5zdXJlIHRoYXQgZnJvbSB0aGVyZQogIC8vIFdlIGtlZXAgYSBjZXJ0YWluIGFtb3VudCBvZiBkZXB0aC4KICAvLyBUaGlzIHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSwgZS5nLiB3ZSB1c2UgaXQgZm9yIHRoZSByZWR1eCBpbnRlZ3JhdGlvbiB0byBlbnN1cmUgd2UgZ2V0IGEgY2VydGFpbiBhbW91bnQgb2Ygc3RhdGUuCiAgY29uc3QgcmVtYWluaW5nRGVwdGggPQogICAgdHlwZW9mICh2YWx1ZSApWydfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX18nXSA9PT0gJ251bWJlcicKICAgICAgPyAoKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddICkKICAgICAgOiBkZXB0aDsKCiAgLy8gV2UncmUgYWxzbyBkb25lIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIG1heCBkZXB0aAogIGlmIChyZW1haW5pbmdEZXB0aCA9PT0gMCkgewogICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IGBzZXJpYWxpemVkYCBpcyBhIHN0cmluZyBvZiB0aGUgZm9ybSBgIltvYmplY3QgWFhYWF0iYC4gQ2xlYW4gaXQgdXAgc28gaXQncyBqdXN0IGAiW1hYWFhdImAuCiAgICByZXR1cm4gc3RyaW5naWZpZWQucmVwbGFjZSgnb2JqZWN0ICcsICcnKTsKICB9CgogIC8vIElmIHdlJ3ZlIGFscmVhZHkgdmlzaXRlZCB0aGlzIGJyYW5jaCwgYmFpbCBvdXQsIGFzIGl0J3MgY2lyY3VsYXIgcmVmZXJlbmNlLiBJZiBub3QsIG5vdGUgdGhhdCB3ZSdyZSBzZWVpbmcgaXQgbm93LgogIGlmIChtZW1vaXplKHZhbHVlKSkgewogICAgcmV0dXJuICdbQ2lyY3VsYXIgfl0nOwogIH0KCiAgLy8gSWYgdGhlIHZhbHVlIGhhcyBhIGB0b0pTT05gIG1ldGhvZCwgd2UgY2FsbCBpdCB0byBleHRyYWN0IG1vcmUgaW5mb3JtYXRpb24KICBjb25zdCB2YWx1ZVdpdGhUb0pTT04gPSB2YWx1ZSA7CiAgaWYgKHZhbHVlV2l0aFRvSlNPTiAmJiB0eXBlb2YgdmFsdWVXaXRoVG9KU09OLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykgewogICAgdHJ5IHsKICAgICAgY29uc3QganNvblZhbHVlID0gdmFsdWVXaXRoVG9KU09OLnRvSlNPTigpOwogICAgICAvLyBXZSBuZWVkIHRvIG5vcm1hbGl6ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGAudG9KU09OKClgIGluIGNhc2UgaXQgaGFzIGNpcmN1bGFyIHJlZmVyZW5jZXMKICAgICAgcmV0dXJuIHZpc2l0KCcnLCBqc29uVmFsdWUsIHJlbWFpbmluZ0RlcHRoIC0gMSwgbWF4UHJvcGVydGllcywgbWVtbyk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgLy8gcGFzcyAoVGhlIGJ1aWx0LWluIGB0b0pTT05gIGZhaWxlZCwgYnV0IHdlIGNhbiBzdGlsbCB0cnkgdG8gZG8gaXQgb3Vyc2VsdmVzKQogICAgfQogIH0KCiAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHdlIGVpdGhlciBoYXZlIGFuIG9iamVjdCBvciBhbiBhcnJheSwgd2UgaGF2ZW4ndCBzZWVuIGl0IGJlZm9yZSwgYW5kIHdlJ3JlIGdvaW5nIHRvIHJlY3Vyc2UKICAvLyBiZWNhdXNlIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIG1heCBkZXB0aC4gQ3JlYXRlIGFuIGFjY3VtdWxhdG9yIHRvIGhvbGQgdGhlIHJlc3VsdHMgb2YgdmlzaXRpbmcgZWFjaAogIC8vIHByb3BlcnR5L2VudHJ5LCBhbmQga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHdlIGFkZCB0byBpdC4KICBjb25zdCBub3JtYWxpemVkID0gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fSkgOwogIGxldCBudW1BZGRlZCA9IDA7CgogIC8vIEJlZm9yZSB3ZSBiZWdpbiwgY29udmVydGBFcnJvcmAgYW5kYEV2ZW50YCBpbnN0YW5jZXMgaW50byBwbGFpbiBvYmplY3RzLCBzaW5jZSBzb21lIG9mIGVhY2ggb2YgdGhlaXIgcmVsZXZhbnQKICAvLyBwcm9wZXJ0aWVzIGFyZSBub24tZW51bWVyYWJsZSBhbmQgb3RoZXJ3aXNlIHdvdWxkIGdldCBtaXNzZWQuCiAgY29uc3QgdmlzaXRhYmxlID0gY29udmVydFRvUGxhaW5PYmplY3QodmFsdWUgKTsKCiAgZm9yIChjb25zdCB2aXNpdEtleSBpbiB2aXNpdGFibGUpIHsKICAgIC8vIEF2b2lkIGl0ZXJhdGluZyBvdmVyIGZpZWxkcyBpbiB0aGUgcHJvdG90eXBlIGlmIHRoZXkndmUgc29tZWhvdyBiZWVuIGV4cG9zZWQgdG8gZW51bWVyYXRpb24uCiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2aXNpdGFibGUsIHZpc2l0S2V5KSkgewogICAgICBjb250aW51ZTsKICAgIH0KCiAgICBpZiAobnVtQWRkZWQgPj0gbWF4UHJvcGVydGllcykgewogICAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9ICdbTWF4UHJvcGVydGllcyB+XSc7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFJlY3Vyc2l2ZWx5IHZpc2l0IGFsbCB0aGUgY2hpbGQgbm9kZXMKICAgIGNvbnN0IHZpc2l0VmFsdWUgPSB2aXNpdGFibGVbdmlzaXRLZXldOwogICAgbm9ybWFsaXplZFt2aXNpdEtleV0gPSB2aXNpdCh2aXNpdEtleSwgdmlzaXRWYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vKTsKCiAgICBudW1BZGRlZCsrOwogIH0KCiAgLy8gT25jZSB3ZSd2ZSB2aXNpdGVkIGFsbCB0aGUgYnJhbmNoZXMsIHJlbW92ZSB0aGUgcGFyZW50IGZyb20gbWVtbyBzdG9yYWdlCiAgdW5tZW1vaXplKHZhbHVlKTsKCiAgLy8gUmV0dXJuIGFjY3VtdWxhdGVkIHZhbHVlcwogIHJldHVybiBub3JtYWxpemVkOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovCi8qKgogKiBTdHJpbmdpZnkgdGhlIGdpdmVuIHZhbHVlLiBIYW5kbGVzIHZhcmlvdXMga25vd24gc3BlY2lhbCB2YWx1ZXMgYW5kIHR5cGVzLgogKgogKiBOb3QgbWVhbnQgdG8gYmUgdXNlZCBvbiBzaW1wbGUgcHJpbWl0aXZlcyB3aGljaCBhbHJlYWR5IGhhdmUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGFzIGl0IHdpbGwsIGZvciBleGFtcGxlLCB0dXJuCiAqIHRoZSBudW1iZXIgMTIzMSBpbnRvICJbT2JqZWN0IE51bWJlcl0iLCBub3Igb24gYG51bGxgLCBhcyBpdCB3aWxsIHRocm93LgogKgogKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeQogKiBAcmV0dXJucyBBIHN0cmluZ2lmaWVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiB2YWx1ZQogKi8KZnVuY3Rpb24gc3RyaW5naWZ5VmFsdWUoCiAga2V5LAogIC8vIHRoaXMgdHlwZSBpcyBhIHRpbnkgYml0IG9mIGEgY2hlYXQsIHNpbmNlIHRoaXMgZnVuY3Rpb24gZG9lcyBoYW5kbGUgTmFOICh3aGljaCBpcyB0ZWNobmljYWxseSBhIG51bWJlciksIGJ1dCBmb3IKICAvLyBvdXIgaW50ZXJuYWwgdXNlLCBpdCdsbCBkbwogIHZhbHVlLAopIHsKICB0cnkgewogICAgaWYgKGtleSA9PT0gJ2RvbWFpbicgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAodmFsdWUgKS5fZXZlbnRzKSB7CiAgICAgIHJldHVybiAnW0RvbWFpbl0nOwogICAgfQoKICAgIGlmIChrZXkgPT09ICdkb21haW5FbWl0dGVyJykgewogICAgICByZXR1cm4gJ1tEb21haW5FbWl0dGVyXSc7CiAgICB9CgogICAgLy8gSXQncyBzYWZlIHRvIHVzZSBgZ2xvYmFsYCwgYHdpbmRvd2AsIGFuZCBgZG9jdW1lbnRgIGhlcmUgaW4gdGhpcyBtYW5uZXIsIGFzIHdlIGFyZSBhc3NlcnRpbmcgdXNpbmcgYHR5cGVvZmAgZmlyc3QKICAgIC8vIHdoaWNoIHdvbid0IHRocm93IGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50LgoKICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gZ2xvYmFsKSB7CiAgICAgIHJldHVybiAnW0dsb2JhbF0nOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gd2luZG93KSB7CiAgICAgIHJldHVybiAnW1dpbmRvd10nOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMKICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBkb2N1bWVudCkgewogICAgICByZXR1cm4gJ1tEb2N1bWVudF0nOwogICAgfQoKICAgIGlmIChpc1Z1ZVZpZXdNb2RlbCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuICdbVnVlVmlld01vZGVsXSc7CiAgICB9CgogICAgLy8gUmVhY3QncyBTeW50aGV0aWNFdmVudCB0aGluZ3kKICAgIGlmIChpc1N5bnRoZXRpY0V2ZW50KHZhbHVlKSkgewogICAgICByZXR1cm4gJ1tTeW50aGV0aWNFdmVudF0nOwogICAgfQoKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZSkgewogICAgICByZXR1cm4gJ1tOYU5dJzsKICAgIH0KCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBgW0Z1bmN0aW9uOiAke2dldEZ1bmN0aW9uTmFtZSh2YWx1ZSl9XWA7CiAgICB9CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHsKICAgICAgcmV0dXJuIGBbJHtTdHJpbmcodmFsdWUpfV1gOwogICAgfQoKICAgIC8vIHN0cmluZ2lmaWVkIEJpZ0ludHMgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gcmVndWxhciBudW1iZXJzLCBzbyB3ZSBuZWVkIHRvIGxhYmVsIHRoZW0gdG8gYXZvaWQgY29uZnVzaW9uCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgewogICAgICByZXR1cm4gYFtCaWdJbnQ6ICR7U3RyaW5nKHZhbHVlKX1dYDsKICAgIH0KCiAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBrbm9ja2VkIG91dCBhbGwgdGhlIHNwZWNpYWwgY2FzZXMgYW5kIHRoZSBwcmltaXRpdmVzLCBhbGwgd2UgaGF2ZSBsZWZ0IGFyZSBvYmplY3RzLiBTaW1wbHkgY2FzdGluZwogICAgLy8gdGhlbSB0byBzdHJpbmdzIG1lYW5zIHRoYXQgaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2hpY2ggaGF2ZW4ndCBkZWZpbmVkIHRoZWlyIGB0b1N0cmluZ1RhZ2Agd2lsbCBqdXN0IGNvbWUgb3V0IGFzCiAgICAvLyBgIltvYmplY3QgT2JqZWN0XSJgLiBJZiB3ZSBpbnN0ZWFkIGxvb2sgYXQgdGhlIGNvbnN0cnVjdG9yJ3MgbmFtZSAod2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzKSwKICAgIC8vIHdlIGNhbiBtYWtlIHN1cmUgdGhhdCBvbmx5IHBsYWluIG9iamVjdHMgY29tZSBvdXQgdGhhdCB3YXkuCiAgICBjb25zdCBvYmpOYW1lID0gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKTsKCiAgICAvLyBIYW5kbGUgSFRNTCBFbGVtZW50cwogICAgaWYgKC9eSFRNTChcdyopRWxlbWVudCQvLnRlc3Qob2JqTmFtZSkpIHsKICAgICAgcmV0dXJuIGBbSFRNTEVsZW1lbnQ6ICR7b2JqTmFtZX1dYDsKICAgIH0KCiAgICByZXR1cm4gYFtvYmplY3QgJHtvYmpOYW1lfV1gOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWA7CiAgfQp9Ci8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqLwoKZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKSB7CiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTsKCiAgcmV0dXJuIHByb3RvdHlwZSA/IHByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lIDogJ251bGwgcHJvdG90eXBlJzsKfQoKLyoqCiAqIE5vcm1hbGl6ZXMgVVJMcyBpbiBleGNlcHRpb25zIGFuZCBzdGFja3RyYWNlcyB0byBhIGJhc2UgcGF0aCBzbyBTZW50cnkgY2FuIGZpbmdlcnByaW50CiAqIGFjcm9zcyBwbGF0Zm9ybXMgYW5kIHdvcmtpbmcgZGlyZWN0b3J5LgogKgogKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gYmUgbm9ybWFsaXplZC4KICogQHBhcmFtIGJhc2VQYXRoIFRoZSBhcHBsaWNhdGlvbiBiYXNlIHBhdGguCiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIFVSTC4KICovCmZ1bmN0aW9uIG5vcm1hbGl6ZVVybFRvQmFzZSh1cmwsIGJhc2VQYXRoKSB7CiAgY29uc3QgZXNjYXBlZEJhc2UgPSBiYXNlUGF0aAogICAgLy8gQmFja3NsYXNoIHRvIGZvcndhcmQKICAgIC5yZXBsYWNlKC9cXC9nLCAnLycpCiAgICAvLyBFc2NhcGUgUmVnRXhwIHNwZWNpYWwgY2hhcmFjdGVycwogICAgLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrKj8uXS9nLCAnXFwkJicpOwoKICBsZXQgbmV3VXJsID0gdXJsOwogIHRyeSB7CiAgICBuZXdVcmwgPSBkZWNvZGVVUkkodXJsKTsKICB9IGNhdGNoIChfT28pIHsKICAgIC8vIFNvbWV0aW1lIHRoaXMgYnJlYWtzCiAgfQogIHJldHVybiAoCiAgICBuZXdVcmwKICAgICAgLnJlcGxhY2UoL1xcL2csICcvJykKICAgICAgLnJlcGxhY2UoL3dlYnBhY2s6XC8/L2csICcnKSAvLyBSZW1vdmUgaW50ZXJtZWRpYXRlIGJhc2UgcGF0aAogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNlbnRyeS1pbnRlcm5hbC9zZGsvbm8tcmVnZXhwLWNvbnN0cnVjdG9yCiAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYChmaWxlOi8vKT8vKiR7ZXNjYXBlZEJhc2V9LypgLCAnaWcnKSwgJ2FwcDovLy8nKQogICk7Cn0KCi8vIFNsaWdodGx5IG1vZGlmaWVkIChubyBJRTggc3VwcG9ydCwgRVM2KSBhbmQgdHJhbnNjcmliZWQgdG8gVHlwZVNjcmlwdAoKLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb24KLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy4KY29uc3Qgc3BsaXRQYXRoUmUgPSAvXihcUys6XFx8XC8/KShbXHNcU10qPykoKD86XC57MSwyfXxbXi9cXF0rP3wpKFwuW14uL1xcXSp8KSkoPzpbL1xcXSopJC87Ci8qKiBKU0RvYyAqLwpmdW5jdGlvbiBzcGxpdFBhdGgoZmlsZW5hbWUpIHsKICAvLyBUcnVuY2F0ZSBmaWxlcyBuYW1lcyBncmVhdGVyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzIHRvIGF2b2lkIHJlZ2V4IGRvcwogIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvcHVsbC84NzM3I2Rpc2N1c3Npb25fcjEyODU3MTkxNzIKICBjb25zdCB0cnVuY2F0ZWQgPSBmaWxlbmFtZS5sZW5ndGggPiAxMDI0ID8gYDx0cnVuY2F0ZWQ+JHtmaWxlbmFtZS5zbGljZSgtMTAyNCl9YCA6IGZpbGVuYW1lOwogIGNvbnN0IHBhcnRzID0gc3BsaXRQYXRoUmUuZXhlYyh0cnVuY2F0ZWQpOwogIHJldHVybiBwYXJ0cyA/IHBhcnRzLnNsaWNlKDEpIDogW107Cn0KCi8qKiBKU0RvYyAqLwpmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHsKICBjb25zdCByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCk7CiAgY29uc3Qgcm9vdCA9IHJlc3VsdFswXTsKICBsZXQgZGlyID0gcmVzdWx0WzFdOwoKICBpZiAoIXJvb3QgJiYgIWRpcikgewogICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyCiAgICByZXR1cm4gJy4nOwogIH0KCiAgaWYgKGRpcikgewogICAgLy8gSXQgaGFzIGEgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2gKICAgIGRpciA9IGRpci5zbGljZSgwLCBkaXIubGVuZ3RoIC0gMSk7CiAgfQoKICByZXR1cm4gcm9vdCArIGRpcjsKfQoKLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovCgovKiogU3luY1Byb21pc2UgaW50ZXJuYWwgc3RhdGVzICovCnZhciBTdGF0ZXM7IChmdW5jdGlvbiAoU3RhdGVzKSB7CiAgLyoqIFBlbmRpbmcgKi8KICBjb25zdCBQRU5ESU5HID0gMDsgU3RhdGVzW1N0YXRlc1siUEVORElORyJdID0gUEVORElOR10gPSAiUEVORElORyI7CiAgLyoqIFJlc29sdmVkIC8gT0sgKi8KICBjb25zdCBSRVNPTFZFRCA9IDE7IFN0YXRlc1tTdGF0ZXNbIlJFU09MVkVEIl0gPSBSRVNPTFZFRF0gPSAiUkVTT0xWRUQiOwogIC8qKiBSZWplY3RlZCAvIEVycm9yICovCiAgY29uc3QgUkVKRUNURUQgPSAyOyBTdGF0ZXNbU3RhdGVzWyJSRUpFQ1RFRCJdID0gUkVKRUNURURdID0gIlJFSkVDVEVEIjsKfSkoU3RhdGVzIHx8IChTdGF0ZXMgPSB7fSkpOwoKLy8gT3ZlcmxvYWRzIHNvIHdlIGNhbiBjYWxsIHJlc29sdmVkU3luY1Byb21pc2Ugd2l0aG91dCBhcmd1bWVudHMgYW5kIGdlbmVyaWMgYXJndW1lbnQKCi8qKgogKiBDcmVhdGVzIGEgcmVzb2x2ZWQgc3luYyBwcm9taXNlLgogKgogKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJlc29sdmUgdGhlIHByb21pc2Ugd2l0aAogKiBAcmV0dXJucyB0aGUgcmVzb2x2ZWQgc3luYyBwcm9taXNlCiAqLwpmdW5jdGlvbiByZXNvbHZlZFN5bmNQcm9taXNlKHZhbHVlKSB7CiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZShyZXNvbHZlID0+IHsKICAgIHJlc29sdmUodmFsdWUpOwogIH0pOwp9CgovKioKICogQ3JlYXRlcyBhIHJlamVjdGVkIHN5bmMgcHJvbWlzZS4KICoKICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byByZWplY3QgdGhlIHByb21pc2Ugd2l0aAogKiBAcmV0dXJucyB0aGUgcmVqZWN0ZWQgc3luYyBwcm9taXNlCiAqLwpmdW5jdGlvbiByZWplY3RlZFN5bmNQcm9taXNlKHJlYXNvbikgewogIHJldHVybiBuZXcgU3luY1Byb21pc2UoKF8sIHJlamVjdCkgPT4gewogICAgcmVqZWN0KHJlYXNvbik7CiAgfSk7Cn0KCi8qKgogKiBUaGVuYWJsZSBjbGFzcyB0aGF0IGJlaGF2ZXMgbGlrZSBhIFByb21pc2UgYW5kIGZvbGxvd3MgaXQncyBpbnRlcmZhY2UKICogYnV0IGlzIG5vdCBhc3luYyBpbnRlcm5hbGx5CiAqLwpjbGFzcyBTeW5jUHJvbWlzZSB7CgogICBjb25zdHJ1Y3RvcigKICAgIGV4ZWN1dG9yLAogICkge1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDQuY2FsbCh0aGlzKTsKICAgIHRoaXMuX3N0YXRlID0gU3RhdGVzLlBFTkRJTkc7CiAgICB0aGlzLl9oYW5kbGVycyA9IFtdOwoKICAgIHRyeSB7CiAgICAgIGV4ZWN1dG9yKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRoaXMuX3JlamVjdChlKTsKICAgIH0KICB9CgogIC8qKiBKU0RvYyAqLwogICB0aGVuKAogICAgb25mdWxmaWxsZWQsCiAgICBvbnJlamVjdGVkLAogICkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIHRoaXMuX2hhbmRsZXJzLnB1c2goWwogICAgICAgIGZhbHNlLAogICAgICAgIHJlc3VsdCA9PiB7CiAgICAgICAgICBpZiAoIW9uZnVsZmlsbGVkKSB7CiAgICAgICAgICAgIC8vIFRPRE86IMKvXF8o44OEKV8vwq8KICAgICAgICAgICAgLy8gVE9ETzogRklYTUUKICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShvbmZ1bGZpbGxlZChyZXN1bHQpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgcmVhc29uID0+IHsKICAgICAgICAgIGlmICghb25yZWplY3RlZCkgewogICAgICAgICAgICByZWplY3QocmVhc29uKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgXSk7CiAgICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpOwogICAgfSk7CiAgfQoKICAvKiogSlNEb2MgKi8KICAgY2F0Y2goCiAgICBvbnJlamVjdGVkLAogICkgewogICAgcmV0dXJuIHRoaXMudGhlbih2YWwgPT4gdmFsLCBvbnJlamVjdGVkKTsKICB9CgogIC8qKiBKU0RvYyAqLwogICBmaW5hbGx5KG9uZmluYWxseSkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGxldCB2YWw7CiAgICAgIGxldCBpc1JlamVjdGVkOwoKICAgICAgcmV0dXJuIHRoaXMudGhlbigKICAgICAgICB2YWx1ZSA9PiB7CiAgICAgICAgICBpc1JlamVjdGVkID0gZmFsc2U7CiAgICAgICAgICB2YWwgPSB2YWx1ZTsKICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHsKICAgICAgICAgICAgb25maW5hbGx5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWFzb24gPT4gewogICAgICAgICAgaXNSZWplY3RlZCA9IHRydWU7CiAgICAgICAgICB2YWwgPSByZWFzb247CiAgICAgICAgICBpZiAob25maW5hbGx5KSB7CiAgICAgICAgICAgIG9uZmluYWxseSgpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGlzUmVqZWN0ZWQpIHsKICAgICAgICAgIHJlamVjdCh2YWwpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcmVzb2x2ZSh2YWwgKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIC8qKiBKU0RvYyAqLwogICAgX19pbml0KCkge3RoaXMuX3Jlc29sdmUgPSAodmFsdWUpID0+IHsKICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVTT0xWRUQsIHZhbHVlKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQyKCkge3RoaXMuX3JlamVjdCA9IChyZWFzb24pID0+IHsKICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVKRUNURUQsIHJlYXNvbik7CiAgfTt9CgogIC8qKiBKU0RvYyAqLwogICAgX19pbml0MygpIHt0aGlzLl9zZXRSZXN1bHQgPSAoc3RhdGUsIHZhbHVlKSA9PiB7CiAgICBpZiAodGhpcy5fc3RhdGUgIT09IFN0YXRlcy5QRU5ESU5HKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoaXNUaGVuYWJsZSh2YWx1ZSkpIHsKICAgICAgdm9pZCAodmFsdWUgKS50aGVuKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlOwogICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKCiAgICB0aGlzLl9leGVjdXRlSGFuZGxlcnMoKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQ0KCkge3RoaXMuX2V4ZWN1dGVIYW5kbGVycyA9ICgpID0+IHsKICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlBFTkRJTkcpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IGNhY2hlZEhhbmRsZXJzID0gdGhpcy5faGFuZGxlcnMuc2xpY2UoKTsKICAgIHRoaXMuX2hhbmRsZXJzID0gW107CgogICAgY2FjaGVkSGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHsKICAgICAgaWYgKGhhbmRsZXJbMF0pIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlJFU09MVkVEKSB7CiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlcwogICAgICAgIGhhbmRsZXJbMV0odGhpcy5fdmFsdWUgKTsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVKRUNURUQpIHsKICAgICAgICBoYW5kbGVyWzJdKHRoaXMuX3ZhbHVlKTsKICAgICAgfQoKICAgICAgaGFuZGxlclswXSA9IHRydWU7CiAgICB9KTsKICB9O30KfQoKLyoqCiAqIENyZWF0ZXMgYW4gbmV3IFByb21pc2VCdWZmZXIgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBsaW1pdAogKiBAcGFyYW0gbGltaXQgbWF4IG51bWJlciBvZiBwcm9taXNlcyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGJ1ZmZlcgogKi8KZnVuY3Rpb24gbWFrZVByb21pc2VCdWZmZXIobGltaXQpIHsKICBjb25zdCBidWZmZXIgPSBbXTsKCiAgZnVuY3Rpb24gaXNSZWFkeSgpIHsKICAgIHJldHVybiBsaW1pdCA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlci5sZW5ndGggPCBsaW1pdDsKICB9CgogIC8qKgogICAqIFJlbW92ZSBhIHByb21pc2UgZnJvbSB0aGUgcXVldWUuCiAgICoKICAgKiBAcGFyYW0gdGFzayBDYW4gYmUgYW55IFByb21pc2VMaWtlPFQ+CiAgICogQHJldHVybnMgUmVtb3ZlZCBwcm9taXNlLgogICAqLwogIGZ1bmN0aW9uIHJlbW92ZSh0YXNrKSB7CiAgICByZXR1cm4gYnVmZmVyLnNwbGljZShidWZmZXIuaW5kZXhPZih0YXNrKSwgMSlbMF07CiAgfQoKICAvKioKICAgKiBBZGQgYSBwcm9taXNlIChyZXByZXNlbnRpbmcgYW4gaW4tZmxpZ2h0IGFjdGlvbikgdG8gdGhlIHF1ZXVlLCBhbmQgc2V0IGl0IHRvIHJlbW92ZSBpdHNlbGYgb24gZnVsZmlsbG1lbnQuCiAgICoKICAgKiBAcGFyYW0gdGFza1Byb2R1Y2VyIEEgZnVuY3Rpb24gcHJvZHVjaW5nIGFueSBQcm9taXNlTGlrZTxUPjsgSW4gcHJldmlvdXMgdmVyc2lvbnMgdGhpcyB1c2VkIHRvIGJlIGB0YXNrOgogICAqICAgICAgICBQcm9taXNlTGlrZTxUPmAsIGJ1dCB1bmRlciB0aGF0IG1vZGVsLCBQcm9taXNlcyB3ZXJlIGluc3RhbnRseSBjcmVhdGVkIG9uIHRoZSBjYWxsLXNpdGUgYW5kIHRoZWlyIGV4ZWN1dG9yCiAgICogICAgICAgIGZ1bmN0aW9ucyB0aGVyZWZvcmUgcmFuIGltbWVkaWF0ZWx5LiBUaHVzLCBldmVuIGlmIHRoZSBidWZmZXIgd2FzIGZ1bGwsIHRoZSBhY3Rpb24gc3RpbGwgaGFwcGVuZWQuIEJ5CiAgICogICAgICAgIHJlcXVpcmluZyB0aGUgcHJvbWlzZSB0byBiZSB3cmFwcGVkIGluIGEgZnVuY3Rpb24sIHdlIGNhbiBkZWZlciBwcm9taXNlIGNyZWF0aW9uIHVudGlsIGFmdGVyIHRoZSBidWZmZXIKICAgKiAgICAgICAgbGltaXQgY2hlY2suCiAgICogQHJldHVybnMgVGhlIG9yaWdpbmFsIHByb21pc2UuCiAgICovCiAgZnVuY3Rpb24gYWRkKHRhc2tQcm9kdWNlcikgewogICAgaWYgKCFpc1JlYWR5KCkpIHsKICAgICAgcmV0dXJuIHJlamVjdGVkU3luY1Byb21pc2UobmV3IFNlbnRyeUVycm9yKCdOb3QgYWRkaW5nIFByb21pc2UgYmVjYXVzZSBidWZmZXIgbGltaXQgd2FzIHJlYWNoZWQuJykpOwogICAgfQoKICAgIC8vIHN0YXJ0IHRoZSB0YXNrIGFuZCBhZGQgaXRzIHByb21pc2UgdG8gdGhlIHF1ZXVlCiAgICBjb25zdCB0YXNrID0gdGFza1Byb2R1Y2VyKCk7CiAgICBpZiAoYnVmZmVyLmluZGV4T2YodGFzaykgPT09IC0xKSB7CiAgICAgIGJ1ZmZlci5wdXNoKHRhc2spOwogICAgfQogICAgdm9pZCB0YXNrCiAgICAgIC50aGVuKCgpID0+IHJlbW92ZSh0YXNrKSkKICAgICAgLy8gVXNlIGB0aGVuKG51bGwsIHJlamVjdGlvbkhhbmRsZXIpYCByYXRoZXIgdGhhbiBgY2F0Y2gocmVqZWN0aW9uSGFuZGxlcilgIHNvIHRoYXQgd2UgY2FuIHVzZSBgUHJvbWlzZUxpa2VgCiAgICAgIC8vIHJhdGhlciB0aGFuIGBQcm9taXNlYC4gYFByb21pc2VMaWtlYCBkb2Vzbid0IGhhdmUgYSBgLmNhdGNoYCBtZXRob2QsIG1ha2luZyBpdHMgcG9seWZpbGwgc21hbGxlci4gKEVTNSBkaWRuJ3QKICAgICAgLy8gaGF2ZSBwcm9taXNlcywgc28gVFMgaGFzIHRvIHBvbHlmaWxsIHdoZW4gZG93bi1jb21waWxpbmcuKQogICAgICAudGhlbihudWxsLCAoKSA9PgogICAgICAgIHJlbW92ZSh0YXNrKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgICAgIC8vIFdlIGhhdmUgdG8gYWRkIGFub3RoZXIgY2F0Y2ggaGVyZSBiZWNhdXNlIGByZW1vdmUoKWAgc3RhcnRzIGEgbmV3IHByb21pc2UgY2hhaW4uCiAgICAgICAgfSksCiAgICAgICk7CiAgICByZXR1cm4gdGFzazsKICB9CgogIC8qKgogICAqIFdhaXQgZm9yIGFsbCBwcm9taXNlcyBpbiB0aGUgcXVldWUgdG8gcmVzb2x2ZSBvciBmb3IgdGltZW91dCB0byBleHBpcmUsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4KICAgKgogICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lLCBpbiBtcywgYWZ0ZXIgd2hpY2ggdG8gcmVzb2x2ZSB0byBgZmFsc2VgIGlmIHRoZSBxdWV1ZSBpcyBzdGlsbCBub24tZW1wdHkuIFBhc3NpbmcgYDBgIChvcgogICAqIG5vdCBwYXNzaW5nIGFueXRoaW5nKSB3aWxsIG1ha2UgdGhlIHByb21pc2Ugd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzIGZvciB0aGUgcXVldWUgdG8gZHJhaW4gYmVmb3JlIHJlc29sdmluZyB0bwogICAqIGB0cnVlYC4KICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHRvIGB0cnVlYCBpZiB0aGUgcXVldWUgaXMgYWxyZWFkeSBlbXB0eSBvciBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBhbmQKICAgKiBgZmFsc2VgIG90aGVyd2lzZQogICAqLwogIGZ1bmN0aW9uIGRyYWluKHRpbWVvdXQpIHsKICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBsZXQgY291bnRlciA9IGJ1ZmZlci5sZW5ndGg7CgogICAgICBpZiAoIWNvdW50ZXIpIHsKICAgICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKTsKICAgICAgfQoKICAgICAgLy8gd2FpdCBmb3IgYHRpbWVvdXRgIG1zIGFuZCB0aGVuIHJlc29sdmUgdG8gYGZhbHNlYCAoaWYgbm90IGNhbmNlbGxlZCBmaXJzdCkKICAgICAgY29uc3QgY2FwdHVyZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgaWYgKHRpbWVvdXQgJiYgdGltZW91dCA+IDApIHsKICAgICAgICAgIHJlc29sdmUoZmFsc2UpOwogICAgICAgIH0KICAgICAgfSwgdGltZW91dCk7CgogICAgICAvLyBpZiBhbGwgcHJvbWlzZXMgcmVzb2x2ZSBpbiB0aW1lLCBjYW5jZWwgdGhlIHRpbWVyIGFuZCByZXNvbHZlIHRvIGB0cnVlYAogICAgICBidWZmZXIuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICB2b2lkIHJlc29sdmVkU3luY1Byb21pc2UoaXRlbSkudGhlbigoKSA9PiB7CiAgICAgICAgICBpZiAoIS0tY291bnRlcikgewogICAgICAgICAgICBjbGVhclRpbWVvdXQoY2FwdHVyZWRTZXRUaW1lb3V0KTsKICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9LCByZWplY3QpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgcmV0dXJuIHsKICAgICQ6IGJ1ZmZlciwKICAgIGFkZCwKICAgIGRyYWluLAogIH07Cn0KCmNvbnN0IE9ORV9TRUNPTkRfSU5fTVMgPSAxMDAwOwoKLyoqCiAqIEEgcGFydGlhbCBkZWZpbml0aW9uIG9mIHRoZSBbUGVyZm9ybWFuY2UgV2ViIEFQSV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BlcmZvcm1hbmNlfQogKiBmb3IgYWNjZXNzaW5nIGEgaGlnaC1yZXNvbHV0aW9uIG1vbm90b25pYyBjbG9jay4KICovCgovKioKICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIHRoZSBEYXRlIEFQSS4KICoKICogVE9ETyh2OCk6IFJldHVybiB0eXBlIHNob3VsZCBiZSByb3VuZGVkLgogKi8KZnVuY3Rpb24gZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpIHsKICByZXR1cm4gRGF0ZS5ub3coKSAvIE9ORV9TRUNPTkRfSU5fTVM7Cn0KCi8qKgogKiBSZXR1cm5zIGEgd3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBQZXJmb3JtYW5jZSBBUEkgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiwgb3IgdW5kZWZpbmVkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdAogKiBzdXBwb3J0IHRoZSBBUEkuCiAqCiAqIFdyYXBwaW5nIHRoZSBuYXRpdmUgQVBJIHdvcmtzIGFyb3VuZCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBmcm9tIGRpZmZlcmVudCBicm93c2Vycy4KICovCmZ1bmN0aW9uIGNyZWF0ZVVuaXhUaW1lc3RhbXBJblNlY29uZHNGdW5jKCkgewogIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogOwogIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykgewogICAgcmV0dXJuIGRhdGVUaW1lc3RhbXBJblNlY29uZHM7CiAgfQoKICAvLyBTb21lIGJyb3dzZXIgYW5kIGVudmlyb25tZW50cyBkb24ndCBoYXZlIGEgdGltZU9yaWdpbiwgc28gd2UgZmFsbGJhY2sgdG8KICAvLyB1c2luZyBEYXRlLm5vdygpIHRvIGNvbXB1dGUgdGhlIHN0YXJ0aW5nIHRpbWUuCiAgY29uc3QgYXBwcm94U3RhcnRpbmdUaW1lT3JpZ2luID0gRGF0ZS5ub3coKSAtIHBlcmZvcm1hbmNlLm5vdygpOwogIGNvbnN0IHRpbWVPcmlnaW4gPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luID09IHVuZGVmaW5lZCA/IGFwcHJveFN0YXJ0aW5nVGltZU9yaWdpbiA6IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47CgogIC8vIHBlcmZvcm1hbmNlLm5vdygpIGlzIGEgbW9ub3RvbmljIGNsb2NrLCB3aGljaCBtZWFucyBpdCBzdGFydHMgYXQgMCB3aGVuIHRoZSBwcm9jZXNzIGJlZ2lucy4gVG8gZ2V0IHRoZSBjdXJyZW50CiAgLy8gd2FsbCBjbG9jayB0aW1lIChhY3R1YWwgVU5JWCB0aW1lc3RhbXApLCB3ZSBuZWVkIHRvIGFkZCB0aGUgc3RhcnRpbmcgdGltZSBvcmlnaW4gYW5kIHRoZSBjdXJyZW50IHRpbWUgZWxhcHNlZC4KICAvLwogIC8vIFRPRE86IFRoaXMgZG9lcyBub3QgYWNjb3VudCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIG1vbm90b25pYyBjbG9jayB0aGF0IHBvd2VycyBwZXJmb3JtYW5jZS5ub3coKSBkcmlmdHMgZnJvbSB0aGUKICAvLyB3YWxsIGNsb2NrIHRpbWUsIHdoaWNoIGNhdXNlcyB0aGUgcmV0dXJuZWQgdGltZXN0YW1wIHRvIGJlIGluYWNjdXJhdGUuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBob3cgdG8gZGV0ZWN0IGFuZAogIC8vIGNvcnJlY3QgZm9yIHRoaXMuCiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwCiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWRuL2NvbnRlbnQvaXNzdWVzLzQ3MTMKICAvLyBTZWU6IGh0dHBzOi8vZGV2LnRvL25vYW1yL3doZW4tYS1taWxsaXNlY29uZC1pcy1ub3QtYS1taWxsaXNlY29uZC0zaDYKICByZXR1cm4gKCkgPT4gewogICAgcmV0dXJuICh0aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCkpIC8gT05FX1NFQ09ORF9JTl9NUzsKICB9Owp9CgovKioKICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIGVpdGhlciB0aGUgUGVyZm9ybWFuY2Ugb3IgRGF0ZSBBUElzLCBkZXBlbmRpbmcgb24gdGhlCiAqIGF2YWlsYWJpbGl0eSBvZiB0aGUgUGVyZm9ybWFuY2UgQVBJLgogKgogKiBCVUc6IE5vdGUgdGhhdCBiZWNhdXNlIG9mIGhvdyBicm93c2VycyBpbXBsZW1lbnQgdGhlIFBlcmZvcm1hbmNlIEFQSSwgdGhlIGNsb2NrIG1pZ2h0IHN0b3Agd2hlbiB0aGUgY29tcHV0ZXIgaXMKICogYXNsZWVwLiBUaGlzIGNyZWF0ZXMgYSBza2V3IGJldHdlZW4gYGRhdGVUaW1lc3RhbXBJblNlY29uZHNgIGFuZCBgdGltZXN0YW1wSW5TZWNvbmRzYC4gVGhlCiAqIHNrZXcgY2FuIGdyb3cgdG8gYXJiaXRyYXJ5IGFtb3VudHMgbGlrZSBkYXlzLCB3ZWVrcyBvciBtb250aHMuCiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwLgogKi8KY29uc3QgdGltZXN0YW1wSW5TZWNvbmRzID0gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKTsKCi8qKgogKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC4gVGhpcyB2YWx1ZSBpcyBvbmx5IHVzYWJsZSBpbiBhIGJyb3dzZXIsIGFuZCBvbmx5IHdoZW4gdGhlCiAqIHBlcmZvcm1hbmNlIEFQSSBpcyBhdmFpbGFibGUuCiAqLwooKCkgPT4gewogIC8vIFVuZm9ydHVuYXRlbHkgYnJvd3NlcnMgbWF5IHJlcG9ydCBhbiBpbmFjY3VyYXRlIHRpbWUgb3JpZ2luIGRhdGEsIHRocm91Z2ggZWl0aGVyIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gb3IKICAvLyBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LCB3aGljaCByZXN1bHRzIGluIHBvb3IgcmVzdWx0cyBpbiBwZXJmb3JtYW5jZSBkYXRhLiBXZSBvbmx5IHRyZWF0IHRpbWUgb3JpZ2luCiAgLy8gZGF0YSBhcyByZWxpYWJsZSBpZiB0aGV5IGFyZSB3aXRoaW4gYSByZWFzb25hYmxlIHRocmVzaG9sZCBvZiB0aGUgY3VycmVudCB0aW1lLgoKICBjb25zdCB7IHBlcmZvcm1hbmNlIH0gPSBHTE9CQUxfT0JKIDsKICBpZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJmb3JtYW5jZS5ub3cpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfQoKICBjb25zdCB0aHJlc2hvbGQgPSAzNjAwICogMTAwMDsKICBjb25zdCBwZXJmb3JtYW5jZU5vdyA9IHBlcmZvcm1hbmNlLm5vdygpOwogIGNvbnN0IGRhdGVOb3cgPSBEYXRlLm5vdygpOwoKICAvLyBpZiB0aW1lT3JpZ2luIGlzbid0IGF2YWlsYWJsZSBzZXQgZGVsdGEgdG8gdGhyZXNob2xkIHNvIGl0IGlzbid0IHVzZWQKICBjb25zdCB0aW1lT3JpZ2luRGVsdGEgPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luCiAgICA/IE1hdGguYWJzKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpCiAgICA6IHRocmVzaG9sZDsKICBjb25zdCB0aW1lT3JpZ2luSXNSZWxpYWJsZSA9IHRpbWVPcmlnaW5EZWx0YSA8IHRocmVzaG9sZDsKCiAgLy8gV2hpbGUgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4sIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4KICAvLyBpcyBub3QgYXMgd2lkZWx5IHN1cHBvcnRlZC4gTmFtZWx5LCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIGlzIHVuZGVmaW5lZCBpbiBTYWZhcmkgYXMgb2Ygd3JpdGluZy4KICAvLyBBbHNvIGFzIG9mIHdyaXRpbmcsIHBlcmZvcm1hbmNlLnRpbWluZyBpcyBub3QgYXZhaWxhYmxlIGluIFdlYiBXb3JrZXJzIGluIG1haW5zdHJlYW0gYnJvd3NlcnMsIHNvIGl0IGlzIG5vdCBhbHdheXMKICAvLyBhIHZhbGlkIGZhbGxiYWNrLiBJbiB0aGUgYWJzZW5jZSBvZiBhbiBpbml0aWFsIHRpbWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIsIGZhbGxiYWNrIHRvIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGUKICAvLyBEYXRlIEFQSS4KICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICBjb25zdCBuYXZpZ2F0aW9uU3RhcnQgPSBwZXJmb3JtYW5jZS50aW1pbmcgJiYgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydDsKICBjb25zdCBoYXNOYXZpZ2F0aW9uU3RhcnQgPSB0eXBlb2YgbmF2aWdhdGlvblN0YXJ0ID09PSAnbnVtYmVyJzsKICAvLyBpZiBuYXZpZ2F0aW9uU3RhcnQgaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZAogIGNvbnN0IG5hdmlnYXRpb25TdGFydERlbHRhID0gaGFzTmF2aWdhdGlvblN0YXJ0ID8gTWF0aC5hYnMobmF2aWdhdGlvblN0YXJ0ICsgcGVyZm9ybWFuY2VOb3cgLSBkYXRlTm93KSA6IHRocmVzaG9sZDsKICBjb25zdCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlID0gbmF2aWdhdGlvblN0YXJ0RGVsdGEgPCB0aHJlc2hvbGQ7CgogIGlmICh0aW1lT3JpZ2luSXNSZWxpYWJsZSB8fCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlKSB7CiAgICAvLyBVc2UgdGhlIG1vcmUgcmVsaWFibGUgdGltZSBvcmlnaW4KICAgIGlmICh0aW1lT3JpZ2luRGVsdGEgPD0gbmF2aWdhdGlvblN0YXJ0RGVsdGEpIHsKICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmF2aWdhdGlvblN0YXJ0OwogICAgfQogIH0KICByZXR1cm4gZGF0ZU5vdzsKfSkoKTsKCi8qKgogKiBDcmVhdGVzIGFuIGVudmVsb3BlLgogKiBNYWtlIHN1cmUgdG8gYWx3YXlzIGV4cGxpY2l0bHkgcHJvdmlkZSB0aGUgZ2VuZXJpYyB0byB0aGlzIGZ1bmN0aW9uCiAqIHNvIHRoYXQgdGhlIGVudmVsb3BlIHR5cGVzIHJlc29sdmUgY29ycmVjdGx5LgogKi8KZnVuY3Rpb24gY3JlYXRlRW52ZWxvcGUoaGVhZGVycywgaXRlbXMgPSBbXSkgewogIHJldHVybiBbaGVhZGVycywgaXRlbXNdIDsKfQoKLyoqCiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvb3AgdGhyb3VnaCB0aGUgaXRlbXMgYW5kIGl0ZW0gdHlwZXMgb2YgYW4gZW52ZWxvcGUuCiAqIChUaGlzIGZ1bmN0aW9uIHdhcyBtb3N0bHkgY3JlYXRlZCBiZWNhdXNlIHdvcmtpbmcgd2l0aCBlbnZlbG9wZSB0eXBlcyBpcyBwYWluZnVsIGF0IHRoZSBtb21lbnQpCiAqCiAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUsIHRoZSByZXN0IG9mIHRoZSBpdGVtcyB3aWxsIGJlIHNraXBwZWQuCiAqLwpmdW5jdGlvbiBmb3JFYWNoRW52ZWxvcGVJdGVtKAogIGVudmVsb3BlLAogIGNhbGxiYWNrLAopIHsKICBjb25zdCBlbnZlbG9wZUl0ZW1zID0gZW52ZWxvcGVbMV07CgogIGZvciAoY29uc3QgZW52ZWxvcGVJdGVtIG9mIGVudmVsb3BlSXRlbXMpIHsKICAgIGNvbnN0IGVudmVsb3BlSXRlbVR5cGUgPSBlbnZlbG9wZUl0ZW1bMF0udHlwZTsKICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKGVudmVsb3BlSXRlbSwgZW52ZWxvcGVJdGVtVHlwZSk7CgogICAgaWYgKHJlc3VsdCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIEVuY29kZSBhIHN0cmluZyB0byBVVEY4LgogKi8KZnVuY3Rpb24gZW5jb2RlVVRGOChpbnB1dCwgdGV4dEVuY29kZXIpIHsKICBjb25zdCB1dGY4ID0gdGV4dEVuY29kZXIgfHwgbmV3IFRleHRFbmNvZGVyKCk7CiAgcmV0dXJuIHV0ZjguZW5jb2RlKGlucHV0KTsKfQoKLyoqCiAqIFNlcmlhbGl6ZXMgYW4gZW52ZWxvcGUuCiAqLwpmdW5jdGlvbiBzZXJpYWxpemVFbnZlbG9wZShlbnZlbG9wZSwgdGV4dEVuY29kZXIpIHsKICBjb25zdCBbZW52SGVhZGVycywgaXRlbXNdID0gZW52ZWxvcGU7CgogIC8vIEluaXRpYWxseSB3ZSBjb25zdHJ1Y3Qgb3VyIGVudmVsb3BlIGFzIGEgc3RyaW5nIGFuZCBvbmx5IGNvbnZlcnQgdG8gYmluYXJ5IGNodW5rcyBpZiB3ZSBlbmNvdW50ZXIgYmluYXJ5IGRhdGEKICBsZXQgcGFydHMgPSBKU09OLnN0cmluZ2lmeShlbnZIZWFkZXJzKTsKCiAgZnVuY3Rpb24gYXBwZW5kKG5leHQpIHsKICAgIGlmICh0eXBlb2YgcGFydHMgPT09ICdzdHJpbmcnKSB7CiAgICAgIHBhcnRzID0gdHlwZW9mIG5leHQgPT09ICdzdHJpbmcnID8gcGFydHMgKyBuZXh0IDogW2VuY29kZVVURjgocGFydHMsIHRleHRFbmNvZGVyKSwgbmV4dF07CiAgICB9IGVsc2UgewogICAgICBwYXJ0cy5wdXNoKHR5cGVvZiBuZXh0ID09PSAnc3RyaW5nJyA/IGVuY29kZVVURjgobmV4dCwgdGV4dEVuY29kZXIpIDogbmV4dCk7CiAgICB9CiAgfQoKICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHsKICAgIGNvbnN0IFtpdGVtSGVhZGVycywgcGF5bG9hZF0gPSBpdGVtOwoKICAgIGFwcGVuZChgXG4ke0pTT04uc3RyaW5naWZ5KGl0ZW1IZWFkZXJzKX1cbmApOwoKICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ3N0cmluZycgfHwgcGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgYXBwZW5kKHBheWxvYWQpOwogICAgfSBlbHNlIHsKICAgICAgbGV0IHN0cmluZ2lmaWVkUGF5bG9hZDsKICAgICAgdHJ5IHsKICAgICAgICBzdHJpbmdpZmllZFBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIC8vIEluIGNhc2UsIGRlc3BpdGUgYWxsIG91ciBlZmZvcnRzIHRvIGtlZXAgYHBheWxvYWRgIGNpcmN1bGFyLWRlcGVuZGVuY3ktZnJlZSwgYEpTT04uc3RyaW5pZnkoKWAgc3RpbGwKICAgICAgICAvLyBmYWlscywgd2UgdHJ5IGFnYWluIGFmdGVyIG5vcm1hbGl6aW5nIGl0IGFnYWluIHdpdGggaW5maW5pdGUgbm9ybWFsaXphdGlvbiBkZXB0aC4gVGhpcyBvZiBjb3Vyc2UgaGFzIGEKICAgICAgICAvLyBwZXJmb3JtYW5jZSBpbXBhY3QgYnV0IGluIHRoaXMgY2FzZSBhIHBlcmZvcm1hbmNlIGhpdCBpcyBiZXR0ZXIgdGhhbiB0aHJvd2luZy4KICAgICAgICBzdHJpbmdpZmllZFBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShub3JtYWxpemUocGF5bG9hZCkpOwogICAgICB9CiAgICAgIGFwcGVuZChzdHJpbmdpZmllZFBheWxvYWQpOwogICAgfQogIH0KCiAgcmV0dXJuIHR5cGVvZiBwYXJ0cyA9PT0gJ3N0cmluZycgPyBwYXJ0cyA6IGNvbmNhdEJ1ZmZlcnMocGFydHMpOwp9CgpmdW5jdGlvbiBjb25jYXRCdWZmZXJzKGJ1ZmZlcnMpIHsKICBjb25zdCB0b3RhbExlbmd0aCA9IGJ1ZmZlcnMucmVkdWNlKChhY2MsIGJ1ZikgPT4gYWNjICsgYnVmLmxlbmd0aCwgMCk7CgogIGNvbnN0IG1lcmdlZCA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTsKICBsZXQgb2Zmc2V0ID0gMDsKICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7CiAgICBtZXJnZWQuc2V0KGJ1ZmZlciwgb2Zmc2V0KTsKICAgIG9mZnNldCArPSBidWZmZXIubGVuZ3RoOwogIH0KCiAgcmV0dXJuIG1lcmdlZDsKfQoKY29uc3QgSVRFTV9UWVBFX1RPX0RBVEFfQ0FURUdPUllfTUFQID0gewogIHNlc3Npb246ICdzZXNzaW9uJywKICBzZXNzaW9uczogJ3Nlc3Npb24nLAogIGF0dGFjaG1lbnQ6ICdhdHRhY2htZW50JywKICB0cmFuc2FjdGlvbjogJ3RyYW5zYWN0aW9uJywKICBldmVudDogJ2Vycm9yJywKICBjbGllbnRfcmVwb3J0OiAnaW50ZXJuYWwnLAogIHVzZXJfcmVwb3J0OiAnZGVmYXVsdCcsCiAgcHJvZmlsZTogJ3Byb2ZpbGUnLAogIHJlcGxheV9ldmVudDogJ3JlcGxheScsCiAgcmVwbGF5X3JlY29yZGluZzogJ3JlcGxheScsCiAgY2hlY2tfaW46ICdtb25pdG9yJywKICBmZWVkYmFjazogJ2ZlZWRiYWNrJywKICBzcGFuOiAnc3BhbicsCiAgc3RhdHNkOiAnbWV0cmljX2J1Y2tldCcsCn07CgovKioKICogTWFwcyB0aGUgdHlwZSBvZiBhbiBlbnZlbG9wZSBpdGVtIHRvIGEgZGF0YSBjYXRlZ29yeS4KICovCmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7CiAgcmV0dXJuIElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUFt0eXBlXTsKfQoKLyoqIEV4dHJhY3RzIHRoZSBtaW5pbWFsIFNESyBpbmZvIGZyb20gdGhlIG1ldGFkYXRhIG9yIGFuIGV2ZW50cyAqLwpmdW5jdGlvbiBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhT3JFdmVudCkgewogIGlmICghbWV0YWRhdGFPckV2ZW50IHx8ICFtZXRhZGF0YU9yRXZlbnQuc2RrKSB7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gbWV0YWRhdGFPckV2ZW50LnNkazsKICByZXR1cm4geyBuYW1lLCB2ZXJzaW9uIH07Cn0KCi8qKgogKiBDcmVhdGVzIGV2ZW50IGVudmVsb3BlIGhlYWRlcnMsIGJhc2VkIG9uIGV2ZW50LCBzZGsgaW5mbyBhbmQgdHVubmVsCiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb3JlIHBhY2thZ2UgdG8gbWFrZSBpdCBhdmFpbGFibGUgaW4gUmVwbGF5CiAqLwpmdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycygKICBldmVudCwKICBzZGtJbmZvLAogIHR1bm5lbCwKICBkc24sCikgewogIGNvbnN0IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQgPSBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEgJiYgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLmR5bmFtaWNTYW1wbGluZ0NvbnRleHQ7CiAgcmV0dXJuIHsKICAgIGV2ZW50X2lkOiBldmVudC5ldmVudF9pZCAsCiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSwKICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksCiAgICAuLi4oZHluYW1pY1NhbXBsaW5nQ29udGV4dCAmJiB7CiAgICAgIHRyYWNlOiBkcm9wVW5kZWZpbmVkS2V5cyh7IC4uLmR5bmFtaWNTYW1wbGluZ0NvbnRleHQgfSksCiAgICB9KSwKICB9Owp9CgovLyBJbnRlbnRpb25hbGx5IGtlZXBpbmcgdGhlIGtleSBicm9hZCwgYXMgd2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB3aGF0IHJhdGUgbGltaXQgaGVhZGVycyBnZXQgcmV0dXJuZWQgZnJvbSBiYWNrZW5kCgpjb25zdCBERUZBVUxUX1JFVFJZX0FGVEVSID0gNjAgKiAxMDAwOyAvLyA2MCBzZWNvbmRzCgovKioKICogRXh0cmFjdHMgUmV0cnktQWZ0ZXIgdmFsdWUgZnJvbSB0aGUgcmVxdWVzdCBoZWFkZXIgb3IgcmV0dXJucyBkZWZhdWx0IHZhbHVlCiAqIEBwYXJhbSBoZWFkZXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mICdSZXRyeS1BZnRlcicgaGVhZGVyCiAqIEBwYXJhbSBub3cgY3VycmVudCB1bml4IHRpbWVzdGFtcAogKgogKi8KZnVuY3Rpb24gcGFyc2VSZXRyeUFmdGVySGVhZGVyKGhlYWRlciwgbm93ID0gRGF0ZS5ub3coKSkgewogIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQoYCR7aGVhZGVyfWAsIDEwKTsKICBpZiAoIWlzTmFOKGhlYWRlckRlbGF5KSkgewogICAgcmV0dXJuIGhlYWRlckRlbGF5ICogMTAwMDsKICB9CgogIGNvbnN0IGhlYWRlckRhdGUgPSBEYXRlLnBhcnNlKGAke2hlYWRlcn1gKTsKICBpZiAoIWlzTmFOKGhlYWRlckRhdGUpKSB7CiAgICByZXR1cm4gaGVhZGVyRGF0ZSAtIG5vdzsKICB9CgogIHJldHVybiBERUZBVUxUX1JFVFJZX0FGVEVSOwp9CgovKioKICogR2V0cyB0aGUgdGltZSB0aGF0IHRoZSBnaXZlbiBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBmb3IgcmF0ZSBsaW1pdGluZy4KICogSW4gY2FzZSBubyBjYXRlZ29yeS1zcGVjaWZpYyBsaW1pdCBpcyBzZXQgYnV0IGEgZ2VuZXJhbCByYXRlIGxpbWl0IGFjcm9zcyBhbGwgY2F0ZWdvcmllcyBpcyBhY3RpdmUsCiAqIHRoYXQgdGltZSBpcyByZXR1cm5lZC4KICoKICogQHJldHVybiB0aGUgdGltZSBpbiBtcyB0aGF0IHRoZSBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBvciAwIGlmIHRoZXJlJ3Mgbm8gYWN0aXZlIHJhdGUgbGltaXQuCiAqLwpmdW5jdGlvbiBkaXNhYmxlZFVudGlsKGxpbWl0cywgZGF0YUNhdGVnb3J5KSB7CiAgcmV0dXJuIGxpbWl0c1tkYXRhQ2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDsKfQoKLyoqCiAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZAogKi8KZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGRhdGFDYXRlZ29yeSwgbm93ID0gRGF0ZS5ub3coKSkgewogIHJldHVybiBkaXNhYmxlZFVudGlsKGxpbWl0cywgZGF0YUNhdGVnb3J5KSA+IG5vdzsKfQoKLyoqCiAqIFVwZGF0ZSByYXRlbGltaXRzIGZyb20gaW5jb21pbmcgaGVhZGVycy4KICoKICogQHJldHVybiB0aGUgdXBkYXRlZCBSYXRlTGltaXRzIG9iamVjdC4KICovCmZ1bmN0aW9uIHVwZGF0ZVJhdGVMaW1pdHMoCiAgbGltaXRzLAogIHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9LAogIG5vdyA9IERhdGUubm93KCksCikgewogIGNvbnN0IHVwZGF0ZWRSYXRlTGltaXRzID0gewogICAgLi4ubGltaXRzLAogIH07CgogIC8vICJUaGUgbmFtZSBpcyBjYXNlLWluc2Vuc2l0aXZlLiIKICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSGVhZGVycy9nZXQKICBjb25zdCByYXRlTGltaXRIZWFkZXIgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ107CiAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IGhlYWRlcnMgJiYgaGVhZGVyc1sncmV0cnktYWZ0ZXInXTsKCiAgaWYgKHJhdGVMaW1pdEhlYWRlcikgewogICAgLyoqCiAgICAgKiByYXRlIGxpbWl0IGhlYWRlcnMgYXJlIG9mIHRoZSBmb3JtCiAgICAgKiAgICAgPGhlYWRlcj4sPGhlYWRlcj4sLi4KICAgICAqIHdoZXJlIGVhY2ggPGhlYWRlcj4gaXMgb2YgdGhlIGZvcm0KICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+OiA8Y2F0ZWdvcmllcz46IDxzY29wZT46IDxyZWFzb25fY29kZT46IDxuYW1lc3BhY2VzPgogICAgICogd2hlcmUKICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+IGlzIGEgZGVsYXkgaW4gc2Vjb25kcwogICAgICogICAgIDxjYXRlZ29yaWVzPiBpcyB0aGUgZXZlbnQgdHlwZShzKSAoZXJyb3IsIHRyYW5zYWN0aW9uLCBldGMpIGJlaW5nIHJhdGUgbGltaXRlZCBhbmQgaXMgb2YgdGhlIGZvcm0KICAgICAqICAgICAgICAgPGNhdGVnb3J5Pjs8Y2F0ZWdvcnk+Oy4uLgogICAgICogICAgIDxzY29wZT4gaXMgd2hhdCdzIGJlaW5nIGxpbWl0ZWQgKG9yZywgcHJvamVjdCwgb3Iga2V5KSAtIGlnbm9yZWQgYnkgU0RLCiAgICAgKiAgICAgPHJlYXNvbl9jb2RlPiBpcyBhbiBhcmJpdHJhcnkgc3RyaW5nIGxpa2UgIm9yZ19xdW90YSIgLSBpZ25vcmVkIGJ5IFNESwogICAgICogICAgIDxuYW1lc3BhY2VzPiBTZW1pY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgbWV0cmljIG5hbWVzcGFjZSBpZGVudGlmaWVycy4gRGVmaW5lcyB3aGljaCBuYW1lc3BhY2Uocykgd2lsbCBiZSBhZmZlY3RlZC4KICAgICAqICAgICAgICAgT25seSBwcmVzZW50IGlmIHJhdGUgbGltaXQgYXBwbGllcyB0byB0aGUgbWV0cmljX2J1Y2tldCBkYXRhIGNhdGVnb3J5LgogICAgICovCiAgICBmb3IgKGNvbnN0IGxpbWl0IG9mIHJhdGVMaW1pdEhlYWRlci50cmltKCkuc3BsaXQoJywnKSkgewogICAgICBjb25zdCBbcmV0cnlBZnRlciwgY2F0ZWdvcmllcywgLCAsIG5hbWVzcGFjZXNdID0gbGltaXQuc3BsaXQoJzonLCA1KTsKICAgICAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChyZXRyeUFmdGVyLCAxMCk7CiAgICAgIGNvbnN0IGRlbGF5ID0gKCFpc05hTihoZWFkZXJEZWxheSkgPyBoZWFkZXJEZWxheSA6IDYwKSAqIDEwMDA7IC8vIDYwc2VjIGRlZmF1bHQKICAgICAgaWYgKCFjYXRlZ29yaWVzKSB7CiAgICAgICAgdXBkYXRlZFJhdGVMaW1pdHMuYWxsID0gbm93ICsgZGVsYXk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzLnNwbGl0KCc7JykpIHsKICAgICAgICAgIGlmIChjYXRlZ29yeSA9PT0gJ21ldHJpY19idWNrZXQnKSB7CiAgICAgICAgICAgIC8vIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50IHdoZW4gY2F0ZWdvcnkgPT09ICdtZXRyaWNfYnVja2V0JwogICAgICAgICAgICBpZiAoIW5hbWVzcGFjZXMgfHwgbmFtZXNwYWNlcy5zcGxpdCgnOycpLmluY2x1ZGVzKCdjdXN0b20nKSkgewogICAgICAgICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzW2NhdGVnb3J5XSA9IG5vdyArIGRlbGF5OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHsKICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpOwogIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7CiAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyA2MCAqIDEwMDA7CiAgfQoKICByZXR1cm4gdXBkYXRlZFJhdGVMaW1pdHM7Cn0KCi8qKgogKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXIKICogQHBhcmFtIHBvbGxJbnRlcnZhbCBUaGUgaW50ZXJ2YWwgdGhhdCB3ZSBleHBlY3QgdG8gZ2V0IHBvbGxlZCBhdAogKiBAcGFyYW0gYW5yVGhyZXNob2xkIFRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgY29uc2lkZXIgQU5SCiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SCiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBwb2xsYCBhbmQgYGVuYWJsZWRgIGZ1bmN0aW9ucyB7QGxpbmsgV2F0Y2hkb2dSZXR1cm59CiAqLwpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKAogIGNyZWF0ZVRpbWVyLAogIHBvbGxJbnRlcnZhbCwKICBhbnJUaHJlc2hvbGQsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTsKICBsZXQgdHJpZ2dlcmVkID0gZmFsc2U7CiAgbGV0IGVuYWJsZWQgPSB0cnVlOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBjb25zdCBkaWZmTXMgPSB0aW1lci5nZXRUaW1lTXMoKTsKCiAgICBpZiAodHJpZ2dlcmVkID09PSBmYWxzZSAmJiBkaWZmTXMgPiBwb2xsSW50ZXJ2YWwgKyBhbnJUaHJlc2hvbGQpIHsKICAgICAgdHJpZ2dlcmVkID0gdHJ1ZTsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9CgogICAgaWYgKGRpZmZNcyA8IHBvbGxJbnRlcnZhbCArIGFuclRocmVzaG9sZCkgewogICAgICB0cmlnZ2VyZWQgPSBmYWxzZTsKICAgIH0KICB9LCAyMCk7CgogIHJldHVybiB7CiAgICBwb2xsOiAoKSA9PiB7CiAgICAgIHRpbWVyLnJlc2V0KCk7CiAgICB9LAogICAgZW5hYmxlZDogKHN0YXRlKSA9PiB7CiAgICAgIGVuYWJsZWQgPSBzdGF0ZTsKICAgIH0sCiAgfTsKfQoKLy8gdHlwZXMgY29waWVkIGZyb20gaW5zcGVjdG9yLmQudHMKCi8qKgogKiBDb252ZXJ0cyBEZWJ1Z2dlci5DYWxsRnJhbWUgdG8gU2VudHJ5IFN0YWNrRnJhbWUKICovCmZ1bmN0aW9uIGNhbGxGcmFtZVRvU3RhY2tGcmFtZSgKICBmcmFtZSwKICB1cmwsCiAgZ2V0TW9kdWxlRnJvbUZpbGVuYW1lLAopIHsKICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcL1wvLywgJycpIDogdW5kZWZpbmVkOwoKICAvLyBDYWxsRnJhbWUgcm93L2NvbCBhcmUgMCBiYXNlZCwgd2hlcmVhcyBTdGFja0ZyYW1lIGFyZSAxIGJhc2VkCiAgY29uc3QgY29sbm8gPSBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxIDogdW5kZWZpbmVkOwogIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDsKCiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIGZpbGVuYW1lLAogICAgbW9kdWxlOiBnZXRNb2R1bGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpLAogICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsCiAgICBjb2xubywKICAgIGxpbmVubywKICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLAogIH0pOwp9CgovKioKICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuCiAqCiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy4KICovCmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCmNvbnN0IERFRkFVTFRfRU5WSVJPTk1FTlQgPSAncHJvZHVjdGlvbic7CgovKioKICogUmV0dXJucyB0aGUgZ2xvYmFsIGV2ZW50IHByb2Nlc3NvcnMuCiAqIEBkZXByZWNhdGVkIEdsb2JhbCBldmVudCBwcm9jZXNzb3JzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICovCmZ1bmN0aW9uIGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpIHsKICByZXR1cm4gZ2V0R2xvYmFsU2luZ2xldG9uKCdnbG9iYWxFdmVudFByb2Nlc3NvcnMnLCAoKSA9PiBbXSk7Cn0KCi8qKgogKiBQcm9jZXNzIGFuIGFycmF5IG9mIGV2ZW50IHByb2Nlc3NvcnMsIHJldHVybmluZyB0aGUgcHJvY2Vzc2VkIGV2ZW50IChvciBgbnVsbGAgaWYgdGhlIGV2ZW50IHdhcyBkcm9wcGVkKS4KICovCmZ1bmN0aW9uIG5vdGlmeUV2ZW50UHJvY2Vzc29ycygKICBwcm9jZXNzb3JzLAogIGV2ZW50LAogIGhpbnQsCiAgaW5kZXggPSAwLAopIHsKICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIGNvbnN0IHByb2Nlc3NvciA9IHByb2Nlc3NvcnNbaW5kZXhdOwogICAgaWYgKGV2ZW50ID09PSBudWxsIHx8IHR5cGVvZiBwcm9jZXNzb3IgIT09ICdmdW5jdGlvbicpIHsKICAgICAgcmVzb2x2ZShldmVudCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzb3IoeyAuLi5ldmVudCB9LCBoaW50KSA7CgogICAgICBERUJVR19CVUlMRCAmJiBwcm9jZXNzb3IuaWQgJiYgcmVzdWx0ID09PSBudWxsICYmIGxvZ2dlci5sb2coYEV2ZW50IHByb2Nlc3NvciAiJHtwcm9jZXNzb3IuaWR9IiBkcm9wcGVkIGV2ZW50YCk7CgogICAgICBpZiAoaXNUaGVuYWJsZShyZXN1bHQpKSB7CiAgICAgICAgdm9pZCByZXN1bHQKICAgICAgICAgIC50aGVuKGZpbmFsID0+IG5vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCBmaW5hbCwgaGludCwgaW5kZXggKyAxKS50aGVuKHJlc29sdmUpKQogICAgICAgICAgLnRoZW4obnVsbCwgcmVqZWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2b2lkIG5vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCByZXN1bHQsIGhpbnQsIGluZGV4ICsgMSkKICAgICAgICAgIC50aGVuKHJlc29sdmUpCiAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpOwogICAgICB9CiAgICB9CiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHQKICogaXMgcGFzc2VkLCB0aGUgcGFzc2VkIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNlc3Npb24gb2JqZWN0LgogKgogKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdAogKgogKiBAcmV0dXJucyBhIG5ldyBgU2Vzc2lvbmAgb2JqZWN0CiAqLwpmdW5jdGlvbiBtYWtlU2Vzc2lvbihjb250ZXh0KSB7CiAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGNvbnN0IHNlc3Npb24gPSB7CiAgICBzaWQ6IHV1aWQ0KCksCiAgICBpbml0OiB0cnVlLAogICAgdGltZXN0YW1wOiBzdGFydGluZ1RpbWUsCiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsCiAgICBkdXJhdGlvbjogMCwKICAgIHN0YXR1czogJ29rJywKICAgIGVycm9yczogMCwKICAgIGlnbm9yZUR1cmF0aW9uOiBmYWxzZSwKICAgIHRvSlNPTjogKCkgPT4gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSwKICB9OwoKICBpZiAoY29udGV4dCkgewogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTsKICB9CgogIHJldHVybiBzZXNzaW9uOwp9CgovKioKICogVXBkYXRlcyBhIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgcGFzc2VkIGluIHRoZSBjb250ZXh0LgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuCiAqIChIYWQgdG8gZG8gdGhpcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBhbmQgdXBkYXRlZCBzZXNzaW9uIGJlY2F1c2UgY2xvc2luZyBhbmQgc2VuZGluZyBhIHNlc3Npb24KICogbWFrZXMgYW4gdXBkYXRlIHRvIHRoZSBzZXNzaW9uIGFmdGVyIGl0IHdhcyBwYXNzZWQgdG8gdGhlIHNlbmRpbmcgbG9naWMuCiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgdG8gdXBkYXRlCiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvbgogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHsKICBpZiAoY29udGV4dC51c2VyKSB7CiAgICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7CiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7CiAgICB9CgogICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHsKICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTsKICAgIH0KICB9CgogIHNlc3Npb24udGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkgewogICAgc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20gPSBjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbTsKICB9CgogIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7CiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjsKICB9CiAgaWYgKGNvbnRleHQuc2lkKSB7CiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbAogICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpOwogIH0KICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHsKICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDsKICB9CiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkgewogICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gOwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDsKICB9CiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7CiAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uOwogIH0gZWxzZSB7CiAgICBjb25zdCBkdXJhdGlvbiA9IHNlc3Npb24udGltZXN0YW1wIC0gc2Vzc2lvbi5zdGFydGVkOwogICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7CiAgfQogIGlmIChjb250ZXh0LnJlbGVhc2UpIHsKICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTsKICB9CiAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHsKICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50OwogIH0KICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7CiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzOwogIH0KICBpZiAoIXNlc3Npb24udXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7CiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50OwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykgewogICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9yczsKICB9CiAgaWYgKGNvbnRleHQuc3RhdHVzKSB7CiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzOwogIH0KfQoKLyoqCiAqIENsb3NlcyBhIHNlc3Npb24gYnkgc2V0dGluZyBpdHMgc3RhdHVzIGFuZCB1cGRhdGluZyB0aGUgc2Vzc2lvbiBvYmplY3Qgd2l0aCBpdC4KICogSW50ZXJuYWxseSBjYWxscyBgdXBkYXRlU2Vzc2lvbmAgdG8gdXBkYXRlIHRoZSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QuCiAqCiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG11dGF0ZXMgdGhlIHBhc3NlZCBzZXNzaW9uIChAc2VlIHVwZGF0ZVNlc3Npb24gZm9yIGV4cGxhbmF0aW9uKS4KICoKICogQHBhcmFtIHNlc3Npb24gdGhlIGBTZXNzaW9uYCBvYmplY3QgdG8gYmUgY2xvc2VkCiAqIEBwYXJhbSBzdGF0dXMgdGhlIGBTZXNzaW9uU3RhdHVzYCB3aXRoIHdoaWNoIHRoZSBzZXNzaW9uIHdhcyBjbG9zZWQuIElmIHlvdSBkb24ndCBwYXNzIGEgc3RhdHVzLAogKiAgICAgICAgICAgICAgIHRoaXMgZnVuY3Rpb24gd2lsbCBrZWVwIHRoZSBwcmV2aW91c2x5IHNldCBzdGF0dXMsIHVubGVzcyBpdCB3YXMgYCdvaydgIGluIHdoaWNoIGNhc2UKICogICAgICAgICAgICAgICBpdCBpcyBjaGFuZ2VkIHRvIGAnZXhpdGVkJ2AuCiAqLwpmdW5jdGlvbiBjbG9zZVNlc3Npb24oc2Vzc2lvbiwgc3RhdHVzKSB7CiAgbGV0IGNvbnRleHQgPSB7fTsKICBpZiAoc3RhdHVzKSB7CiAgICBjb250ZXh0ID0geyBzdGF0dXMgfTsKICB9IGVsc2UgaWYgKHNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7CiAgICBjb250ZXh0ID0geyBzdGF0dXM6ICdleGl0ZWQnIH07CiAgfQoKICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIGNvbnRleHQpOwp9CgovKioKICogU2VyaWFsaXplcyBhIHBhc3NlZCBzZXNzaW9uIG9iamVjdCB0byBhIEpTT04gb2JqZWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgc3RydWN0dXJlLgogKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBTZW50cnkgYmFja2VuZCByZXF1aXJlcyBhIHNsaWdodGx5IGRpZmZlcmVudCBzY2hlbWEgb2YgYSBzZXNzaW9uCiAqIHRoYW4gdGhlIG9uZSB0aGUgSlMgU0RLcyB1c2UgaW50ZXJuYWxseS4KICoKICogQHBhcmFtIHNlc3Npb24gdGhlIHNlc3Npb24gdG8gYmUgY29udmVydGVkCiAqCiAqIEByZXR1cm5zIGEgSlNPTiBvYmplY3Qgb2YgdGhlIHBhc3NlZCBzZXNzaW9uCiAqLwpmdW5jdGlvbiBzZXNzaW9uVG9KU09OKHNlc3Npb24pIHsKICByZXR1cm4gZHJvcFVuZGVmaW5lZEtleXMoewogICAgc2lkOiBgJHtzZXNzaW9uLnNpZH1gLAogICAgaW5pdDogc2Vzc2lvbi5pbml0LAogICAgLy8gTWFrZSBzdXJlIHRoYXQgc2VjIGlzIGNvbnZlcnRlZCB0byBtcyBmb3IgZGF0ZSBjb25zdHJ1Y3RvcgogICAgc3RhcnRlZDogbmV3IERhdGUoc2Vzc2lvbi5zdGFydGVkICogMTAwMCkudG9JU09TdHJpbmcoKSwKICAgIHRpbWVzdGFtcDogbmV3IERhdGUoc2Vzc2lvbi50aW1lc3RhbXAgKiAxMDAwKS50b0lTT1N0cmluZygpLAogICAgc3RhdHVzOiBzZXNzaW9uLnN0YXR1cywKICAgIGVycm9yczogc2Vzc2lvbi5lcnJvcnMsCiAgICBkaWQ6IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHNlc3Npb24uZGlkID09PSAnc3RyaW5nJyA/IGAke3Nlc3Npb24uZGlkfWAgOiB1bmRlZmluZWQsCiAgICBkdXJhdGlvbjogc2Vzc2lvbi5kdXJhdGlvbiwKICAgIGFibm9ybWFsX21lY2hhbmlzbTogc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20sCiAgICBhdHRyczogewogICAgICByZWxlYXNlOiBzZXNzaW9uLnJlbGVhc2UsCiAgICAgIGVudmlyb25tZW50OiBzZXNzaW9uLmVudmlyb25tZW50LAogICAgICBpcF9hZGRyZXNzOiBzZXNzaW9uLmlwQWRkcmVzcywKICAgICAgdXNlcl9hZ2VudDogc2Vzc2lvbi51c2VyQWdlbnQsCiAgICB9LAogIH0pOwp9Cgpjb25zdCBUUkFDRV9GTEFHX1NBTVBMRUQgPSAweDE7CgovKioKICogQ29udmVydCBhIHNwYW4gdG8gYSB0cmFjZSBjb250ZXh0LCB3aGljaCBjYW4gYmUgc2VudCBhcyB0aGUgYHRyYWNlYCBjb250ZXh0IGluIGFuIGV2ZW50LgogKi8KZnVuY3Rpb24gc3BhblRvVHJhY2VDb250ZXh0KHNwYW4pIHsKICBjb25zdCB7IHNwYW5JZDogc3Bhbl9pZCwgdHJhY2VJZDogdHJhY2VfaWQgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTsKICBjb25zdCB7IGRhdGEsIG9wLCBwYXJlbnRfc3Bhbl9pZCwgc3RhdHVzLCB0YWdzLCBvcmlnaW4gfSA9IHNwYW5Ub0pTT04oc3Bhbik7CgogIHJldHVybiBkcm9wVW5kZWZpbmVkS2V5cyh7CiAgICBkYXRhLAogICAgb3AsCiAgICBwYXJlbnRfc3Bhbl9pZCwKICAgIHNwYW5faWQsCiAgICBzdGF0dXMsCiAgICB0YWdzLAogICAgdHJhY2VfaWQsCiAgICBvcmlnaW4sCiAgfSk7Cn0KCi8qKgogKiBDb252ZXJ0IGEgc3BhbiB0byBhIEpTT04gcmVwcmVzZW50YXRpb24uCiAqIE5vdGUgdGhhdCBhbGwgZmllbGRzIHJldHVybmVkIGhlcmUgYXJlIG9wdGlvbmFsIGFuZCBuZWVkIHRvIGJlIGd1YXJkZWQgYWdhaW5zdC4KICoKICogTm90ZTogQmVjYXVzZSBvZiB0aGlzLCB3ZSBjdXJyZW50bHkgaGF2ZSBhIGNpcmN1bGFyIHR5cGUgZGVwZW5kZW5jeSAod2hpY2ggd2Ugb3B0ZWQgb3V0IG9mIGluIHBhY2thZ2UuanNvbikuCiAqIFRoaXMgaXMgbm90IGF2b2lkYWJsZSBhcyB3ZSBuZWVkIGBzcGFuVG9KU09OYCBpbiBgc3BhblV0aWxzLnRzYCwgd2hpY2ggaW4gdHVybiBpcyBuZWVkZWQgYnkgYHNwYW4udHNgIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICogQW5kIGBzcGFuVG9KU09OYCBuZWVkcyB0aGUgU3BhbiBjbGFzcyBmcm9tIGBzcGFuLnRzYCB0byBjaGVjayBoZXJlLgogKiBUT0RPIHY4OiBXaGVuIHdlIHJlbW92ZSB0aGUgZGVwcmVjYXRlZCBzdHVmZiBmcm9tIGBzcGFuLnRzYCwgd2UgY2FuIHJlbW92ZSB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSBhZ2Fpbi4KICovCmZ1bmN0aW9uIHNwYW5Ub0pTT04oc3BhbikgewogIGlmIChzcGFuSXNTcGFuQ2xhc3Moc3BhbikpIHsKICAgIHJldHVybiBzcGFuLmdldFNwYW5KU09OKCk7CiAgfQoKICAvLyBGYWxsYmFjazogV2UgYWxzbyBjaGVjayBmb3IgYC50b0pTT04oKWAgaGVyZS4uLgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGlmICh0eXBlb2Ygc3Bhbi50b0pTT04gPT09ICdmdW5jdGlvbicpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgcmV0dXJuIHNwYW4udG9KU09OKCk7CiAgfQoKICByZXR1cm4ge307Cn0KCi8qKgogKiBTYWRseSwgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2hlY2tzIHdlIGNhbm5vdCBhY3R1YWxseSBpbXBvcnQgdGhlIFNwYW4gY2xhc3MgaGVyZSBhbmQgY2hlY2sgZm9yIGluc3RhbmNlb2YuCiAqIDooIFNvIGluc3RlYWQgd2UgYXBwcm94aW1hdGUgdGhpcyBieSBjaGVja2luZyBpZiBpdCBoYXMgdGhlIGBnZXRTcGFuSlNPTmAgbWV0aG9kLgogKi8KZnVuY3Rpb24gc3BhbklzU3BhbkNsYXNzKHNwYW4pIHsKICByZXR1cm4gdHlwZW9mIChzcGFuICkuZ2V0U3BhbkpTT04gPT09ICdmdW5jdGlvbic7Cn0KCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgYSBzcGFuIGlzIHNhbXBsZWQuCiAqIEluIG1vc3QgY2FzZXMsIHlvdSBzaG91bGQganVzdCB1c2UgYHNwYW4uaXNSZWNvcmRpbmcoKWAgaW5zdGVhZC4KICogSG93ZXZlciwgdGhpcyBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWMsIGFzIGl0IGFsc28gcmV0dXJucyBmYWxzZSBpZiB0aGUgc3BhbiBpcyBmaW5pc2hlZC4KICogU28gaW4gdGhlIGNhc2Ugd2hlcmUgdGhpcyBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQsIHVzZSB0aGlzIG1ldGhvZC4KICovCmZ1bmN0aW9uIHNwYW5Jc1NhbXBsZWQoc3BhbikgewogIC8vIFdlIGFsaWduIG91ciB0cmFjZSBmbGFncyB3aXRoIHRoZSBvbmVzIE9wZW5UZWxlbWV0cnkgdXNlCiAgLy8gU28gd2UgYWxzbyBjaGVjayBmb3Igc2FtcGxlZCB0aGUgc2FtZSB3YXkgdGhleSBkby4KICBjb25zdCB7IHRyYWNlRmxhZ3MgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZQogIHJldHVybiBCb29sZWFuKHRyYWNlRmxhZ3MgJiBUUkFDRV9GTEFHX1NBTVBMRUQpOwp9CgovKioKICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGNsaWVudC4KICovCmZ1bmN0aW9uIGdldENsaWVudCgpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICByZXR1cm4gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudCgpOwp9CgovKioKICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIHNjb3BlLgogKi8KZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkgewogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIHJldHVybiBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIHJvb3Qgc3BhbiBvZiBhIGdpdmVuIHNwYW4uCiAqCiAqIEFzIGxvbmcgYXMgd2UgdXNlIGBUcmFuc2FjdGlvbmBzIGludGVybmFsbHksIHRoZSByZXR1cm5lZCByb290IHNwYW4KICogd2lsbCBiZSBhIGBUcmFuc2FjdGlvbmAgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICoKICogSWYgdGhlIGdpdmVuIHNwYW4gaGFzIG5vIHJvb3Qgc3BhbiBvciB0cmFuc2FjdGlvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuCiAqLwpmdW5jdGlvbiBnZXRSb290U3BhbihzcGFuKSB7CiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgdGhpcyBjaGVjayBhbmQganVzdCByZXR1cm4gc3BhbgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIHJldHVybiBzcGFuLnRyYW5zYWN0aW9uOwp9CgovKioKICogQ3JlYXRlcyBhIGR5bmFtaWMgc2FtcGxpbmcgY29udGV4dCBmcm9tIGEgY2xpZW50LgogKgogKiBEaXNwYXRjaGVzIHRoZSBgY3JlYXRlRHNjYCBsaWZlY3ljbGUgaG9vayBhcyBhIHNpZGUgZWZmZWN0LgogKi8KZnVuY3Rpb24gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQoCiAgdHJhY2VfaWQsCiAgY2xpZW50LAogIHNjb3BlLAopIHsKICBjb25zdCBvcHRpb25zID0gY2xpZW50LmdldE9wdGlvbnMoKTsKCiAgY29uc3QgeyBwdWJsaWNLZXk6IHB1YmxpY19rZXkgfSA9IGNsaWVudC5nZXREc24oKSB8fCB7fTsKICAvLyBUT0RPKHY4KTogUmVtb3ZlIHNlZ21lbnQgZnJvbSBVc2VyCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgY29uc3QgeyBzZWdtZW50OiB1c2VyX3NlZ21lbnQgfSA9IChzY29wZSAmJiBzY29wZS5nZXRVc2VyKCkpIHx8IHt9OwoKICBjb25zdCBkc2MgPSBkcm9wVW5kZWZpbmVkS2V5cyh7CiAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCB8fCBERUZBVUxUX0VOVklST05NRU5ULAogICAgcmVsZWFzZTogb3B0aW9ucy5yZWxlYXNlLAogICAgdXNlcl9zZWdtZW50LAogICAgcHVibGljX2tleSwKICAgIHRyYWNlX2lkLAogIH0pIDsKCiAgY2xpZW50LmVtaXQgJiYgY2xpZW50LmVtaXQoJ2NyZWF0ZURzYycsIGRzYyk7CgogIHJldHVybiBkc2M7Cn0KCi8qKgogKiBBIFNwYW4gd2l0aCBhIGZyb3plbiBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQuCiAqLwoKLyoqCiAqIENyZWF0ZXMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQgZnJvbSBhIHNwYW4gKGFuZCBjbGllbnQgYW5kIHNjb3BlKQogKgogKiBAcGFyYW0gc3BhbiB0aGUgc3BhbiBmcm9tIHdoaWNoIGEgZmV3IHZhbHVlcyBsaWtlIHRoZSByb290IHNwYW4gbmFtZSBhbmQgc2FtcGxlIHJhdGUgYXJlIGV4dHJhY3RlZC4KICoKICogQHJldHVybnMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQKICovCmZ1bmN0aW9uIGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSB7CiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7CiAgaWYgKCFjbGllbnQpIHsKICAgIHJldHVybiB7fTsKICB9CgogIC8vIHBhc3NpbmcgZW1pdD1mYWxzZSBoZXJlIHRvIG9ubHkgZW1pdCBsYXRlciBvbmNlIHRoZSBEU0MgaXMgYWN0dWFsbHkgcG9wdWxhdGVkCiAgY29uc3QgZHNjID0gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQoc3BhblRvSlNPTihzcGFuKS50cmFjZV9pZCB8fCAnJywgY2xpZW50LCBnZXRDdXJyZW50U2NvcGUoKSk7CgogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHY3RnJvemVuRHNjIGFzIGEgVHJhbnNhY3Rpb24gd2lsbCBubyBsb25nZXIgaGF2ZSBfZnJvemVuRHluYW1pY1NhbXBsaW5nQ29udGV4dAogIGNvbnN0IHR4biA9IGdldFJvb3RTcGFuKHNwYW4pIDsKICBpZiAoIXR4bikgewogICAgcmV0dXJuIGRzYzsKICB9CgogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHY3RnJvemVuRHNjIGFzIGEgVHJhbnNhY3Rpb24gd2lsbCBubyBsb25nZXIgaGF2ZSBfZnJvemVuRHluYW1pY1NhbXBsaW5nQ29udGV4dAogIC8vIEZvciBub3cgd2UgbmVlZCB0byBhdm9pZCBicmVha2luZyB1c2VycyB3aG8gZGlyZWN0bHkgY3JlYXRlZCBhIHR4biB3aXRoIGEgRFNDLCB3aGVyZSB0aGlzIGZpZWxkIGlzIHN0aWxsIHNldC4KICAvLyBAc2VlIFRyYW5zYWN0aW9uIGNsYXNzIGNvbnN0cnVjdG9yCiAgY29uc3QgdjdGcm96ZW5Ec2MgPSB0eG4gJiYgdHhuLl9mcm96ZW5EeW5hbWljU2FtcGxpbmdDb250ZXh0OwogIGlmICh2N0Zyb3plbkRzYykgewogICAgcmV0dXJuIHY3RnJvemVuRHNjOwogIH0KCiAgLy8gVE9ETyAodjgpOiBSZXBsYWNlIHR4bi5tZXRhZGF0YSB3aXRoIHR4bi5hdHRyaWJ1dGVzW10KICAvLyBXZSBjYW4ndCBkbyB0aGlzIHlldCBiZWNhdXNlIGF0dHJpYnV0ZXMgYXJlbid0IGFsd2F5cyBzZXQgeWV0LgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGNvbnN0IHsgc2FtcGxlUmF0ZTogbWF5YmVTYW1wbGVSYXRlLCBzb3VyY2UgfSA9IHR4bi5tZXRhZGF0YTsKICBpZiAobWF5YmVTYW1wbGVSYXRlICE9IG51bGwpIHsKICAgIGRzYy5zYW1wbGVfcmF0ZSA9IGAke21heWJlU2FtcGxlUmF0ZX1gOwogIH0KCiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBoYXZlIGEgdHJhbnNhY3Rpb24gbmFtZSBpbiB0aGUgRFNDIGlmIHRoZSBzb3VyY2UgaXMgInVybCIgYmVjYXVzZSBVUkxzIG1pZ2h0IGNvbnRhaW4gUElJCiAgY29uc3QganNvblNwYW4gPSBzcGFuVG9KU09OKHR4bik7CgogIC8vIGFmdGVyIEpTT04gY29udmVyc2lvbiwgdHhuLm5hbWUgYmVjb21lcyBqc29uU3Bhbi5kZXNjcmlwdGlvbgogIGlmIChzb3VyY2UgJiYgc291cmNlICE9PSAndXJsJykgewogICAgZHNjLnRyYW5zYWN0aW9uID0ganNvblNwYW4uZGVzY3JpcHRpb247CiAgfQoKICBkc2Muc2FtcGxlZCA9IFN0cmluZyhzcGFuSXNTYW1wbGVkKHR4bikpOwoKICBjbGllbnQuZW1pdCAmJiBjbGllbnQuZW1pdCgnY3JlYXRlRHNjJywgZHNjKTsKCiAgcmV0dXJuIGRzYzsKfQoKLyoqCiAqIEFwcGxpZXMgZGF0YSBmcm9tIHRoZSBzY29wZSB0byB0aGUgZXZlbnQgYW5kIHJ1bnMgYWxsIGV2ZW50IHByb2Nlc3NvcnMgb24gaXQuCiAqLwpmdW5jdGlvbiBhcHBseVNjb3BlRGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpIHsKICBjb25zdCB7IGZpbmdlcnByaW50LCBzcGFuLCBicmVhZGNydW1icywgc2RrUHJvY2Vzc2luZ01ldGFkYXRhIH0gPSBkYXRhOwoKICAvLyBBcHBseSBnZW5lcmFsIGRhdGEKICBhcHBseURhdGFUb0V2ZW50KGV2ZW50LCBkYXRhKTsKCiAgLy8gV2Ugd2FudCB0byBzZXQgdGhlIHRyYWNlIGNvbnRleHQgZm9yIG5vcm1hbCBldmVudHMgb25seSBpZiB0aGVyZSBpc24ndCBhbHJlYWR5CiAgLy8gYSB0cmFjZSBjb250ZXh0IG9uIHRoZSBldmVudC4gVGhlcmUgaXMgYSBwcm9kdWN0IGZlYXR1cmUgaW4gcGxhY2Ugd2hlcmUgd2UgbGluawogIC8vIGVycm9ycyB3aXRoIHRyYW5zYWN0aW9uIGFuZCBpdCByZWxpZXMgb24gdGhhdC4KICBpZiAoc3BhbikgewogICAgYXBwbHlTcGFuVG9FdmVudChldmVudCwgc3Bhbik7CiAgfQoKICBhcHBseUZpbmdlcnByaW50VG9FdmVudChldmVudCwgZmluZ2VycHJpbnQpOwogIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icyk7CiAgYXBwbHlTZGtNZXRhZGF0YVRvRXZlbnQoZXZlbnQsIHNka1Byb2Nlc3NpbmdNZXRhZGF0YSk7Cn0KCmZ1bmN0aW9uIGFwcGx5RGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpIHsKICBjb25zdCB7CiAgICBleHRyYSwKICAgIHRhZ3MsCiAgICB1c2VyLAogICAgY29udGV4dHMsCiAgICBsZXZlbCwKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdHJhbnNhY3Rpb25OYW1lLAogIH0gPSBkYXRhOwoKICBjb25zdCBjbGVhbmVkRXh0cmEgPSBkcm9wVW5kZWZpbmVkS2V5cyhleHRyYSk7CiAgaWYgKGNsZWFuZWRFeHRyYSAmJiBPYmplY3Qua2V5cyhjbGVhbmVkRXh0cmEpLmxlbmd0aCkgewogICAgZXZlbnQuZXh0cmEgPSB7IC4uLmNsZWFuZWRFeHRyYSwgLi4uZXZlbnQuZXh0cmEgfTsKICB9CgogIGNvbnN0IGNsZWFuZWRUYWdzID0gZHJvcFVuZGVmaW5lZEtleXModGFncyk7CiAgaWYgKGNsZWFuZWRUYWdzICYmIE9iamVjdC5rZXlzKGNsZWFuZWRUYWdzKS5sZW5ndGgpIHsKICAgIGV2ZW50LnRhZ3MgPSB7IC4uLmNsZWFuZWRUYWdzLCAuLi5ldmVudC50YWdzIH07CiAgfQoKICBjb25zdCBjbGVhbmVkVXNlciA9IGRyb3BVbmRlZmluZWRLZXlzKHVzZXIpOwogIGlmIChjbGVhbmVkVXNlciAmJiBPYmplY3Qua2V5cyhjbGVhbmVkVXNlcikubGVuZ3RoKSB7CiAgICBldmVudC51c2VyID0geyAuLi5jbGVhbmVkVXNlciwgLi4uZXZlbnQudXNlciB9OwogIH0KCiAgY29uc3QgY2xlYW5lZENvbnRleHRzID0gZHJvcFVuZGVmaW5lZEtleXMoY29udGV4dHMpOwogIGlmIChjbGVhbmVkQ29udGV4dHMgJiYgT2JqZWN0LmtleXMoY2xlYW5lZENvbnRleHRzKS5sZW5ndGgpIHsKICAgIGV2ZW50LmNvbnRleHRzID0geyAuLi5jbGVhbmVkQ29udGV4dHMsIC4uLmV2ZW50LmNvbnRleHRzIH07CiAgfQoKICBpZiAobGV2ZWwpIHsKICAgIGV2ZW50LmxldmVsID0gbGV2ZWw7CiAgfQoKICBpZiAodHJhbnNhY3Rpb25OYW1lKSB7CiAgICBldmVudC50cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uTmFtZTsKICB9Cn0KCmZ1bmN0aW9uIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icykgewogIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWJzID0gWy4uLihldmVudC5icmVhZGNydW1icyB8fCBbXSksIC4uLmJyZWFkY3J1bWJzXTsKICBldmVudC5icmVhZGNydW1icyA9IG1lcmdlZEJyZWFkY3J1bWJzLmxlbmd0aCA/IG1lcmdlZEJyZWFkY3J1bWJzIDogdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBhcHBseVNka01ldGFkYXRhVG9FdmVudChldmVudCwgc2RrUHJvY2Vzc2luZ01ldGFkYXRhKSB7CiAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gewogICAgLi4uZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLAogICAgLi4uc2RrUHJvY2Vzc2luZ01ldGFkYXRhLAogIH07Cn0KCmZ1bmN0aW9uIGFwcGx5U3BhblRvRXZlbnQoZXZlbnQsIHNwYW4pIHsKICBldmVudC5jb250ZXh0cyA9IHsgdHJhY2U6IHNwYW5Ub1RyYWNlQ29udGV4dChzcGFuKSwgLi4uZXZlbnQuY29udGV4dHMgfTsKICBjb25zdCByb290U3BhbiA9IGdldFJvb3RTcGFuKHNwYW4pOwogIGlmIChyb290U3BhbikgewogICAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gewogICAgICBkeW5hbWljU2FtcGxpbmdDb250ZXh0OiBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4oc3BhbiksCiAgICAgIC4uLmV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSwKICAgIH07CiAgICBjb25zdCB0cmFuc2FjdGlvbk5hbWUgPSBzcGFuVG9KU09OKHJvb3RTcGFuKS5kZXNjcmlwdGlvbjsKICAgIGlmICh0cmFuc2FjdGlvbk5hbWUpIHsKICAgICAgZXZlbnQudGFncyA9IHsgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uTmFtZSwgLi4uZXZlbnQudGFncyB9OwogICAgfQogIH0KfQoKLyoqCiAqIEFwcGxpZXMgZmluZ2VycHJpbnQgZnJvbSB0aGUgc2NvcGUgdG8gdGhlIGV2ZW50IGlmIHRoZXJlJ3Mgb25lLAogKiB1c2VzIG1lc3NhZ2UgaWYgdGhlcmUncyBvbmUgaW5zdGVhZCBvciBnZXQgcmlkIG9mIGVtcHR5IGZpbmdlcnByaW50CiAqLwpmdW5jdGlvbiBhcHBseUZpbmdlcnByaW50VG9FdmVudChldmVudCwgZmluZ2VycHJpbnQpIHsKICAvLyBNYWtlIHN1cmUgaXQncyBhbiBhcnJheSBmaXJzdCBhbmQgd2UgYWN0dWFsbHkgaGF2ZSBzb21ldGhpbmcgaW4gcGxhY2UKICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50ID8gYXJyYXlpZnkoZXZlbnQuZmluZ2VycHJpbnQpIDogW107CgogIC8vIElmIHdlIGhhdmUgc29tZXRoaW5nIG9uIHRoZSBzY29wZSwgdGhlbiBtZXJnZSBpdCB3aXRoIGV2ZW50CiAgaWYgKGZpbmdlcnByaW50KSB7CiAgICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50LmNvbmNhdChmaW5nZXJwcmludCk7CiAgfQoKICAvLyBJZiB3ZSBoYXZlIG5vIGRhdGEgYXQgYWxsLCByZW1vdmUgZW1wdHkgYXJyYXkgZGVmYXVsdAogIGlmIChldmVudC5maW5nZXJwcmludCAmJiAhZXZlbnQuZmluZ2VycHJpbnQubGVuZ3RoKSB7CiAgICBkZWxldGUgZXZlbnQuZmluZ2VycHJpbnQ7CiAgfQp9CgovKioKICogRGVmYXVsdCB2YWx1ZSBmb3IgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuCiAqLwpjb25zdCBERUZBVUxUX01BWF9CUkVBRENSVU1CUyA9IDEwMDsKCi8qKgogKiBIb2xkcyBhZGRpdGlvbmFsIGV2ZW50IGluZm9ybWF0aW9uLiB7QGxpbmsgU2NvcGUuYXBwbHlUb0V2ZW50fSB3aWxsIGJlCiAqIGNhbGxlZCBieSB0aGUgY2xpZW50IGJlZm9yZSBhbiBldmVudCB3aWxsIGJlIHNlbnQuCiAqLwpjbGFzcyBTY29wZSAgewogIC8qKiBGbGFnIGlmIG5vdGlmeWluZyBpcyBoYXBwZW5pbmcuICovCgogIC8qKiBDYWxsYmFjayBmb3IgY2xpZW50IHRvIHJlY2VpdmUgc2NvcGUgY2hhbmdlcy4gKi8KCiAgLyoqIENhbGxiYWNrIGxpc3QgdGhhdCB3aWxsIGJlIGNhbGxlZCBhZnRlciB7QGxpbmsgYXBwbHlUb0V2ZW50fS4gKi8KCiAgLyoqIEFycmF5IG9mIGJyZWFkY3J1bWJzLiAqLwoKICAvKiogVXNlciAqLwoKICAvKiogVGFncyAqLwoKICAvKiogRXh0cmEgKi8KCiAgLyoqIENvbnRleHRzICovCgogIC8qKiBBdHRhY2htZW50cyAqLwoKICAvKiogUHJvcGFnYXRpb24gQ29udGV4dCBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZyAqLwoKICAvKioKICAgKiBBIHBsYWNlIHRvIHN0YXNoIGRhdGEgd2hpY2ggaXMgbmVlZGVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIFNESydzIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUgYnV0IHdoaWNoIHNob3VsZG4ndCBnZXQKICAgKiBzZW50IHRvIFNlbnRyeQogICAqLwoKICAvKiogRmluZ2VycHJpbnQgKi8KCiAgLyoqIFNldmVyaXR5ICovCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCgogIC8qKgogICAqIFRyYW5zYWN0aW9uIE5hbWUKICAgKi8KCiAgLyoqIFNwYW4gKi8KCiAgLyoqIFNlc3Npb24gKi8KCiAgLyoqIFJlcXVlc3QgTW9kZSBTZXNzaW9uIFN0YXR1cyAqLwoKICAvKiogVGhlIGNsaWVudCBvbiB0aGlzIHNjb3BlICovCgogIC8vIE5PVEU6IEFueSBmaWVsZCB3aGljaCBnZXRzIGFkZGVkIGhlcmUgc2hvdWxkIGdldCBhZGRlZCBub3Qgb25seSB0byB0aGUgY29uc3RydWN0b3IgYnV0IGFsc28gdG8gdGhlIGBjbG9uZWAgbWV0aG9kLgoKICAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgPSBmYWxzZTsKICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzID0gW107CiAgICB0aGlzLl9ldmVudFByb2Nlc3NvcnMgPSBbXTsKICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107CiAgICB0aGlzLl9hdHRhY2htZW50cyA9IFtdOwogICAgdGhpcy5fdXNlciA9IHt9OwogICAgdGhpcy5fdGFncyA9IHt9OwogICAgdGhpcy5fZXh0cmEgPSB7fTsKICAgIHRoaXMuX2NvbnRleHRzID0ge307CiAgICB0aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7fTsKICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGdlbmVyYXRlUHJvcGFnYXRpb25Db250ZXh0KCk7CiAgfQoKICAvKioKICAgKiBJbmhlcml0IHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQgc2NvcGUuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzY29wZS5jbG9uZSgpYCBhbmQgYG5ldyBTY29wZSgpYCBpbnN0ZWFkLgogICAqLwogICBzdGF0aWMgY2xvbmUoc2NvcGUpIHsKICAgIHJldHVybiBzY29wZSA/IHNjb3BlLmNsb25lKCkgOiBuZXcgU2NvcGUoKTsKICB9CgogIC8qKgogICAqIENsb25lIHRoaXMgc2NvcGUgaW5zdGFuY2UuCiAgICovCiAgIGNsb25lKCkgewogICAgY29uc3QgbmV3U2NvcGUgPSBuZXcgU2NvcGUoKTsKICAgIG5ld1Njb3BlLl9icmVhZGNydW1icyA9IFsuLi50aGlzLl9icmVhZGNydW1ic107CiAgICBuZXdTY29wZS5fdGFncyA9IHsgLi4udGhpcy5fdGFncyB9OwogICAgbmV3U2NvcGUuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSB9OwogICAgbmV3U2NvcGUuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cyB9OwogICAgbmV3U2NvcGUuX3VzZXIgPSB0aGlzLl91c2VyOwogICAgbmV3U2NvcGUuX2xldmVsID0gdGhpcy5fbGV2ZWw7CiAgICBuZXdTY29wZS5fc3BhbiA9IHRoaXMuX3NwYW47CiAgICBuZXdTY29wZS5fc2Vzc2lvbiA9IHRoaXMuX3Nlc3Npb247CiAgICBuZXdTY29wZS5fdHJhbnNhY3Rpb25OYW1lID0gdGhpcy5fdHJhbnNhY3Rpb25OYW1lOwogICAgbmV3U2NvcGUuX2ZpbmdlcnByaW50ID0gdGhpcy5fZmluZ2VycHJpbnQ7CiAgICBuZXdTY29wZS5fZXZlbnRQcm9jZXNzb3JzID0gWy4uLnRoaXMuX2V2ZW50UHJvY2Vzc29yc107CiAgICBuZXdTY29wZS5fcmVxdWVzdFNlc3Npb24gPSB0aGlzLl9yZXF1ZXN0U2Vzc2lvbjsKICAgIG5ld1Njb3BlLl9hdHRhY2htZW50cyA9IFsuLi50aGlzLl9hdHRhY2htZW50c107CiAgICBuZXdTY29wZS5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0geyAuLi50aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgfTsKICAgIG5ld1Njb3BlLl9wcm9wYWdhdGlvbkNvbnRleHQgPSB7IC4uLnRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCB9OwogICAgbmV3U2NvcGUuX2NsaWVudCA9IHRoaXMuX2NsaWVudDsKCiAgICByZXR1cm4gbmV3U2NvcGU7CiAgfQoKICAvKiogVXBkYXRlIHRoZSBjbGllbnQgb24gdGhlIHNjb3BlLiAqLwogICBzZXRDbGllbnQoY2xpZW50KSB7CiAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIGNsaWVudCBhc3NpZ25lZCB0byB0aGlzIHNjb3BlLgogICAqCiAgICogSXQgaXMgZ2VuZXJhbGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgZ2xvYmFsIGZ1bmN0aW9uIGBTZW50cnkuZ2V0Q2xpZW50KClgIGluc3RlYWQsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAgICovCiAgIGdldENsaWVudCgpIHsKICAgIHJldHVybiB0aGlzLl9jbGllbnQ7CiAgfQoKICAvKioKICAgKiBBZGQgaW50ZXJuYWwgb24gY2hhbmdlIGxpc3RlbmVyLiBVc2VkIGZvciBzdWIgU0RLcyB0aGF0IG5lZWQgdG8gc3RvcmUgdGhlIHNjb3BlLgogICAqIEBoaWRkZW4KICAgKi8KICAgYWRkU2NvcGVMaXN0ZW5lcihjYWxsYmFjaykgewogICAgdGhpcy5fc2NvcGVMaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBhZGRFdmVudFByb2Nlc3NvcihjYWxsYmFjaykgewogICAgdGhpcy5fZXZlbnRQcm9jZXNzb3JzLnB1c2goY2FsbGJhY2spOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRVc2VyKHVzZXIpIHsKICAgIC8vIElmIG51bGwgaXMgcGFzc2VkIHdlIHdhbnQgdG8gdW5zZXQgZXZlcnl0aGluZywgYnV0IHN0aWxsIGRlZmluZSBrZXlzLAogICAgLy8gc28gdGhhdCBsYXRlciBkb3duIGluIHRoZSBwaXBlbGluZSBhbnkgZXhpc3RpbmcgdmFsdWVzIGFyZSBjbGVhcmVkLgogICAgdGhpcy5fdXNlciA9IHVzZXIgfHwgewogICAgICBlbWFpbDogdW5kZWZpbmVkLAogICAgICBpZDogdW5kZWZpbmVkLAogICAgICBpcF9hZGRyZXNzOiB1bmRlZmluZWQsCiAgICAgIHNlZ21lbnQ6IHVuZGVmaW5lZCwKICAgICAgdXNlcm5hbWU6IHVuZGVmaW5lZCwKICAgIH07CgogICAgaWYgKHRoaXMuX3Nlc3Npb24pIHsKICAgICAgdXBkYXRlU2Vzc2lvbih0aGlzLl9zZXNzaW9uLCB7IHVzZXIgfSk7CiAgICB9CgogICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0VXNlcigpIHsKICAgIHJldHVybiB0aGlzLl91c2VyOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0UmVxdWVzdFNlc3Npb24oKSB7CiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdFNlc3Npb247CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRSZXF1ZXN0U2Vzc2lvbihyZXF1ZXN0U2Vzc2lvbikgewogICAgdGhpcy5fcmVxdWVzdFNlc3Npb24gPSByZXF1ZXN0U2Vzc2lvbjsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgc2V0VGFncyh0YWdzKSB7CiAgICB0aGlzLl90YWdzID0gewogICAgICAuLi50aGlzLl90YWdzLAogICAgICAuLi50YWdzLAogICAgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldFRhZyhrZXksIHZhbHVlKSB7CiAgICB0aGlzLl90YWdzID0geyAuLi50aGlzLl90YWdzLCBba2V5XTogdmFsdWUgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldEV4dHJhcyhleHRyYXMpIHsKICAgIHRoaXMuX2V4dHJhID0gewogICAgICAuLi50aGlzLl9leHRyYSwKICAgICAgLi4uZXh0cmFzLAogICAgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldEV4dHJhKGtleSwgZXh0cmEpIHsKICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgW2tleV06IGV4dHJhIH07CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRGaW5nZXJwcmludChmaW5nZXJwcmludCkgewogICAgdGhpcy5fZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldExldmVsKAogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBsZXZlbCwKICApIHsKICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBuYW1lIG9uIHRoZSBzY29wZSBmb3IgZnV0dXJlIGV2ZW50cy4KICAgKi8KICAgc2V0VHJhbnNhY3Rpb25OYW1lKG5hbWUpIHsKICAgIHRoaXMuX3RyYW5zYWN0aW9uTmFtZSA9IG5hbWU7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRDb250ZXh0KGtleSwgY29udGV4dCkgewogICAgaWYgKGNvbnRleHQgPT09IG51bGwpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZQogICAgICBkZWxldGUgdGhpcy5fY29udGV4dHNba2V5XTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX2NvbnRleHRzW2tleV0gPSBjb250ZXh0OwogICAgfQoKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFNldHMgdGhlIFNwYW4gb24gdGhlIHNjb3BlLgogICAqIEBwYXJhbSBzcGFuIFNwYW4KICAgKiBAZGVwcmVjYXRlZCBJbnN0ZWFkIG9mIHNldHRpbmcgYSBzcGFuIG9uIGEgc2NvcGUsIHVzZSBgc3RhcnRTcGFuKClgL2BzdGFydFNwYW5NYW51YWwoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0U3BhbihzcGFuKSB7CiAgICB0aGlzLl9zcGFuID0gc3BhbjsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGBTcGFuYCBpZiB0aGVyZSBpcyBvbmUuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRBY3RpdmVTcGFuKClgIGluc3RlYWQuCiAgICovCiAgIGdldFNwYW4oKSB7CiAgICByZXR1cm4gdGhpcy5fc3BhbjsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGBUcmFuc2FjdGlvbmAgYXR0YWNoZWQgdG8gdGhlIHNjb3BlIChpZiB0aGVyZSBpcyBvbmUpLgogICAqIEBkZXByZWNhdGVkIFlvdSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHRyYW5zYWN0aW9uLCBidXQganVzdCB1c2UgYHN0YXJ0U3BhbigpYCBBUElzIGluc3RlYWQuCiAgICovCiAgIGdldFRyYW5zYWN0aW9uKCkgewogICAgLy8gT2Z0ZW4sIHRoaXMgc3BhbiAoaWYgaXQgZXhpc3RzIGF0IGFsbCkgd2lsbCBiZSBhIHRyYW5zYWN0aW9uLCBidXQgaXQncyBub3QgZ3VhcmFudGVlZCB0byBiZS4gUmVnYXJkbGVzcywgaXQgd2lsbAogICAgLy8gaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnRseS1hY3RpdmUgdHJhbnNhY3Rpb24uCiAgICBjb25zdCBzcGFuID0gdGhpcy5fc3BhbjsKICAgIC8vIENhbm5vdCByZXBsYWNlIHdpdGggZ2V0Um9vdFNwYW4gYmVjYXVzZSBnZXRSb290U3BhbiByZXR1cm5zIGEgc3Bhbiwgbm90IGEgdHJhbnNhY3Rpb24KICAgIC8vIEFsc28sIHRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBhbnl3YXkuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHJldHVybiBzcGFuICYmIHNwYW4udHJhbnNhY3Rpb247CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRTZXNzaW9uKHNlc3Npb24pIHsKICAgIGlmICghc2Vzc2lvbikgewogICAgICBkZWxldGUgdGhpcy5fc2Vzc2lvbjsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX3Nlc3Npb24gPSBzZXNzaW9uOwogICAgfQogICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0U2Vzc2lvbigpIHsKICAgIHJldHVybiB0aGlzLl9zZXNzaW9uOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgdXBkYXRlKGNhcHR1cmVDb250ZXh0KSB7CiAgICBpZiAoIWNhcHR1cmVDb250ZXh0KSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIGNvbnN0IHNjb3BlVG9NZXJnZSA9IHR5cGVvZiBjYXB0dXJlQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IGNhcHR1cmVDb250ZXh0KHRoaXMpIDogY2FwdHVyZUNvbnRleHQ7CgogICAgaWYgKHNjb3BlVG9NZXJnZSBpbnN0YW5jZW9mIFNjb3BlKSB7CiAgICAgIGNvbnN0IHNjb3BlRGF0YSA9IHNjb3BlVG9NZXJnZS5nZXRTY29wZURhdGEoKTsKCiAgICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLnNjb3BlRGF0YS50YWdzIH07CiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uc2NvcGVEYXRhLmV4dHJhIH07CiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uc2NvcGVEYXRhLmNvbnRleHRzIH07CiAgICAgIGlmIChzY29wZURhdGEudXNlciAmJiBPYmplY3Qua2V5cyhzY29wZURhdGEudXNlcikubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5fdXNlciA9IHNjb3BlRGF0YS51c2VyOwogICAgICB9CiAgICAgIGlmIChzY29wZURhdGEubGV2ZWwpIHsKICAgICAgICB0aGlzLl9sZXZlbCA9IHNjb3BlRGF0YS5sZXZlbDsKICAgICAgfQogICAgICBpZiAoc2NvcGVEYXRhLmZpbmdlcnByaW50Lmxlbmd0aCkgewogICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gc2NvcGVEYXRhLmZpbmdlcnByaW50OwogICAgICB9CiAgICAgIGlmIChzY29wZVRvTWVyZ2UuZ2V0UmVxdWVzdFNlc3Npb24oKSkgewogICAgICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gc2NvcGVUb01lcmdlLmdldFJlcXVlc3RTZXNzaW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHNjb3BlRGF0YS5wcm9wYWdhdGlvbkNvbnRleHQpIHsKICAgICAgICB0aGlzLl9wcm9wYWdhdGlvbkNvbnRleHQgPSBzY29wZURhdGEucHJvcGFnYXRpb25Db250ZXh0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qoc2NvcGVUb01lcmdlKSkgewogICAgICBjb25zdCBzY29wZUNvbnRleHQgPSBjYXB0dXJlQ29udGV4dCA7CiAgICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLnNjb3BlQ29udGV4dC50YWdzIH07CiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uc2NvcGVDb250ZXh0LmV4dHJhIH07CiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uc2NvcGVDb250ZXh0LmNvbnRleHRzIH07CiAgICAgIGlmIChzY29wZUNvbnRleHQudXNlcikgewogICAgICAgIHRoaXMuX3VzZXIgPSBzY29wZUNvbnRleHQudXNlcjsKICAgICAgfQogICAgICBpZiAoc2NvcGVDb250ZXh0LmxldmVsKSB7CiAgICAgICAgdGhpcy5fbGV2ZWwgPSBzY29wZUNvbnRleHQubGV2ZWw7CiAgICAgIH0KICAgICAgaWYgKHNjb3BlQ29udGV4dC5maW5nZXJwcmludCkgewogICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gc2NvcGVDb250ZXh0LmZpbmdlcnByaW50OwogICAgICB9CiAgICAgIGlmIChzY29wZUNvbnRleHQucmVxdWVzdFNlc3Npb24pIHsKICAgICAgICB0aGlzLl9yZXF1ZXN0U2Vzc2lvbiA9IHNjb3BlQ29udGV4dC5yZXF1ZXN0U2Vzc2lvbjsKICAgICAgfQogICAgICBpZiAoc2NvcGVDb250ZXh0LnByb3BhZ2F0aW9uQ29udGV4dCkgewogICAgICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IHNjb3BlQ29udGV4dC5wcm9wYWdhdGlvbkNvbnRleHQ7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGNsZWFyKCkgewogICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTsKICAgIHRoaXMuX3RhZ3MgPSB7fTsKICAgIHRoaXMuX2V4dHJhID0ge307CiAgICB0aGlzLl91c2VyID0ge307CiAgICB0aGlzLl9jb250ZXh0cyA9IHt9OwogICAgdGhpcy5fbGV2ZWwgPSB1bmRlZmluZWQ7CiAgICB0aGlzLl90cmFuc2FjdGlvbk5hbWUgPSB1bmRlZmluZWQ7CiAgICB0aGlzLl9maW5nZXJwcmludCA9IHVuZGVmaW5lZDsKICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gdW5kZWZpbmVkOwogICAgdGhpcy5fc3BhbiA9IHVuZGVmaW5lZDsKICAgIHRoaXMuX3Nlc3Npb24gPSB1bmRlZmluZWQ7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgdGhpcy5fYXR0YWNobWVudHMgPSBbXTsKICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGdlbmVyYXRlUHJvcGFnYXRpb25Db250ZXh0KCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwgbWF4QnJlYWRjcnVtYnMpIHsKICAgIGNvbnN0IG1heENydW1icyA9IHR5cGVvZiBtYXhCcmVhZGNydW1icyA9PT0gJ251bWJlcicgPyBtYXhCcmVhZGNydW1icyA6IERFRkFVTFRfTUFYX0JSRUFEQ1JVTUJTOwoKICAgIC8vIE5vIGRhdGEgaGFzIGJlZW4gY2hhbmdlZCwgc28gZG9uJ3Qgbm90aWZ5IHNjb3BlIGxpc3RlbmVycwogICAgaWYgKG1heENydW1icyA8PSAwKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWIgPSB7CiAgICAgIHRpbWVzdGFtcDogZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpLAogICAgICAuLi5icmVhZGNydW1iLAogICAgfTsKCiAgICBjb25zdCBicmVhZGNydW1icyA9IHRoaXMuX2JyZWFkY3J1bWJzOwogICAgYnJlYWRjcnVtYnMucHVzaChtZXJnZWRCcmVhZGNydW1iKTsKICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gYnJlYWRjcnVtYnMubGVuZ3RoID4gbWF4Q3J1bWJzID8gYnJlYWRjcnVtYnMuc2xpY2UoLW1heENydW1icykgOiBicmVhZGNydW1iczsKCiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwoKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0TGFzdEJyZWFkY3J1bWIoKSB7CiAgICByZXR1cm4gdGhpcy5fYnJlYWRjcnVtYnNbdGhpcy5fYnJlYWRjcnVtYnMubGVuZ3RoIC0gMV07CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBjbGVhckJyZWFkY3J1bWJzKCkgewogICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGFkZEF0dGFjaG1lbnQoYXR0YWNobWVudCkgewogICAgdGhpcy5fYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYGdldFNjb3BlRGF0YSgpYCBpbnN0ZWFkLgogICAqLwogICBnZXRBdHRhY2htZW50cygpIHsKICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFNjb3BlRGF0YSgpOwoKICAgIHJldHVybiBkYXRhLmF0dGFjaG1lbnRzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgY2xlYXJBdHRhY2htZW50cygpIHsKICAgIHRoaXMuX2F0dGFjaG1lbnRzID0gW107CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKiBAaW5oZXJpdERvYyAqLwogICBnZXRTY29wZURhdGEoKSB7CiAgICBjb25zdCB7CiAgICAgIF9icmVhZGNydW1icywKICAgICAgX2F0dGFjaG1lbnRzLAogICAgICBfY29udGV4dHMsCiAgICAgIF90YWdzLAogICAgICBfZXh0cmEsCiAgICAgIF91c2VyLAogICAgICBfbGV2ZWwsCiAgICAgIF9maW5nZXJwcmludCwKICAgICAgX2V2ZW50UHJvY2Vzc29ycywKICAgICAgX3Byb3BhZ2F0aW9uQ29udGV4dCwKICAgICAgX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSwKICAgICAgX3RyYW5zYWN0aW9uTmFtZSwKICAgICAgX3NwYW4sCiAgICB9ID0gdGhpczsKCiAgICByZXR1cm4gewogICAgICBicmVhZGNydW1iczogX2JyZWFkY3J1bWJzLAogICAgICBhdHRhY2htZW50czogX2F0dGFjaG1lbnRzLAogICAgICBjb250ZXh0czogX2NvbnRleHRzLAogICAgICB0YWdzOiBfdGFncywKICAgICAgZXh0cmE6IF9leHRyYSwKICAgICAgdXNlcjogX3VzZXIsCiAgICAgIGxldmVsOiBfbGV2ZWwsCiAgICAgIGZpbmdlcnByaW50OiBfZmluZ2VycHJpbnQgfHwgW10sCiAgICAgIGV2ZW50UHJvY2Vzc29yczogX2V2ZW50UHJvY2Vzc29ycywKICAgICAgcHJvcGFnYXRpb25Db250ZXh0OiBfcHJvcGFnYXRpb25Db250ZXh0LAogICAgICBzZGtQcm9jZXNzaW5nTWV0YWRhdGE6IF9zZGtQcm9jZXNzaW5nTWV0YWRhdGEsCiAgICAgIHRyYW5zYWN0aW9uTmFtZTogX3RyYW5zYWN0aW9uTmFtZSwKICAgICAgc3BhbjogX3NwYW4sCiAgICB9OwogIH0KCiAgLyoqCiAgICogQXBwbGllcyBkYXRhIGZyb20gdGhlIHNjb3BlIHRvIHRoZSBldmVudCBhbmQgcnVucyBhbGwgZXZlbnQgcHJvY2Vzc29ycyBvbiBpdC4KICAgKgogICAqIEBwYXJhbSBldmVudCBFdmVudAogICAqIEBwYXJhbSBoaW50IE9iamVjdCBjb250YWluaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiwgZm9yIHVzZSBieSB0aGUgZXZlbnQgcHJvY2Vzc29ycy4KICAgKiBAaGlkZGVuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBhcHBseVNjb3BlRGF0YVRvRXZlbnQoKWAgZGlyZWN0bHkKICAgKi8KICAgYXBwbHlUb0V2ZW50KAogICAgZXZlbnQsCiAgICBoaW50ID0ge30sCiAgICBhZGRpdGlvbmFsRXZlbnRQcm9jZXNzb3JzID0gW10sCiAgKSB7CiAgICBhcHBseVNjb3BlRGF0YVRvRXZlbnQoZXZlbnQsIHRoaXMuZ2V0U2NvcGVEYXRhKCkpOwoKICAgIC8vIFRPRE8gKHY4KTogVXBkYXRlIHRoaXMgb3JkZXIgdG8gYmU6IEdsb2JhbCA+IENsaWVudCA+IFNjb3BlCiAgICBjb25zdCBldmVudFByb2Nlc3NvcnMgPSBbCiAgICAgIC4uLmFkZGl0aW9uYWxFdmVudFByb2Nlc3NvcnMsCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICAuLi5nZXRHbG9iYWxFdmVudFByb2Nlc3NvcnMoKSwKICAgICAgLi4udGhpcy5fZXZlbnRQcm9jZXNzb3JzLAogICAgXTsKCiAgICByZXR1cm4gbm90aWZ5RXZlbnRQcm9jZXNzb3JzKGV2ZW50UHJvY2Vzc29ycywgZXZlbnQsIGhpbnQpOwogIH0KCiAgLyoqCiAgICogQWRkIGRhdGEgd2hpY2ggd2lsbCBiZSBhY2Nlc3NpYmxlIGR1cmluZyBldmVudCBwcm9jZXNzaW5nIGJ1dCB3b24ndCBnZXQgc2VudCB0byBTZW50cnkKICAgKi8KICAgc2V0U0RLUHJvY2Vzc2luZ01ldGFkYXRhKG5ld0RhdGEpIHsKICAgIHRoaXMuX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSA9IHsgLi4udGhpcy5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhLCAuLi5uZXdEYXRhIH07CgogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRQcm9wYWdhdGlvbkNvbnRleHQoY29udGV4dCkgewogICAgdGhpcy5fcHJvcGFnYXRpb25Db250ZXh0ID0gY29udGV4dDsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0UHJvcGFnYXRpb25Db250ZXh0KCkgewogICAgcmV0dXJuIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dDsKICB9CgogIC8qKgogICAqIENhcHR1cmUgYW4gZXhjZXB0aW9uIGZvciB0aGlzIHNjb3BlLgogICAqCiAgICogQHBhcmFtIGV4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIHRvIGNhcHR1cmUuCiAgICogQHBhcmFtIGhpbnQgT3B0aW5hbCBhZGRpdGlvbmFsIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBTZW50cnkgZXZlbnQuCiAgICogQHJldHVybnMgdGhlIGlkIG9mIHRoZSBjYXB0dXJlZCBTZW50cnkgZXZlbnQuCiAgICovCiAgIGNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCBoaW50KSB7CiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCk7CgogICAgaWYgKCF0aGlzLl9jbGllbnQpIHsKICAgICAgbG9nZ2VyLndhcm4oJ05vIGNsaWVudCBjb25maWd1cmVkIG9uIHNjb3BlIC0gd2lsbCBub3QgY2FwdHVyZSBleGNlcHRpb24hJyk7CiAgICAgIHJldHVybiBldmVudElkOwogICAgfQoKICAgIGNvbnN0IHN5bnRoZXRpY0V4Y2VwdGlvbiA9IG5ldyBFcnJvcignU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvbicpOwoKICAgIHRoaXMuX2NsaWVudC5jYXB0dXJlRXhjZXB0aW9uKAogICAgICBleGNlcHRpb24sCiAgICAgIHsKICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogZXhjZXB0aW9uLAogICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgICAuLi5oaW50LAogICAgICAgIGV2ZW50X2lkOiBldmVudElkLAogICAgICB9LAogICAgICB0aGlzLAogICAgKTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIENhcHR1cmUgYSBtZXNzYWdlIGZvciB0aGlzIHNjb3BlLgogICAqCiAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gY2FwdHVyZS4KICAgKiBAcGFyYW0gbGV2ZWwgQW4gb3B0aW9uYWwgc2V2ZXJpdHkgbGV2ZWwgdG8gcmVwb3J0IHRoZSBtZXNzYWdlIHdpdGguCiAgICogQHBhcmFtIGhpbnQgT3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgU2VudHJ5IGV2ZW50LgogICAqIEByZXR1cm5zIHRoZSBpZCBvZiB0aGUgY2FwdHVyZWQgbWVzc2FnZS4KICAgKi8KICAgY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKTsKCiAgICBpZiAoIXRoaXMuX2NsaWVudCkgewogICAgICBsb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIG1lc3NhZ2UhJyk7CiAgICAgIHJldHVybiBldmVudElkOwogICAgfQoKICAgIGNvbnN0IHN5bnRoZXRpY0V4Y2VwdGlvbiA9IG5ldyBFcnJvcihtZXNzYWdlKTsKCiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZU1lc3NhZ2UoCiAgICAgIG1lc3NhZ2UsCiAgICAgIGxldmVsLAogICAgICB7CiAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsCiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uLAogICAgICAgIC4uLmhpbnQsCiAgICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICAgIH0sCiAgICAgIHRoaXMsCiAgICApOwoKICAgIHJldHVybiBldmVudElkOwogIH0KCiAgLyoqCiAgICogQ2FwdHVyZXMgYSBtYW51YWxseSBjcmVhdGVkIGV2ZW50IGZvciB0aGlzIHNjb3BlIGFuZCBzZW5kcyBpdCB0byBTZW50cnkuCiAgICoKICAgKiBAcGFyYW0gZXhjZXB0aW9uIFRoZSBldmVudCB0byBjYXB0dXJlLgogICAqIEBwYXJhbSBoaW50IE9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YSB0byBhdHRhY2ggdG8gdGhlIFNlbnRyeSBldmVudC4KICAgKiBAcmV0dXJucyB0aGUgaWQgb2YgdGhlIGNhcHR1cmVkIGV2ZW50LgogICAqLwogICBjYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKTsKCiAgICBpZiAoIXRoaXMuX2NsaWVudCkgewogICAgICBsb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIGV2ZW50IScpOwogICAgICByZXR1cm4gZXZlbnRJZDsKICAgIH0KCiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZUV2ZW50KGV2ZW50LCB7IC4uLmhpbnQsIGV2ZW50X2lkOiBldmVudElkIH0sIHRoaXMpOwoKICAgIHJldHVybiBldmVudElkOwogIH0KCiAgLyoqCiAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCBvbiBldmVyeSBzZXQgY2FsbC4KICAgKi8KICAgX25vdGlmeVNjb3BlTGlzdGVuZXJzKCkgewogICAgLy8gV2UgbmVlZCB0aGlzIGNoZWNrIGZvciB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgdG8gYmUgYWJsZSB0byB3b3JrIG9uIHNjb3BlIGR1cmluZyB1cGRhdGVzCiAgICAvLyBJZiB0aGlzIGNoZWNrIGlzIG5vdCBoZXJlIHdlJ2xsIHByb2R1Y2UgZW5kbGVzcyByZWN1cnNpb24gd2hlbiBzb21ldGhpbmcgaXMgZG9uZSB3aXRoIHRoZSBzY29wZQogICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjay4KICAgIGlmICghdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzKSB7CiAgICAgIHRoaXMuX25vdGlmeWluZ0xpc3RlbmVycyA9IHRydWU7CiAgICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzLmZvckVhY2goY2FsbGJhY2sgPT4gewogICAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgICB9KTsKICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gZmFsc2U7CiAgICB9CiAgfQp9CgpmdW5jdGlvbiBnZW5lcmF0ZVByb3BhZ2F0aW9uQ29udGV4dCgpIHsKICByZXR1cm4gewogICAgdHJhY2VJZDogdXVpZDQoKSwKICAgIHNwYW5JZDogdXVpZDQoKS5zdWJzdHJpbmcoMTYpLAogIH07Cn0KCmNvbnN0IFNES19WRVJTSU9OID0gJzcuMTIwLjAnOwoKLyoqCiAqIEFQSSBjb21wYXRpYmlsaXR5IHZlcnNpb24gb2YgdGhpcyBodWIuCiAqCiAqIFdBUk5JTkc6IFRoaXMgbnVtYmVyIHNob3VsZCBvbmx5IGJlIGluY3JlYXNlZCB3aGVuIHRoZSBnbG9iYWwgaW50ZXJmYWNlCiAqIGNoYW5nZXMgYW5kIG5ldyBtZXRob2RzIGFyZSBpbnRyb2R1Y2VkLgogKgogKiBAaGlkZGVuCiAqLwpjb25zdCBBUElfVkVSU0lPTiA9IHBhcnNlRmxvYXQoU0RLX1ZFUlNJT04pOwoKLyoqCiAqIERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuIENhbiBiZSBvdmVyd3JpdHRlbgogKiB3aXRoIHtAbGluayBPcHRpb25zLm1heEJyZWFkY3J1bWJzfS4KICovCmNvbnN0IERFRkFVTFRfQlJFQURDUlVNQlMgPSAxMDA7CgovKioKICogQGRlcHJlY2F0ZWQgVGhlIGBIdWJgIGNsYXNzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDggb2YgdGhlIFNESyBpbiBmYXZvdXIgb2YgYFNjb3BlYCBhbmQgYENsaWVudGAgb2JqZWN0cy4KICoKICogSWYgeW91IHByZXZpb3VzbHkgdXNlZCB0aGUgYEh1YmAgY2xhc3MgZGlyZWN0bHksIHJlcGxhY2UgaXQgd2l0aCBgU2NvcGVgIGFuZCBgQ2xpZW50YCBvYmplY3RzLiBNb3JlIGluZm9ybWF0aW9uOgogKiAtIFtNdWx0aXBsZSBTZW50cnkgSW5zdGFuY2VzXShodHRwczovL2RvY3Muc2VudHJ5LmlvL3BsYXRmb3Jtcy9qYXZhc2NyaXB0L2Jlc3QtcHJhY3RpY2VzL211bHRpcGxlLXNlbnRyeS1pbnN0YW5jZXMvKQogKiAtIFtCcm93c2VyIEV4dGVuc2lvbnNdKGh0dHBzOi8vZG9jcy5zZW50cnkuaW8vcGxhdGZvcm1zL2phdmFzY3JpcHQvYmVzdC1wcmFjdGljZXMvYnJvd3Nlci1leHRlbnNpb25zLykKICoKICogU29tZSBvZiBvdXIgQVBJcyBhcmUgdHlwZWQgd2l0aCB0aGUgSHViIGNsYXNzIGluc3RlYWQgb2YgdGhlIGludGVyZmFjZSAoZS5nLiBgZ2V0Q3VycmVudEh1YmApLiBNb3N0IG9mIHRoZW0gYXJlIGRlcHJlY2F0ZWQKICogdGhlbXNlbHZlcyBhbmQgd2lsbCBhbHNvIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiA4LiBNb3JlIGluZm9ybWF0aW9uOgogKiAtIFtNaWdyYXRpb24gR3VpZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvYmxvYi9kZXZlbG9wL01JR1JBVElPTi5tZCNkZXByZWNhdGUtaHViKQogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCmNsYXNzIEh1YiAgewogIC8qKiBJcyBhIHtAbGluayBMYXllcn1bXSBjb250YWluaW5nIHRoZSBjbGllbnQgYW5kIHNjb3BlICovCgogIC8qKiBDb250YWlucyB0aGUgbGFzdCBldmVudCBpZCBvZiBhIGNhcHR1cmVkIGV2ZW50LiAgKi8KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaHViLCB3aWxsIHB1c2ggb25lIHtAbGluayBMYXllcn0gaW50byB0aGUKICAgKiBpbnRlcm5hbCBzdGFjayBvbiBjcmVhdGlvbi4KICAgKgogICAqIEBwYXJhbSBjbGllbnQgYm91bmQgdG8gdGhlIGh1Yi4KICAgKiBAcGFyYW0gc2NvcGUgYm91bmQgdG8gdGhlIGh1Yi4KICAgKiBAcGFyYW0gdmVyc2lvbiBudW1iZXIsIGhpZ2hlciBudW1iZXIgbWVhbnMgaGlnaGVyIHByaW9yaXR5LgogICAqCiAgICogQGRlcHJlY2F0ZWQgSW5zdGFudGlhdGlvbiBvZiBIdWIgb2JqZWN0cyBpcyBkZXByZWNhdGVkIGFuZCB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gOCBvZiB0aGUgU0RLLgogICAqCiAgICogSWYgeW91IGFyZSBjdXJyZW50bHkgdXNpbmcgdGhlIEh1YiBmb3IgbXVsdGktY2xpZW50IHVzZSBsaWtlIHNvOgogICAqCiAgICogYGBgCiAgICogLy8gT0xECiAgICogY29uc3QgaHViID0gbmV3IEh1YigpOwogICAqIGh1Yi5iaW5kQ2xpZW50KGNsaWVudCk7CiAgICogbWFrZU1haW4oaHViKQogICAqIGBgYAogICAqCiAgICogaW5zdGVhZCBpbml0aWFsaXplIHRoZSBjbGllbnQgYXMgZm9sbG93czoKICAgKgogICAqIGBgYAogICAqIC8vIE5FVwogICAqIFNlbnRyeS53aXRoSXNvbGF0aW9uU2NvcGUoKCkgPT4gewogICAqICAgIFNlbnRyeS5zZXRDdXJyZW50Q2xpZW50KGNsaWVudCk7CiAgICogICAgY2xpZW50LmluaXQoKTsKICAgKiB9KTsKICAgKiBgYGAKICAgKgogICAqIElmIHlvdSBhcmUgdXNpbmcgdGhlIEh1YiB0byBjYXB0dXJlIGV2ZW50cyBsaWtlIHNvOgogICAqCiAgICogYGBgCiAgICogLy8gT0xECiAgICogY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAqIGNvbnN0IGh1YiA9IG5ldyBIdWIoY2xpZW50KTsKICAgKiBodWIuY2FwdHVyZUV4Y2VwdGlvbigpCiAgICogYGBgCiAgICoKICAgKiBpbnN0ZWFkIGNhcHR1cmUgaXNvbGF0ZWQgZXZlbnRzIGFzIGZvbGxvd3M6CiAgICoKICAgKiBgYGAKICAgKiAvLyBORVcKICAgKiBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICogY29uc3Qgc2NvcGUgPSBuZXcgU2NvcGUoKTsKICAgKiBzY29wZS5zZXRDbGllbnQoY2xpZW50KTsKICAgKiBzY29wZS5jYXB0dXJlRXhjZXB0aW9uKCk7CiAgICogYGBgCiAgICovCiAgIGNvbnN0cnVjdG9yKAogICAgY2xpZW50LAogICAgc2NvcGUsCiAgICBpc29sYXRpb25TY29wZSwKICAgICAgX3ZlcnNpb24gPSBBUElfVkVSU0lPTiwKICApIHt0aGlzLl92ZXJzaW9uID0gX3ZlcnNpb247CiAgICBsZXQgYXNzaWduZWRTY29wZTsKICAgIGlmICghc2NvcGUpIHsKICAgICAgYXNzaWduZWRTY29wZSA9IG5ldyBTY29wZSgpOwogICAgICBhc3NpZ25lZFNjb3BlLnNldENsaWVudChjbGllbnQpOwogICAgfSBlbHNlIHsKICAgICAgYXNzaWduZWRTY29wZSA9IHNjb3BlOwogICAgfQoKICAgIGxldCBhc3NpZ25lZElzb2xhdGlvblNjb3BlOwogICAgaWYgKCFpc29sYXRpb25TY29wZSkgewogICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gbmV3IFNjb3BlKCk7CiAgICAgIGFzc2lnbmVkSXNvbGF0aW9uU2NvcGUuc2V0Q2xpZW50KGNsaWVudCk7CiAgICB9IGVsc2UgewogICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gaXNvbGF0aW9uU2NvcGU7CiAgICB9CgogICAgdGhpcy5fc3RhY2sgPSBbeyBzY29wZTogYXNzaWduZWRTY29wZSB9XTsKCiAgICBpZiAoY2xpZW50KSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICB0aGlzLmJpbmRDbGllbnQoY2xpZW50KTsKICAgIH0KCiAgICB0aGlzLl9pc29sYXRpb25TY29wZSA9IGFzc2lnbmVkSXNvbGF0aW9uU2NvcGU7CiAgfQoKICAvKioKICAgKiBDaGVja3MgaWYgdGhpcyBodWIncyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gdGhlIGdpdmVuIHZlcnNpb24uCiAgICoKICAgKiBAcGFyYW0gdmVyc2lvbiBBIHZlcnNpb24gbnVtYmVyIHRvIGNvbXBhcmUgdG8uCiAgICogQHJldHVybiBUcnVlIGlmIHRoZSBnaXZlbiB2ZXJzaW9uIGlzIG5ld2VyOyBvdGhlcndpc2UgZmFsc2UuCiAgICoKICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICAgKi8KICAgaXNPbGRlclRoYW4odmVyc2lvbikgewogICAgcmV0dXJuIHRoaXMuX3ZlcnNpb24gPCB2ZXJzaW9uOwogIH0KCiAgLyoqCiAgICogVGhpcyBiaW5kcyB0aGUgZ2l2ZW4gY2xpZW50IHRvIHRoZSBjdXJyZW50IHNjb3BlLgogICAqIEBwYXJhbSBjbGllbnQgQW4gU0RLIGNsaWVudCAoY2xpZW50KSBpbnN0YW5jZS4KICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgaW5pdEFuZEJpbmQoKWAgZGlyZWN0bHksIG9yIGBzZXRDdXJyZW50Q2xpZW50KClgIGFuZC9vciBgY2xpZW50LmluaXQoKWAgaW5zdGVhZC4KICAgKi8KICAgYmluZENsaWVudChjbGllbnQpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgdG9wID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgdG9wLmNsaWVudCA9IGNsaWVudDsKICAgIHRvcC5zY29wZS5zZXRDbGllbnQoY2xpZW50KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgaWYgKGNsaWVudCAmJiBjbGllbnQuc2V0dXBJbnRlZ3JhdGlvbnMpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIGNsaWVudC5zZXR1cEludGVncmF0aW9ucygpOwogICAgfQogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgd2l0aFNjb3BlYCBpbnN0ZWFkLgogICAqLwogICBwdXNoU2NvcGUoKSB7CiAgICAvLyBXZSB3YW50IHRvIGNsb25lIHRoZSBjb250ZW50IG9mIHByZXYgc2NvcGUKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCkuY2xvbmUoKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTdGFjaygpLnB1c2goewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgY2xpZW50OiB0aGlzLmdldENsaWVudCgpLAogICAgICBzY29wZSwKICAgIH0pOwogICAgcmV0dXJuIHNjb3BlOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgd2l0aFNjb3BlYCBpbnN0ZWFkLgogICAqLwogICBwb3BTY29wZSgpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgaWYgKHRoaXMuZ2V0U3RhY2soKS5sZW5ndGggPD0gMSkgcmV0dXJuIGZhbHNlOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gISF0aGlzLmdldFN0YWNrKCkucG9wKCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkud2l0aFNjb3BlKClgIGluc3RlYWQuCiAgICovCiAgIHdpdGhTY29wZShjYWxsYmFjaykgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBzY29wZSA9IHRoaXMucHVzaFNjb3BlKCk7CgogICAgbGV0IG1heWJlUHJvbWlzZVJlc3VsdDsKICAgIHRyeSB7CiAgICAgIG1heWJlUHJvbWlzZVJlc3VsdCA9IGNhbGxiYWNrKHNjb3BlKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIHRoaXMucG9wU2NvcGUoKTsKICAgICAgdGhyb3cgZTsKICAgIH0KCiAgICBpZiAoaXNUaGVuYWJsZShtYXliZVByb21pc2VSZXN1bHQpKSB7CiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpc1RoZW5hYmxlIHJldHVybnMgdGhlIHdyb25nIHR5cGUKICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdC50aGVuKAogICAgICAgIHJlcyA9PiB7CiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTsKICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgfSwKICAgICAgICBlID0+IHsKICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICAgICAgdGhpcy5wb3BTY29wZSgpOwogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9LAogICAgICApOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5wb3BTY29wZSgpOwogICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5nZXRDbGllbnQoKWAgaW5zdGVhZC4KICAgKi8KICAgZ2V0Q2xpZW50KCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLmNsaWVudCA7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzY29wZSBvZiB0aGUgdG9wIHN0YWNrLgogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuZ2V0Q3VycmVudFNjb3BlKClgIGluc3RlYWQuCiAgICovCiAgIGdldFNjb3BlKCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLnNjb3BlOwogIH0KCiAgLyoqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuZ2V0SXNvbGF0aW9uU2NvcGUoKWAgaW5zdGVhZC4KICAgKi8KICAgZ2V0SXNvbGF0aW9uU2NvcGUoKSB7CiAgICByZXR1cm4gdGhpcy5faXNvbGF0aW9uU2NvcGU7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzY29wZSBzdGFjayBmb3IgZG9tYWlucyBvciB0aGUgcHJvY2Vzcy4KICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICAgKi8KICAgZ2V0U3RhY2soKSB7CiAgICByZXR1cm4gdGhpcy5fc3RhY2s7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB0b3Btb3N0IHNjb3BlIGxheWVyIGluIHRoZSBvcmRlciBkb21haW4gPiBsb2NhbCA+IHByb2Nlc3MuCiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguCiAgICovCiAgIGdldFN0YWNrVG9wKCkgewogICAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aCAtIDFdOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSAodGhpcy5fbGFzdEV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKSk7CiAgICBjb25zdCBzeW50aGV0aWNFeGNlcHRpb24gPSBuZXcgRXJyb3IoJ1NlbnRyeSBzeW50aGV0aWNFeGNlcHRpb24nKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLmNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCB7CiAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBleGNlcHRpb24sCiAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgLi4uaGludCwKICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICB9KTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgIGBTZW50cnkuY2FwdHVyZU1lc3NhZ2UoKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZU1lc3NhZ2UoCiAgICBtZXNzYWdlLAogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBsZXZlbCwKICAgIGhpbnQsCiAgKSB7CiAgICBjb25zdCBldmVudElkID0gKHRoaXMuX2xhc3RFdmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCkpOwogICAgY29uc3Qgc3ludGhldGljRXhjZXB0aW9uID0gbmV3IEVycm9yKG1lc3NhZ2UpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIHsKICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsCiAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgLi4uaGludCwKICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICB9KTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5jYXB0dXJlRXZlbnQoKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50KSB7CiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCk7CiAgICBpZiAoIWV2ZW50LnR5cGUpIHsKICAgICAgdGhpcy5fbGFzdEV2ZW50SWQgPSBldmVudElkOwogICAgfQogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuY2FwdHVyZUV2ZW50KGV2ZW50LCB7IC4uLmhpbnQsIGV2ZW50X2lkOiBldmVudElkIH0pOwogICAgcmV0dXJuIGV2ZW50SWQ7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguCiAgICovCiAgIGxhc3RFdmVudElkKCkgewogICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudElkOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmFkZEJyZWFkY3J1bWIoKWAgaW5zdGVhZC4KICAgKi8KICAgYWRkQnJlYWRjcnVtYihicmVhZGNydW1iLCBoaW50KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpOwoKICAgIGlmICghY2xpZW50KSByZXR1cm47CgogICAgY29uc3QgeyBiZWZvcmVCcmVhZGNydW1iID0gbnVsbCwgbWF4QnJlYWRjcnVtYnMgPSBERUZBVUxUX0JSRUFEQ1JVTUJTIH0gPQogICAgICAoY2xpZW50LmdldE9wdGlvbnMgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307CgogICAgaWYgKG1heEJyZWFkY3J1bWJzIDw9IDApIHJldHVybjsKCiAgICBjb25zdCB0aW1lc3RhbXAgPSBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCk7CiAgICBjb25zdCBtZXJnZWRCcmVhZGNydW1iID0geyB0aW1lc3RhbXAsIC4uLmJyZWFkY3J1bWIgfTsKICAgIGNvbnN0IGZpbmFsQnJlYWRjcnVtYiA9IGJlZm9yZUJyZWFkY3J1bWIKICAgICAgPyAoY29uc29sZVNhbmRib3goKCkgPT4gYmVmb3JlQnJlYWRjcnVtYihtZXJnZWRCcmVhZGNydW1iLCBoaW50KSkgKQogICAgICA6IG1lcmdlZEJyZWFkY3J1bWI7CgogICAgaWYgKGZpbmFsQnJlYWRjcnVtYiA9PT0gbnVsbCkgcmV0dXJuOwoKICAgIGlmIChjbGllbnQuZW1pdCkgewogICAgICBjbGllbnQuZW1pdCgnYmVmb3JlQWRkQnJlYWRjcnVtYicsIGZpbmFsQnJlYWRjcnVtYiwgaGludCk7CiAgICB9CgogICAgLy8gVE9ETyh2OCk6IEkga25vdyB0aGlzIGNvbW1lbnQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgYmVjYXVzZSB0aGUgaHViIHdpbGwgYmUgZGVwcmVjYXRlZCBidXQgSSBzdGlsbCB3YW50ZWQgdG8KICAgIC8vIHdyaXRlIGl0IGRvd24uIEluIHRoZW9yeSwgd2Ugd291bGQgaGF2ZSB0byBhZGQgdGhlIGJyZWFkY3J1bWJzIHRvIHRoZSBpc29sYXRpb24gc2NvcGUgaGVyZSwgaG93ZXZlciwgdGhhdCB3b3VsZAogICAgLy8gZHVwbGljYXRlIGFsbCBvZiB0aGUgYnJlYWRjcnVtYnMuIFRoZXJlIHdhcyB0aGUgcG9zc2liaWxpdHkgb2YgYWRkaW5nIGJyZWFkY3J1bWJzIHRvIGJvdGgsIHRoZSBpc29sYXRpb24gc2NvcGUKICAgIC8vIGFuZCB0aGUgbm9ybWFsIHNjb3BlLCBhbmQgZGVkdXBsaWNhdGluZyBpdCBkb3duIHRoZSBsaW5lIGluIHRoZSBldmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lLiBIb3dldmVyLCB0aGF0IHdvdWxkCiAgICAvLyBoYXZlIGJlZW4gdmVyeSBmcmFnaWxlLCBiZWNhdXNlIHRoZSBicmVhZGNydW1iIG9iamVjdHMgd291bGQgaGF2ZSBuZWVkZWQgdG8ga2VlcCB0aGVpciBpZGVudGl0eSBhbGwgdGhyb3VnaG91dAogICAgLy8gdGhlIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUuCiAgICAvLyBJbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLCB0aGUgdG9wIGxldmVsIGBTZW50cnkuYWRkQnJlYWRjcnVtYigpYCBzaG91bGQgT05MWSB3cml0ZSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLgoKICAgIHNjb3BlLmFkZEJyZWFkY3J1bWIoZmluYWxCcmVhZGNydW1iLCBtYXhCcmVhZGNydW1icyk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldFVzZXIoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0VXNlcih1c2VyKSB7CiAgICAvLyBUT0RPKHY4KTogVGhlIHRvcCBsZXZlbCBgU2VudHJ5LnNldFVzZXIoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS4KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLnNldFVzZXIodXNlcik7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRVc2VyKHVzZXIpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5zZXRUYWdzKClgIGluc3RlYWQuCiAgICovCiAgIHNldFRhZ3ModGFncykgewogICAgLy8gVE9ETyh2OCk6IFRoZSB0b3AgbGV2ZWwgYFNlbnRyeS5zZXRUYWdzKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRUYWdzKHRhZ3MpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0VGFncyh0YWdzKTsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuc2V0RXh0cmFzKClgIGluc3RlYWQuCiAgICovCiAgIHNldEV4dHJhcyhleHRyYXMpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0RXh0cmFzKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRFeHRyYXMoZXh0cmFzKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRJc29sYXRpb25TY29wZSgpLnNldEV4dHJhcyhleHRyYXMpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5zZXRUYWcoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0VGFnKGtleSwgdmFsdWUpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0VGFnKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldEV4dHJhKClgIGluc3RlYWQuCiAgICovCiAgIHNldEV4dHJhKGtleSwgZXh0cmEpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0RXh0cmEoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS4KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLnNldEV4dHJhKGtleSwgZXh0cmEpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0RXh0cmEoa2V5LCBleHRyYSk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldENvbnRleHQoKWAgaW5zdGVhZC4KICAgKi8KICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQogICBzZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0Q29udGV4dCgpYCBmdW5jdGlvbiBzaG91bGQgd3JpdGUgT05MWSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuc2V0Q29udGV4dChuYW1lLCBjb250ZXh0KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRJc29sYXRpb25TY29wZSgpLnNldENvbnRleHQobmFtZSwgY29udGV4dCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRTY29wZSgpYCBkaXJlY3RseS4KICAgKi8KICAgY29uZmlndXJlU2NvcGUoY2FsbGJhY2spIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7CiAgICBpZiAoY2xpZW50KSB7CiAgICAgIGNhbGxiYWNrKHNjb3BlKTsKICAgIH0KICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgIHJ1bihjYWxsYmFjaykgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBvbGRIdWIgPSBtYWtlTWFpbih0aGlzKTsKICAgIHRyeSB7CiAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgfSBmaW5hbGx5IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIG1ha2VNYWluKG9sZEh1Yik7CiAgICB9CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmdldENsaWVudCgpLmdldEludGVncmF0aW9uQnlOYW1lKClgIGluc3RlYWQuCiAgICovCiAgIGdldEludGVncmF0aW9uKGludGVncmF0aW9uKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0Q2xpZW50KCk7CiAgICBpZiAoIWNsaWVudCkgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgcmV0dXJuIGNsaWVudC5nZXRJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbik7CiAgICB9IGNhdGNoIChfb08pIHsKICAgICAgREVCVUdfQlVJTEQgJiYgbG9nZ2VyLndhcm4oYENhbm5vdCByZXRyaWV2ZSBpbnRlZ3JhdGlvbiAke2ludGVncmF0aW9uLmlkfSBmcm9tIHRoZSBjdXJyZW50IEh1YmApOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIC8qKgogICAqIFN0YXJ0cyBhIG5ldyBgVHJhbnNhY3Rpb25gIGFuZCByZXR1cm5zIGl0LiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCB0byBtYW51YWwgdHJhY2luZyBpbnN0cnVtZW50YXRpb24uCiAgICoKICAgKiBBIHRyZWUgc3RydWN0dXJlIGNhbiBiZSBidWlsdCBieSBhZGRpbmcgY2hpbGQgc3BhbnMgdG8gdGhlIHRyYW5zYWN0aW9uLCBhbmQgY2hpbGQgc3BhbnMgdG8gb3RoZXIgc3BhbnMuIFRvIHN0YXJ0IGEKICAgKiBuZXcgY2hpbGQgc3BhbiB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIG9yIGFueSBzcGFuLCBjYWxsIHRoZSByZXNwZWN0aXZlIGAuc3RhcnRDaGlsZCgpYCBtZXRob2QuCiAgICoKICAgKiBFdmVyeSBjaGlsZCBzcGFuIG11c3QgYmUgZmluaXNoZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCwgb3RoZXJ3aXNlIHRoZSB1bmZpbmlzaGVkIHNwYW5zIGFyZSBkaXNjYXJkZWQuCiAgICoKICAgKiBUaGUgdHJhbnNhY3Rpb24gbXVzdCBiZSBmaW5pc2hlZCB3aXRoIGEgY2FsbCB0byBpdHMgYC5lbmQoKWAgbWV0aG9kLCBhdCB3aGljaCBwb2ludCB0aGUgdHJhbnNhY3Rpb24gd2l0aCBhbGwgaXRzCiAgICogZmluaXNoZWQgY2hpbGQgc3BhbnMgd2lsbCBiZSBzZW50IHRvIFNlbnRyeS4KICAgKgogICAqIEBwYXJhbSBjb250ZXh0IFByb3BlcnRpZXMgb2YgdGhlIG5ldyBgVHJhbnNhY3Rpb25gLgogICAqIEBwYXJhbSBjdXN0b21TYW1wbGluZ0NvbnRleHQgSW5mb3JtYXRpb24gZ2l2ZW4gdG8gdGhlIHRyYW5zYWN0aW9uIHNhbXBsaW5nIGZ1bmN0aW9uIChhbG9uZyB3aXRoIGNvbnRleHQtZGVwZW5kZW50CiAgICogZGVmYXVsdCB2YWx1ZXMpLiBTZWUge0BsaW5rIE9wdGlvbnMudHJhY2VzU2FtcGxlcn0uCiAgICoKICAgKiBAcmV0dXJucyBUaGUgdHJhbnNhY3Rpb24gd2hpY2ggd2FzIGp1c3Qgc3RhcnRlZAogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzdGFydFNwYW4oKWAsIGBzdGFydFNwYW5NYW51YWwoKWAgb3IgYHN0YXJ0SW5hY3RpdmVTcGFuKClgIGluc3RlYWQuCiAgICovCiAgIHN0YXJ0VHJhbnNhY3Rpb24oY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KSB7CiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9jYWxsRXh0ZW5zaW9uTWV0aG9kKCdzdGFydFRyYW5zYWN0aW9uJywgY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KTsKCiAgICBpZiAoREVCVUdfQlVJTEQgJiYgIXJlc3VsdCkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXRDbGllbnQoKTsKICAgICAgaWYgKCFjbGllbnQpIHsKICAgICAgICBsb2dnZXIud2FybigKICAgICAgICAgICJUcmFjaW5nIGV4dGVuc2lvbiAnc3RhcnRUcmFuc2FjdGlvbicgaXMgbWlzc2luZy4gWW91IHNob3VsZCAnaW5pdCcgdGhlIFNESyBiZWZvcmUgY2FsbGluZyAnc3RhcnRUcmFuc2FjdGlvbiciLAogICAgICAgICk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLndhcm4oYFRyYWNpbmcgZXh0ZW5zaW9uICdzdGFydFRyYW5zYWN0aW9uJyBoYXMgbm90IGJlZW4gYWRkZWQuIENhbGwgJ2FkZFRyYWNpbmdFeHRlbnNpb25zJyBiZWZvcmUgY2FsbGluZyAnaW5pdCc6ClNlbnRyeS5hZGRUcmFjaW5nRXh0ZW5zaW9ucygpOwpTZW50cnkuaW5pdCh7Li4ufSk7CmApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9UcmFjZUhlYWRlcigpYCBpbnN0ZWFkLgogICAqLwogICB0cmFjZUhlYWRlcnMoKSB7CiAgICByZXR1cm4gdGhpcy5fY2FsbEV4dGVuc2lvbk1ldGhvZCgndHJhY2VIZWFkZXJzJyk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIHRvcCBsZXZlbCBgY2FwdHVyZVNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIGNhcHR1cmVTZXNzaW9uKGVuZFNlc3Npb24gPSBmYWxzZSkgewogICAgLy8gYm90aCBzZW5kIHRoZSB1cGRhdGUgYW5kIHB1bGwgdGhlIHNlc3Npb24gZnJvbSB0aGUgc2NvcGUKICAgIGlmIChlbmRTZXNzaW9uKSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICByZXR1cm4gdGhpcy5lbmRTZXNzaW9uKCk7CiAgICB9CgogICAgLy8gb25seSBzZW5kIHRoZSB1cGRhdGUKICAgIHRoaXMuX3NlbmRTZXNzaW9uVXBkYXRlKCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSB0b3AgbGV2ZWwgYGVuZFNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIGVuZFNlc3Npb24oKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IGxheWVyID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgY29uc3Qgc2NvcGUgPSBsYXllci5zY29wZTsKICAgIGNvbnN0IHNlc3Npb24gPSBzY29wZS5nZXRTZXNzaW9uKCk7CiAgICBpZiAoc2Vzc2lvbikgewogICAgICBjbG9zZVNlc3Npb24oc2Vzc2lvbik7CiAgICB9CiAgICB0aGlzLl9zZW5kU2Vzc2lvblVwZGF0ZSgpOwoKICAgIC8vIHRoZSBzZXNzaW9uIGlzIG92ZXI7IHRha2UgaXQgb2ZmIG9mIHRoZSBzY29wZQogICAgc2NvcGUuc2V0U2Vzc2lvbigpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wIGxldmVsIGBzdGFydFNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIHN0YXJ0U2Vzc2lvbihjb250ZXh0KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgY29uc3QgeyByZWxlYXNlLCBlbnZpcm9ubWVudCA9IERFRkFVTFRfRU5WSVJPTk1FTlQgfSA9IChjbGllbnQgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307CgogICAgLy8gV2lsbCBmZXRjaCB1c2VyQWdlbnQgaWYgY2FsbGVkIGZyb20gYnJvd3NlciBzZGsKICAgIGNvbnN0IHsgdXNlckFnZW50IH0gPSBHTE9CQUxfT0JKLm5hdmlnYXRvciB8fCB7fTsKCiAgICBjb25zdCBzZXNzaW9uID0gbWFrZVNlc3Npb24oewogICAgICByZWxlYXNlLAogICAgICBlbnZpcm9ubWVudCwKICAgICAgdXNlcjogc2NvcGUuZ2V0VXNlcigpLAogICAgICAuLi4odXNlckFnZW50ICYmIHsgdXNlckFnZW50IH0pLAogICAgICAuLi5jb250ZXh0LAogICAgfSk7CgogICAgLy8gRW5kIGV4aXN0aW5nIHNlc3Npb24gaWYgdGhlcmUncyBvbmUKICAgIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gc2NvcGUuZ2V0U2Vzc2lvbiAmJiBzY29wZS5nZXRTZXNzaW9uKCk7CiAgICBpZiAoY3VycmVudFNlc3Npb24gJiYgY3VycmVudFNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7CiAgICAgIHVwZGF0ZVNlc3Npb24oY3VycmVudFNlc3Npb24sIHsgc3RhdHVzOiAnZXhpdGVkJyB9KTsKICAgIH0KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5lbmRTZXNzaW9uKCk7CgogICAgLy8gQWZ0ZXJ3YXJkcyB3ZSBzZXQgdGhlIG5ldyBzZXNzaW9uIG9uIHRoZSBzY29wZQogICAgc2NvcGUuc2V0U2Vzc2lvbihzZXNzaW9uKTsKCiAgICByZXR1cm4gc2Vzc2lvbjsKICB9CgogIC8qKgogICAqIFJldHVybnMgaWYgZGVmYXVsdCBQSUkgc2hvdWxkIGJlIHNlbnQgdG8gU2VudHJ5IGFuZCBwcm9wYWdhdGVkIGluIG91cmdvaW5nIHJlcXVlc3RzCiAgICogd2hlbiBUcmFjaW5nIGlzIHVzZWQuCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wLWxldmVsIGBnZXRDbGllbnQoKS5nZXRPcHRpb25zKCkuc2VuZERlZmF1bHRQaWlgIGluc3RlYWQuIFRoaXMgZnVuY3Rpb24KICAgKiBvbmx5IHVubmVjZXNzYXJpbHkgaW5jcmVhc2VkIEFQSSBzdXJmYWNlIGJ1dCBvbmx5IHdyYXBwZWQgYWNjZXNzaW5nIHRoZSBvcHRpb24uCiAgICovCiAgIHNob3VsZFNlbmREZWZhdWx0UGlpKCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldENsaWVudCgpOwogICAgY29uc3Qgb3B0aW9ucyA9IGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpOwogICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLnNlbmREZWZhdWx0UGlpKTsKICB9CgogIC8qKgogICAqIFNlbmRzIHRoZSBjdXJyZW50IFNlc3Npb24gb24gdGhlIHNjb3BlCiAgICovCiAgIF9zZW5kU2Vzc2lvblVwZGF0ZSgpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7CgogICAgY29uc3Qgc2Vzc2lvbiA9IHNjb3BlLmdldFNlc3Npb24oKTsKICAgIGlmIChzZXNzaW9uICYmIGNsaWVudCAmJiBjbGllbnQuY2FwdHVyZVNlc3Npb24pIHsKICAgICAgY2xpZW50LmNhcHR1cmVTZXNzaW9uKHNlc3Npb24pOwogICAgfQogIH0KCiAgLyoqCiAgICogQ2FsbHMgZ2xvYmFsIGV4dGVuc2lvbiBtZXRob2QgYW5kIGJpbmRpbmcgY3VycmVudCBpbnN0YW5jZSB0byB0aGUgZnVuY3Rpb24gY2FsbAogICAqLwogIC8vIEB0cy1leHBlY3QtZXJyb3IgRnVuY3Rpb24gbGFja3MgZW5kaW5nIHJldHVybiBzdGF0ZW1lbnQgYW5kIHJldHVybiB0eXBlIGRvZXMgbm90IGluY2x1ZGUgJ3VuZGVmaW5lZCcuIHRzKDIzNjYpCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgX2NhbGxFeHRlbnNpb25NZXRob2QobWV0aG9kLCAuLi5hcmdzKSB7CiAgICBjb25zdCBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTsKICAgIGNvbnN0IHNlbnRyeSA9IGNhcnJpZXIuX19TRU5UUllfXzsKICAgIGlmIChzZW50cnkgJiYgc2VudHJ5LmV4dGVuc2lvbnMgJiYgdHlwZW9mIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0uYXBwbHkodGhpcywgYXJncyk7CiAgICB9CiAgICBERUJVR19CVUlMRCAmJiBsb2dnZXIud2FybihgRXh0ZW5zaW9uIG1ldGhvZCAke21ldGhvZH0gY291bGRuJ3QgYmUgZm91bmQsIGRvaW5nIG5vdGhpbmcuYCk7CiAgfQp9CgovKioKICogUmV0dXJucyB0aGUgZ2xvYmFsIHNoaW0gcmVnaXN0cnkuCiAqCiAqIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JsZW1hdGljLCBiZWNhdXNlIGRlc3BpdGUgYWx3YXlzIHJldHVybmluZyBhIHZhbGlkIENhcnJpZXIsCiAqIGl0IGhhcyBhbiBvcHRpb25hbCBgX19TRU5UUllfX2AgcHJvcGVydHksIHdoaWNoIHRoZW4gaW4gdHVybiByZXF1aXJlcyB1cyB0byBhbHdheXMgcGVyZm9ybSBhbiB1bm5lY2Vzc2FyeSBjaGVjawogKiBhdCB0aGUgY2FsbC1zaXRlLiBXZSBhbHdheXMgYWNjZXNzIHRoZSBjYXJyaWVyIHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgc28gd2UgY2FuIGd1YXJhbnRlZSB0aGF0IGBfX1NFTlRSWV9fYCBpcyB0aGVyZS4KICoqLwpmdW5jdGlvbiBnZXRNYWluQ2FycmllcigpIHsKICBHTE9CQUxfT0JKLl9fU0VOVFJZX18gPSBHTE9CQUxfT0JKLl9fU0VOVFJZX18gfHwgewogICAgZXh0ZW5zaW9uczoge30sCiAgICBodWI6IHVuZGVmaW5lZCwKICB9OwogIHJldHVybiBHTE9CQUxfT0JKOwp9CgovKioKICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgbWFpbiBodWIgd2l0aCB0aGUgcGFzc2VkIG9uZSBvbiB0aGUgZ2xvYmFsIG9iamVjdAogKgogKiBAcmV0dXJucyBUaGUgb2xkIHJlcGxhY2VkIGh1YgogKgogKiBAZGVwcmVjYXRlZCBVc2UgYHNldEN1cnJlbnRDbGllbnQoKWAgaW5zdGVhZC4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBtYWtlTWFpbihodWIpIHsKICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7CiAgY29uc3Qgb2xkSHViID0gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpOwogIHNldEh1Yk9uQ2FycmllcihyZWdpc3RyeSwgaHViKTsKICByZXR1cm4gb2xkSHViOwp9CgovKioKICogUmV0dXJucyB0aGUgZGVmYXVsdCBodWIgaW5zdGFuY2UuCiAqCiAqIElmIGEgaHViIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGNhcnJpZXIgYnV0IHRoaXMgbW9kdWxlCiAqIGNvbnRhaW5zIGEgbW9yZSByZWNlbnQgdmVyc2lvbiwgaXQgcmVwbGFjZXMgdGhlIHJlZ2lzdGVyZWQgdmVyc2lvbi4KICogT3RoZXJ3aXNlLCB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgaHViIHdpbGwgYmUgcmV0dXJuZWQuCiAqCiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgcmVzcGVjdGl2ZSByZXBsYWNlbWVudCBtZXRob2QgZGlyZWN0bHkgaW5zdGVhZC4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBnZXRDdXJyZW50SHViKCkgewogIC8vIEdldCBtYWluIGNhcnJpZXIgKGdsb2JhbCBmb3IgZXZlcnkgZW52aXJvbm1lbnQpCiAgY29uc3QgcmVnaXN0cnkgPSBnZXRNYWluQ2FycmllcigpOwoKICBpZiAocmVnaXN0cnkuX19TRU5UUllfXyAmJiByZWdpc3RyeS5fX1NFTlRSWV9fLmFjcykgewogICAgY29uc3QgaHViID0gcmVnaXN0cnkuX19TRU5UUllfXy5hY3MuZ2V0Q3VycmVudEh1YigpOwoKICAgIGlmIChodWIpIHsKICAgICAgcmV0dXJuIGh1YjsKICAgIH0KICB9CgogIC8vIFJldHVybiBodWIgdGhhdCBsaXZlcyBvbiBhIGdsb2JhbCBvYmplY3QKICByZXR1cm4gZ2V0R2xvYmFsSHViKHJlZ2lzdHJ5KTsKfQoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCmZ1bmN0aW9uIGdldEdsb2JhbEh1YihyZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCkpIHsKICAvLyBJZiB0aGVyZSdzIG5vIGh1Yiwgb3IgaXRzIGFuIG9sZCBBUEksIGFzc2lnbiBhIG5ldyBvbmUKCiAgaWYgKAogICAgIWhhc0h1Yk9uQ2FycmllcihyZWdpc3RyeSkgfHwKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpLmlzT2xkZXJUaGFuKEFQSV9WRVJTSU9OKQogICkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBzZXRIdWJPbkNhcnJpZXIocmVnaXN0cnksIG5ldyBIdWIoKSk7CiAgfQoKICAvLyBSZXR1cm4gaHViIHRoYXQgbGl2ZXMgb24gYSBnbG9iYWwgb2JqZWN0CiAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTsKfQoKLyoqCiAqIFRoaXMgd2lsbCB0ZWxsIHdoZXRoZXIgYSBjYXJyaWVyIGhhcyBhIGh1YiBvbiBpdCBvciBub3QKICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0CiAqLwpmdW5jdGlvbiBoYXNIdWJPbkNhcnJpZXIoY2FycmllcikgewogIHJldHVybiAhIShjYXJyaWVyICYmIGNhcnJpZXIuX19TRU5UUllfXyAmJiBjYXJyaWVyLl9fU0VOVFJZX18uaHViKTsKfQoKLyoqCiAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcge0BsaW5rIEh1Yn0gYW5kIGFkZCB0byB0aGUgcGFzc2VkIG9iamVjdCBvbgogKiBfX1NFTlRSWV9fLmh1Yi4KICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0CiAqIEBoaWRkZW4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBnZXRIdWJGcm9tQ2FycmllcihjYXJyaWVyKSB7CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgcmV0dXJuIGdldEdsb2JhbFNpbmdsZXRvbignaHViJywgKCkgPT4gbmV3IEh1YigpLCBjYXJyaWVyKTsKfQoKLyoqCiAqIFRoaXMgd2lsbCBzZXQgcGFzc2VkIHtAbGluayBIdWJ9IG9uIHRoZSBwYXNzZWQgb2JqZWN0J3MgX19TRU5UUllfXy5odWIgYXR0cmlidXRlCiAqIEBwYXJhbSBjYXJyaWVyIG9iamVjdAogKiBAcGFyYW0gaHViIEh1YgogKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUKICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBzZXRIdWJPbkNhcnJpZXIoY2FycmllciwgaHViKSB7CiAgaWYgKCFjYXJyaWVyKSByZXR1cm4gZmFsc2U7CiAgY29uc3QgX19TRU5UUllfXyA9IChjYXJyaWVyLl9fU0VOVFJZX18gPSBjYXJyaWVyLl9fU0VOVFJZX18gfHwge30pOwogIF9fU0VOVFJZX18uaHViID0gaHViOwogIHJldHVybiB0cnVlOwp9CgovKioKICogQXBwbHkgU2RrSW5mbyAobmFtZSwgdmVyc2lvbiwgcGFja2FnZXMsIGludGVncmF0aW9ucykgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQga2V5LgogKiBNZXJnZSB3aXRoIGV4aXN0aW5nIGRhdGEgaWYgYW55LgogKiovCmZ1bmN0aW9uIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBzZGtJbmZvKSB7CiAgaWYgKCFzZGtJbmZvKSB7CiAgICByZXR1cm4gZXZlbnQ7CiAgfQogIGV2ZW50LnNkayA9IGV2ZW50LnNkayB8fCB7fTsKICBldmVudC5zZGsubmFtZSA9IGV2ZW50LnNkay5uYW1lIHx8IHNka0luZm8ubmFtZTsKICBldmVudC5zZGsudmVyc2lvbiA9IGV2ZW50LnNkay52ZXJzaW9uIHx8IHNka0luZm8udmVyc2lvbjsKICBldmVudC5zZGsuaW50ZWdyYXRpb25zID0gWy4uLihldmVudC5zZGsuaW50ZWdyYXRpb25zIHx8IFtdKSwgLi4uKHNka0luZm8uaW50ZWdyYXRpb25zIHx8IFtdKV07CiAgZXZlbnQuc2RrLnBhY2thZ2VzID0gWy4uLihldmVudC5zZGsucGFja2FnZXMgfHwgW10pLCAuLi4oc2RrSW5mby5wYWNrYWdlcyB8fCBbXSldOwogIHJldHVybiBldmVudDsKfQoKLyoqIENyZWF0ZXMgYW4gZW52ZWxvcGUgZnJvbSBhIFNlc3Npb24gKi8KZnVuY3Rpb24gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKAogIHNlc3Npb24sCiAgZHNuLAogIG1ldGFkYXRhLAogIHR1bm5lbCwKKSB7CiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpOwogIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IHsKICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLAogICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogZHNuVG9TdHJpbmcoZHNuKSB9KSwKICB9OwoKICBjb25zdCBlbnZlbG9wZUl0ZW0gPQogICAgJ2FnZ3JlZ2F0ZXMnIGluIHNlc3Npb24gPyBbeyB0eXBlOiAnc2Vzc2lvbnMnIH0sIHNlc3Npb25dIDogW3sgdHlwZTogJ3Nlc3Npb24nIH0sIHNlc3Npb24udG9KU09OKCldOwoKICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZW52ZWxvcGVJdGVtXSk7Cn0KCi8qKgogKiBDcmVhdGUgYW4gRW52ZWxvcGUgZnJvbSBhbiBldmVudC4KICovCmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGUoCiAgZXZlbnQsCiAgZHNuLAogIG1ldGFkYXRhLAogIHR1bm5lbCwKKSB7CiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpOwoKICAvKgogICAgTm90ZTogRHVlIHRvIFRTLCBldmVudC50eXBlIG1heSBiZSBgcmVwbGF5X2V2ZW50YCwgdGhlb3JldGljYWxseS4KICAgIEluIHByYWN0aWNlLCB3ZSBuZXZlciBjYWxsIGBjcmVhdGVFdmVudEVudmVsb3BlYCB3aXRoIGByZXBsYXlfZXZlbnRgIHR5cGUsCiAgICBhbmQgd2UnZCBoYXZlIHRvIGFkanV0IGEgbG9vb3Qgb2YgdHlwZXMgdG8gbWFrZSB0aGlzIHdvcmsgcHJvcGVybHkuCiAgICBXZSB3YW50IHRvIGF2b2lkIGNhc3RpbmcgdGhpcyBhcm91bmQsIGFzIHRoYXQgY291bGQgbGVhZCB0byBidWdzIChlLmcuIHdoZW4gd2UgYWRkIGFub3RoZXIgdHlwZSkKICAgIFNvIHRoZSBzYWZlIGNob2ljZSBpcyB0byByZWFsbHkgZ3VhcmQgYWdhaW5zdCB0aGUgcmVwbGF5X2V2ZW50IHR5cGUgaGVyZS4KICAqLwogIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gJ3JlcGxheV9ldmVudCcgPyBldmVudC50eXBlIDogJ2V2ZW50JzsKCiAgZW5oYW5jZUV2ZW50V2l0aFNka0luZm8oZXZlbnQsIG1ldGFkYXRhICYmIG1ldGFkYXRhLnNkayk7CgogIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKGV2ZW50LCBzZGtJbmZvLCB0dW5uZWwsIGRzbik7CgogIC8vIFByZXZlbnQgdGhpcyBkYXRhICh3aGljaCwgaWYgaXQgZXhpc3RzLCB3YXMgdXNlZCBpbiBlYXJsaWVyIHN0ZXBzIGluIHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lKSBmcm9tIGJlaW5nIHNlbnQgdG8KICAvLyBzZW50cnkuIChOb3RlOiBPdXIgdXNlIG9mIHRoaXMgcHJvcGVydHkgY29tZXMgYW5kIGdvZXMgd2l0aCB3aGF0ZXZlciB3ZSBtaWdodCBiZSBkZWJ1Z2dpbmcsIHdoYXRldmVyIGhhY2tzIHdlIG1heQogIC8vIGhhdmUgdGVtcG9yYXJpbHkgYWRkZWQsIGV0Yy4gRXZlbiBpZiB3ZSBkb24ndCBoYXBwZW4gdG8gYmUgdXNpbmcgaXQgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCBsZXQncyBub3QgZ2V0IHJpZAogIC8vIG9mIHRoaXMgYGRlbGV0ZWAsIGxlc3Qgd2UgbWlzcyBwdXR0aW5nIGl0IGJhY2sgaW4gdGhlIG5leHQgdGltZSB0aGUgcHJvcGVydHkgaXMgaW4gdXNlLikKICBkZWxldGUgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhOwoKICBjb25zdCBldmVudEl0ZW0gPSBbeyB0eXBlOiBldmVudFR5cGUgfSwgZXZlbnRdOwogIHJldHVybiBjcmVhdGVFbnZlbG9wZShlbnZlbG9wZUhlYWRlcnMsIFtldmVudEl0ZW1dKTsKfQoKY29uc3QgU0VOVFJZX0FQSV9WRVJTSU9OID0gJzcnOwoKLyoqIFJldHVybnMgdGhlIHByZWZpeCB0byBjb25zdHJ1Y3QgU2VudHJ5IGluZ2VzdGlvbiBBUEkgZW5kcG9pbnRzLiAqLwpmdW5jdGlvbiBnZXRCYXNlQXBpRW5kcG9pbnQoZHNuKSB7CiAgY29uc3QgcHJvdG9jb2wgPSBkc24ucHJvdG9jb2wgPyBgJHtkc24ucHJvdG9jb2x9OmAgOiAnJzsKICBjb25zdCBwb3J0ID0gZHNuLnBvcnQgPyBgOiR7ZHNuLnBvcnR9YCA6ICcnOwogIHJldHVybiBgJHtwcm90b2NvbH0vLyR7ZHNuLmhvc3R9JHtwb3J0fSR7ZHNuLnBhdGggPyBgLyR7ZHNuLnBhdGh9YCA6ICcnfS9hcGkvYDsKfQoKLyoqIFJldHVybnMgdGhlIGluZ2VzdCBBUEkgZW5kcG9pbnQgZm9yIHRhcmdldC4gKi8KZnVuY3Rpb24gX2dldEluZ2VzdEVuZHBvaW50KGRzbikgewogIHJldHVybiBgJHtnZXRCYXNlQXBpRW5kcG9pbnQoZHNuKX0ke2Rzbi5wcm9qZWN0SWR9L2VudmVsb3BlL2A7Cn0KCi8qKiBSZXR1cm5zIGEgVVJMLWVuY29kZWQgc3RyaW5nIHdpdGggYXV0aCBjb25maWcgc3VpdGFibGUgZm9yIGEgcXVlcnkgc3RyaW5nLiAqLwpmdW5jdGlvbiBfZW5jb2RlZEF1dGgoZHNuLCBzZGtJbmZvKSB7CiAgcmV0dXJuIHVybEVuY29kZSh7CiAgICAvLyBXZSBzZW5kIG9ubHkgdGhlIG1pbmltdW0gc2V0IG9mIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBTZWUKICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1NzIuCiAgICBzZW50cnlfa2V5OiBkc24ucHVibGljS2V5LAogICAgc2VudHJ5X3ZlcnNpb246IFNFTlRSWV9BUElfVkVSU0lPTiwKICAgIC4uLihzZGtJbmZvICYmIHsgc2VudHJ5X2NsaWVudDogYCR7c2RrSW5mby5uYW1lfS8ke3Nka0luZm8udmVyc2lvbn1gIH0pLAogIH0pOwp9CgovKioKICogUmV0dXJucyB0aGUgZW52ZWxvcGUgZW5kcG9pbnQgVVJMIHdpdGggYXV0aCBpbiB0aGUgcXVlcnkgc3RyaW5nLgogKgogKiBTZW5kaW5nIGF1dGggYXMgcGFydCBvZiB0aGUgcXVlcnkgc3RyaW5nIGFuZCBub3QgYXMgY3VzdG9tIEhUVFAgaGVhZGVycyBhdm9pZHMgQ09SUyBwcmVmbGlnaHQgcmVxdWVzdHMuCiAqLwpmdW5jdGlvbiBnZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKAogIGRzbiwKICAvLyBUT0RPICh2OCk6IFJlbW92ZSBgdHVubmVsT3JPcHRpb25zYCBpbiBmYXZvciBvZiBgb3B0aW9uc2AsIGFuZCB1c2UgdGhlIHN1YnN0aXR1dGUgY29kZSBiZWxvdwogIC8vIG9wdGlvbnM6IENsaWVudE9wdGlvbnMgPSB7fSBhcyBDbGllbnRPcHRpb25zLAogIHR1bm5lbE9yT3B0aW9ucyA9IHt9ICwKKSB7CiAgLy8gVE9ETyAodjgpOiBVc2UgdGhpcyBjb2RlIGluc3RlYWQKICAvLyBjb25zdCB7IHR1bm5lbCwgX21ldGFkYXRhID0ge30gfSA9IG9wdGlvbnM7CiAgLy8gcmV0dXJuIHR1bm5lbCA/IHR1bm5lbCA6IGAke19nZXRJbmdlc3RFbmRwb2ludChkc24pfT8ke19lbmNvZGVkQXV0aChkc24sIF9tZXRhZGF0YS5zZGspfWA7CgogIGNvbnN0IHR1bm5lbCA9IHR5cGVvZiB0dW5uZWxPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gdHVubmVsT3JPcHRpb25zIDogdHVubmVsT3JPcHRpb25zLnR1bm5lbDsKICBjb25zdCBzZGtJbmZvID0KICAgIHR5cGVvZiB0dW5uZWxPck9wdGlvbnMgPT09ICdzdHJpbmcnIHx8ICF0dW5uZWxPck9wdGlvbnMuX21ldGFkYXRhID8gdW5kZWZpbmVkIDogdHVubmVsT3JPcHRpb25zLl9tZXRhZGF0YS5zZGs7CgogIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBzZGtJbmZvKX1gOwp9Cgpjb25zdCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSA9IDMwOwoKLyoqCiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYSBTZW50cnkgYFRyYW5zcG9ydGAKICoKICogQHBhcmFtIG9wdGlvbnMKICogQHBhcmFtIG1ha2VSZXF1ZXN0CiAqLwpmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnQoCiAgb3B0aW9ucywKICBtYWtlUmVxdWVzdCwKICBidWZmZXIgPSBtYWtlUHJvbWlzZUJ1ZmZlcigKICAgIG9wdGlvbnMuYnVmZmVyU2l6ZSB8fCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSwKICApLAopIHsKICBsZXQgcmF0ZUxpbWl0cyA9IHt9OwogIGNvbnN0IGZsdXNoID0gKHRpbWVvdXQpID0+IGJ1ZmZlci5kcmFpbih0aW1lb3V0KTsKCiAgZnVuY3Rpb24gc2VuZChlbnZlbG9wZSkgewogICAgY29uc3QgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zID0gW107CgogICAgLy8gRHJvcCByYXRlIGxpbWl0ZWQgaXRlbXMgZnJvbSBlbnZlbG9wZQogICAgZm9yRWFjaEVudmVsb3BlSXRlbShlbnZlbG9wZSwgKGl0ZW0sIHR5cGUpID0+IHsKICAgICAgY29uc3QgZGF0YUNhdGVnb3J5ID0gZW52ZWxvcGVJdGVtVHlwZVRvRGF0YUNhdGVnb3J5KHR5cGUpOwogICAgICBpZiAoaXNSYXRlTGltaXRlZChyYXRlTGltaXRzLCBkYXRhQ2F0ZWdvcnkpKSB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICBvcHRpb25zLnJlY29yZERyb3BwZWRFdmVudCgncmF0ZWxpbWl0X2JhY2tvZmYnLCBkYXRhQ2F0ZWdvcnksIGV2ZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmaWx0ZXJlZEVudmVsb3BlSXRlbXMucHVzaChpdGVtKTsKICAgICAgfQogICAgfSk7CgogICAgLy8gU2tpcCBzZW5kaW5nIGlmIGVudmVsb3BlIGlzIGVtcHR5IGFmdGVyIGZpbHRlcmluZyBvdXQgcmF0ZSBsaW1pdGVkIGV2ZW50cwogICAgaWYgKGZpbHRlcmVkRW52ZWxvcGVJdGVtcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoKTsKICAgIH0KCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQogICAgY29uc3QgZmlsdGVyZWRFbnZlbG9wZSA9IGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlWzBdLCBmaWx0ZXJlZEVudmVsb3BlSXRlbXMgKTsKCiAgICAvLyBDcmVhdGVzIGNsaWVudCByZXBvcnQgZm9yIGVhY2ggaXRlbSBpbiBhbiBlbnZlbG9wZQogICAgY29uc3QgcmVjb3JkRW52ZWxvcGVMb3NzID0gKHJlYXNvbikgPT4gewogICAgICBmb3JFYWNoRW52ZWxvcGVJdGVtKGZpbHRlcmVkRW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICBvcHRpb25zLnJlY29yZERyb3BwZWRFdmVudChyZWFzb24sIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSwgZXZlbnQpOwogICAgICB9KTsKICAgIH07CgogICAgY29uc3QgcmVxdWVzdFRhc2sgPSAoKSA9PgogICAgICBtYWtlUmVxdWVzdCh7IGJvZHk6IHNlcmlhbGl6ZUVudmVsb3BlKGZpbHRlcmVkRW52ZWxvcGUsIG9wdGlvbnMudGV4dEVuY29kZXIpIH0pLnRoZW4oCiAgICAgICAgcmVzcG9uc2UgPT4gewogICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB0aHJvdyBvbiBOT0sgcmVzcG9uc2VzLCBidXQgd2Ugd2FudCB0byBhdCBsZWFzdCBsb2cgdGhlbQogICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IHVuZGVmaW5lZCAmJiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXNDb2RlID49IDMwMCkpIHsKICAgICAgICAgICAgREVCVUdfQlVJTEQgJiYgbG9nZ2VyLndhcm4oYFNlbnRyeSByZXNwb25kZWQgd2l0aCBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9IHRvIHNlbnQgZXZlbnQuYCk7CiAgICAgICAgICB9CgogICAgICAgICAgcmF0ZUxpbWl0cyA9IHVwZGF0ZVJhdGVMaW1pdHMocmF0ZUxpbWl0cywgcmVzcG9uc2UpOwogICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICAgIH0sCiAgICAgICAgZXJyb3IgPT4gewogICAgICAgICAgcmVjb3JkRW52ZWxvcGVMb3NzKCduZXR3b3JrX2Vycm9yJyk7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9LAogICAgICApOwoKICAgIHJldHVybiBidWZmZXIuYWRkKHJlcXVlc3RUYXNrKS50aGVuKAogICAgICByZXN1bHQgPT4gcmVzdWx0LAogICAgICBlcnJvciA9PiB7CiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VudHJ5RXJyb3IpIHsKICAgICAgICAgIERFQlVHX0JVSUxEICYmIGxvZ2dlci5lcnJvcignU2tpcHBlZCBzZW5kaW5nIGV2ZW50IGJlY2F1c2UgYnVmZmVyIGlzIGZ1bGwuJyk7CiAgICAgICAgICByZWNvcmRFbnZlbG9wZUxvc3MoJ3F1ZXVlX292ZXJmbG93Jyk7CiAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRTeW5jUHJvbWlzZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH0sCiAgICApOwogIH0KCiAgLy8gV2UgdXNlIHRoaXMgdG8gaWRlbnRpZmlmeSBpZiB0aGUgdHJhbnNwb3J0IGlzIHRoZSBiYXNlIHRyYW5zcG9ydAogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHRoaXMgYWdhaW4gYXMgd2UnbGwgbm8gbG9uZ2VyIG5lZWQgaXQKICBzZW5kLl9fc2VudHJ5X19iYXNlVHJhbnNwb3J0X18gPSB0cnVlOwoKICByZXR1cm4gewogICAgc2VuZCwKICAgIGZsdXNoLAogIH07Cn0KCmZ1bmN0aW9uIGdldEV2ZW50Rm9yRW52ZWxvcGVJdGVtKGl0ZW0sIHR5cGUpIHsKICBpZiAodHlwZSAhPT0gJ2V2ZW50JyAmJiB0eXBlICE9PSAndHJhbnNhY3Rpb24nKSB7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KCiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaXRlbSkgPyAoaXRlbSApWzFdIDogdW5kZWZpbmVkOwp9CgovKiogbm9ybWFsaXplcyBXaW5kb3dzIHBhdGhzICovCmZ1bmN0aW9uIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKHBhdGgpIHsKICByZXR1cm4gcGF0aAogICAgLnJlcGxhY2UoL15bQS1aXTovLCAnJykgLy8gcmVtb3ZlIFdpbmRvd3Mtc3R5bGUgcHJlZml4CiAgICAucmVwbGFjZSgvXFwvZywgJy8nKTsgLy8gcmVwbGFjZSBhbGwgYFxgIGluc3RhbmNlcyB3aXRoIGAvYAp9CgovKiogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0aGUgbW9kdWxlIG5hbWUgZnJvbSBhIGZpbGVuYW1lICovCmZ1bmN0aW9uIGNyZWF0ZUdldE1vZHVsZUZyb21GaWxlbmFtZSgKICBiYXNlUGF0aCA9IHByb2Nlc3MuYXJndlsxXSA/IGRpcm5hbWUocHJvY2Vzcy5hcmd2WzFdKSA6IHByb2Nlc3MuY3dkKCksCiAgaXNXaW5kb3dzID0gc2VwID09PSAnXFwnLAopIHsKICBjb25zdCBub3JtYWxpemVkQmFzZSA9IGlzV2luZG93cyA/IG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGJhc2VQYXRoKSA6IGJhc2VQYXRoOwoKICByZXR1cm4gKGZpbGVuYW1lKSA9PiB7CiAgICBpZiAoIWZpbGVuYW1lKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChmaWxlbmFtZSkgOiBmaWxlbmFtZTsKCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0CiAgICBsZXQgeyBkaXIsIGJhc2U6IGZpbGUsIGV4dCB9ID0gcG9zaXgucGFyc2Uobm9ybWFsaXplZEZpbGVuYW1lKTsKCiAgICBpZiAoZXh0ID09PSAnLmpzJyB8fCBleHQgPT09ICcubWpzJyB8fCBleHQgPT09ICcuY2pzJykgewogICAgICBmaWxlID0gZmlsZS5zbGljZSgwLCBleHQubGVuZ3RoICogLTEpOwogICAgfQoKICAgIGlmICghZGlyKSB7CiAgICAgIC8vIE5vIGRpcm5hbWUgd2hhdHNvZXZlcgogICAgICBkaXIgPSAnLic7CiAgICB9CgogICAgY29uc3QgbiA9IGRpci5sYXN0SW5kZXhPZignL25vZGVfbW9kdWxlcycpOwogICAgaWYgKG4gPiAtMSkgewogICAgICByZXR1cm4gYCR7ZGlyLnNsaWNlKG4gKyAxNCkucmVwbGFjZSgvXC8vZywgJy4nKX06JHtmaWxlfWA7CiAgICB9CgogICAgLy8gTGV0J3Mgc2VlIGlmIGl0J3MgYSBwYXJ0IG9mIHRoZSBtYWluIG1vZHVsZQogICAgLy8gVG8gYmUgYSBwYXJ0IG9mIG1haW4gbW9kdWxlLCBpdCBoYXMgdG8gc2hhcmUgdGhlIHNhbWUgYmFzZQogICAgaWYgKGRpci5zdGFydHNXaXRoKG5vcm1hbGl6ZWRCYXNlKSkgewogICAgICBsZXQgbW9kdWxlTmFtZSA9IGRpci5zbGljZShub3JtYWxpemVkQmFzZS5sZW5ndGggKyAxKS5yZXBsYWNlKC9cLy9nLCAnLicpOwoKICAgICAgaWYgKG1vZHVsZU5hbWUpIHsKICAgICAgICBtb2R1bGVOYW1lICs9ICc6JzsKICAgICAgfQogICAgICBtb2R1bGVOYW1lICs9IGZpbGU7CgogICAgICByZXR1cm4gbW9kdWxlTmFtZTsKICAgIH0KCiAgICByZXR1cm4gZmlsZTsKICB9Owp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlJDIobGhzLCByaHNGbikgeyBpZiAobGhzICE9IG51bGwpIHsgcmV0dXJuIGxoczsgfSBlbHNlIHsgcmV0dXJuIHJoc0ZuKCk7IH0gfS8qKgogKiBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgZm9ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1Rvb1RhbGxOYXRlL3Byb3h5LWFnZW50cy90cmVlL2IxMzMyOTVmZDE2ZjY0NzU1NzhiNmIxNWJkOWI0ZTMzZWNiMGQwYjcKICogV2l0aCB0aGUgZm9sbG93aW5nIGxpY2VuY2U6CiAqCiAqIChUaGUgTUlUIExpY2Vuc2UpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxMyBOYXRoYW4gUmFqbGljaCA8bmF0aGFuQHRvb3RhbGxuYXRlLm5ldD4qCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICogJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOioKICoKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuKgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqLwoKY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ0FnZW50QmFzZUludGVybmFsU3RhdGUnKTsKCmNsYXNzIEFnZW50IGV4dGVuZHMgaHR0cC5BZ2VudCB7CgogIC8vIFNldCBieSBgaHR0cC5BZ2VudGAgLSBtaXNzaW5nIGZyb20gYEB0eXBlcy9ub2RlYAoKICBjb25zdHJ1Y3RvcihvcHRzKSB7CiAgICBzdXBlcihvcHRzKTsKICAgIHRoaXNbSU5URVJOQUxdID0ge307CiAgfQoKICAvKioKICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGFuIGBodHRwYCBvciBgaHR0cHNgIHJlcXVlc3QuCiAgICovCiAgaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKSB7CiAgICBpZiAob3B0aW9ucykgewogICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYHNlY3VyZUVuZHBvaW50YCBwcm9wZXJ0eSBleHBsaWNpdGx5LCBzaW5jZSB0aGlzCiAgICAgIC8vIG1lYW5zIHRoYXQgYSBwYXJlbnQgYEFnZW50YCBpcyAicGFzc2luZyB0aHJvdWdoIiB0byB0aGlzIGluc3RhbmNlLgogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgICAgIGlmICh0eXBlb2YgKG9wdGlvbnMgKS5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQ7CiAgICAgIH0KCiAgICAgIC8vIElmIG5vIGV4cGxpY2l0IGBzZWN1cmVgIGVuZHBvaW50LCBjaGVjayBpZiBgcHJvdG9jb2xgIHByb3BlcnR5IGlzCiAgICAgIC8vIHNldC4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlIGNhc2Ugc2luY2UgdXNpbmcgYSBmdWxsIHN0cmluZyBVUkwKICAgICAgLy8gb3IgYFVSTGAgaW5zdGFuY2Ugc2hvdWxkIGJlIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS4KICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnByb3RvY29sID09PSAnc3RyaW5nJykgewogICAgICAgIHJldHVybiBvcHRpb25zLnByb3RvY29sID09PSAnaHR0cHM6JzsKICAgICAgfQogICAgfQoKICAgIC8vIEZpbmFsbHksIGlmIG5vIGBwcm90b2NvbGAgcHJvcGVydHkgd2FzIHNldCwgdGhlbiBmYWxsIGJhY2sgdG8KICAgIC8vIGNoZWNraW5nIHRoZSBzdGFjayB0cmFjZSBvZiB0aGUgY3VycmVudCBjYWxsIHN0YWNrLCBhbmQgdHJ5IHRvCiAgICAvLyBkZXRlY3QgdGhlICJodHRwcyIgbW9kdWxlLgogICAgY29uc3QgeyBzdGFjayB9ID0gbmV3IEVycm9yKCk7CiAgICBpZiAodHlwZW9mIHN0YWNrICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN0YWNrLnNwbGl0KCdcbicpLnNvbWUobCA9PiBsLmluZGV4T2YoJyhodHRwcy5qczonKSAhPT0gLTEgfHwgbC5pbmRleE9mKCdub2RlOmh0dHBzOicpICE9PSAtMSk7CiAgfQoKICBjcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYikgewogICAgY29uc3QgY29ubmVjdE9wdHMgPSB7CiAgICAgIC4uLm9wdGlvbnMsCiAgICAgIHNlY3VyZUVuZHBvaW50OiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyksCiAgICB9OwogICAgUHJvbWlzZS5yZXNvbHZlKCkKICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25uZWN0KHJlcSwgY29ubmVjdE9wdHMpKQogICAgICAudGhlbihzb2NrZXQgPT4gewogICAgICAgIGlmIChzb2NrZXQgaW5zdGFuY2VvZiBodHRwLkFnZW50KSB7CiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBhZGRSZXF1ZXN0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYAogICAgICAgICAgcmV0dXJuIHNvY2tldC5hZGRSZXF1ZXN0KHJlcSwgY29ubmVjdE9wdHMpOwogICAgICAgIH0KICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gc29ja2V0OwogICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGNyZWF0ZVNvY2tldCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWAKICAgICAgICBzdXBlci5jcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYik7CiAgICAgIH0sIGNiKTsKICB9CgogIGNyZWF0ZUNvbm5lY3Rpb24oKSB7CiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0OwogICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHVuZGVmaW5lZDsKICAgIGlmICghc29ja2V0KSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc29ja2V0IHdhcyByZXR1cm5lZCBpbiB0aGUgYGNvbm5lY3QoKWAgZnVuY3Rpb24nKTsKICAgIH0KICAgIHJldHVybiBzb2NrZXQ7CiAgfQoKICBnZXQgZGVmYXVsdFBvcnQoKSB7CiAgICByZXR1cm4gX251bGxpc2hDb2FsZXNjZSQyKHRoaXNbSU5URVJOQUxdLmRlZmF1bHRQb3J0LCAoKSA9PiAoICh0aGlzLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKSkpOwogIH0KCiAgc2V0IGRlZmF1bHRQb3J0KHYpIHsKICAgIGlmICh0aGlzW0lOVEVSTkFMXSkgewogICAgICB0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCA9IHY7CiAgICB9CiAgfQoKICBnZXQgcHJvdG9jb2woKSB7CiAgICByZXR1cm4gX251bGxpc2hDb2FsZXNjZSQyKHRoaXNbSU5URVJOQUxdLnByb3RvY29sLCAoKSA9PiAoICh0aGlzLmlzU2VjdXJlRW5kcG9pbnQoKSA/ICdodHRwczonIDogJ2h0dHA6JykpKTsKICB9CgogIHNldCBwcm90b2NvbCh2KSB7CiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHsKICAgICAgdGhpc1tJTlRFUk5BTF0ucHJvdG9jb2wgPSB2OwogICAgfQogIH0KfQoKZnVuY3Rpb24gZGVidWckMSguLi5hcmdzKSB7CiAgbG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50OnBhcnNlLXByb3h5LXJlc3BvbnNlXScsIC4uLmFyZ3MpOwp9CgpmdW5jdGlvbiBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIC8vIHdlIG5lZWQgdG8gYnVmZmVyIGFueSBIVFRQIHRyYWZmaWMgdGhhdCBoYXBwZW5zIHdpdGggdGhlIHByb3h5IGJlZm9yZSB3ZSBnZXQKICAgIC8vIHRoZSBDT05ORUNUIHJlc3BvbnNlLCBzbyB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuICIyMDAiCiAgICAvLyByZXNwb25zZSBjb2RlLCB0aGVuIHdlIGNhbiByZS1wbGF5IHRoZSAiZGF0YSIgZXZlbnRzIG9uIHRoZSBzb2NrZXQgb25jZSB0aGUKICAgIC8vIEhUVFAgcGFyc2VyIGlzIGhvb2tlZCB1cC4uLgogICAgbGV0IGJ1ZmZlcnNMZW5ndGggPSAwOwogICAgY29uc3QgYnVmZmVycyA9IFtdOwoKICAgIGZ1bmN0aW9uIHJlYWQoKSB7CiAgICAgIGNvbnN0IGIgPSBzb2NrZXQucmVhZCgpOwogICAgICBpZiAoYikgb25kYXRhKGIpOwogICAgICBlbHNlIHNvY2tldC5vbmNlKCdyZWFkYWJsZScsIHJlYWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsZWFudXAoKSB7CiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpOwogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7CiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcigncmVhZGFibGUnLCByZWFkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmVuZCgpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBkZWJ1ZyQxKCdvbmVuZCcpOwogICAgICByZWplY3QobmV3IEVycm9yKCdQcm94eSBjb25uZWN0aW9uIGVuZGVkIGJlZm9yZSByZWNlaXZpbmcgQ09OTkVDVCByZXNwb25zZScpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmVycm9yKGVycikgewogICAgICBjbGVhbnVwKCk7CiAgICAgIGRlYnVnJDEoJ29uZXJyb3IgJW8nLCBlcnIpOwogICAgICByZWplY3QoZXJyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmRhdGEoYikgewogICAgICBidWZmZXJzLnB1c2goYik7CiAgICAgIGJ1ZmZlcnNMZW5ndGggKz0gYi5sZW5ndGg7CgogICAgICBjb25zdCBidWZmZXJlZCA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgYnVmZmVyc0xlbmd0aCk7CiAgICAgIGNvbnN0IGVuZE9mSGVhZGVycyA9IGJ1ZmZlcmVkLmluZGV4T2YoJ1xyXG5cclxuJyk7CgogICAgICBpZiAoZW5kT2ZIZWFkZXJzID09PSAtMSkgewogICAgICAgIC8vIGtlZXAgYnVmZmVyaW5nCiAgICAgICAgZGVidWckMSgnaGF2ZSBub3QgcmVjZWl2ZWQgZW5kIG9mIEhUVFAgaGVhZGVycyB5ZXQuLi4nKTsKICAgICAgICByZWFkKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25zdCBoZWFkZXJQYXJ0cyA9IGJ1ZmZlcmVkLnNsaWNlKDAsIGVuZE9mSGVhZGVycykudG9TdHJpbmcoJ2FzY2lpJykuc3BsaXQoJ1xyXG4nKTsKICAgICAgY29uc3QgZmlyc3RMaW5lID0gaGVhZGVyUGFydHMuc2hpZnQoKTsKICAgICAgaWYgKCFmaXJzdExpbmUpIHsKICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdObyBoZWFkZXIgcmVjZWl2ZWQgZnJvbSBwcm94eSBDT05ORUNUIHJlc3BvbnNlJykpOwogICAgICB9CiAgICAgIGNvbnN0IGZpcnN0TGluZVBhcnRzID0gZmlyc3RMaW5lLnNwbGl0KCcgJyk7CiAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSArZmlyc3RMaW5lUGFydHNbMV07CiAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBmaXJzdExpbmVQYXJ0cy5zbGljZSgyKS5qb2luKCcgJyk7CiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTsKICAgICAgZm9yIChjb25zdCBoZWFkZXIgb2YgaGVhZGVyUGFydHMpIHsKICAgICAgICBpZiAoIWhlYWRlcikgY29udGludWU7CiAgICAgICAgY29uc3QgZmlyc3RDb2xvbiA9IGhlYWRlci5pbmRleE9mKCc6Jyk7CiAgICAgICAgaWYgKGZpcnN0Q29sb24gPT09IC0xKSB7CiAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgaGVhZGVyIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZTogIiR7aGVhZGVyfSJgKSk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGtleSA9IGhlYWRlci5zbGljZSgwLCBmaXJzdENvbG9uKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGNvbnN0IHZhbHVlID0gaGVhZGVyLnNsaWNlKGZpcnN0Q29sb24gKyAxKS50cmltU3RhcnQoKTsKICAgICAgICBjb25zdCBjdXJyZW50ID0gaGVhZGVyc1trZXldOwogICAgICAgIGlmICh0eXBlb2YgY3VycmVudCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgIGhlYWRlcnNba2V5XSA9IFtjdXJyZW50LCB2YWx1ZV07CiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7CiAgICAgICAgICBjdXJyZW50LnB1c2godmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZGVidWckMSgnZ290IHByb3h5IHNlcnZlciByZXNwb25zZTogJW8gJW8nLCBmaXJzdExpbmUsIGhlYWRlcnMpOwogICAgICBjbGVhbnVwKCk7CiAgICAgIHJlc29sdmUoewogICAgICAgIGNvbm5lY3Q6IHsKICAgICAgICAgIHN0YXR1c0NvZGUsCiAgICAgICAgICBzdGF0dXNUZXh0LAogICAgICAgICAgaGVhZGVycywKICAgICAgICB9LAogICAgICAgIGJ1ZmZlcmVkLAogICAgICB9KTsKICAgIH0KCiAgICBzb2NrZXQub24oJ2Vycm9yJywgb25lcnJvcik7CiAgICBzb2NrZXQub24oJ2VuZCcsIG9uZW5kKTsKCiAgICByZWFkKCk7CiAgfSk7Cn0KCmZ1bmN0aW9uIF9udWxsaXNoQ29hbGVzY2UkMShsaHMsIHJoc0ZuKSB7IGlmIChsaHMgIT0gbnVsbCkgeyByZXR1cm4gbGhzOyB9IGVsc2UgeyByZXR1cm4gcmhzRm4oKTsgfSB9IGZ1bmN0aW9uIF9vcHRpb25hbENoYWluJDEob3BzKSB7IGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyBsZXQgdmFsdWUgPSBvcHNbMF07IGxldCBpID0gMTsgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7IGNvbnN0IG9wID0gb3BzW2ldOyBjb25zdCBmbiA9IG9wc1tpICsgMV07IGkgKz0gMjsgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7IGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTsgdmFsdWUgPSBmbih2YWx1ZSk7IH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHsgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IH0gfSByZXR1cm4gdmFsdWU7IH0KCmZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHsKICBsb2dnZXIubG9nKCdbaHR0cHMtcHJveHktYWdlbnRdJywgLi4uYXJncyk7Cn0KCi8qKgogKiBUaGUgYEh0dHBzUHJveHlBZ2VudGAgaW1wbGVtZW50cyBhbiBIVFRQIEFnZW50IHN1YmNsYXNzIHRoYXQgY29ubmVjdHMgdG8KICogdGhlIHNwZWNpZmllZCAiSFRUUChzKSBwcm94eSBzZXJ2ZXIiIGluIG9yZGVyIHRvIHByb3h5IEhUVFBTIHJlcXVlc3RzLgogKgogKiBPdXRnb2luZyBIVFRQIHJlcXVlc3RzIGFyZSBmaXJzdCB0dW5uZWxlZCB0aHJvdWdoIHRoZSBwcm94eSBzZXJ2ZXIgdXNpbmcgdGhlCiAqIGBDT05ORUNUYCBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciwKICogYW5kIHRoZW4gdGhlIHByb3h5IHNlcnZlciBjb25uZWN0cyB0byB0aGUgZGVzdGluYXRpb24gdGFyZ2V0IGFuZCBpc3N1ZXMgdGhlCiAqIEhUVFAgcmVxdWVzdCBmcm9tIHRoZSBwcm94eSBzZXJ2ZXIuCiAqCiAqIGBodHRwczpgIHJlcXVlc3RzIGhhdmUgdGhlaXIgc29ja2V0IGNvbm5lY3Rpb24gdXBncmFkZWQgdG8gVExTIG9uY2UKICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICovCmNsYXNzIEh0dHBzUHJveHlBZ2VudCBleHRlbmRzIEFnZW50IHsKICBzdGF0aWMgX19pbml0U3RhdGljKCkge3RoaXMucHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107IH0KCiAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHsKICAgIHN1cGVyKG9wdHMpOwogICAgdGhpcy5vcHRpb25zID0ge307CiAgICB0aGlzLnByb3h5ID0gdHlwZW9mIHByb3h5ID09PSAnc3RyaW5nJyA/IG5ldyBVUkwocHJveHkpIDogcHJveHk7CiAgICB0aGlzLnByb3h5SGVhZGVycyA9IF9udWxsaXNoQ29hbGVzY2UkMShfb3B0aW9uYWxDaGFpbiQxKFtvcHRzLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5oZWFkZXJzXSksICgpID0+ICgge30pKTsKICAgIGRlYnVnKCdDcmVhdGluZyBuZXcgSHR0cHNQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7CgogICAgLy8gVHJpbSBvZmYgdGhlIGJyYWNrZXRzIGZyb20gSVB2NiBhZGRyZXNzZXMKICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cW3xcXSQvZywgJycpOwogICAgY29uc3QgcG9ydCA9IHRoaXMucHJveHkucG9ydCA/IHBhcnNlSW50KHRoaXMucHJveHkucG9ydCwgMTApIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MDsKICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7CiAgICAgIC8vIEF0dGVtcHQgdG8gbmVnb3RpYXRlIGh0dHAvMS4xIGZvciBwcm94eSBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCBodHRwLzIKICAgICAgQUxQTlByb3RvY29sczogWydodHRwLzEuMSddLAogICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLAogICAgICBob3N0LAogICAgICBwb3J0LAogICAgfTsKICB9CgogIC8qKgogICAqIENhbGxlZCB3aGVuIHRoZSBub2RlLWNvcmUgSFRUUCBjbGllbnQgbGlicmFyeSBpcyBjcmVhdGluZyBhCiAgICogbmV3IEhUVFAgcmVxdWVzdC4KICAgKi8KICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykgewogICAgY29uc3QgeyBwcm94eSB9ID0gdGhpczsKCiAgICBpZiAoIW9wdHMuaG9zdCkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyAiaG9zdCIgcHJvdmlkZWQnKTsKICAgIH0KCiAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLgogICAgbGV0IHNvY2tldDsKICAgIGlmIChwcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHsKICAgICAgZGVidWcoJ0NyZWF0aW5nIGB0bHMuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTsKICAgICAgY29uc3Qgc2VydmVybmFtZSA9IHRoaXMuY29ubmVjdE9wdHMuc2VydmVybmFtZSB8fCB0aGlzLmNvbm5lY3RPcHRzLmhvc3Q7CiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHsKICAgICAgICAuLi50aGlzLmNvbm5lY3RPcHRzLAogICAgICAgIHNlcnZlcm5hbWU6IHNlcnZlcm5hbWUgJiYgbmV0LmlzSVAoc2VydmVybmFtZSkgPyB1bmRlZmluZWQgOiBzZXJ2ZXJuYW1lLAogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGRlYnVnKCdDcmVhdGluZyBgbmV0LlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7CiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHRoaXMuY29ubmVjdE9wdHMpOwogICAgfQoKICAgIGNvbnN0IGhlYWRlcnMgPQogICAgICB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbicgPyB0aGlzLnByb3h5SGVhZGVycygpIDogeyAuLi50aGlzLnByb3h5SGVhZGVycyB9OwogICAgY29uc3QgaG9zdCA9IG5ldC5pc0lQdjYob3B0cy5ob3N0KSA/IGBbJHtvcHRzLmhvc3R9XWAgOiBvcHRzLmhvc3Q7CiAgICBsZXQgcGF5bG9hZCA9IGBDT05ORUNUICR7aG9zdH06JHtvcHRzLnBvcnR9IEhUVFAvMS4xXHJcbmA7CgogICAgLy8gSW5qZWN0IHRoZSBgUHJveHktQXV0aG9yaXphdGlvbmAgaGVhZGVyIGlmIG5lY2Vzc2FyeS4KICAgIGlmIChwcm94eS51c2VybmFtZSB8fCBwcm94eS5wYXNzd29yZCkgewogICAgICBjb25zdCBhdXRoID0gYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocHJveHkucGFzc3dvcmQpfWA7CiAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gOwogICAgfQoKICAgIGhlYWRlcnMuSG9zdCA9IGAke2hvc3R9OiR7b3B0cy5wb3J0fWA7CgogICAgaWYgKCFoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10pIHsKICAgICAgaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddID0gdGhpcy5rZWVwQWxpdmUgPyAnS2VlcC1BbGl2ZScgOiAnY2xvc2UnOwogICAgfQogICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7CiAgICAgIHBheWxvYWQgKz0gYCR7bmFtZX06ICR7aGVhZGVyc1tuYW1lXX1cclxuYDsKICAgIH0KCiAgICBjb25zdCBwcm94eVJlc3BvbnNlUHJvbWlzZSA9IHBhcnNlUHJveHlSZXNwb25zZShzb2NrZXQpOwoKICAgIHNvY2tldC53cml0ZShgJHtwYXlsb2FkfVxyXG5gKTsKCiAgICBjb25zdCB7IGNvbm5lY3QsIGJ1ZmZlcmVkIH0gPSBhd2FpdCBwcm94eVJlc3BvbnNlUHJvbWlzZTsKICAgIHJlcS5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQKICAgIC8vIEB0cy1pZ25vcmUgTm90IEV2ZW50RW1pdHRlciBpbiBOb2RlIHR5cGVzCiAgICB0aGlzLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QsIHJlcSk7CgogICAgaWYgKGNvbm5lY3Quc3RhdHVzQ29kZSA9PT0gMjAwKSB7CiAgICAgIHJlcS5vbmNlKCdzb2NrZXQnLCByZXN1bWUpOwoKICAgICAgaWYgKG9wdHMuc2VjdXJlRW5kcG9pbnQpIHsKICAgICAgICAvLyBUaGUgcHJveHkgaXMgY29ubmVjdGluZyB0byBhIFRMUyBzZXJ2ZXIsIHNvIHVwZ3JhZGUKICAgICAgICAvLyB0aGlzIHNvY2tldCBjb25uZWN0aW9uIHRvIGEgVExTIGNvbm5lY3Rpb24uCiAgICAgICAgZGVidWcoJ1VwZ3JhZGluZyBzb2NrZXQgY29ubmVjdGlvbiB0byBUTFMnKTsKICAgICAgICBjb25zdCBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lIHx8IG9wdHMuaG9zdDsKICAgICAgICByZXR1cm4gdGxzLmNvbm5lY3QoewogICAgICAgICAgLi4ub21pdChvcHRzLCAnaG9zdCcsICdwYXRoJywgJ3BvcnQnKSwKICAgICAgICAgIHNvY2tldCwKICAgICAgICAgIHNlcnZlcm5hbWU6IG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSwKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgcmV0dXJuIHNvY2tldDsKICAgIH0KCiAgICAvLyBTb21lIG90aGVyIHN0YXR1cyBjb2RlIHRoYXQncyBub3QgMjAwLi4uIG5lZWQgdG8gcmUtcGxheSB0aGUgSFRUUAogICAgLy8gaGVhZGVyICJkYXRhIiBldmVudHMgb250byB0aGUgc29ja2V0IG9uY2UgdGhlIEhUVFAgbWFjaGluZXJ5IGlzCiAgICAvLyBhdHRhY2hlZCBzbyB0aGF0IHRoZSBub2RlIGNvcmUgYGh0dHBgIGNhbiBwYXJzZSBhbmQgaGFuZGxlIHRoZQogICAgLy8gZXJyb3Igc3RhdHVzIGNvZGUuCgogICAgLy8gQ2xvc2UgdGhlIG9yaWdpbmFsIHNvY2tldCwgYW5kIGEgbmV3ICJmYWtlIiBzb2NrZXQgaXMgcmV0dXJuZWQKICAgIC8vIGluc3RlYWQsIHNvIHRoYXQgdGhlIHByb3h5IGRvZXNuJ3QgZ2V0IHRoZSBIVFRQIHJlcXVlc3QKICAgIC8vIHdyaXR0ZW4gdG8gaXQgKHdoaWNoIG1heSBjb250YWluIGBBdXRob3JpemF0aW9uYCBoZWFkZXJzIG9yIG90aGVyCiAgICAvLyBzZW5zaXRpdmUgZGF0YSkuCiAgICAvLwogICAgLy8gU2VlOiBodHRwczovL2hhY2tlcm9uZS5jb20vcmVwb3J0cy81NDE1MDIKICAgIHNvY2tldC5kZXN0cm95KCk7CgogICAgY29uc3QgZmFrZVNvY2tldCA9IG5ldyBuZXQuU29ja2V0KHsgd3JpdGFibGU6IGZhbHNlIH0pOwogICAgZmFrZVNvY2tldC5yZWFkYWJsZSA9IHRydWU7CgogICAgLy8gTmVlZCB0byB3YWl0IGZvciB0aGUgInNvY2tldCIgZXZlbnQgdG8gcmUtcGxheSB0aGUgImRhdGEiIGV2ZW50cy4KICAgIHJlcS5vbmNlKCdzb2NrZXQnLCAocykgPT4gewogICAgICBkZWJ1ZygnUmVwbGF5aW5nIHByb3h5IGJ1ZmZlciBmb3IgZmFpbGVkIHJlcXVlc3QnKTsKICAgICAgLy8gUmVwbGF5IHRoZSAiYnVmZmVyZWQiIEJ1ZmZlciBvbnRvIHRoZSBmYWtlIGBzb2NrZXRgLCBzaW5jZSBhdAogICAgICAvLyB0aGlzIHBvaW50IHRoZSBIVFRQIG1vZHVsZSBtYWNoaW5lcnkgaGFzIGJlZW4gaG9va2VkIHVwIGZvcgogICAgICAvLyB0aGUgdXNlci4KICAgICAgcy5wdXNoKGJ1ZmZlcmVkKTsKICAgICAgcy5wdXNoKG51bGwpOwogICAgfSk7CgogICAgcmV0dXJuIGZha2VTb2NrZXQ7CiAgfQp9IEh0dHBzUHJveHlBZ2VudC5fX2luaXRTdGF0aWMoKTsKCmZ1bmN0aW9uIHJlc3VtZShzb2NrZXQpIHsKICBzb2NrZXQucmVzdW1lKCk7Cn0KCmZ1bmN0aW9uIG9taXQoCiAgb2JqLAogIC4uLmtleXMKKQoKIHsKICBjb25zdCByZXQgPSB7fQoKOwogIGxldCBrZXk7CiAgZm9yIChrZXkgaW4gb2JqKSB7CiAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkgewogICAgICByZXRba2V5XSA9IG9ialtrZXldOwogICAgfQogIH0KICByZXR1cm4gcmV0Owp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlKGxocywgcmhzRm4pIHsgaWYgKGxocyAhPSBudWxsKSB7IHJldHVybiBsaHM7IH0gZWxzZSB7IHJldHVybiByaHNGbigpOyB9IH0KLy8gRXN0aW1hdGVkIG1heGltdW0gc2l6ZSBmb3IgcmVhc29uYWJsZSBzdGFuZGFsb25lIGV2ZW50CmNvbnN0IEdaSVBfVEhSRVNIT0xEID0gMTAyNCAqIDMyOwoKLyoqCiAqIEdldHMgYSBzdHJlYW0gZnJvbSBhIFVpbnQ4QXJyYXkgb3Igc3RyaW5nCiAqIFJlYWRhYmxlLmZyb20gaXMgaWRlYWwgYnV0IHdhcyBhZGRlZCBpbiBub2RlLmpzIHYxMi4zLjAgYW5kIHYxMC4xNy4wCiAqLwpmdW5jdGlvbiBzdHJlYW1Gcm9tQm9keShib2R5KSB7CiAgcmV0dXJuIG5ldyBSZWFkYWJsZSh7CiAgICByZWFkKCkgewogICAgICB0aGlzLnB1c2goYm9keSk7CiAgICAgIHRoaXMucHVzaChudWxsKTsKICAgIH0sCiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgVHJhbnNwb3J0IHRoYXQgdXNlcyBuYXRpdmUgdGhlIG5hdGl2ZSAnaHR0cCcgYW5kICdodHRwcycgbW9kdWxlcyB0byBzZW5kIGV2ZW50cyB0byBTZW50cnkuCiAqLwpmdW5jdGlvbiBtYWtlTm9kZVRyYW5zcG9ydChvcHRpb25zKSB7CiAgbGV0IHVybFNlZ21lbnRzOwoKICB0cnkgewogICAgdXJsU2VnbWVudHMgPSBuZXcgVVJMKG9wdGlvbnMudXJsKTsKICB9IGNhdGNoIChlKSB7CiAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlCiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICAnW0BzZW50cnkvbm9kZV06IEludmFsaWQgZHNuIG9yIHR1bm5lbCBvcHRpb24sIHdpbGwgbm90IHNlbmQgYW55IGV2ZW50cy4gVGhlIHR1bm5lbCBvcHRpb24gbXVzdCBiZSBhIGZ1bGwgVVJMIHdoZW4gdXNlZC4nLAogICAgICApOwogICAgfSk7CiAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMsICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSkpOwogIH0KCiAgY29uc3QgaXNIdHRwcyA9IHVybFNlZ21lbnRzLnByb3RvY29sID09PSAnaHR0cHM6JzsKCiAgLy8gUHJveHkgcHJpb3JpdGl6YXRpb246IGh0dHAgPT4gYG9wdGlvbnMucHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgCiAgLy8gUHJveHkgcHJpb3JpdGl6YXRpb246IGh0dHBzID0+IGBvcHRpb25zLnByb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwc19wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eWAKICBjb25zdCBwcm94eSA9IGFwcGx5Tm9Qcm94eU9wdGlvbigKICAgIHVybFNlZ21lbnRzLAogICAgb3B0aW9ucy5wcm94eSB8fCAoaXNIdHRwcyA/IHByb2Nlc3MuZW52Lmh0dHBzX3Byb3h5IDogdW5kZWZpbmVkKSB8fCBwcm9jZXNzLmVudi5odHRwX3Byb3h5LAogICk7CgogIGNvbnN0IG5hdGl2ZUh0dHBNb2R1bGUgPSBpc0h0dHBzID8gaHR0cHMgOiBodHRwOwogIGNvbnN0IGtlZXBBbGl2ZSA9IG9wdGlvbnMua2VlcEFsaXZlID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdGlvbnMua2VlcEFsaXZlOwoKICAvLyBUT0RPKHY3KTogRXZhbHVhdGUgaWYgd2UgY2FuIHNldCBrZWVwQWxpdmUgdG8gdHJ1ZS4gVGhpcyB3b3VsZCBpbnZvbHZlIHRlc3RpbmcgZm9yIG1lbW9yeSBsZWFrcyBpbiBvbGRlciBub2RlCiAgLy8gdmVyc2lvbnMoPj0gOCkgYXMgdGhleSBoYWQgbWVtb3J5IGxlYWtzIHdoZW4gdXNpbmcgaXQ6ICMyNTU1CiAgY29uc3QgYWdlbnQgPSBwcm94eQogICAgPyAobmV3IEh0dHBzUHJveHlBZ2VudChwcm94eSkgKQogICAgOiBuZXcgbmF0aXZlSHR0cE1vZHVsZS5BZ2VudCh7IGtlZXBBbGl2ZSwgbWF4U29ja2V0czogMzAsIHRpbWVvdXQ6IDIwMDAgfSk7CgogIGNvbnN0IHJlcXVlc3RFeGVjdXRvciA9IGNyZWF0ZVJlcXVlc3RFeGVjdXRvcihvcHRpb25zLCBfbnVsbGlzaENvYWxlc2NlKG9wdGlvbnMuaHR0cE1vZHVsZSwgKCkgPT4gKCBuYXRpdmVIdHRwTW9kdWxlKSksIGFnZW50KTsKICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMsIHJlcXVlc3RFeGVjdXRvcik7Cn0KCi8qKgogKiBIb25vcnMgdGhlIGBub19wcm94eWAgZW52IHZhcmlhYmxlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdG8gYWxsb3cgZm9yIGhvc3RzIGV4Y2x1c2lvbi4KICoKICogQHBhcmFtIHRyYW5zcG9ydFVybCBUaGUgVVJMIHRoZSB0cmFuc3BvcnQgaW50ZW5kcyB0byBzZW5kIGV2ZW50cyB0by4KICogQHBhcmFtIHByb3h5IFRoZSBjbGllbnQgY29uZmlndXJlZCBwcm94eS4KICogQHJldHVybnMgQSBwcm94eSB0aGUgdHJhbnNwb3J0IHNob3VsZCB1c2UuCiAqLwpmdW5jdGlvbiBhcHBseU5vUHJveHlPcHRpb24odHJhbnNwb3J0VXJsU2VnbWVudHMsIHByb3h5KSB7CiAgY29uc3QgeyBub19wcm94eSB9ID0gcHJvY2Vzcy5lbnY7CgogIGNvbnN0IHVybElzRXhlbXB0RnJvbVByb3h5ID0KICAgIG5vX3Byb3h5ICYmCiAgICBub19wcm94eQogICAgICAuc3BsaXQoJywnKQogICAgICAuc29tZSgKICAgICAgICBleGVtcHRpb24gPT4gdHJhbnNwb3J0VXJsU2VnbWVudHMuaG9zdC5lbmRzV2l0aChleGVtcHRpb24pIHx8IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3RuYW1lLmVuZHNXaXRoKGV4ZW1wdGlvbiksCiAgICAgICk7CgogIGlmICh1cmxJc0V4ZW1wdEZyb21Qcm94eSkgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9IGVsc2UgewogICAgcmV0dXJuIHByb3h5OwogIH0KfQoKLyoqCiAqIENyZWF0ZXMgYSBSZXF1ZXN0RXhlY3V0b3IgdG8gYmUgdXNlZCB3aXRoIGBjcmVhdGVUcmFuc3BvcnRgLgogKi8KZnVuY3Rpb24gY3JlYXRlUmVxdWVzdEV4ZWN1dG9yKAogIG9wdGlvbnMsCiAgaHR0cE1vZHVsZSwKICBhZ2VudCwKKSB7CiAgY29uc3QgeyBob3N0bmFtZSwgcGF0aG5hbWUsIHBvcnQsIHByb3RvY29sLCBzZWFyY2ggfSA9IG5ldyBVUkwob3B0aW9ucy51cmwpOwogIHJldHVybiBmdW5jdGlvbiBtYWtlUmVxdWVzdChyZXF1ZXN0KSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBsZXQgYm9keSA9IHN0cmVhbUZyb21Cb2R5KHJlcXVlc3QuYm9keSk7CgogICAgICBjb25zdCBoZWFkZXJzID0geyAuLi5vcHRpb25zLmhlYWRlcnMgfTsKCiAgICAgIGlmIChyZXF1ZXN0LmJvZHkubGVuZ3RoID4gR1pJUF9USFJFU0hPTEQpIHsKICAgICAgICBoZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gPSAnZ3ppcCc7CiAgICAgICAgYm9keSA9IGJvZHkucGlwZShjcmVhdGVHemlwKCkpOwogICAgICB9CgogICAgICBjb25zdCByZXEgPSBodHRwTW9kdWxlLnJlcXVlc3QoCiAgICAgICAgewogICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICBhZ2VudCwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgICBob3N0bmFtZSwKICAgICAgICAgIHBhdGg6IGAke3BhdGhuYW1lfSR7c2VhcmNofWAsCiAgICAgICAgICBwb3J0LAogICAgICAgICAgcHJvdG9jb2wsCiAgICAgICAgICBjYTogb3B0aW9ucy5jYUNlcnRzLAogICAgICAgIH0sCiAgICAgICAgcmVzID0+IHsKICAgICAgICAgIHJlcy5vbignZGF0YScsICgpID0+IHsKICAgICAgICAgICAgLy8gRHJhaW4gc29ja2V0CiAgICAgICAgICB9KTsKCiAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHsKICAgICAgICAgICAgLy8gRHJhaW4gc29ja2V0CiAgICAgICAgICB9KTsKCiAgICAgICAgICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTsKCiAgICAgICAgICAvLyAiS2V5LXZhbHVlIHBhaXJzIG9mIGhlYWRlciBuYW1lcyBhbmQgdmFsdWVzLiBIZWFkZXIgbmFtZXMgYXJlIGxvd2VyLWNhc2VkLiIKICAgICAgICAgIC8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzCiAgICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gX251bGxpc2hDb2FsZXNjZShyZXMuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSwgKCkgPT4gKCBudWxsKSk7CiAgICAgICAgICBjb25zdCByYXRlTGltaXRzSGVhZGVyID0gX251bGxpc2hDb2FsZXNjZShyZXMuaGVhZGVyc1sneC1zZW50cnktcmF0ZS1saW1pdHMnXSwgKCkgPT4gKCBudWxsKSk7CgogICAgICAgICAgcmVzb2x2ZSh7CiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLAogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgJ3JldHJ5LWFmdGVyJzogcmV0cnlBZnRlckhlYWRlciwKICAgICAgICAgICAgICAneC1zZW50cnktcmF0ZS1saW1pdHMnOiBBcnJheS5pc0FycmF5KHJhdGVMaW1pdHNIZWFkZXIpID8gcmF0ZUxpbWl0c0hlYWRlclswXSA6IHJhdGVMaW1pdHNIZWFkZXIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICApOwoKICAgICAgcmVxLm9uKCdlcnJvcicsIHJlamVjdCk7CiAgICAgIGJvZHkucGlwZShyZXEpOwogICAgfSk7CiAgfTsKfQoKZnVuY3Rpb24gX29wdGlvbmFsQ2hhaW4ob3BzKSB7IGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyBsZXQgdmFsdWUgPSBvcHNbMF07IGxldCBpID0gMTsgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7IGNvbnN0IG9wID0gb3BzW2ldOyBjb25zdCBmbiA9IG9wc1tpICsgMV07IGkgKz0gMjsgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7IGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTsgdmFsdWUgPSBmbih2YWx1ZSk7IH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHsgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IH0gfSByZXR1cm4gdmFsdWU7IH0KY29uc3Qgb3B0aW9ucyA9IHdvcmtlckRhdGE7CmxldCBzZXNzaW9uOwpsZXQgaGFzU2VudEFuckV2ZW50ID0gZmFsc2U7CgpmdW5jdGlvbiBsb2cobXNnKSB7CiAgaWYgKG9wdGlvbnMuZGVidWcpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlCiAgICBjb25zb2xlLmxvZyhgW0FOUiBXb3JrZXJdICR7bXNnfWApOwogIH0KfQoKY29uc3QgdXJsID0gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aChvcHRpb25zLmRzbik7CmNvbnN0IHRyYW5zcG9ydCA9IG1ha2VOb2RlVHJhbnNwb3J0KHsKICB1cmwsCiAgcmVjb3JkRHJvcHBlZEV2ZW50OiAoKSA9PiB7CiAgICAvLwogIH0sCn0pOwoKYXN5bmMgZnVuY3Rpb24gc2VuZEFibm9ybWFsU2Vzc2lvbigpIHsKICAvLyBvZiB3ZSBoYXZlIGFuIGV4aXN0aW5nIHNlc3Npb24gcGFzc2VkIGZyb20gdGhlIG1haW4gdGhyZWFkLCBzZW5kIGl0IGFzIGFibm9ybWFsCiAgaWYgKHNlc3Npb24pIHsKICAgIGxvZygnU2VuZGluZyBhYm5vcm1hbCBzZXNzaW9uJyk7CiAgICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIHsgc3RhdHVzOiAnYWJub3JtYWwnLCBhYm5vcm1hbF9tZWNoYW5pc206ICdhbnJfZm9yZWdyb3VuZCcgfSk7CgogICAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVTZXNzaW9uRW52ZWxvcGUoc2Vzc2lvbiwgb3B0aW9ucy5kc24sIG9wdGlvbnMuc2RrTWV0YWRhdGEpOwogICAgLy8gTG9nIHRoZSBlbnZlbG9wZSBzbyB0byBhaWQgaW4gdGVzdGluZwogICAgbG9nKEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKSk7CgogICAgYXdhaXQgdHJhbnNwb3J0LnNlbmQoZW52ZWxvcGUpOwoKICAgIHRyeSB7CiAgICAgIC8vIE5vdGlmeSB0aGUgbWFpbiBwcm9jZXNzIHRoYXQgdGhlIHNlc3Npb24gaGFzIGVuZGVkIHNvIHRoZSBzZXNzaW9uIGNhbiBiZSBjbGVhcmVkIGZyb20gdGhlIHNjb3BlCiAgICAgIF9vcHRpb25hbENoYWluKFtwYXJlbnRQb3J0LCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5wb3N0TWVzc2FnZSwgJ2NhbGwnLCBfMyA9PiBfMygnc2Vzc2lvbi1lbmRlZCcpXSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIC8vIGlnbm9yZQogICAgfQogIH0KfQoKbG9nKCdTdGFydGVkJyk7CgpmdW5jdGlvbiBwcmVwYXJlU3RhY2tGcmFtZXMoc3RhY2tGcmFtZXMpIHsKICBpZiAoIXN0YWNrRnJhbWVzKSB7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KCiAgLy8gU3RyaXAgU2VudHJ5IGZyYW1lcyBhbmQgcmV2ZXJzZSB0aGUgc3RhY2sgZnJhbWVzIHNvIHRoZXkgYXJlIGluIHRoZSBjb3JyZWN0IG9yZGVyCiAgY29uc3Qgc3RyaXBwZWRGcmFtZXMgPSBzdHJpcFNlbnRyeUZyYW1lc0FuZFJldmVyc2Uoc3RhY2tGcmFtZXMpOwoKICAvLyBJZiB3ZSBoYXZlIGFuIGFwcCByb290IHBhdGgsIHJld3JpdGUgdGhlIGZpbGVuYW1lcyB0byBiZSByZWxhdGl2ZSB0byB0aGUgYXBwIHJvb3QKICBpZiAob3B0aW9ucy5hcHBSb290UGF0aCkgewogICAgZm9yIChjb25zdCBmcmFtZSBvZiBzdHJpcHBlZEZyYW1lcykgewogICAgICBpZiAoIWZyYW1lLmZpbGVuYW1lKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGZyYW1lLmZpbGVuYW1lID0gbm9ybWFsaXplVXJsVG9CYXNlKGZyYW1lLmZpbGVuYW1lLCBvcHRpb25zLmFwcFJvb3RQYXRoKTsKICAgIH0KICB9CgogIHJldHVybiBzdHJpcHBlZEZyYW1lczsKfQoKZnVuY3Rpb24gYXBwbHlTY29wZVRvRXZlbnQoZXZlbnQsIHNjb3BlKSB7CiAgYXBwbHlTY29wZURhdGFUb0V2ZW50KGV2ZW50LCBzY29wZSk7CgogIGlmICghX29wdGlvbmFsQ2hhaW4oW2V2ZW50LCAnYWNjZXNzJywgXzQgPT4gXzQuY29udGV4dHMsICdvcHRpb25hbEFjY2VzcycsIF81ID0+IF81LnRyYWNlXSkpIHsKICAgIGNvbnN0IHsgdHJhY2VJZCwgc3BhbklkLCBwYXJlbnRTcGFuSWQgfSA9IHNjb3BlLnByb3BhZ2F0aW9uQ29udGV4dDsKICAgIGV2ZW50LmNvbnRleHRzID0gewogICAgICB0cmFjZTogewogICAgICAgIHRyYWNlX2lkOiB0cmFjZUlkLAogICAgICAgIHNwYW5faWQ6IHNwYW5JZCwKICAgICAgICBwYXJlbnRfc3Bhbl9pZDogcGFyZW50U3BhbklkLAogICAgICB9LAogICAgICAuLi5ldmVudC5jb250ZXh0cywKICAgIH07CiAgfQp9Cgphc3luYyBmdW5jdGlvbiBzZW5kQW5yRXZlbnQoZnJhbWVzLCBzY29wZSkgewogIGlmIChoYXNTZW50QW5yRXZlbnQpIHsKICAgIHJldHVybjsKICB9CgogIGhhc1NlbnRBbnJFdmVudCA9IHRydWU7CgogIGF3YWl0IHNlbmRBYm5vcm1hbFNlc3Npb24oKTsKCiAgbG9nKCdTZW5kaW5nIGV2ZW50Jyk7CgogIGNvbnN0IGV2ZW50ID0gewogICAgZXZlbnRfaWQ6IHV1aWQ0KCksCiAgICBjb250ZXh0czogb3B0aW9ucy5jb250ZXh0cywKICAgIHJlbGVhc2U6IG9wdGlvbnMucmVsZWFzZSwKICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LAogICAgZGlzdDogb3B0aW9ucy5kaXN0LAogICAgcGxhdGZvcm06ICdub2RlJywKICAgIGxldmVsOiAnZXJyb3InLAogICAgZXhjZXB0aW9uOiB7CiAgICAgIHZhbHVlczogWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICdBcHBsaWNhdGlvbk5vdFJlc3BvbmRpbmcnLAogICAgICAgICAgdmFsdWU6IGBBcHBsaWNhdGlvbiBOb3QgUmVzcG9uZGluZyBmb3IgYXQgbGVhc3QgJHtvcHRpb25zLmFuclRocmVzaG9sZH0gbXNgLAogICAgICAgICAgc3RhY2t0cmFjZTogeyBmcmFtZXM6IHByZXBhcmVTdGFja0ZyYW1lcyhmcmFtZXMpIH0sCiAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIFVJIGRvZXNuJ3Qgc2F5ICdDcmFzaGVkIGluJyBmb3IgdGhlIHN0YWNrIHRyYWNlCiAgICAgICAgICBtZWNoYW5pc206IHsgdHlwZTogJ0FOUicgfSwKICAgICAgICB9LAogICAgICBdLAogICAgfSwKICAgIHRhZ3M6IG9wdGlvbnMuc3RhdGljVGFncywKICB9OwoKICBpZiAoc2NvcGUpIHsKICAgIGFwcGx5U2NvcGVUb0V2ZW50KGV2ZW50LCBzY29wZSk7CiAgfQoKICBjb25zdCBlbnZlbG9wZSA9IGNyZWF0ZUV2ZW50RW52ZWxvcGUoZXZlbnQsIG9wdGlvbnMuZHNuLCBvcHRpb25zLnNka01ldGFkYXRhKTsKICAvLyBMb2cgdGhlIGVudmVsb3BlIHRvIGFpZCBpbiB0ZXN0aW5nCiAgbG9nKEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKSk7CgogIGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTsKICBhd2FpdCB0cmFuc3BvcnQuZmx1c2goMjAwMCk7CgogIC8vIERlbGF5IGZvciA1IHNlY29uZHMgc28gdGhhdCBzdGRpbyBjYW4gZmx1c2ggaW4gdGhlIG1haW4gZXZlbnQgbG9vcCBldmVyIHJlc3RhcnRzLgogIC8vIFRoaXMgaXMgbWFpbmx5IGZvciB0aGUgYmVuZWZpdCBvZiBsb2dnaW5nL2RlYnVnZ2luZyBpc3N1ZXMuCiAgc2V0VGltZW91dCgoKSA9PiB7CiAgICBwcm9jZXNzLmV4aXQoMCk7CiAgfSwgNTAwMCk7Cn0KCmxldCBkZWJ1Z2dlclBhdXNlOwoKaWYgKG9wdGlvbnMuY2FwdHVyZVN0YWNrVHJhY2UpIHsKICBsb2coJ0Nvbm5lY3RpbmcgdG8gZGVidWdnZXInKTsKCiAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKCkgOwogIHNlc3Npb24uY29ubmVjdFRvTWFpblRocmVhZCgpOwoKICBsb2coJ0Nvbm5lY3RlZCB0byBkZWJ1Z2dlcicpOwoKICAvLyBDb2xsZWN0IHNjcmlwdElkIC0+IHVybCBtYXAgc28gd2UgY2FuIGxvb2sgdXAgdGhlIGZpbGVuYW1lcyBsYXRlcgogIGNvbnN0IHNjcmlwdHMgPSBuZXcgTWFwKCk7CgogIHNlc3Npb24ub24oJ0RlYnVnZ2VyLnNjcmlwdFBhcnNlZCcsIGV2ZW50ID0+IHsKICAgIHNjcmlwdHMuc2V0KGV2ZW50LnBhcmFtcy5zY3JpcHRJZCwgZXZlbnQucGFyYW1zLnVybCk7CiAgfSk7CgogIHNlc3Npb24ub24oJ0RlYnVnZ2VyLnBhdXNlZCcsIGV2ZW50ID0+IHsKICAgIGlmIChldmVudC5wYXJhbXMucmVhc29uICE9PSAnb3RoZXInKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cnkgewogICAgICBsb2coJ0RlYnVnZ2VyIHBhdXNlZCcpOwoKICAgICAgLy8gY29weSB0aGUgZnJhbWVzCiAgICAgIGNvbnN0IGNhbGxGcmFtZXMgPSBbLi4uZXZlbnQucGFyYW1zLmNhbGxGcmFtZXNdOwoKICAgICAgY29uc3QgZ2V0TW9kdWxlTmFtZSA9IG9wdGlvbnMuYXBwUm9vdFBhdGggPyBjcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUob3B0aW9ucy5hcHBSb290UGF0aCkgOiAoKSA9PiB1bmRlZmluZWQ7CiAgICAgIGNvbnN0IHN0YWNrRnJhbWVzID0gY2FsbEZyYW1lcy5tYXAoZnJhbWUgPT4KICAgICAgICBjYWxsRnJhbWVUb1N0YWNrRnJhbWUoZnJhbWUsIHNjcmlwdHMuZ2V0KGZyYW1lLmxvY2F0aW9uLnNjcmlwdElkKSwgZ2V0TW9kdWxlTmFtZSksCiAgICAgICk7CgogICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBpbiB0aGUgY3VycmVudGx5IHBhdXNlZCBjb250ZXh0CiAgICAgIHNlc3Npb24ucG9zdCgKICAgICAgICAnUnVudGltZS5ldmFsdWF0ZScsCiAgICAgICAgewogICAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2UgY29udGV4dCBmcm9tIHRoZSBjdXJyZW50IHNjb3BlCiAgICAgICAgICBleHByZXNzaW9uOiAnZ2xvYmFsLl9fU0VOVFJZX0dFVF9TQ09QRVNfXygpOycsCiAgICAgICAgICAvLyBEb24ndCByZS10cmlnZ2VyIHRoZSBkZWJ1Z2dlciBpZiB0aGlzIGNhdXNlcyBhbiBlcnJvcgogICAgICAgICAgc2lsZW50OiB0cnVlLAogICAgICAgICAgLy8gU2VyaWFsaXplIHRoZSByZXN1bHQgdG8ganNvbiBvdGhlcndpc2Ugb25seSBwcmltaXRpdmVzIGFyZSBzdXBwb3J0ZWQKICAgICAgICAgIHJldHVybkJ5VmFsdWU6IHRydWUsCiAgICAgICAgfSwKICAgICAgICAoZXJyLCBwYXJhbSkgPT4gewogICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICBsb2coYEVycm9yIGV4ZWN1dGluZyBzY3JpcHQ6ICcke2Vyci5tZXNzYWdlfSdgKTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBzY29wZXMgPSBwYXJhbSAmJiBwYXJhbS5yZXN1bHQgPyAocGFyYW0ucmVzdWx0LnZhbHVlICkgOiB1bmRlZmluZWQ7CgogICAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5yZXN1bWUnKTsKICAgICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwoKICAgICAgICAgIHNlbmRBbnJFdmVudChzdGFja0ZyYW1lcywgc2NvcGVzKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgICAgICAgbG9nKCdTZW5kaW5nIEFOUiBldmVudCBmYWlsZWQuJyk7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICApOwogICAgfSBjYXRjaCAoZSkgewogICAgICBzZXNzaW9uLnBvc3QoJ0RlYnVnZ2VyLnJlc3VtZScpOwogICAgICBzZXNzaW9uLnBvc3QoJ0RlYnVnZ2VyLmRpc2FibGUnKTsKICAgICAgdGhyb3cgZTsKICAgIH0KICB9KTsKCiAgZGVidWdnZXJQYXVzZSA9ICgpID0+IHsKICAgIHRyeSB7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZW5hYmxlJywgKCkgPT4gewogICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIucGF1c2UnKTsKICAgICAgfSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIC8vCiAgICB9CiAgfTsKfQoKZnVuY3Rpb24gY3JlYXRlSHJUaW1lcigpIHsKICAvLyBUT0RPICh2OCk6IFdlIGNhbiB1c2UgcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgYWZ0ZXIgd2UgZHJvcCBub2RlIHY4CiAgbGV0IGxhc3RQb2xsID0gcHJvY2Vzcy5ocnRpbWUoKTsKCiAgcmV0dXJuIHsKICAgIGdldFRpbWVNczogKCkgPT4gewogICAgICBjb25zdCBbc2Vjb25kcywgbmFub1NlY29uZHNdID0gcHJvY2Vzcy5ocnRpbWUobGFzdFBvbGwpOwogICAgICByZXR1cm4gTWF0aC5mbG9vcihzZWNvbmRzICogMWUzICsgbmFub1NlY29uZHMgLyAxZTYpOwogICAgfSwKICAgIHJlc2V0OiAoKSA9PiB7CiAgICAgIGxhc3RQb2xsID0gcHJvY2Vzcy5ocnRpbWUoKTsKICAgIH0sCiAgfTsKfQoKZnVuY3Rpb24gd2F0Y2hkb2dUaW1lb3V0KCkgewogIGxvZygnV2F0Y2hkb2cgdGltZW91dCcpOwoKICBpZiAoZGVidWdnZXJQYXVzZSkgewogICAgbG9nKCdQYXVzaW5nIGRlYnVnZ2VyIHRvIGNhcHR1cmUgc3RhY2sgdHJhY2UnKTsKICAgIGRlYnVnZ2VyUGF1c2UoKTsKICB9IGVsc2UgewogICAgbG9nKCdDYXB0dXJpbmcgZXZlbnQgd2l0aG91dCBhIHN0YWNrIHRyYWNlJyk7CiAgICBzZW5kQW5yRXZlbnQoKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgbG9nKCdTZW5kaW5nIEFOUiBldmVudCBmYWlsZWQgb24gd2F0Y2hkb2cgdGltZW91dC4nKTsKICAgIH0pOwogIH0KfQoKY29uc3QgeyBwb2xsIH0gPSB3YXRjaGRvZ1RpbWVyKGNyZWF0ZUhyVGltZXIsIG9wdGlvbnMucG9sbEludGVydmFsLCBvcHRpb25zLmFuclRocmVzaG9sZCwgd2F0Y2hkb2dUaW1lb3V0KTsKCl9vcHRpb25hbENoYWluKFtwYXJlbnRQb3J0LCAnb3B0aW9uYWxBY2Nlc3MnLCBfNiA9PiBfNi5vbiwgJ2NhbGwnLCBfNyA9PiBfNygnbWVzc2FnZScsIChtc2cpID0+IHsKICBpZiAobXNnLnNlc3Npb24pIHsKICAgIHNlc3Npb24gPSBtYWtlU2Vzc2lvbihtc2cuc2Vzc2lvbik7CiAgfQoKICBwb2xsKCk7Cn0pXSk7" | |
| }); | |
| var rm = Y((CL1, WL1) => { | |
| var { | |
| _optionalChain: u14, | |
| _optionalChainDelete: dL1 | |
| } = V0(); | |
| Object.defineProperty(CL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var T14 = B1("url"), | |
| $A = V4(), | |
| nm = V0(), | |
| $01 = UF(), | |
| O14 = IL1(), | |
| m14 = 50, | |
| l14 = 5000; | |
| function u01(I, ...d) { | |
| nm.logger.log(`[ANR] ${I}`, ...d) | |
| } | |
| function b14() { | |
| return nm.GLOBAL_OBJ | |
| } | |
| function h14() { | |
| let I = $A.getGlobalScope().getScopeData(); | |
| return $A.mergeScopeData(I, $A.getIsolationScope().getScopeData()), $A.mergeScopeData(I, $A.getCurrentScope().getScopeData()), I.attachments = [], I.eventProcessors = [], I | |
| } | |
| function j14() { | |
| return nm.dynamicRequire(WL1, "worker_threads") | |
| } | |
| async function k14(I) { | |
| let d = { | |
| message: "ANR" | |
| }, | |
| G = {}; | |
| for (let Z of I.getEventProcessors()) { | |
| if (d === null) break; | |
| d = await Z(d, G) | |
| } | |
| return u14([d, "optionalAccess", (Z) => Z.contexts]) || {} | |
| } | |
| var GL1 = "Anr", | |
| x14 = (I = {}) => { | |
| if ($01.NODE_VERSION.major < 16 || $01.NODE_VERSION.major === 16 && $01.NODE_VERSION.minor < 17) throw new Error("ANR detection requires Node 16.17.0 or later"); | |
| let d, G, Z = b14(); | |
| return Z.__SENTRY_GET_SCOPES__ = h14, { | |
| name: GL1, | |
| setupOnce() {}, | |
| startWorker: () => { | |
| if (d) return; | |
| if (G) d = p14(G, I) | |
| }, | |
| stopWorker: () => { | |
| if (d) d.then((C) => { | |
| C(), d = void 0 | |
| }) | |
| }, | |
| setup(C) { | |
| G = C, setImmediate(() => this.startWorker()) | |
| } | |
| } | |
| }, | |
| ZL1 = $A.defineIntegration(x14), | |
| c14 = $A.convertIntegrationFnToClass(GL1, ZL1); | |
| async function p14(I, d) { | |
| let G = I.getDsn(); | |
| if (!G) return () => {}; | |
| let Z = await k14(I); | |
| dL1([Z, "access", (X) => X.app, "optionalAccess", (X) => delete X.app_memory]), dL1([Z, "access", (X) => X.device, "optionalAccess", (X) => delete X.free_memory]); | |
| let C = I.getOptions(), | |
| W = I.getSdkMetadata() || {}; | |
| if (W.sdk) W.sdk.integrations = C.integrations.map((X) => X.name); | |
| let w = { | |
| debug: nm.logger.isEnabled(), | |
| dsn: G, | |
| environment: C.environment || "production", | |
| release: C.release, | |
| dist: C.dist, | |
| sdkMetadata: W, | |
| appRootPath: d.appRootPath, | |
| pollInterval: d.pollInterval || m14, | |
| anrThreshold: d.anrThreshold || l14, | |
| captureStackTrace: !!d.captureStackTrace, | |
| staticTags: d.staticTags || {}, | |
| contexts: Z | |
| }; | |
| if (w.captureStackTrace) { | |
| let X = B1("inspector"); | |
| if (!X.url()) X.open(0) | |
| } | |
| let { | |
| Worker: B | |
| } = j14(), A = new B(new T14.URL(`data:application/javascript;base64,${O14.base64WorkerScript}`), { | |
| workerData: w | |
| }); | |
| process.on("exit", () => { | |
| A.terminate() | |
| }); | |
| let V = setInterval(() => { | |
| try { | |
| let X = $A.getCurrentScope().getSession(), | |
| _ = X ? { | |
| ...X, | |
| toJSON: void 0 | |
| } : void 0; | |
| A.postMessage({ | |
| session: _ | |
| }) | |
| } catch (X) {} | |
| }, w.pollInterval); | |
| return V.unref(), A.on("message", (X) => { | |
| if (X === "session-ended") u01("ANR event sent from ANR worker. Clearing session in this thread."), $A.getCurrentScope().setSession(void 0) | |
| }), A.once("error", (X) => { | |
| clearInterval(V), u01("ANR worker error", X) | |
| }), A.once("exit", (X) => { | |
| clearInterval(V), u01("ANR worker exit", X) | |
| }), A.unref(), () => { | |
| A.terminate(), clearInterval(V) | |
| } | |
| } | |
| CL1.Anr = c14; | |
| CL1.anrIntegration = ZL1 | |
| }); | |
| var BL1 = Y((wL1) => { | |
| Object.defineProperty(wL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var r14 = V4(), | |
| a14 = rm(); | |
| function s14(I) { | |
| let d = r14.getClient(); | |
| return new a14.Anr(I).setup(d), Promise.resolve() | |
| } | |
| wL1.enableAnrDetection = s14 | |
| }); | |
| var T01 = Y((XL1) => { | |
| var { | |
| _optionalChain: AL1 | |
| } = V0(); | |
| Object.defineProperty(XL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var PN = V4(), | |
| VL1 = V0(); | |
| function e14(I = {}) { | |
| return function({ | |
| path: d, | |
| type: G, | |
| next: Z, | |
| rawInput: C | |
| }) { | |
| let W = AL1([PN.getClient, "call", (V) => V(), "optionalAccess", (V) => V.getOptions, "call", (V) => V()]), | |
| w = PN.getCurrentScope().getTransaction(); | |
| if (w) { | |
| w.updateName(`trpc/${d}`), w.setAttribute(PN.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, "route"), w.op = "rpc.server"; | |
| let V = { | |
| procedure_type: G | |
| }; | |
| if (I.attachRpcInput !== void 0 ? I.attachRpcInput : AL1([W, "optionalAccess", (X) => X.sendDefaultPii])) V.input = VL1.normalize(C); | |
| w.setContext("trpc", V) | |
| } | |
| function B(V) { | |
| if (!V.ok) PN.captureException(V.error, { | |
| mechanism: { | |
| handled: !1, | |
| data: { | |
| function: "trpcMiddleware" | |
| } | |
| } | |
| }) | |
| } | |
| let A; | |
| try { | |
| A = Z() | |
| } catch (V) { | |
| throw PN.captureException(V, { | |
| mechanism: { | |
| handled: !1, | |
| data: { | |
| function: "trpcMiddleware" | |
| } | |
| } | |
| }), V | |
| } | |
| if (VL1.isThenable(A)) Promise.resolve(A).then((V) => { | |
| B(V) | |
| }, (V) => { | |
| PN.captureException(V, { | |
| mechanism: { | |
| handled: !1, | |
| data: { | |
| function: "trpcMiddleware" | |
| } | |
| } | |
| }) | |
| }); | |
| else B(A); | |
| return A | |
| } | |
| } | |
| XL1.trpcMiddleware = e14 | |
| }); | |
| var DL1 = Y((_L1) => { | |
| Object.defineProperty(_L1, "__esModule", { | |
| value: !0 | |
| }); | |
| var YL1 = V0(); | |
| function I04(I, d) { | |
| return YL1.extractRequestData(I, { | |
| include: d | |
| }) | |
| } | |
| function d04(I, d, G = {}) { | |
| return YL1.addRequestDataToEvent(I, d, { | |
| include: G | |
| }) | |
| } | |
| _L1.extractRequestData = I04; | |
| _L1.parseRequest = d04 | |
| }); | |
| var gL1 = Y((FL1) => { | |
| var { | |
| _optionalChain: am | |
| } = V0(); | |
| Object.defineProperty(FL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var w8 = V4(), | |
| $N = V0(), | |
| C04 = AE(), | |
| sm = y01(), | |
| W04 = T01(), | |
| HL1 = DL1(); | |
| function w04() { | |
| return function I(d, G, Z) { | |
| let C = am([w8.getClient, "call", (X) => X(), "optionalAccess", (X) => X.getOptions, "call", (X) => X()]); | |
| if (!C || C.instrumenter !== "sentry" || am([d, "access", (X) => X.method, "optionalAccess", (X) => X.toUpperCase, "call", (X) => X()]) === "OPTIONS" || am([d, "access", (X) => X.method, "optionalAccess", (X) => X.toUpperCase, "call", (X) => X()]) === "HEAD") return Z(); | |
| let W = d.headers && $N.isString(d.headers["sentry-trace"]) ? d.headers["sentry-trace"] : void 0, | |
| w = am([d, "access", (X) => X.headers, "optionalAccess", (X) => X.baggage]); | |
| if (!w8.hasTracingEnabled(C)) return Z(); | |
| let [B, A] = $N.extractPathForTransaction(d, { | |
| path: !0, | |
| method: !0 | |
| }), V = w8.continueTrace({ | |
| sentryTrace: W, | |
| baggage: w | |
| }, (X) => w8.startTransaction({ | |
| name: B, | |
| op: "http.server", | |
| origin: "auto.http.node.tracingHandler", | |
| ...X, | |
| data: { | |
| [w8.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: A | |
| }, | |
| metadata: { | |
| ...X.metadata, | |
| request: d | |
| } | |
| }, { | |
| request: $N.extractRequestData(d) | |
| })); | |
| w8.getCurrentScope().setSpan(V), G.__sentry_transaction = V, G.once("finish", () => { | |
| setImmediate(() => { | |
| $N.addRequestDataToTransaction(V, d), w8.setHttpStatus(V, G.statusCode), V.end() | |
| }) | |
| }), Z() | |
| } | |
| } | |
| function B04(I = {}) { | |
| let d; | |
| if ("include" in I) d = { | |
| include: I.include | |
| }; | |
| else { | |
| let { | |
| ip: G, | |
| request: Z, | |
| transaction: C, | |
| user: W | |
| } = I; | |
| if (G || Z || C || W) d = { | |
| include: $N.dropUndefinedKeys({ | |
| ip: G, | |
| request: Z, | |
| transaction: C, | |
| user: W | |
| }) | |
| } | |
| } | |
| return d | |
| } | |
| function A04(I) { | |
| let d = B04(I), | |
| G = w8.getClient(); | |
| if (G && sm.isAutoSessionTrackingEnabled(G)) { | |
| G.initSessionFlusher(); | |
| let Z = w8.getCurrentScope(); | |
| if (Z.getSession()) Z.setSession() | |
| } | |
| return function Z(C, W, w) { | |
| if (I && I.flushTimeout && I.flushTimeout > 0) { | |
| let B = W.end; | |
| W.end = function(A, V, X) { | |
| w8.flush(I.flushTimeout).then(() => { | |
| B.call(this, A, V, X) | |
| }).then(null, (_) => { | |
| C04.DEBUG_BUILD && $N.logger.error(_), B.call(this, A, V, X) | |
| }) | |
| } | |
| } | |
| w8.runWithAsyncContext(() => { | |
| let B = w8.getCurrentScope(); | |
| B.setSDKProcessingMetadata({ | |
| request: C, | |
| requestDataOptionsFromExpressHandler: d | |
| }); | |
| let A = w8.getClient(); | |
| if (sm.isAutoSessionTrackingEnabled(A)) B.setRequestSession({ | |
| status: "ok" | |
| }); | |
| W.once("finish", () => { | |
| let V = w8.getClient(); | |
| if (sm.isAutoSessionTrackingEnabled(V)) setImmediate(() => { | |
| if (V && V._captureRequestSession) V._captureRequestSession() | |
| }) | |
| }), w() | |
| }) | |
| } | |
| } | |
| function V04(I) { | |
| let d = I.status || I.statusCode || I.status_code || I.output && I.output.statusCode; | |
| return d ? parseInt(d, 10) : 500 | |
| } | |
| function X04(I) { | |
| return V04(I) >= 500 | |
| } | |
| function Y04(I) { | |
| return function d(G, Z, C, W) { | |
| if ((I && I.shouldHandleError || X04)(G)) { | |
| w8.withScope((B) => { | |
| B.setSDKProcessingMetadata({ | |
| request: Z | |
| }); | |
| let A = C.__sentry_transaction; | |
| if (A && !w8.getActiveSpan()) B.setSpan(A); | |
| let V = w8.getClient(); | |
| if (V && sm.isAutoSessionTrackingEnabled(V)) { | |
| if (V._sessionFlusher !== void 0) { | |
| let F = B.getRequestSession(); | |
| if (F && F.status !== void 0) F.status = "crashed" | |
| } | |
| } | |
| let X = w8.captureException(G, { | |
| mechanism: { | |
| type: "middleware", | |
| handled: !1 | |
| } | |
| }); | |
| C.sentry = X, W(G) | |
| }); | |
| return | |
| } | |
| W(G) | |
| } | |
| } | |
| var _04 = W04.trpcMiddleware; | |
| FL1.extractRequestData = HL1.extractRequestData; | |
| FL1.parseRequest = HL1.parseRequest; | |
| FL1.errorHandler = Y04; | |
| FL1.requestHandler = A04; | |
| FL1.tracingHandler = w04; | |
| FL1.trpcMiddleware = _04 | |
| }); | |
| var O01 = Y((qL1) => { | |
| Object.defineProperty(qL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var rI = V4(), | |
| KL1 = V0(); | |
| function JL1(I) { | |
| return I && I.statusCode !== void 0 | |
| } | |
| function N04(I) { | |
| return I && I.error !== void 0 | |
| } | |
| function z04(I) { | |
| rI.captureException(I, { | |
| mechanism: { | |
| type: "hapi", | |
| handled: !1, | |
| data: { | |
| function: "hapiErrorPlugin" | |
| } | |
| } | |
| }) | |
| } | |
| var NL1 = { | |
| name: "SentryHapiErrorPlugin", | |
| version: rI.SDK_VERSION, | |
| register: async function(I) { | |
| I.events.on("request", (G, Z) => { | |
| let C = rI.getActiveTransaction(); | |
| if (N04(Z)) z04(Z.error); | |
| if (C) C.setStatus("internal_error"), C.end() | |
| }) | |
| } | |
| }, | |
| zL1 = { | |
| name: "SentryHapiTracingPlugin", | |
| version: rI.SDK_VERSION, | |
| register: async function(I) { | |
| let d = I; | |
| d.ext("onPreHandler", (G, Z) => { | |
| let C = rI.continueTrace({ | |
| sentryTrace: G.headers["sentry-trace"] || void 0, | |
| baggage: G.headers.baggage || void 0 | |
| }, (W) => { | |
| return rI.startTransaction({ | |
| ...W, | |
| op: "hapi.request", | |
| name: G.route.path, | |
| description: `${G.route.method} ${G.path}` | |
| }) | |
| }); | |
| return rI.getCurrentScope().setSpan(C), Z.continue | |
| }), d.ext("onPreResponse", (G, Z) => { | |
| let C = rI.getActiveTransaction(); | |
| if (G.response && JL1(G.response) && C) { | |
| let W = G.response; | |
| W.header("sentry-trace", rI.spanToTraceHeader(C)); | |
| let w = KL1.dynamicSamplingContextToSentryBaggageHeader(rI.getDynamicSamplingContextFromSpan(C)); | |
| if (w) W.header("baggage", w) | |
| } | |
| return Z.continue | |
| }), d.ext("onPostHandler", (G, Z) => { | |
| let C = rI.getActiveTransaction(); | |
| if (C) { | |
| if (G.response && JL1(G.response)) rI.setHttpStatus(C, G.response.statusCode); | |
| C.end() | |
| } | |
| return Z.continue | |
| }) | |
| } | |
| }, | |
| QL1 = "Hapi", | |
| Q04 = (I = {}) => { | |
| let d = I.server; | |
| return { | |
| name: QL1, | |
| setupOnce() { | |
| if (!d) return; | |
| KL1.fill(d, "start", (G) => { | |
| return async function() { | |
| return await this.register(zL1), await this.register(NL1), G.apply(this) | |
| } | |
| }) | |
| } | |
| } | |
| }, | |
| fL1 = rI.defineIntegration(Q04), | |
| f04 = rI.convertIntegrationFnToClass(QL1, fL1); | |
| qL1.Hapi = f04; | |
| qL1.hapiErrorPlugin = NL1; | |
| qL1.hapiIntegration = fL1; | |
| qL1.hapiTracingPlugin = zL1 | |
| }); | |
| var UL1 = Y((RL1) => { | |
| Object.defineProperty(RL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var E04 = Sm(), | |
| M04 = $m(), | |
| S04 = hm(), | |
| L04 = km(), | |
| y04 = mm(), | |
| P04 = Pm(), | |
| $04 = Lm(), | |
| u04 = V4(), | |
| T04 = Om(), | |
| O04 = pm(), | |
| m04 = xm(), | |
| l04 = rm(), | |
| b04 = O01(); | |
| RL1.Console = E04.Console; | |
| RL1.Http = M04.Http; | |
| RL1.OnUncaughtException = S04.OnUncaughtException; | |
| RL1.OnUnhandledRejection = L04.OnUnhandledRejection; | |
| RL1.Modules = y04.Modules; | |
| RL1.ContextLines = P04.ContextLines; | |
| RL1.Context = $04.Context; | |
| RL1.RequestData = u04.RequestData; | |
| RL1.LocalVariables = T04.LocalVariables; | |
| RL1.Undici = O04.Undici; | |
| RL1.Spotlight = m04.Spotlight; | |
| RL1.Anr = l04.Anr; | |
| RL1.Hapi = b04.Hapi | |
| }); | |
| var EL1 = Y((vL1) => { | |
| Object.defineProperty(vL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var yF = H01(); | |
| vL1.Apollo = yF.Apollo; | |
| vL1.Express = yF.Express; | |
| vL1.GraphQL = yF.GraphQL; | |
| vL1.Mongo = yF.Mongo; | |
| vL1.Mysql = yF.Mysql; | |
| vL1.Postgres = yF.Postgres; | |
| vL1.Prisma = yF.Prisma | |
| }); | |
| var yL1 = Y((LL1) => { | |
| Object.defineProperty(LL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var PF = V4(), | |
| $F = V0(), | |
| ML1 = "CaptureConsole", | |
| w24 = (I = {}) => { | |
| let d = I.levels || $F.CONSOLE_LEVELS; | |
| return { | |
| name: ML1, | |
| setupOnce() {}, | |
| setup(G) { | |
| if (!("console" in $F.GLOBAL_OBJ)) return; | |
| $F.addConsoleInstrumentationHandler(({ | |
| args: Z, | |
| level: C | |
| }) => { | |
| if (PF.getClient() !== G || !d.includes(C)) return; | |
| A24(Z, C) | |
| }) | |
| } | |
| } | |
| }, | |
| SL1 = PF.defineIntegration(w24), | |
| B24 = PF.convertIntegrationFnToClass(ML1, SL1); | |
| function A24(I, d) { | |
| let G = { | |
| level: $F.severityLevelFromString(d), | |
| extra: { | |
| arguments: I | |
| } | |
| }; | |
| PF.withScope((Z) => { | |
| if (Z.addEventProcessor((w) => { | |
| return w.logger = "console", $F.addExceptionMechanism(w, { | |
| handled: !1, | |
| type: "console" | |
| }), w | |
| }), d === "assert" && I[0] === !1) { | |
| let w = `Assertion failed: ${$F.safeJoin(I.slice(1)," ")||"console.assert"}`; | |
| Z.setExtra("arguments", I.slice(1)), PF.captureMessage(w, G); | |
| return | |
| } | |
| let C = I.find((w) => w instanceof Error); | |
| if (d === "error" && C) { | |
| PF.captureException(C, G); | |
| return | |
| } | |
| let W = $F.safeJoin(I, " "); | |
| PF.captureMessage(W, G) | |
| }) | |
| } | |
| LL1.CaptureConsole = B24; | |
| LL1.captureConsoleIntegration = SL1 | |
| }); | |
| var OL1 = Y((TL1) => { | |
| Object.defineProperty(TL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var PL1 = V4(), | |
| Y24 = V0(), | |
| $L1 = "Debug", | |
| _24 = (I = {}) => { | |
| let d = { | |
| debugger: !1, | |
| stringify: !1, | |
| ...I | |
| }; | |
| return { | |
| name: $L1, | |
| setupOnce() {}, | |
| setup(G) { | |
| if (!G.on) return; | |
| G.on("beforeSendEvent", (Z, C) => { | |
| if (d.debugger) debugger; | |
| Y24.consoleSandbox(() => { | |
| if (d.stringify) { | |
| if (console.log(JSON.stringify(Z, null, 2)), C && Object.keys(C).length) console.log(JSON.stringify(C, null, 2)) | |
| } else if (console.log(Z), C && Object.keys(C).length) console.log(C) | |
| }) | |
| }) | |
| } | |
| } | |
| }, | |
| uL1 = PL1.defineIntegration(_24), | |
| D24 = PL1.convertIntegrationFnToClass($L1, uL1); | |
| TL1.Debug = D24; | |
| TL1.debugIntegration = uL1 | |
| }); | |
| var XE = Y((mL1) => { | |
| Object.defineProperty(mL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var g24 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; | |
| mL1.DEBUG_BUILD = g24 | |
| }); | |
| var nL1 = Y((iL1) => { | |
| Object.defineProperty(iL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var hL1 = V4(), | |
| K24 = V0(), | |
| N24 = XE(), | |
| jL1 = "Dedupe", | |
| z24 = () => { | |
| let I; | |
| return { | |
| name: jL1, | |
| setupOnce() {}, | |
| processEvent(d) { | |
| if (d.type) return d; | |
| try { | |
| if (xL1(d, I)) return N24.DEBUG_BUILD && K24.logger.warn("Event dropped due to being a duplicate of previously captured event."), null | |
| } catch (G) {} | |
| return I = d | |
| } | |
| } | |
| }, | |
| kL1 = hL1.defineIntegration(z24), | |
| Q24 = hL1.convertIntegrationFnToClass(jL1, kL1); | |
| function xL1(I, d) { | |
| if (!d) return !1; | |
| if (f24(I, d)) return !0; | |
| if (q24(I, d)) return !0; | |
| return !1 | |
| } | |
| function f24(I, d) { | |
| let G = I.message, | |
| Z = d.message; | |
| if (!G && !Z) return !1; | |
| if (G && !Z || !G && Z) return !1; | |
| if (G !== Z) return !1; | |
| if (!pL1(I, d)) return !1; | |
| if (!cL1(I, d)) return !1; | |
| return !0 | |
| } | |
| function q24(I, d) { | |
| let G = lL1(d), | |
| Z = lL1(I); | |
| if (!G || !Z) return !1; | |
| if (G.type !== Z.type || G.value !== Z.value) return !1; | |
| if (!pL1(I, d)) return !1; | |
| if (!cL1(I, d)) return !1; | |
| return !0 | |
| } | |
| function cL1(I, d) { | |
| let G = bL1(I), | |
| Z = bL1(d); | |
| if (!G && !Z) return !0; | |
| if (G && !Z || !G && Z) return !1; | |
| if (G = G, Z = Z, Z.length !== G.length) return !1; | |
| for (let C = 0; C < Z.length; C++) { | |
| let W = Z[C], | |
| w = G[C]; | |
| if (W.filename !== w.filename || W.lineno !== w.lineno || W.colno !== w.colno || W.function !== w.function) return !1 | |
| } | |
| return !0 | |
| } | |
| function pL1(I, d) { | |
| let G = I.fingerprint, | |
| Z = d.fingerprint; | |
| if (!G && !Z) return !0; | |
| if (G && !Z || !G && Z) return !1; | |
| G = G, Z = Z; | |
| try { | |
| return G.join("") === Z.join("") | |
| } catch (C) { | |
| return !1 | |
| } | |
| } | |
| function lL1(I) { | |
| return I.exception && I.exception.values && I.exception.values[0] | |
| } | |
| function bL1(I) { | |
| let d = I.exception; | |
| if (d) try { | |
| return d.values[0].stacktrace.frames | |
| } catch (G) { | |
| return | |
| } | |
| return | |
| } | |
| iL1.Dedupe = Q24; | |
| iL1._shouldDropEvent = xL1; | |
| iL1.dedupeIntegration = kL1 | |
| }); | |
| var eL1 = Y((oL1) => { | |
| Object.defineProperty(oL1, "__esModule", { | |
| value: !0 | |
| }); | |
| var rL1 = V4(), | |
| oX = V0(), | |
| E24 = XE(), | |
| aL1 = "ExtraErrorData", | |
| M24 = (I = {}) => { | |
| let d = I.depth || 3, | |
| G = I.captureErrorCause || !1; | |
| return { | |
| name: aL1, | |
| setupOnce() {}, | |
| processEvent(Z, C) { | |
| return L24(Z, C, d, G) | |
| } | |
| } | |
| }, | |
| sL1 = rL1.defineIntegration(M24), | |
| S24 = rL1.convertIntegrationFnToClass(aL1, sL1); | |
| function L24(I, d = {}, G, Z) { | |
| if (!d.originalException || !oX.isError(d.originalException)) return I; | |
| let C = d.originalException.name || d.originalException.constructor.name, | |
| W = y24(d.originalException, Z); | |
| if (W) { | |
| let w = { | |
| ...I.contexts | |
| }, | |
| B = oX.normalize(W, G); | |
| if (oX.isPlainObject(B)) oX.addNonEnumerableProperty(B, "__sentry_skip_normalization__", !0), w[C] = B; | |
| return { | |
| ...I, | |
| contexts: w | |
| } | |
| } | |
| return I | |
| } | |
| function y24(I, d) { | |
| try { | |
| let G = ["name", "message", "stack", "line", "column", "fileName", "lineNumber", "columnNumber", "toJSON"], | |
| Z = {}; | |
| for (let C of Object.keys(I)) { | |
| if (G.indexOf(C) !== -1) continue; | |
| let W = I[C]; | |
| Z[C] = oX.isError(W) ? W.toString() : W | |
| } | |
| if (d && I.cause !== void 0) Z.cause = oX.isError(I.cause) ? I.cause.toString() : I.cause; | |
| if (typeof I.toJSON === "function") { | |
| let C = I.toJSON(); | |
| for (let W of Object.keys(C)) { | |
| let w = C[W]; | |
| Z[W] = oX.isError(w) ? w.toString() : w | |
| } | |
| } | |
| return Z | |
| } catch (G) { | |
| E24.DEBUG_BUILD && oX.logger.error("Unable to extract extra data from the Error object:", G) | |
| } | |
| return null | |
| } | |
| oL1.ExtraErrorData = S24; | |
| oL1.extraErrorDataIntegration = sL1 | |
| }); | |
| var Iy1 = Y((tL1, m01) => { | |
| /*! | |
| localForage -- Offline Storage, Improved | |
| Version 1.10.0 | |
| https://localforage.github.io/localForage | |
| (c) 2013-2017 Mozilla, Apache License 2.0 | |
| */ | |
| (function(I) { | |
| if (typeof tL1 === "object" && typeof m01 !== "undefined") m01.exports = I(); | |
| else if (typeof define === "function" && define.amd) define([], I); | |
| else { | |
| var d; | |
| if (typeof window !== "undefined") d = window; | |
| else if (typeof global !== "undefined") d = global; | |
| else if (typeof self !== "undefined") d = self; | |
| else d = this; | |
| d.localforage = I() | |
| } | |
| })(function() { | |
| var I, d, G; | |
| return function Z(C, W, w) { | |
| function B(X, _) { | |
| if (!W[X]) { | |
| if (!C[X]) { | |
| var F = B1; | |
| if (!_ && F) return F(X, !0); | |
| if (A) return A(X, !0); | |
| var g = new Error("Cannot find module '" + X + "'"); | |
| throw g.code = "MODULE_NOT_FOUND", g | |
| } | |
| var J = W[X] = { | |
| exports: {} | |
| }; | |
| C[X][0].call(J.exports, function(K) { | |
| var Q = C[X][1][K]; | |
| return B(Q ? Q : K) | |
| }, J, J.exports, Z, C, W, w) | |
| } | |
| return W[X].exports | |
| } | |
| var A = B1; | |
| for (var V = 0; V < w.length; V++) B(w[V]); | |
| return B | |
| }({ | |
| 1: [function(Z, C, W) { | |
| (function(w) { | |
| var B = w.MutationObserver || w.WebKitMutationObserver, | |
| A; | |
| if (B) { | |
| var V = 0, | |
| X = new B(K), | |
| _ = w.document.createTextNode(""); | |
| X.observe(_, { | |
| characterData: !0 | |
| }), A = function() { | |
| _.data = V = ++V % 2 | |
| } | |
| } else if (!w.setImmediate && typeof w.MessageChannel !== "undefined") { | |
| var F = new w.MessageChannel; | |
| F.port1.onmessage = K, A = function() { | |
| F.port2.postMessage(0) | |
| } | |
| } else if ("document" in w && "onreadystatechange" in w.document.createElement("script")) A = function() { | |
| var E = w.document.createElement("script"); | |
| E.onreadystatechange = function() { | |
| K(), E.onreadystatechange = null, E.parentNode.removeChild(E), E = null | |
| }, w.document.documentElement.appendChild(E) | |
| }; | |
| else A = function() { | |
| setTimeout(K, 0) | |
| }; | |
| var g, J = []; | |
| function K() { | |
| g = !0; | |
| var E, S, P = J.length; | |
| while (P) { | |
| S = J, J = [], E = -1; | |
| while (++E < P) S[E](); | |
| P = J.length | |
| } | |
| g = !1 | |
| } | |
| C.exports = Q; | |
| function Q(E) { | |
| if (J.push(E) === 1 && !g) A() | |
| } | |
| }).call(this, typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | |
| }, {}], | |
| 2: [function(Z, C, W) { | |
| var w = Z(1); | |
| function B() {} | |
| var A = {}, | |
| V = ["REJECTED"], | |
| X = ["FULFILLED"], | |
| _ = ["PENDING"]; | |
| C.exports = F; | |
| function F(O) { | |
| if (typeof O !== "function") throw new TypeError("resolver must be a function"); | |
| if (this.state = _, this.queue = [], this.outcome = void 0, O !== B) Q(this, O) | |
| } | |
| F.prototype.catch = function(O) { | |
| return this.then(null, O) | |
| }, F.prototype.then = function(O, T) { | |
| if (typeof O !== "function" && this.state === X || typeof T !== "function" && this.state === V) return this; | |
| var V1 = new this.constructor(B); | |
| if (this.state !== _) { | |
| var c = this.state === X ? O : T; | |
| J(V1, c, this.outcome) | |
| } else this.queue.push(new g(V1, O, T)); | |
| return V1 | |
| }; | |
| function g(O, T, V1) { | |
| if (this.promise = O, typeof T === "function") this.onFulfilled = T, this.callFulfilled = this.otherCallFulfilled; | |
| if (typeof V1 === "function") this.onRejected = V1, this.callRejected = this.otherCallRejected | |
| } | |
| g.prototype.callFulfilled = function(O) { | |
| A.resolve(this.promise, O) | |
| }, g.prototype.otherCallFulfilled = function(O) { | |
| J(this.promise, this.onFulfilled, O) | |
| }, g.prototype.callRejected = function(O) { | |
| A.reject(this.promise, O) | |
| }, g.prototype.otherCallRejected = function(O) { | |
| J(this.promise, this.onRejected, O) | |
| }; | |
| function J(O, T, V1) { | |
| w(function() { | |
| var c; | |
| try { | |
| c = T(V1) | |
| } catch (c1) { | |
| return A.reject(O, c1) | |
| } | |
| if (c === O) A.reject(O, new TypeError("Cannot resolve promise with itself")); | |
| else A.resolve(O, c) | |
| }) | |
| } | |
| A.resolve = function(O, T) { | |
| var V1 = E(K, T); | |
| if (V1.status === "error") return A.reject(O, V1.value); | |
| var c = V1.value; | |
| if (c) Q(O, c); | |
| else { | |
| O.state = X, O.outcome = T; | |
| var c1 = -1, | |
| o1 = O.queue.length; | |
| while (++c1 < o1) O.queue[c1].callFulfilled(T) | |
| } | |
| return O | |
| }, A.reject = function(O, T) { | |
| O.state = V, O.outcome = T; | |
| var V1 = -1, | |
| c = O.queue.length; | |
| while (++V1 < c) O.queue[V1].callRejected(T); | |
| return O | |
| }; | |
| function K(O) { | |
| var T = O && O.then; | |
| if (O && (typeof O === "object" || typeof O === "function") && typeof T === "function") return function V1() { | |
| T.apply(O, arguments) | |
| } | |
| } | |
| function Q(O, T) { | |
| var V1 = !1; | |
| function c(f1) { | |
| if (V1) return; | |
| V1 = !0, A.reject(O, f1) | |
| } | |
| function c1(f1) { | |
| if (V1) return; | |
| V1 = !0, A.resolve(O, f1) | |
| } | |
| function o1() { | |
| T(c1, c) | |
| } | |
| var a1 = E(o1); | |
| if (a1.status === "error") c(a1.value) | |
| } | |
| function E(O, T) { | |
| var V1 = {}; | |
| try { | |
| V1.value = O(T), V1.status = "success" | |
| } catch (c) { | |
| V1.status = "error", V1.value = c | |
| } | |
| return V1 | |
| } | |
| F.resolve = S; | |
| function S(O) { | |
| if (O instanceof this) return O; | |
| return A.resolve(new this(B), O) | |
| } | |
| F.reject = P; | |
| function P(O) { | |
| var T = new this(B); | |
| return A.reject(T, O) | |
| } | |
| F.all = $; | |
| function $(O) { | |
| var T = this; | |
| if (Object.prototype.toString.call(O) !== "[object Array]") return this.reject(new TypeError("must be an array")); | |
| var V1 = O.length, | |
| c = !1; | |
| if (!V1) return this.resolve([]); | |
| var c1 = new Array(V1), | |
| o1 = 0, | |
| a1 = -1, | |
| f1 = new this(B); | |
| while (++a1 < V1) r(O[a1], a1); | |
| return f1; | |
| function r(A1, m1) { | |
| T.resolve(A1).then(T1, function(e1) { | |
| if (!c) c = !0, A.reject(f1, e1) | |
| }); | |
| function T1(e1) { | |
| if (c1[m1] = e1, ++o1 === V1 && !c) c = !0, A.resolve(f1, c1) | |
| } | |
| } | |
| } | |
| F.race = h; | |
| function h(O) { | |
| var T = this; | |
| if (Object.prototype.toString.call(O) !== "[object Array]") return this.reject(new TypeError("must be an array")); | |
| var V1 = O.length, | |
| c = !1; | |
| if (!V1) return this.resolve([]); | |
| var c1 = -1, | |
| o1 = new this(B); | |
| while (++c1 < V1) a1(O[c1]); | |
| return o1; | |
| function a1(f1) { | |
| T.resolve(f1).then(function(r) { | |
| if (!c) c = !0, A.resolve(o1, r) | |
| }, function(r) { | |
| if (!c) c = !0, A.reject(o1, r) | |
| }) | |
| } | |
| } | |
| }, { | |
| "1": 1 | |
| }], | |
| 3: [function(Z, C, W) { | |
| (function(w) { | |
| if (typeof w.Promise !== "function") w.Promise = Z(2) | |
| }).call(this, typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | |
| }, { | |
| "2": 2 | |
| }], | |
| 4: [function(Z, C, W) { | |
| var w = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(l) { | |
| return typeof l | |
| } : function(l) { | |
| return l && typeof Symbol === "function" && l.constructor === Symbol && l !== Symbol.prototype ? "symbol" : typeof l | |
| }; | |
| function B(l, _1) { | |
| if (!(l instanceof _1)) throw new TypeError("Cannot call a class as a function") | |
| } | |
| function A() { | |
| try { | |
| if (typeof indexedDB !== "undefined") return indexedDB; | |
| if (typeof webkitIndexedDB !== "undefined") return webkitIndexedDB; | |
| if (typeof mozIndexedDB !== "undefined") return mozIndexedDB; | |
| if (typeof OIndexedDB !== "undefined") return OIndexedDB; | |
| if (typeof msIndexedDB !== "undefined") return msIndexedDB | |
| } catch (l) { | |
| return | |
| } | |
| } | |
| var V = A(); | |
| function X() { | |
| try { | |
| if (!V || !V.open) return !1; | |
| var l = typeof openDatabase !== "undefined" && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform), | |
| _1 = typeof fetch === "function" && fetch.toString().indexOf("[native code") !== -1; | |
| return (!l || _1) && typeof indexedDB !== "undefined" && typeof IDBKeyRange !== "undefined" | |
| } catch (I1) { | |
| return !1 | |
| } | |
| } | |
| function _(l, _1) { | |
| l = l || [], _1 = _1 || {}; | |
| try { | |
| return new Blob(l, _1) | |
| } catch (E1) { | |
| if (E1.name !== "TypeError") throw E1; | |
| var I1 = typeof BlobBuilder !== "undefined" ? BlobBuilder : typeof MSBlobBuilder !== "undefined" ? MSBlobBuilder : typeof MozBlobBuilder !== "undefined" ? MozBlobBuilder : WebKitBlobBuilder, | |
| v1 = new I1; | |
| for (var y1 = 0; y1 < l.length; y1 += 1) v1.append(l[y1]); | |
| return v1.getBlob(_1.type) | |
| } | |
| } | |
| if (typeof Promise === "undefined") Z(3); | |
| var F = Promise; | |
| function g(l, _1) { | |
| if (_1) l.then(function(I1) { | |
| _1(null, I1) | |
| }, function(I1) { | |
| _1(I1) | |
| }) | |
| } | |
| function J(l, _1, I1) { | |
| if (typeof _1 === "function") l.then(_1); | |
| if (typeof I1 === "function") l.catch(I1) | |
| } | |
| function K(l) { | |
| if (typeof l !== "string") console.warn(l + " used as a key, but it is not a string."), l = String(l); | |
| return l | |
| } | |
| function Q() { | |
| if (arguments.length && typeof arguments[arguments.length - 1] === "function") return arguments[arguments.length - 1] | |
| } | |
| var E = "local-forage-detect-blob-support", | |
| S = void 0, | |
| P = {}, | |
| $ = Object.prototype.toString, | |
| h = "readonly", | |
| O = "readwrite"; | |
| function T(l) { | |
| var _1 = l.length, | |
| I1 = new ArrayBuffer(_1), | |
| v1 = new Uint8Array(I1); | |
| for (var y1 = 0; y1 < _1; y1++) v1[y1] = l.charCodeAt(y1); | |
| return I1 | |
| } | |
| function V1(l) { | |
| return new F(function(_1) { | |
| var I1 = l.transaction(E, O), | |
| v1 = _([""]); | |
| I1.objectStore(E).put(v1, "key"), I1.onabort = function(y1) { | |
| y1.preventDefault(), y1.stopPropagation(), _1(!1) | |
| }, I1.oncomplete = function() { | |
| var y1 = navigator.userAgent.match(/Chrome\/(\d+)/), | |
| E1 = navigator.userAgent.match(/Edge\//); | |
| _1(E1 || !y1 || parseInt(y1[1], 10) >= 43) | |
| } | |
| }).catch(function() { | |
| return !1 | |
| }) | |
| } | |
| function c(l) { | |
| if (typeof S === "boolean") return F.resolve(S); | |
| return V1(l).then(function(_1) { | |
| return S = _1, S | |
| }) | |
| } | |
| function c1(l) { | |
| var _1 = P[l.name], | |
| I1 = {}; | |
| if (I1.promise = new F(function(v1, y1) { | |
| I1.resolve = v1, I1.reject = y1 | |
| }), _1.deferredOperations.push(I1), !_1.dbReady) _1.dbReady = I1.promise; | |
| else _1.dbReady = _1.dbReady.then(function() { | |
| return I1.promise | |
| }) | |
| } | |
| function o1(l) { | |
| var _1 = P[l.name], | |
| I1 = _1.deferredOperations.pop(); | |
| if (I1) return I1.resolve(), I1.promise | |
| } | |
| function a1(l, _1) { | |
| var I1 = P[l.name], | |
| v1 = I1.deferredOperations.pop(); | |
| if (v1) return v1.reject(_1), v1.promise | |
| } | |
| function f1(l, _1) { | |
| return new F(function(I1, v1) { | |
| if (P[l.name] = P[l.name] || e(), l.db) | |
| if (_1) c1(l), l.db.close(); | |
| else return I1(l.db); | |
| var y1 = [l.name]; | |
| if (_1) y1.push(l.version); | |
| var E1 = V.open.apply(V, y1); | |
| if (_1) E1.onupgradeneeded = function(Z0) { | |
| var Q0 = E1.result; | |
| try { | |
| if (Q0.createObjectStore(l.storeName), Z0.oldVersion <= 1) Q0.createObjectStore(E) | |
| } catch (N0) { | |
| if (N0.name === "ConstraintError") console.warn('The database "' + l.name + '" has been upgraded from version ' + Z0.oldVersion + " to version " + Z0.newVersion + ', but the storage "' + l.storeName + '" already exists.'); | |
| else throw N0 | |
| } | |
| }; | |
| E1.onerror = function(Z0) { | |
| Z0.preventDefault(), v1(E1.error) | |
| }, E1.onsuccess = function() { | |
| var Z0 = E1.result; | |
| Z0.onversionchange = function(Q0) { | |
| Q0.target.close() | |
| }, I1(Z0), o1(l) | |
| } | |
| }) | |
| } | |
| function r(l) { | |
| return f1(l, !1) | |
| } | |
| function A1(l) { | |
| return f1(l, !0) | |
| } | |
| function m1(l, _1) { | |
| if (!l.db) return !0; | |
| var I1 = !l.db.objectStoreNames.contains(l.storeName), | |
| v1 = l.version < l.db.version, | |
| y1 = l.version > l.db.version; | |
| if (v1) { | |
| if (l.version !== _1) console.warn('The database "' + l.name + `" can't be downgraded from version ` + l.db.version + " to version " + l.version + "."); | |
| l.version = l.db.version | |
| } | |
| if (y1 || I1) { | |
| if (I1) { | |
| var E1 = l.db.version + 1; | |
| if (E1 > l.version) l.version = E1 | |
| } | |
| return !0 | |
| } | |
| return !1 | |
| } | |
| function T1(l) { | |
| return new F(function(_1, I1) { | |
| var v1 = new FileReader; | |
| v1.onerror = I1, v1.onloadend = function(y1) { | |
| var E1 = btoa(y1.target.result || ""); | |
| _1({ | |
| __local_forage_encoded_blob: !0, | |
| data: E1, | |
| type: l.type | |
| }) | |
| }, v1.readAsBinaryString(l) | |
| }) | |
| } | |
| function e1(l) { | |
| var _1 = T(atob(l.data)); | |
| return _([_1], { | |
| type: l.type | |
| }) | |
| } | |
| function F0(l) { | |
| return l && l.__local_forage_encoded_blob | |
| } | |
| function P0(l) { | |
| var _1 = this, | |
| I1 = _1._initReady().then(function() { | |
| var v1 = P[_1._dbInfo.name]; | |
| if (v1 && v1.dbReady) return v1.dbReady | |
| }); | |
| return J(I1, l, l), I1 | |
| } | |
| function B0(l) { | |
| c1(l); | |
| var _1 = P[l.name], | |
| I1 = _1.forages; | |
| for (var v1 = 0; v1 < I1.length; v1++) { | |
| var y1 = I1[v1]; | |
| if (y1._dbInfo.db) y1._dbInfo.db.close(), y1._dbInfo.db = null | |
| } | |
| return l.db = null, r(l).then(function(E1) { | |
| if (l.db = E1, m1(l)) return A1(l); | |
| return E1 | |
| }).then(function(E1) { | |
| l.db = _1.db = E1; | |
| for (var Z0 = 0; Z0 < I1.length; Z0++) I1[Z0]._dbInfo.db = E1 | |
| }).catch(function(E1) { | |
| throw a1(l, E1), E1 | |
| }) | |
| } | |
| function a0(l, _1, I1, v1) { | |
| if (v1 === void 0) v1 = 1; | |
| try { | |
| var y1 = l.db.transaction(l.storeName, _1); | |
| I1(null, y1) | |
| } catch (E1) { | |
| if (v1 > 0 && (!l.db || E1.name === "InvalidStateError" || E1.name === "NotFoundError")) return F.resolve().then(function() { | |
| if (!l.db || E1.name === "NotFoundError" && !l.db.objectStoreNames.contains(l.storeName) && l.version <= l.db.version) { | |
| if (l.db) l.version = l.db.version + 1; | |
| return A1(l) | |
| } | |
| }).then(function() { | |
| return B0(l).then(function() { | |
| a0(l, _1, I1, v1 - 1) | |
| }) | |
| }).catch(I1); | |
| I1(E1) | |
| } | |
| } | |
| function e() { | |
| return { | |
| forages: [], | |
| db: null, | |
| dbReady: null, | |
| deferredOperations: [] | |
| } | |
| } | |
| function G0(l) { | |
| var _1 = this, | |
| I1 = { | |
| db: null | |
| }; | |
| if (l) | |
| for (var v1 in l) I1[v1] = l[v1]; | |
| var y1 = P[I1.name]; | |
| if (!y1) y1 = e(), P[I1.name] = y1; | |
| if (y1.forages.push(_1), !_1._initReady) _1._initReady = _1.ready, _1.ready = P0; | |
| var E1 = []; | |
| function Z0() { | |
| return F.resolve() | |
| } | |
| for (var Q0 = 0; Q0 < y1.forages.length; Q0++) { | |
| var N0 = y1.forages[Q0]; | |
| if (N0 !== _1) E1.push(N0._initReady().catch(Z0)) | |
| } | |
| var $0 = y1.forages.slice(0); | |
| return F.all(E1).then(function() { | |
| return I1.db = y1.db, r(I1) | |
| }).then(function(h0) { | |
| if (I1.db = h0, m1(I1, _1._defaultConfig.version)) return A1(I1); | |
| return h0 | |
| }).then(function(h0) { | |
| I1.db = y1.db = h0, _1._dbInfo = I1; | |
| for (var g2 = 0; g2 < $0.length; g2++) { | |
| var F4 = $0[g2]; | |
| if (F4 !== _1) F4._dbInfo.db = I1.db, F4._dbInfo.version = I1.version | |
| } | |
| }) | |
| } | |
| function H1(l, _1) { | |
| var I1 = this; | |
| l = K(l); | |
| var v1 = new F(function(y1, E1) { | |
| I1.ready().then(function() { | |
| a0(I1._dbInfo, h, function(Z0, Q0) { | |
| if (Z0) return E1(Z0); | |
| try { | |
| var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
| $0 = N0.get(l); | |
| $0.onsuccess = function() { | |
| var h0 = $0.result; | |
| if (h0 === void 0) h0 = null; | |
| if (F0(h0)) h0 = e1(h0); | |
| y1(h0) | |
| }, $0.onerror = function() { | |
| E1($0.error) | |
| } | |
| } catch (h0) { | |
| E1(h0) | |
| } | |
| }) | |
| }).catch(E1) | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function j1(l, _1) { | |
| var I1 = this, | |
| v1 = new F(function(y1, E1) { | |
| I1.ready().then(function() { | |
| a0(I1._dbInfo, h, function(Z0, Q0) { | |
| if (Z0) return E1(Z0); | |
| try { | |
| var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
| $0 = N0.openCursor(), | |
| h0 = 1; | |
| $0.onsuccess = function() { | |
| var g2 = $0.result; | |
| if (g2) { | |
| var F4 = g2.value; | |
| if (F0(F4)) F4 = e1(F4); | |
| var x4 = l(F4, g2.key, h0++); | |
| if (x4 !== void 0) y1(x4); | |
| else g2.continue() | |
| } else y1() | |
| }, $0.onerror = function() { | |
| E1($0.error) | |
| } | |
| } catch (g2) { | |
| E1(g2) | |
| } | |
| }) | |
| }).catch(E1) | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function i1(l, _1, I1) { | |
| var v1 = this; | |
| l = K(l); | |
| var y1 = new F(function(E1, Z0) { | |
| var Q0; | |
| v1.ready().then(function() { | |
| if (Q0 = v1._dbInfo, $.call(_1) === "[object Blob]") return c(Q0.db).then(function(N0) { | |
| if (N0) return _1; | |
| return T1(_1) | |
| }); | |
| return _1 | |
| }).then(function(N0) { | |
| a0(v1._dbInfo, O, function($0, h0) { | |
| if ($0) return Z0($0); | |
| try { | |
| var g2 = h0.objectStore(v1._dbInfo.storeName); | |
| if (N0 === null) N0 = void 0; | |
| var F4 = g2.put(N0, l); | |
| h0.oncomplete = function() { | |
| if (N0 === void 0) N0 = null; | |
| E1(N0) | |
| }, h0.onabort = h0.onerror = function() { | |
| var x4 = F4.error ? F4.error : F4.transaction.error; | |
| Z0(x4) | |
| } | |
| } catch (x4) { | |
| Z0(x4) | |
| } | |
| }) | |
| }).catch(Z0) | |
| }); | |
| return g(y1, I1), y1 | |
| } | |
| function E0(l, _1) { | |
| var I1 = this; | |
| l = K(l); | |
| var v1 = new F(function(y1, E1) { | |
| I1.ready().then(function() { | |
| a0(I1._dbInfo, O, function(Z0, Q0) { | |
| if (Z0) return E1(Z0); | |
| try { | |
| var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
| $0 = N0.delete(l); | |
| Q0.oncomplete = function() { | |
| y1() | |
| }, Q0.onerror = function() { | |
| E1($0.error) | |
| }, Q0.onabort = function() { | |
| var h0 = $0.error ? $0.error : $0.transaction.error; | |
| E1(h0) | |
| } | |
| } catch (h0) { | |
| E1(h0) | |
| } | |
| }) | |
| }).catch(E1) | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function k(l) { | |
| var _1 = this, | |
| I1 = new F(function(v1, y1) { | |
| _1.ready().then(function() { | |
| a0(_1._dbInfo, O, function(E1, Z0) { | |
| if (E1) return y1(E1); | |
| try { | |
| var Q0 = Z0.objectStore(_1._dbInfo.storeName), | |
| N0 = Q0.clear(); | |
| Z0.oncomplete = function() { | |
| v1() | |
| }, Z0.onabort = Z0.onerror = function() { | |
| var $0 = N0.error ? N0.error : N0.transaction.error; | |
| y1($0) | |
| } | |
| } catch ($0) { | |
| y1($0) | |
| } | |
| }) | |
| }).catch(y1) | |
| }); | |
| return g(I1, l), I1 | |
| } | |
| function a(l) { | |
| var _1 = this, | |
| I1 = new F(function(v1, y1) { | |
| _1.ready().then(function() { | |
| a0(_1._dbInfo, h, function(E1, Z0) { | |
| if (E1) return y1(E1); | |
| try { | |
| var Q0 = Z0.objectStore(_1._dbInfo.storeName), | |
| N0 = Q0.count(); | |
| N0.onsuccess = function() { | |
| v1(N0.result) | |
| }, N0.onerror = function() { | |
| y1(N0.error) | |
| } | |
| } catch ($0) { | |
| y1($0) | |
| } | |
| }) | |
| }).catch(y1) | |
| }); | |
| return g(I1, l), I1 | |
| } | |
| function Z1(l, _1) { | |
| var I1 = this, | |
| v1 = new F(function(y1, E1) { | |
| if (l < 0) { | |
| y1(null); | |
| return | |
| } | |
| I1.ready().then(function() { | |
| a0(I1._dbInfo, h, function(Z0, Q0) { | |
| if (Z0) return E1(Z0); | |
| try { | |
| var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
| $0 = !1, | |
| h0 = N0.openKeyCursor(); | |
| h0.onsuccess = function() { | |
| var g2 = h0.result; | |
| if (!g2) { | |
| y1(null); | |
| return | |
| } | |
| if (l === 0) y1(g2.key); | |
| else if (!$0) $0 = !0, g2.advance(l); | |
| else y1(g2.key) | |
| }, h0.onerror = function() { | |
| E1(h0.error) | |
| } | |
| } catch (g2) { | |
| E1(g2) | |
| } | |
| }) | |
| }).catch(E1) | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function Q1(l) { | |
| var _1 = this, | |
| I1 = new F(function(v1, y1) { | |
| _1.ready().then(function() { | |
| a0(_1._dbInfo, h, function(E1, Z0) { | |
| if (E1) return y1(E1); | |
| try { | |
| var Q0 = Z0.objectStore(_1._dbInfo.storeName), | |
| N0 = Q0.openKeyCursor(), | |
| $0 = []; | |
| N0.onsuccess = function() { | |
| var h0 = N0.result; | |
| if (!h0) { | |
| v1($0); | |
| return | |
| } | |
| $0.push(h0.key), h0.continue() | |
| }, N0.onerror = function() { | |
| y1(N0.error) | |
| } | |
| } catch (h0) { | |
| y1(h0) | |
| } | |
| }) | |
| }).catch(y1) | |
| }); | |
| return g(I1, l), I1 | |
| } | |
| function N1(l, _1) { | |
| _1 = Q.apply(this, arguments); | |
| var I1 = this.config(); | |
| if (l = typeof l !== "function" && l || {}, !l.name) l.name = l.name || I1.name, l.storeName = l.storeName || I1.storeName; | |
| var v1 = this, | |
| y1; | |
| if (!l.name) y1 = F.reject("Invalid arguments"); | |
| else { | |
| var E1 = l.name === I1.name && v1._dbInfo.db, | |
| Z0 = E1 ? F.resolve(v1._dbInfo.db) : r(l).then(function(Q0) { | |
| var N0 = P[l.name], | |
| $0 = N0.forages; | |
| N0.db = Q0; | |
| for (var h0 = 0; h0 < $0.length; h0++) $0[h0]._dbInfo.db = Q0; | |
| return Q0 | |
| }); | |
| if (!l.storeName) y1 = Z0.then(function(Q0) { | |
| c1(l); | |
| var N0 = P[l.name], | |
| $0 = N0.forages; | |
| Q0.close(); | |
| for (var h0 = 0; h0 < $0.length; h0++) { | |
| var g2 = $0[h0]; | |
| g2._dbInfo.db = null | |
| } | |
| var F4 = new F(function(x4, c4) { | |
| var W9 = V.deleteDatabase(l.name); | |
| W9.onerror = function() { | |
| var u9 = W9.result; | |
| if (u9) u9.close(); | |
| c4(W9.error) | |
| }, W9.onblocked = function() { | |
| console.warn('dropInstance blocked for database "' + l.name + '" until all open connections are closed') | |
| }, W9.onsuccess = function() { | |
| var u9 = W9.result; | |
| if (u9) u9.close(); | |
| x4(u9) | |
| } | |
| }); | |
| return F4.then(function(x4) { | |
| N0.db = x4; | |
| for (var c4 = 0; c4 < $0.length; c4++) { | |
| var W9 = $0[c4]; | |
| o1(W9._dbInfo) | |
| } | |
| }).catch(function(x4) { | |
| throw (a1(l, x4) || F.resolve()).catch(function() {}), x4 | |
| }) | |
| }); | |
| else y1 = Z0.then(function(Q0) { | |
| if (!Q0.objectStoreNames.contains(l.storeName)) return; | |
| var N0 = Q0.version + 1; | |
| c1(l); | |
| var $0 = P[l.name], | |
| h0 = $0.forages; | |
| Q0.close(); | |
| for (var g2 = 0; g2 < h0.length; g2++) { | |
| var F4 = h0[g2]; | |
| F4._dbInfo.db = null, F4._dbInfo.version = N0 | |
| } | |
| var x4 = new F(function(c4, W9) { | |
| var u9 = V.open(l.name, N0); | |
| u9.onerror = function(e6) { | |
| var vd = u9.result; | |
| vd.close(), W9(e6) | |
| }, u9.onupgradeneeded = function() { | |
| var e6 = u9.result; | |
| e6.deleteObjectStore(l.storeName) | |
| }, u9.onsuccess = function() { | |
| var e6 = u9.result; | |
| e6.close(), c4(e6) | |
| } | |
| }); | |
| return x4.then(function(c4) { | |
| $0.db = c4; | |
| for (var W9 = 0; W9 < h0.length; W9++) { | |
| var u9 = h0[W9]; | |
| u9._dbInfo.db = c4, o1(u9._dbInfo) | |
| } | |
| }).catch(function(c4) { | |
| throw (a1(l, c4) || F.resolve()).catch(function() {}), c4 | |
| }) | |
| }) | |
| } | |
| return g(y1, _1), y1 | |
| } | |
| var F1 = { | |
| _driver: "asyncStorage", | |
| _initStorage: G0, | |
| _support: X(), | |
| iterate: j1, | |
| getItem: H1, | |
| setItem: i1, | |
| removeItem: E0, | |
| clear: k, | |
| length: a, | |
| key: Z1, | |
| keys: Q1, | |
| dropInstance: N1 | |
| }; | |
| function O1() { | |
| return typeof openDatabase === "function" | |
| } | |
| var K1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", | |
| R1 = "~~local_forage_type~", | |
| h1 = /^~~local_forage_type~([^~]+)~/, | |
| j = "__lfsc__:", | |
| W1 = j.length, | |
| U1 = "arbf", | |
| L1 = "blob", | |
| D0 = "si08", | |
| O0 = "ui08", | |
| x0 = "uic8", | |
| i0 = "si16", | |
| s0 = "si32", | |
| P2 = "ur16", | |
| r5 = "ui32", | |
| n0 = "fl32", | |
| B2 = "fl64", | |
| A2 = W1 + U1.length, | |
| B4 = Object.prototype.toString; | |
| function A4(l) { | |
| var _1 = l.length * 0.75, | |
| I1 = l.length, | |
| v1, y1 = 0, | |
| E1, Z0, Q0, N0; | |
| if (l[l.length - 1] === "=") { | |
| if (_1--, l[l.length - 2] === "=") _1-- | |
| } | |
| var $0 = new ArrayBuffer(_1), | |
| h0 = new Uint8Array($0); | |
| for (v1 = 0; v1 < I1; v1 += 4) E1 = K1.indexOf(l[v1]), Z0 = K1.indexOf(l[v1 + 1]), Q0 = K1.indexOf(l[v1 + 2]), N0 = K1.indexOf(l[v1 + 3]), h0[y1++] = E1 << 2 | Z0 >> 4, h0[y1++] = (Z0 & 15) << 4 | Q0 >> 2, h0[y1++] = (Q0 & 3) << 6 | N0 & 63; | |
| return $0 | |
| } | |
| function _5(l) { | |
| var _1 = new Uint8Array(l), | |
| I1 = "", | |
| v1; | |
| for (v1 = 0; v1 < _1.length; v1 += 3) I1 += K1[_1[v1] >> 2], I1 += K1[(_1[v1] & 3) << 4 | _1[v1 + 1] >> 4], I1 += K1[(_1[v1 + 1] & 15) << 2 | _1[v1 + 2] >> 6], I1 += K1[_1[v1 + 2] & 63]; | |
| if (_1.length % 3 === 2) I1 = I1.substring(0, I1.length - 1) + "="; | |
| else if (_1.length % 3 === 1) I1 = I1.substring(0, I1.length - 2) + "=="; | |
| return I1 | |
| } | |
| function D5(l, _1) { | |
| var I1 = ""; | |
| if (l) I1 = B4.call(l); | |
| if (l && (I1 === "[object ArrayBuffer]" || l.buffer && B4.call(l.buffer) === "[object ArrayBuffer]")) { | |
| var v1, y1 = j; | |
| if (l instanceof ArrayBuffer) v1 = l, y1 += U1; | |
| else if (v1 = l.buffer, I1 === "[object Int8Array]") y1 += D0; | |
| else if (I1 === "[object Uint8Array]") y1 += O0; | |
| else if (I1 === "[object Uint8ClampedArray]") y1 += x0; | |
| else if (I1 === "[object Int16Array]") y1 += i0; | |
| else if (I1 === "[object Uint16Array]") y1 += P2; | |
| else if (I1 === "[object Int32Array]") y1 += s0; | |
| else if (I1 === "[object Uint32Array]") y1 += r5; | |
| else if (I1 === "[object Float32Array]") y1 += n0; | |
| else if (I1 === "[object Float64Array]") y1 += B2; | |
| else _1(new Error("Failed to get type for BinaryArray")); | |
| _1(y1 + _5(v1)) | |
| } else if (I1 === "[object Blob]") { | |
| var E1 = new FileReader; | |
| E1.onload = function() { | |
| var Z0 = R1 + l.type + "~" + _5(this.result); | |
| _1(j + L1 + Z0) | |
| }, E1.readAsArrayBuffer(l) | |
| } else try { | |
| _1(JSON.stringify(l)) | |
| } catch (Z0) { | |
| console.error("Couldn't convert value into a JSON string: ", l), _1(null, Z0) | |
| } | |
| } | |
| function tZ(l) { | |
| if (l.substring(0, W1) !== j) return JSON.parse(l); | |
| var _1 = l.substring(A2), | |
| I1 = l.substring(W1, A2), | |
| v1; | |
| if (I1 === L1 && h1.test(_1)) { | |
| var y1 = _1.match(h1); | |
| v1 = y1[1], _1 = _1.substring(y1[0].length) | |
| } | |
| var E1 = A4(_1); | |
| switch (I1) { | |
| case U1: | |
| return E1; | |
| case L1: | |
| return _([E1], { | |
| type: v1 | |
| }); | |
| case D0: | |
| return new Int8Array(E1); | |
| case O0: | |
| return new Uint8Array(E1); | |
| case x0: | |
| return new Uint8ClampedArray(E1); | |
| case i0: | |
| return new Int16Array(E1); | |
| case P2: | |
| return new Uint16Array(E1); | |
| case s0: | |
| return new Int32Array(E1); | |
| case r5: | |
| return new Uint32Array(E1); | |
| case n0: | |
| return new Float32Array(E1); | |
| case B2: | |
| return new Float64Array(E1); | |
| default: | |
| throw new Error("Unkown type: " + I1) | |
| } | |
| } | |
| var T6 = { | |
| serialize: D5, | |
| deserialize: tZ, | |
| stringToBuffer: A4, | |
| bufferToString: _5 | |
| }; | |
| function pB(l, _1, I1, v1) { | |
| l.executeSql("CREATE TABLE IF NOT EXISTS " + _1.storeName + " (id INTEGER PRIMARY KEY, key unique, value)", [], I1, v1) | |
| } | |
| function iB(l) { | |
| var _1 = this, | |
| I1 = { | |
| db: null | |
| }; | |
| if (l) | |
| for (var v1 in l) I1[v1] = typeof l[v1] !== "string" ? l[v1].toString() : l[v1]; | |
| var y1 = new F(function(E1, Z0) { | |
| try { | |
| I1.db = openDatabase(I1.name, String(I1.version), I1.description, I1.size) | |
| } catch (Q0) { | |
| return Z0(Q0) | |
| } | |
| I1.db.transaction(function(Q0) { | |
| pB(Q0, I1, function() { | |
| _1._dbInfo = I1, E1() | |
| }, function(N0, $0) { | |
| Z0($0) | |
| }) | |
| }, Z0) | |
| }); | |
| return I1.serializer = T6, y1 | |
| } | |
| function X3(l, _1, I1, v1, y1, E1) { | |
| l.executeSql(I1, v1, y1, function(Z0, Q0) { | |
| if (Q0.code === Q0.SYNTAX_ERR) Z0.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?", [_1.storeName], function(N0, $0) { | |
| if (!$0.rows.length) pB(N0, _1, function() { | |
| N0.executeSql(I1, v1, y1, E1) | |
| }, E1); | |
| else E1(N0, Q0) | |
| }, E1); | |
| else E1(Z0, Q0) | |
| }, E1) | |
| } | |
| function Nd(l, _1) { | |
| var I1 = this; | |
| l = K(l); | |
| var v1 = new F(function(y1, E1) { | |
| I1.ready().then(function() { | |
| var Z0 = I1._dbInfo; | |
| Z0.db.transaction(function(Q0) { | |
| X3(Q0, Z0, "SELECT * FROM " + Z0.storeName + " WHERE key = ? LIMIT 1", [l], function(N0, $0) { | |
| var h0 = $0.rows.length ? $0.rows.item(0).value : null; | |
| if (h0) h0 = Z0.serializer.deserialize(h0); | |
| y1(h0) | |
| }, function(N0, $0) { | |
| E1($0) | |
| }) | |
| }) | |
| }).catch(E1) | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function IC(l, _1) { | |
| var I1 = this, | |
| v1 = new F(function(y1, E1) { | |
| I1.ready().then(function() { | |
| var Z0 = I1._dbInfo; | |
| Z0.db.transaction(function(Q0) { | |
| X3(Q0, Z0, "SELECT * FROM " + Z0.storeName, [], function(N0, $0) { | |
| var h0 = $0.rows, | |
| g2 = h0.length; | |
| for (var F4 = 0; F4 < g2; F4++) { | |
| var x4 = h0.item(F4), | |
| c4 = x4.value; | |
| if (c4) c4 = Z0.serializer.deserialize(c4); | |
| if (c4 = l(c4, x4.key, F4 + 1), c4 !== void 0) { | |
| y1(c4); | |
| return | |
| } | |
| } | |
| y1() | |
| }, function(N0, $0) { | |
| E1($0) | |
| }) | |
| }) | |
| }).catch(E1) | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function Y3(l, _1, I1, v1) { | |
| var y1 = this; | |
| l = K(l); | |
| var E1 = new F(function(Z0, Q0) { | |
| y1.ready().then(function() { | |
| if (_1 === void 0) _1 = null; | |
| var N0 = _1, | |
| $0 = y1._dbInfo; | |
| $0.serializer.serialize(_1, function(h0, g2) { | |
| if (g2) Q0(g2); | |
| else $0.db.transaction(function(F4) { | |
| X3(F4, $0, "INSERT OR REPLACE INTO " + $0.storeName + " (key, value) VALUES (?, ?)", [l, h0], function() { | |
| Z0(N0) | |
| }, function(x4, c4) { | |
| Q0(c4) | |
| }) | |
| }, function(F4) { | |
| if (F4.code === F4.QUOTA_ERR) { | |
| if (v1 > 0) { | |
| Z0(Y3.apply(y1, [l, N0, I1, v1 - 1])); | |
| return | |
| } | |
| Q0(F4) | |
| } | |
| }) | |
| }) | |
| }).catch(Q0) | |
| }); | |
| return g(E1, I1), E1 | |
| } | |
| function zd(l, _1, I1) { | |
| return Y3.apply(this, [l, _1, I1, 1]) | |
| } | |
| function Qd(l, _1) { | |
| var I1 = this; | |
| l = K(l); | |
| var v1 = new F(function(y1, E1) { | |
| I1.ready().then(function() { | |
| var Z0 = I1._dbInfo; | |
| Z0.db.transaction(function(Q0) { | |
| X3(Q0, Z0, "DELETE FROM " + Z0.storeName + " WHERE key = ?", [l], function() { | |
| y1() | |
| }, function(N0, $0) { | |
| E1($0) | |
| }) | |
| }) | |
| }).catch(E1) | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function QG(l) { | |
| var _1 = this, | |
| I1 = new F(function(v1, y1) { | |
| _1.ready().then(function() { | |
| var E1 = _1._dbInfo; | |
| E1.db.transaction(function(Z0) { | |
| X3(Z0, E1, "DELETE FROM " + E1.storeName, [], function() { | |
| v1() | |
| }, function(Q0, N0) { | |
| y1(N0) | |
| }) | |
| }) | |
| }).catch(y1) | |
| }); | |
| return g(I1, l), I1 | |
| } | |
| function fG(l) { | |
| var _1 = this, | |
| I1 = new F(function(v1, y1) { | |
| _1.ready().then(function() { | |
| var E1 = _1._dbInfo; | |
| E1.db.transaction(function(Z0) { | |
| X3(Z0, E1, "SELECT COUNT(key) as c FROM " + E1.storeName, [], function(Q0, N0) { | |
| var $0 = N0.rows.item(0).c; | |
| v1($0) | |
| }, function(Q0, N0) { | |
| y1(N0) | |
| }) | |
| }) | |
| }).catch(y1) | |
| }); | |
| return g(I1, l), I1 | |
| } | |
| function X7(l, _1) { | |
| var I1 = this, | |
| v1 = new F(function(y1, E1) { | |
| I1.ready().then(function() { | |
| var Z0 = I1._dbInfo; | |
| Z0.db.transaction(function(Q0) { | |
| X3(Q0, Z0, "SELECT key FROM " + Z0.storeName + " WHERE id = ? LIMIT 1", [l + 1], function(N0, $0) { | |
| var h0 = $0.rows.length ? $0.rows.item(0).key : null; | |
| y1(h0) | |
| }, function(N0, $0) { | |
| E1($0) | |
| }) | |
| }) | |
| }).catch(E1) | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function vI(l) { | |
| var _1 = this, | |
| I1 = new F(function(v1, y1) { | |
| _1.ready().then(function() { | |
| var E1 = _1._dbInfo; | |
| E1.db.transaction(function(Z0) { | |
| X3(Z0, E1, "SELECT key FROM " + E1.storeName, [], function(Q0, N0) { | |
| var $0 = []; | |
| for (var h0 = 0; h0 < N0.rows.length; h0++) $0.push(N0.rows.item(h0).key); | |
| v1($0) | |
| }, function(Q0, N0) { | |
| y1(N0) | |
| }) | |
| }) | |
| }).catch(y1) | |
| }); | |
| return g(I1, l), I1 | |
| } | |
| function i7(l) { | |
| return new F(function(_1, I1) { | |
| l.transaction(function(v1) { | |
| v1.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'", [], function(y1, E1) { | |
| var Z0 = []; | |
| for (var Q0 = 0; Q0 < E1.rows.length; Q0++) Z0.push(E1.rows.item(Q0).name); | |
| _1({ | |
| db: l, | |
| storeNames: Z0 | |
| }) | |
| }, function(y1, E1) { | |
| I1(E1) | |
| }) | |
| }, function(v1) { | |
| I1(v1) | |
| }) | |
| }) | |
| } | |
| function fd(l, _1) { | |
| _1 = Q.apply(this, arguments); | |
| var I1 = this.config(); | |
| if (l = typeof l !== "function" && l || {}, !l.name) l.name = l.name || I1.name, l.storeName = l.storeName || I1.storeName; | |
| var v1 = this, | |
| y1; | |
| if (!l.name) y1 = F.reject("Invalid arguments"); | |
| else y1 = new F(function(E1) { | |
| var Z0; | |
| if (l.name === I1.name) Z0 = v1._dbInfo.db; | |
| else Z0 = openDatabase(l.name, "", "", 0); | |
| if (!l.storeName) E1(i7(Z0)); | |
| else E1({ | |
| db: Z0, | |
| storeNames: [l.storeName] | |
| }) | |
| }).then(function(E1) { | |
| return new F(function(Z0, Q0) { | |
| E1.db.transaction(function(N0) { | |
| function $0(x4) { | |
| return new F(function(c4, W9) { | |
| N0.executeSql("DROP TABLE IF EXISTS " + x4, [], function() { | |
| c4() | |
| }, function(u9, e6) { | |
| W9(e6) | |
| }) | |
| }) | |
| } | |
| var h0 = []; | |
| for (var g2 = 0, F4 = E1.storeNames.length; g2 < F4; g2++) h0.push($0(E1.storeNames[g2])); | |
| F.all(h0).then(function() { | |
| Z0() | |
| }).catch(function(x4) { | |
| Q0(x4) | |
| }) | |
| }, function(N0) { | |
| Q0(N0) | |
| }) | |
| }) | |
| }); | |
| return g(y1, _1), y1 | |
| } | |
| var Y7 = { | |
| _driver: "webSQLStorage", | |
| _initStorage: iB, | |
| _support: O1(), | |
| iterate: IC, | |
| getItem: Nd, | |
| setItem: zd, | |
| removeItem: Qd, | |
| clear: QG, | |
| length: fG, | |
| key: X7, | |
| keys: vI, | |
| dropInstance: fd | |
| }; | |
| function nB() { | |
| try { | |
| return typeof localStorage !== "undefined" && "setItem" in localStorage && !!localStorage.setItem | |
| } catch (l) { | |
| return !1 | |
| } | |
| } | |
| function qd(l, _1) { | |
| var I1 = l.name + "/"; | |
| if (l.storeName !== _1.storeName) I1 += l.storeName + "/"; | |
| return I1 | |
| } | |
| function rB() { | |
| var l = "_localforage_support_test"; | |
| try { | |
| return localStorage.setItem(l, !0), localStorage.removeItem(l), !1 | |
| } catch (_1) { | |
| return !0 | |
| } | |
| } | |
| function PW() { | |
| return !rB() || localStorage.length > 0 | |
| } | |
| function $W(l) { | |
| var _1 = this, | |
| I1 = {}; | |
| if (l) | |
| for (var v1 in l) I1[v1] = l[v1]; | |
| if (I1.keyPrefix = qd(l, _1._defaultConfig), !PW()) return F.reject(); | |
| return _1._dbInfo = I1, I1.serializer = T6, F.resolve() | |
| } | |
| function v8(l) { | |
| var _1 = this, | |
| I1 = _1.ready().then(function() { | |
| var v1 = _1._dbInfo.keyPrefix; | |
| for (var y1 = localStorage.length - 1; y1 >= 0; y1--) { | |
| var E1 = localStorage.key(y1); | |
| if (E1.indexOf(v1) === 0) localStorage.removeItem(E1) | |
| } | |
| }); | |
| return g(I1, l), I1 | |
| } | |
| function qG(l, _1) { | |
| var I1 = this; | |
| l = K(l); | |
| var v1 = I1.ready().then(function() { | |
| var y1 = I1._dbInfo, | |
| E1 = localStorage.getItem(y1.keyPrefix + l); | |
| if (E1) E1 = y1.serializer.deserialize(E1); | |
| return E1 | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function aB(l, _1) { | |
| var I1 = this, | |
| v1 = I1.ready().then(function() { | |
| var y1 = I1._dbInfo, | |
| E1 = y1.keyPrefix, | |
| Z0 = E1.length, | |
| Q0 = localStorage.length, | |
| N0 = 1; | |
| for (var $0 = 0; $0 < Q0; $0++) { | |
| var h0 = localStorage.key($0); | |
| if (h0.indexOf(E1) !== 0) continue; | |
| var g2 = localStorage.getItem(h0); | |
| if (g2) g2 = y1.serializer.deserialize(g2); | |
| if (g2 = l(g2, h0.substring(Z0), N0++), g2 !== void 0) return g2 | |
| } | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function uW(l, _1) { | |
| var I1 = this, | |
| v1 = I1.ready().then(function() { | |
| var y1 = I1._dbInfo, | |
| E1; | |
| try { | |
| E1 = localStorage.key(l) | |
| } catch (Z0) { | |
| E1 = null | |
| } | |
| if (E1) E1 = E1.substring(y1.keyPrefix.length); | |
| return E1 | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function Rd(l) { | |
| var _1 = this, | |
| I1 = _1.ready().then(function() { | |
| var v1 = _1._dbInfo, | |
| y1 = localStorage.length, | |
| E1 = []; | |
| for (var Z0 = 0; Z0 < y1; Z0++) { | |
| var Q0 = localStorage.key(Z0); | |
| if (Q0.indexOf(v1.keyPrefix) === 0) E1.push(Q0.substring(v1.keyPrefix.length)) | |
| } | |
| return E1 | |
| }); | |
| return g(I1, l), I1 | |
| } | |
| function sB(l) { | |
| var _1 = this, | |
| I1 = _1.keys().then(function(v1) { | |
| return v1.length | |
| }); | |
| return g(I1, l), I1 | |
| } | |
| function TW(l, _1) { | |
| var I1 = this; | |
| l = K(l); | |
| var v1 = I1.ready().then(function() { | |
| var y1 = I1._dbInfo; | |
| localStorage.removeItem(y1.keyPrefix + l) | |
| }); | |
| return g(v1, _1), v1 | |
| } | |
| function Ud(l, _1, I1) { | |
| var v1 = this; | |
| l = K(l); | |
| var y1 = v1.ready().then(function() { | |
| if (_1 === void 0) _1 = null; | |
| var E1 = _1; | |
| return new F(function(Z0, Q0) { | |
| var N0 = v1._dbInfo; | |
| N0.serializer.serialize(_1, function($0, h0) { | |
| if (h0) Q0(h0); | |
| else try { | |
| localStorage.setItem(N0.keyPrefix + l, $0), Z0(E1) | |
| } catch (g2) { | |
| if (g2.name === "QuotaExceededError" || g2.name === "NS_ERROR_DOM_QUOTA_REACHED") Q0(g2); | |
| Q0(g2) | |
| } | |
| }) | |
| }) | |
| }); | |
| return g(y1, I1), y1 | |
| } | |
| function _7(l, _1) { | |
| if (_1 = Q.apply(this, arguments), l = typeof l !== "function" && l || {}, !l.name) { | |
| var I1 = this.config(); | |
| l.name = l.name || I1.name, l.storeName = l.storeName || I1.storeName | |
| } | |
| var v1 = this, | |
| y1; | |
| if (!l.name) y1 = F.reject("Invalid arguments"); | |
| else y1 = new F(function(E1) { | |
| if (!l.storeName) E1(l.name + "/"); | |
| else E1(qd(l, v1._defaultConfig)) | |
| }).then(function(E1) { | |
| for (var Z0 = localStorage.length - 1; Z0 >= 0; Z0--) { | |
| var Q0 = localStorage.key(Z0); | |
| if (Q0.indexOf(E1) === 0) localStorage.removeItem(Q0) | |
| } | |
| }); | |
| return g(y1, _1), y1 | |
| } | |
| var OW = { | |
| _driver: "localStorageWrapper", | |
| _initStorage: $W, | |
| _support: nB(), | |
| iterate: aB, | |
| getItem: qG, | |
| setItem: Ud, | |
| removeItem: TW, | |
| clear: v8, | |
| length: sB, | |
| key: uW, | |
| keys: Rd, | |
| dropInstance: _7 | |
| }, | |
| d1 = function l(_1, I1) { | |
| return _1 === I1 || typeof _1 === "number" && typeof I1 === "number" && isNaN(_1) && isNaN(I1) | |
| }, | |
| o = function l(_1, I1) { | |
| var v1 = _1.length, | |
| y1 = 0; | |
| while (y1 < v1) { | |
| if (d1(_1[y1], I1)) return !0; | |
| y1++ | |
| } | |
| return !1 | |
| }, | |
| S1 = Array.isArray || function(l) { | |
| return Object.prototype.toString.call(l) === "[object Array]" | |
| }, | |
| p1 = {}, | |
| l1 = {}, | |
| s1 = { | |
| INDEXEDDB: F1, | |
| WEBSQL: Y7, | |
| LOCALSTORAGE: OW | |
| }, | |
| U0 = [s1.INDEXEDDB._driver, s1.WEBSQL._driver, s1.LOCALSTORAGE._driver], | |
| w0 = ["dropInstance"], | |
| J0 = ["clear", "getItem", "iterate", "key", "keys", "length", "removeItem", "setItem"].concat(w0), | |
| W0 = { | |
| description: "", | |
| driver: U0.slice(), | |
| name: "localforage", | |
| size: 4980736, | |
| storeName: "keyvaluepairs", | |
| version: 1 | |
| }; | |
| function g0(l, _1) { | |
| l[_1] = function() { | |
| var I1 = arguments; | |
| return l.ready().then(function() { | |
| return l[_1].apply(l, I1) | |
| }) | |
| } | |
| } | |
| function c2() { | |
| for (var l = 1; l < arguments.length; l++) { | |
| var _1 = arguments[l]; | |
| if (_1) { | |
| for (var I1 in _1) | |
| if (_1.hasOwnProperty(I1)) | |
| if (S1(_1[I1])) arguments[0][I1] = _1[I1].slice(); | |
| else arguments[0][I1] = _1[I1] | |
| } | |
| } | |
| return arguments[0] | |
| } | |
| var L2 = function() { | |
| function l(_1) { | |
| B(this, l); | |
| for (var I1 in s1) | |
| if (s1.hasOwnProperty(I1)) { | |
| var v1 = s1[I1], | |
| y1 = v1._driver; | |
| if (this[I1] = y1, !p1[y1]) this.defineDriver(v1) | |
| } this._defaultConfig = c2({}, W0), this._config = c2({}, this._defaultConfig, _1), this._driverSet = null, this._initDriver = null, this._ready = !1, this._dbInfo = null, this._wrapLibraryMethodsWithReady(), this.setDriver(this._config.driver).catch(function() {}) | |
| } | |
| return l.prototype.config = function _1(I1) { | |
| if ((typeof I1 === "undefined" ? "undefined" : w(I1)) === "object") { | |
| if (this._ready) return new Error("Can't call config() after localforage has been used."); | |
| for (var v1 in I1) { | |
| if (v1 === "storeName") I1[v1] = I1[v1].replace(/\W/g, "_"); | |
| if (v1 === "version" && typeof I1[v1] !== "number") return new Error("Database version must be a number."); | |
| this._config[v1] = I1[v1] | |
| } | |
| if ("driver" in I1 && I1.driver) return this.setDriver(this._config.driver); | |
| return !0 | |
| } else if (typeof I1 === "string") return this._config[I1]; | |
| else return this._config | |
| }, l.prototype.defineDriver = function _1(I1, v1, y1) { | |
| var E1 = new F(function(Z0, Q0) { | |
| try { | |
| var N0 = I1._driver, | |
| $0 = new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver"); | |
| if (!I1._driver) { | |
| Q0($0); | |
| return | |
| } | |
| var h0 = J0.concat("_initStorage"); | |
| for (var g2 = 0, F4 = h0.length; g2 < F4; g2++) { | |
| var x4 = h0[g2], | |
| c4 = !o(w0, x4); | |
| if ((c4 || I1[x4]) && typeof I1[x4] !== "function") { | |
| Q0($0); | |
| return | |
| } | |
| } | |
| var W9 = function e6() { | |
| var vd = function HK(Ed) { | |
| return function() { | |
| var $4 = new Error("Method " + Ed + " is not implemented by the current driver"), | |
| oB = F.reject($4); | |
| return g(oB, arguments[arguments.length - 1]), oB | |
| } | |
| }; | |
| for (var dC = 0, qX = w0.length; dC < qX; dC++) { | |
| var RG = w0[dC]; | |
| if (!I1[RG]) I1[RG] = vd(RG) | |
| } | |
| }; | |
| W9(); | |
| var u9 = function e6(vd) { | |
| if (p1[N0]) console.info("Redefining LocalForage driver: " + N0); | |
| p1[N0] = I1, l1[N0] = vd, Z0() | |
| }; | |
| if ("_support" in I1) | |
| if (I1._support && typeof I1._support === "function") I1._support().then(u9, Q0); | |
| else u9(!!I1._support); | |
| else u9(!0) | |
| } catch (e6) { | |
| Q0(e6) | |
| } | |
| }); | |
| return J(E1, v1, y1), E1 | |
| }, l.prototype.driver = function _1() { | |
| return this._driver || null | |
| }, l.prototype.getDriver = function _1(I1, v1, y1) { | |
| var E1 = p1[I1] ? F.resolve(p1[I1]) : F.reject(new Error("Driver not found.")); | |
| return J(E1, v1, y1), E1 | |
| }, l.prototype.getSerializer = function _1(I1) { | |
| var v1 = F.resolve(T6); | |
| return J(v1, I1), v1 | |
| }, l.prototype.ready = function _1(I1) { | |
| var v1 = this, | |
| y1 = v1._driverSet.then(function() { | |
| if (v1._ready === null) v1._ready = v1._initDriver(); | |
| return v1._ready | |
| }); | |
| return J(y1, I1, I1), y1 | |
| }, l.prototype.setDriver = function _1(I1, v1, y1) { | |
| var E1 = this; | |
| if (!S1(I1)) I1 = [I1]; | |
| var Z0 = this._getSupportedDrivers(I1); | |
| function Q0() { | |
| E1._config.driver = E1.driver() | |
| } | |
| function N0(g2) { | |
| return E1._extend(g2), Q0(), E1._ready = E1._initStorage(E1._config), E1._ready | |
| } | |
| function $0(g2) { | |
| return function() { | |
| var F4 = 0; | |
| function x4() { | |
| while (F4 < g2.length) { | |
| var c4 = g2[F4]; | |
| return F4++, E1._dbInfo = null, E1._ready = null, E1.getDriver(c4).then(N0).catch(x4) | |
| } | |
| Q0(); | |
| var W9 = new Error("No available storage method found."); | |
| return E1._driverSet = F.reject(W9), E1._driverSet | |
| } | |
| return x4() | |
| } | |
| } | |
| var h0 = this._driverSet !== null ? this._driverSet.catch(function() { | |
| return F.resolve() | |
| }) : F.resolve(); | |
| return this._driverSet = h0.then(function() { | |
| var g2 = Z0[0]; | |
| return E1._dbInfo = null, E1._ready = null, E1.getDriver(g2).then(function(F4) { | |
| E1._driver = F4._driver, Q0(), E1._wrapLibraryMethodsWithReady(), E1._initDriver = $0(Z0) | |
| }) | |
| }).catch(function() { | |
| Q0(); | |
| var g2 = new Error("No available storage method found."); | |
| return E1._driverSet = F.reject(g2), E1._driverSet | |
| }), J(this._driverSet, v1, y1), this._driverSet | |
| }, l.prototype.supports = function _1(I1) { | |
| return !!l1[I1] | |
| }, l.prototype._extend = function _1(I1) { | |
| c2(this, I1) | |
| }, l.prototype._getSupportedDrivers = function _1(I1) { | |
| var v1 = []; | |
| for (var y1 = 0, E1 = I1.length; y1 < E1; y1++) { | |
| var Z0 = I1[y1]; | |
| if (this.supports(Z0)) v1.push(Z0) | |
| } | |
| return v1 | |
| }, l.prototype._wrapLibraryMethodsWithReady = function _1() { | |
| for (var I1 = 0, v1 = J0.length; I1 < v1; I1++) g0(this, J0[I1]) | |
| }, l.prototype.createInstance = function _1(I1) { | |
| return new l(I1) | |
| }, l | |
| }(), | |
| R2 = new L2; | |
| C.exports = R2 | |
| }, { | |
| "3": 3 | |
| }] | |
| }, {}, [4])(4) | |
| }) | |
| }); | |
| var Gy1 = Y((dy1) => { | |
| Object.defineProperty(dy1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Jw = V0(), | |
| u24 = Iy1(), | |
| uF = XE(), | |
| eX = Jw.GLOBAL_OBJ; | |
| class YE { | |
| static __initStatic() { | |
| this.id = "Offline" | |
| } | |
| constructor(I = {}) { | |
| this.name = YE.id, this.maxStoredEvents = I.maxStoredEvents || 30, this.offlineEventStore = u24.createInstance({ | |
| name: "sentry/offlineEventStore" | |
| }) | |
| } | |
| setupOnce(I, d) { | |
| if (this.hub = d(), "addEventListener" in eX) eX.addEventListener("online", () => { | |
| this._sendEvents().catch(() => { | |
| uF.DEBUG_BUILD && Jw.logger.warn("could not send cached events") | |
| }) | |
| }); | |
| let G = (Z) => { | |
| if (this.hub && this.hub.getIntegration(YE)) { | |
| if ("navigator" in eX && "onLine" in eX.navigator && !eX.navigator.onLine) return uF.DEBUG_BUILD && Jw.logger.log("Event dropped due to being a offline - caching instead"), this._cacheEvent(Z).then((C) => this._enforceMaxEvents()).catch((C) => { | |
| uF.DEBUG_BUILD && Jw.logger.warn("could not cache event while offline") | |
| }), null | |
| } | |
| return Z | |
| }; | |
| if (G.id = this.name, I(G), "navigator" in eX && "onLine" in eX.navigator && eX.navigator.onLine) this._sendEvents().catch(() => { | |
| uF.DEBUG_BUILD && Jw.logger.warn("could not send cached events") | |
| }) | |
| } | |
| async _cacheEvent(I) { | |
| return this.offlineEventStore.setItem(Jw.uuid4(), Jw.normalize(I)) | |
| } | |
| async _enforceMaxEvents() { | |
| let I = []; | |
| return this.offlineEventStore.iterate((d, G, Z) => { | |
| I.push({ | |
| cacheKey: G, | |
| event: d | |
| }) | |
| }).then(() => this._purgeEvents(I.sort((d, G) => (G.event.timestamp || 0) - (d.event.timestamp || 0)).slice(this.maxStoredEvents < I.length ? this.maxStoredEvents : I.length).map((d) => d.cacheKey))).catch((d) => { | |
| uF.DEBUG_BUILD && Jw.logger.warn("could not enforce max events") | |
| }) | |
| } | |
| async _purgeEvent(I) { | |
| return this.offlineEventStore.removeItem(I) | |
| } | |
| async _purgeEvents(I) { | |
| return Promise.all(I.map((d) => this._purgeEvent(d))).then() | |
| } | |
| async _sendEvents() { | |
| return this.offlineEventStore.iterate((I, d, G) => { | |
| if (this.hub) this.hub.captureEvent(I), this._purgeEvent(d).catch((Z) => { | |
| uF.DEBUG_BUILD && Jw.logger.warn("could not purge event from cache") | |
| }); | |
| else uF.DEBUG_BUILD && Jw.logger.warn("no hub found - could not send cached event") | |
| }) | |
| } | |
| } | |
| YE.__initStatic(); | |
| dy1.Offline = YE | |
| }); | |
| var Ay1 = Y((By1) => { | |
| Object.defineProperty(By1, "__esModule", { | |
| value: !0 | |
| }); | |
| var _E = V4(), | |
| Cy1 = V0(), | |
| O24 = Cy1.GLOBAL_OBJ, | |
| Wy1 = "ReportingObserver", | |
| Zy1 = new WeakMap, | |
| m24 = (I = {}) => { | |
| let d = I.types || ["crash", "deprecation", "intervention"]; | |
| function G(Z) { | |
| if (!Zy1.has(_E.getClient())) return; | |
| for (let C of Z) _E.withScope((W) => { | |
| W.setExtra("url", C.url); | |
| let w = `ReportingObserver [${C.type}]`, | |
| B = "No details available"; | |
| if (C.body) { | |
| let A = {}; | |
| for (let V in C.body) A[V] = C.body[V]; | |
| if (W.setExtra("body", A), C.type === "crash") { | |
| let V = C.body; | |
| B = [V.crashId || "", V.reason || ""].join(" ").trim() || B | |
| } else B = C.body.message || B | |
| } | |
| _E.captureMessage(`${w}: ${B}`) | |
| }) | |
| } | |
| return { | |
| name: Wy1, | |
| setupOnce() { | |
| if (!Cy1.supportsReportingObserver()) return; | |
| new O24.ReportingObserver(G, { | |
| buffered: !0, | |
| types: d | |
| }).observe() | |
| }, | |
| setup(Z) { | |
| Zy1.set(Z, !0) | |
| } | |
| } | |
| }, | |
| wy1 = _E.defineIntegration(m24), | |
| l24 = _E.convertIntegrationFnToClass(Wy1, wy1); | |
| By1.ReportingObserver = l24; | |
| By1.reportingObserverIntegration = wy1 | |
| }); | |
| var Hy1 = Y((Dy1) => { | |
| Object.defineProperty(Dy1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Xy1 = V4(), | |
| Vy1 = V0(), | |
| Yy1 = "RewriteFrames", | |
| j24 = (I = {}) => { | |
| let d = I.root, | |
| G = I.prefix || "app:///", | |
| Z = I.iteratee || ((w) => { | |
| if (!w.filename) return w; | |
| let B = /^[a-zA-Z]:\\/.test(w.filename) || w.filename.includes("\\") && !w.filename.includes("/"), | |
| A = /^\//.test(w.filename); | |
| if (B || A) { | |
| let V = B ? w.filename.replace(/^[a-zA-Z]:/, "").replace(/\\/g, "/") : w.filename, | |
| X = d ? Vy1.relative(d, V) : Vy1.basename(V); | |
| w.filename = `${G}${X}` | |
| } | |
| return w | |
| }); | |
| function C(w) { | |
| try { | |
| return { | |
| ...w, | |
| exception: { | |
| ...w.exception, | |
| values: w.exception.values.map((B) => ({ | |
| ...B, | |
| ...B.stacktrace && { | |
| stacktrace: W(B.stacktrace) | |
| } | |
| })) | |
| } | |
| } | |
| } catch (B) { | |
| return w | |
| } | |
| } | |
| function W(w) { | |
| return { | |
| ...w, | |
| frames: w && w.frames && w.frames.map((B) => Z(B)) | |
| } | |
| } | |
| return { | |
| name: Yy1, | |
| setupOnce() {}, | |
| processEvent(w) { | |
| let B = w; | |
| if (w.exception && Array.isArray(w.exception.values)) B = C(B); | |
| return B | |
| } | |
| } | |
| }, | |
| _y1 = Xy1.defineIntegration(j24), | |
| k24 = Xy1.convertIntegrationFnToClass(Yy1, _y1); | |
| Dy1.RewriteFrames = k24; | |
| Dy1.rewriteFramesIntegration = _y1 | |
| }); | |
| var Ny1 = Y((Ky1) => { | |
| Object.defineProperty(Ky1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Fy1 = V4(), | |
| gy1 = "SessionTiming", | |
| p24 = () => { | |
| let I = Date.now(); | |
| return { | |
| name: gy1, | |
| setupOnce() {}, | |
| processEvent(d) { | |
| let G = Date.now(); | |
| return { | |
| ...d, | |
| extra: { | |
| ...d.extra, | |
| ["session:start"]: I, | |
| ["session:duration"]: G - I, | |
| ["session:end"]: G | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| Jy1 = Fy1.defineIntegration(p24), | |
| i24 = Fy1.convertIntegrationFnToClass(gy1, Jy1); | |
| Ky1.SessionTiming = i24; | |
| Ky1.sessionTimingIntegration = Jy1 | |
| }); | |
| var fy1 = Y((Qy1) => { | |
| Object.defineProperty(Qy1, "__esModule", { | |
| value: !0 | |
| }); | |
| var a24 = V4(), | |
| zy1 = "Transaction", | |
| s24 = () => { | |
| return { | |
| name: zy1, | |
| setupOnce() {}, | |
| processEvent(I) { | |
| let d = e24(I); | |
| for (let G = d.length - 1; G >= 0; G--) { | |
| let Z = d[G]; | |
| if (Z.in_app === !0) { | |
| I.transaction = t24(Z); | |
| break | |
| } | |
| } | |
| return I | |
| } | |
| } | |
| }, | |
| o24 = a24.convertIntegrationFnToClass(zy1, s24); | |
| function e24(I) { | |
| let d = I.exception && I.exception.values && I.exception.values[0]; | |
| return d && d.stacktrace && d.stacktrace.frames || [] | |
| } | |
| function t24(I) { | |
| return I.module || I.function ? `${I.module||"?"}/${I.function||"?"}` : "<unknown>" | |
| } | |
| Qy1.Transaction = o24 | |
| }); | |
| var Ly1 = Y((Sy1) => { | |
| Object.defineProperty(Sy1, "__esModule", { | |
| value: !0 | |
| }); | |
| var uA = V4(), | |
| Kw = V0(), | |
| om = XE(), | |
| qy1 = "HttpClient", | |
| d44 = (I = {}) => { | |
| let d = { | |
| failedRequestStatusCodes: [ | |
| [500, 599] | |
| ], | |
| failedRequestTargets: [/.*/], | |
| ...I | |
| }; | |
| return { | |
| name: qy1, | |
| setupOnce() {}, | |
| setup(G) { | |
| X44(G, d), Y44(G, d) | |
| } | |
| } | |
| }, | |
| Ry1 = uA.defineIntegration(d44), | |
| G44 = uA.convertIntegrationFnToClass(qy1, Ry1); | |
| function Z44(I, d, G, Z) { | |
| if (vy1(I, G.status, G.url)) { | |
| let C = _44(d, Z), | |
| W, w, B, A; | |
| if (My1())[{ | |
| headers: W, | |
| cookies: B | |
| }, { | |
| headers: w, | |
| cookies: A | |
| }] = [{ | |
| cookieHeader: "Cookie", | |
| obj: C | |
| }, { | |
| cookieHeader: "Set-Cookie", | |
| obj: G | |
| }].map(({ | |
| cookieHeader: X, | |
| obj: _ | |
| }) => { | |
| let F = w44(_.headers), | |
| g; | |
| try { | |
| let J = F[X] || F[X.toLowerCase()] || void 0; | |
| if (J) g = Uy1(J) | |
| } catch (J) { | |
| om.DEBUG_BUILD && Kw.logger.log(`Could not extract cookies from header ${X}`) | |
| } | |
| return { | |
| headers: F, | |
| cookies: g | |
| } | |
| }); | |
| let V = Ey1({ | |
| url: C.url, | |
| method: C.method, | |
| status: G.status, | |
| requestHeaders: W, | |
| responseHeaders: w, | |
| requestCookies: B, | |
| responseCookies: A | |
| }); | |
| uA.captureEvent(V) | |
| } | |
| } | |
| function C44(I, d, G, Z) { | |
| if (vy1(I, d.status, d.responseURL)) { | |
| let C, W, w; | |
| if (My1()) { | |
| try { | |
| let A = d.getResponseHeader("Set-Cookie") || d.getResponseHeader("set-cookie") || void 0; | |
| if (A) W = Uy1(A) | |
| } catch (A) { | |
| om.DEBUG_BUILD && Kw.logger.log("Could not extract cookies from response headers") | |
| } | |
| try { | |
| w = B44(d) | |
| } catch (A) { | |
| om.DEBUG_BUILD && Kw.logger.log("Could not extract headers from response") | |
| } | |
| C = Z | |
| } | |
| let B = Ey1({ | |
| url: d.responseURL, | |
| method: G, | |
| status: d.status, | |
| requestHeaders: C, | |
| responseHeaders: w, | |
| responseCookies: W | |
| }); | |
| uA.captureEvent(B) | |
| } | |
| } | |
| function W44(I) { | |
| if (I) { | |
| let d = I["Content-Length"] || I["content-length"]; | |
| if (d) return parseInt(d, 10) | |
| } | |
| return | |
| } | |
| function Uy1(I) { | |
| return I.split("; ").reduce((d, G) => { | |
| let [Z, C] = G.split("="); | |
| return d[Z] = C, d | |
| }, {}) | |
| } | |
| function w44(I) { | |
| let d = {}; | |
| return I.forEach((G, Z) => { | |
| d[Z] = G | |
| }), d | |
| } | |
| function B44(I) { | |
| let d = I.getAllResponseHeaders(); | |
| if (!d) return {}; | |
| return d.split(`\r | |
| `).reduce((G, Z) => { | |
| let [C, W] = Z.split(": "); | |
| return G[C] = W, G | |
| }, {}) | |
| } | |
| function A44(I, d) { | |
| return I.some((G) => { | |
| if (typeof G === "string") return d.includes(G); | |
| return G.test(d) | |
| }) | |
| } | |
| function V44(I, d) { | |
| return I.some((G) => { | |
| if (typeof G === "number") return G === d; | |
| return d >= G[0] && d <= G[1] | |
| }) | |
| } | |
| function X44(I, d) { | |
| if (!Kw.supportsNativeFetch()) return; | |
| Kw.addFetchInstrumentationHandler((G) => { | |
| if (uA.getClient() !== I) return; | |
| let { | |
| response: Z, | |
| args: C | |
| } = G, [W, w] = C; | |
| if (!Z) return; | |
| Z44(d, W, Z, w) | |
| }) | |
| } | |
| function Y44(I, d) { | |
| if (!("XMLHttpRequest" in Kw.GLOBAL_OBJ)) return; | |
| Kw.addXhrInstrumentationHandler((G) => { | |
| if (uA.getClient() !== I) return; | |
| let Z = G.xhr, | |
| C = Z[Kw.SENTRY_XHR_DATA_KEY]; | |
| if (!C) return; | |
| let { | |
| method: W, | |
| request_headers: w | |
| } = C; | |
| try { | |
| C44(d, Z, W, w) | |
| } catch (B) { | |
| om.DEBUG_BUILD && Kw.logger.warn("Error while extracting response event form XHR response", B) | |
| } | |
| }) | |
| } | |
| function vy1(I, d, G) { | |
| return V44(I.failedRequestStatusCodes, d) && A44(I.failedRequestTargets, G) && !uA.isSentryRequestUrl(G, uA.getClient()) | |
| } | |
| function Ey1(I) { | |
| let d = `HTTP Client Error with status code: ${I.status}`, | |
| G = { | |
| message: d, | |
| exception: { | |
| values: [{ | |
| type: "Error", | |
| value: d | |
| }] | |
| }, | |
| request: { | |
| url: I.url, | |
| method: I.method, | |
| headers: I.requestHeaders, | |
| cookies: I.requestCookies | |
| }, | |
| contexts: { | |
| response: { | |
| status_code: I.status, | |
| headers: I.responseHeaders, | |
| cookies: I.responseCookies, | |
| body_size: W44(I.responseHeaders) | |
| } | |
| } | |
| }; | |
| return Kw.addExceptionMechanism(G, { | |
| type: "http.client", | |
| handled: !1 | |
| }), G | |
| } | |
| function _44(I, d) { | |
| if (!d && I instanceof Request) return I; | |
| if (I instanceof Request && I.bodyUsed) return I; | |
| return new Request(I, d) | |
| } | |
| function My1() { | |
| let I = uA.getClient(); | |
| return I ? Boolean(I.getOptions().sendDefaultPii) : !1 | |
| } | |
| Sy1.HttpClient = G44; | |
| Sy1.httpClientIntegration = Ry1 | |
| }); | |
| var Oy1 = Y((Ty1) => { | |
| Object.defineProperty(Ty1, "__esModule", { | |
| value: !0 | |
| }); | |
| var yy1 = V4(), | |
| b01 = V0(), | |
| l01 = b01.GLOBAL_OBJ, | |
| F44 = 7, | |
| Py1 = "ContextLines", | |
| g44 = (I = {}) => { | |
| let d = I.frameContextLines != null ? I.frameContextLines : F44; | |
| return { | |
| name: Py1, | |
| setupOnce() {}, | |
| processEvent(G) { | |
| return K44(G, d) | |
| } | |
| } | |
| }, | |
| $y1 = yy1.defineIntegration(g44), | |
| J44 = yy1.convertIntegrationFnToClass(Py1, $y1); | |
| function K44(I, d) { | |
| let G = l01.document, | |
| Z = l01.location && b01.stripUrlQueryAndFragment(l01.location.href); | |
| if (!G || !Z) return I; | |
| let C = I.exception && I.exception.values; | |
| if (!C || !C.length) return I; | |
| let W = G.documentElement.innerHTML; | |
| if (!W) return I; | |
| let w = ["<!DOCTYPE html>", "<html>", ...W.split(` | |
| `), "</html>"]; | |
| return C.forEach((B) => { | |
| let A = B.stacktrace; | |
| if (A && A.frames) A.frames = A.frames.map((V) => uy1(V, w, Z, d)) | |
| }), I | |
| } | |
| function uy1(I, d, G, Z) { | |
| if (I.filename !== G || !I.lineno || !d.length) return I; | |
| return b01.addContextToFrame(d, I, Z), I | |
| } | |
| Ty1.ContextLines = J44; | |
| Ty1.applySourceContextToFrame = uy1; | |
| Ty1.contextLinesIntegration = $y1 | |
| }); | |
| var ny1 = Y((iy1) => { | |
| Object.defineProperty(iy1, "__esModule", { | |
| value: !0 | |
| }); | |
| var my1 = yL1(), | |
| ly1 = OL1(), | |
| by1 = nL1(), | |
| hy1 = eL1(), | |
| f44 = Gy1(), | |
| jy1 = Ay1(), | |
| ky1 = Hy1(), | |
| xy1 = Ny1(), | |
| q44 = fy1(), | |
| cy1 = Ly1(), | |
| py1 = Oy1(); | |
| iy1.CaptureConsole = my1.CaptureConsole; | |
| iy1.captureConsoleIntegration = my1.captureConsoleIntegration; | |
| iy1.Debug = ly1.Debug; | |
| iy1.debugIntegration = ly1.debugIntegration; | |
| iy1.Dedupe = by1.Dedupe; | |
| iy1.dedupeIntegration = by1.dedupeIntegration; | |
| iy1.ExtraErrorData = hy1.ExtraErrorData; | |
| iy1.extraErrorDataIntegration = hy1.extraErrorDataIntegration; | |
| iy1.Offline = f44.Offline; | |
| iy1.ReportingObserver = jy1.ReportingObserver; | |
| iy1.reportingObserverIntegration = jy1.reportingObserverIntegration; | |
| iy1.RewriteFrames = ky1.RewriteFrames; | |
| iy1.rewriteFramesIntegration = ky1.rewriteFramesIntegration; | |
| iy1.SessionTiming = xy1.SessionTiming; | |
| iy1.sessionTimingIntegration = xy1.sessionTimingIntegration; | |
| iy1.Transaction = q44.Transaction; | |
| iy1.HttpClient = cy1.HttpClient; | |
| iy1.httpClientIntegration = cy1.httpClientIntegration; | |
| iy1.ContextLines = py1.ContextLines; | |
| iy1.contextLinesIntegration = py1.contextLinesIntegration | |
| }); | |
| var em = Y((ry1) => { | |
| Object.defineProperty(ry1, "__esModule", { | |
| value: !0 | |
| }); | |
| var c44 = [ | |
| ["january", "1"], | |
| ["february", "2"], | |
| ["march", "3"], | |
| ["april", "4"], | |
| ["may", "5"], | |
| ["june", "6"], | |
| ["july", "7"], | |
| ["august", "8"], | |
| ["september", "9"], | |
| ["october", "10"], | |
| ["november", "11"], | |
| ["december", "12"], | |
| ["jan", "1"], | |
| ["feb", "2"], | |
| ["mar", "3"], | |
| ["apr", "4"], | |
| ["may", "5"], | |
| ["jun", "6"], | |
| ["jul", "7"], | |
| ["aug", "8"], | |
| ["sep", "9"], | |
| ["oct", "10"], | |
| ["nov", "11"], | |
| ["dec", "12"], | |
| ["sunday", "0"], | |
| ["monday", "1"], | |
| ["tuesday", "2"], | |
| ["wednesday", "3"], | |
| ["thursday", "4"], | |
| ["friday", "5"], | |
| ["saturday", "6"], | |
| ["sun", "0"], | |
| ["mon", "1"], | |
| ["tue", "2"], | |
| ["wed", "3"], | |
| ["thu", "4"], | |
| ["fri", "5"], | |
| ["sat", "6"] | |
| ]; | |
| function p44(I) { | |
| return c44.reduce((d, [G, Z]) => d.replace(new RegExp(G, "gi"), Z), I) | |
| } | |
| ry1.replaceCronNames = p44 | |
| }); | |
| var ty1 = Y((ey1) => { | |
| Object.defineProperty(ey1, "__esModule", { | |
| value: !0 | |
| }); | |
| var ay1 = V4(), | |
| sy1 = em(), | |
| oy1 = "Automatic instrumentation of CronJob only supports crontab string"; | |
| function n44(I, d) { | |
| let G = !1; | |
| return new Proxy(I, { | |
| construct(Z, C) { | |
| let [W, w, B, A, V, ...X] = C; | |
| if (typeof W !== "string") throw new Error(oy1); | |
| if (G) throw new Error(`A job named '${d}' has already been scheduled`); | |
| G = !0; | |
| let _ = sy1.replaceCronNames(W); | |
| function F(g, J) { | |
| return ay1.withMonitor(d, () => { | |
| return w(g, J) | |
| }, { | |
| schedule: { | |
| type: "crontab", | |
| value: _ | |
| }, | |
| timezone: V || void 0 | |
| }) | |
| } | |
| return new Z(W, F, B, A, V, ...X) | |
| }, | |
| get(Z, C) { | |
| if (C === "from") return (W) => { | |
| let { | |
| cronTime: w, | |
| onTick: B, | |
| timeZone: A | |
| } = W; | |
| if (typeof w !== "string") throw new Error(oy1); | |
| if (G) throw new Error(`A job named '${d}' has already been scheduled`); | |
| G = !0; | |
| let V = sy1.replaceCronNames(w); | |
| return W.onTick = (X, _) => { | |
| return ay1.withMonitor(d, () => { | |
| return B(X, _) | |
| }, { | |
| schedule: { | |
| type: "crontab", | |
| value: V | |
| }, | |
| timezone: A || void 0 | |
| }) | |
| }, Z.from(W) | |
| }; | |
| else return Z[C] | |
| } | |
| }) | |
| } | |
| ey1.instrumentCron = n44 | |
| }); | |
| var GP1 = Y((dP1) => { | |
| var { | |
| _optionalChain: IP1 | |
| } = V0(); | |
| Object.defineProperty(dP1, "__esModule", { | |
| value: !0 | |
| }); | |
| var a44 = V4(), | |
| s44 = em(); | |
| function o44(I) { | |
| return new Proxy(I, { | |
| get(d, G) { | |
| if (G === "schedule" && d.schedule) return new Proxy(d.schedule, { | |
| apply(Z, C, W) { | |
| let [w, , B] = W; | |
| if (!IP1([B, "optionalAccess", (A) => A.name])) throw new Error('Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.'); | |
| return a44.withMonitor(B.name, () => { | |
| return Z.apply(C, W) | |
| }, { | |
| schedule: { | |
| type: "crontab", | |
| value: s44.replaceCronNames(w) | |
| }, | |
| timezone: IP1([B, "optionalAccess", (A) => A.timezone]) | |
| }) | |
| } | |
| }); | |
| else return d[G] | |
| } | |
| }) | |
| } | |
| dP1.instrumentNodeCron = o44 | |
| }); | |
| var CP1 = Y((ZP1) => { | |
| Object.defineProperty(ZP1, "__esModule", { | |
| value: !0 | |
| }); | |
| var t44 = V4(), | |
| I54 = em(); | |
| function d54(I) { | |
| return new Proxy(I, { | |
| get(d, G) { | |
| if (G === "scheduleJob") return new Proxy(d.scheduleJob, { | |
| apply(Z, C, W) { | |
| let [w, B] = W; | |
| if (typeof w !== "string" || typeof B !== "string") throw new Error("Automatic instrumentation of 'node-schedule' requires the first parameter of 'scheduleJob' to be a job name string and the second parameter to be a crontab string"); | |
| let A = w, | |
| V = B; | |
| return t44.withMonitor(A, () => { | |
| return Z.apply(C, W) | |
| }, { | |
| schedule: { | |
| type: "crontab", | |
| value: I54.replaceCronNames(V) | |
| } | |
| }) | |
| } | |
| }); | |
| return d[G] | |
| } | |
| }) | |
| } | |
| ZP1.instrumentNodeSchedule = d54 | |
| }); | |
| var XP1 = Y((VP1) => { | |
| Object.defineProperty(VP1, "__esModule", { | |
| value: !0 | |
| }); | |
| var Q2 = V4(), | |
| Z54 = XM1(), | |
| C54 = F01(), | |
| W54 = K01(), | |
| DE = y01(), | |
| h01 = V0(), | |
| w54 = tS1(), | |
| WP1 = L01(), | |
| B54 = BL1(), | |
| A54 = gL1(), | |
| V54 = UL1(), | |
| X54 = EL1(), | |
| tX = ny1(), | |
| Y54 = Sm(), | |
| _54 = hm(), | |
| D54 = km(), | |
| H54 = mm(), | |
| F54 = Pm(), | |
| g54 = Lm(), | |
| J54 = Om(), | |
| K54 = xm(), | |
| N54 = rm(), | |
| wP1 = O01(), | |
| BP1 = pm(), | |
| AP1 = $m(), | |
| z54 = T01(), | |
| Q54 = ty1(), | |
| f54 = GP1(), | |
| q54 = CP1(), | |
| R54 = WP1.createGetModuleFromFilename(), | |
| U54 = { | |
| ...Q2.Integrations, | |
| ...V54, | |
| ...X54 | |
| }, | |
| v54 = { | |
| instrumentCron: Q54.instrumentCron, | |
| instrumentNodeCron: f54.instrumentNodeCron, | |
| instrumentNodeSchedule: q54.instrumentNodeSchedule | |
| }; | |
| VP1.Hub = Q2.Hub; | |
| VP1.SDK_VERSION = Q2.SDK_VERSION; | |
| VP1.SEMANTIC_ATTRIBUTE_SENTRY_OP = Q2.SEMANTIC_ATTRIBUTE_SENTRY_OP; | |
| VP1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = Q2.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN; | |
| VP1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = Q2.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE; | |
| VP1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = Q2.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE; | |
| VP1.Scope = Q2.Scope; | |
| VP1.addBreadcrumb = Q2.addBreadcrumb; | |
| VP1.addEventProcessor = Q2.addEventProcessor; | |
| VP1.addGlobalEventProcessor = Q2.addGlobalEventProcessor; | |
| VP1.addIntegration = Q2.addIntegration; | |
| VP1.captureCheckIn = Q2.captureCheckIn; | |
| VP1.captureEvent = Q2.captureEvent; | |
| VP1.captureException = Q2.captureException; | |
| VP1.captureMessage = Q2.captureMessage; | |
| VP1.captureSession = Q2.captureSession; | |
| VP1.close = Q2.close; | |
| VP1.configureScope = Q2.configureScope; | |
| VP1.continueTrace = Q2.continueTrace; | |
| VP1.createTransport = Q2.createTransport; | |
| VP1.endSession = Q2.endSession; | |
| VP1.extractTraceparentData = Q2.extractTraceparentData; | |
| VP1.flush = Q2.flush; | |
| VP1.functionToStringIntegration = Q2.functionToStringIntegration; | |
| VP1.getActiveSpan = Q2.getActiveSpan; | |
| VP1.getActiveTransaction = Q2.getActiveTransaction; | |
| VP1.getClient = Q2.getClient; | |
| VP1.getCurrentHub = Q2.getCurrentHub; | |
| VP1.getCurrentScope = Q2.getCurrentScope; | |
| VP1.getGlobalScope = Q2.getGlobalScope; | |
| VP1.getHubFromCarrier = Q2.getHubFromCarrier; | |
| VP1.getIsolationScope = Q2.getIsolationScope; | |
| VP1.getSpanStatusFromHttpCode = Q2.getSpanStatusFromHttpCode; | |
| VP1.inboundFiltersIntegration = Q2.inboundFiltersIntegration; | |
| VP1.isInitialized = Q2.isInitialized; | |
| VP1.lastEventId = Q2.lastEventId; | |
| VP1.linkedErrorsIntegration = Q2.linkedErrorsIntegration; | |
| VP1.makeMain = Q2.makeMain; | |
| VP1.metrics = Q2.metrics; | |
| VP1.parameterize = Q2.parameterize; | |
| VP1.requestDataIntegration = Q2.requestDataIntegration; | |
| VP1.runWithAsyncContext = Q2.runWithAsyncContext; | |
| VP1.setContext = Q2.setContext; | |
| VP1.setCurrentClient = Q2.setCurrentClient; | |
| VP1.setExtra = Q2.setExtra; | |
| VP1.setExtras = Q2.setExtras; | |
| VP1.setHttpStatus = Q2.setHttpStatus; | |
| VP1.setMeasurement = Q2.setMeasurement; | |
| VP1.setTag = Q2.setTag; | |
| VP1.setTags = Q2.setTags; | |
| VP1.setUser = Q2.setUser; | |
| VP1.spanStatusfromHttpCode = Q2.spanStatusfromHttpCode; | |
| VP1.startActiveSpan = Q2.startActiveSpan; | |
| VP1.startInactiveSpan = Q2.startInactiveSpan; | |
| VP1.startSession = Q2.startSession; | |
| VP1.startSpan = Q2.startSpan; | |
| VP1.startSpanManual = Q2.startSpanManual; | |
| VP1.startTransaction = Q2.startTransaction; | |
| VP1.trace = Q2.trace; | |
| VP1.withActiveSpan = Q2.withActiveSpan; | |
| VP1.withIsolationScope = Q2.withIsolationScope; | |
| VP1.withMonitor = Q2.withMonitor; | |
| VP1.withScope = Q2.withScope; | |
| VP1.autoDiscoverNodePerformanceMonitoringIntegrations = Z54.autoDiscoverNodePerformanceMonitoringIntegrations; | |
| VP1.NodeClient = C54.NodeClient; | |
| VP1.makeNodeTransport = W54.makeNodeTransport; | |
| VP1.defaultIntegrations = DE.defaultIntegrations; | |
| VP1.defaultStackParser = DE.defaultStackParser; | |
| VP1.getDefaultIntegrations = DE.getDefaultIntegrations; | |
| VP1.getSentryRelease = DE.getSentryRelease; | |
| VP1.init = DE.init; | |
| VP1.DEFAULT_USER_INCLUDES = h01.DEFAULT_USER_INCLUDES; | |
| VP1.addRequestDataToEvent = h01.addRequestDataToEvent; | |
| VP1.extractRequestData = h01.extractRequestData; | |
| VP1.deepReadDirSync = w54.deepReadDirSync; | |
| VP1.createGetModuleFromFilename = WP1.createGetModuleFromFilename; | |
| VP1.enableAnrDetection = B54.enableAnrDetection; | |
| VP1.Handlers = A54; | |
| VP1.captureConsoleIntegration = tX.captureConsoleIntegration; | |
| VP1.debugIntegration = tX.debugIntegration; | |
| VP1.dedupeIntegration = tX.dedupeIntegration; | |
| VP1.extraErrorDataIntegration = tX.extraErrorDataIntegration; | |
| VP1.httpClientIntegration = tX.httpClientIntegration; | |
| VP1.reportingObserverIntegration = tX.reportingObserverIntegration; | |
| VP1.rewriteFramesIntegration = tX.rewriteFramesIntegration; | |
| VP1.sessionTimingIntegration = tX.sessionTimingIntegration; | |
| VP1.consoleIntegration = Y54.consoleIntegration; | |
| VP1.onUncaughtExceptionIntegration = _54.onUncaughtExceptionIntegration; | |
| VP1.onUnhandledRejectionIntegration = D54.onUnhandledRejectionIntegration; | |
| VP1.modulesIntegration = H54.modulesIntegration; | |
| VP1.contextLinesIntegration = F54.contextLinesIntegration; | |
| VP1.nodeContextIntegration = g54.nodeContextIntegration; | |
| VP1.localVariablesIntegration = J54.localVariablesIntegration; | |
| VP1.spotlightIntegration = K54.spotlightIntegration; | |
| VP1.anrIntegration = N54.anrIntegration; | |
| VP1.hapiErrorPlugin = wP1.hapiErrorPlugin; | |
| VP1.hapiIntegration = wP1.hapiIntegration; | |
| VP1.Undici = BP1.Undici; | |
| VP1.nativeNodeFetchintegration = BP1.nativeNodeFetchintegration; | |
| VP1.Http = AP1.Http; | |
| VP1.httpIntegration = AP1.httpIntegration; | |
| VP1.trpcMiddleware = z54.trpcMiddleware; | |
| VP1.Integrations = U54; | |
| VP1.cron = v54; | |
| VP1.getModuleFromFilename = R54 | |
| }); | |
| var mu1 = Y((Sq9, Ou1) => { | |
| Ou1.exports = function I(d) { | |
| return d.map(function(G) { | |
| if (G && typeof G === "object") return G.op.replace(/(.)/g, "\\$1"); | |
| if (/["\s]/.test(G) && !/'/.test(G)) return "'" + G.replace(/(['\\])/g, "\\$1") + "'"; | |
| if (/["'\s]/.test(G)) return '"' + G.replace(/(["\\$`!])/g, "\\$1") + '"'; | |
| return String(G).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g, "$1\\$2") | |
| }).join(" ") | |
| } | |
| }); | |
| var cu1 = Y((Lq9, xu1) => { | |
| var ku1 = "(?:" + ["\\|\\|", "\\&\\&", ";;", "\\|\\&", "\\<\\(", "\\<\\<\\<", ">>", ">\\&", "<\\&", "[&;()|<>]"].join("|") + ")", | |
| lu1 = new RegExp("^" + ku1 + "$"), | |
| bu1 = "|&;()<> \\t", | |
| jG4 = '"((\\\\"|[^"])*?)"', | |
| kG4 = "'((\\\\'|[^'])*?)'", | |
| xG4 = /^#$/, | |
| hu1 = "'", | |
| ju1 = '"', | |
| o01 = "$", | |
| lF = "", | |
| cG4 = 4294967296; | |
| for (e01 = 0; e01 < 4; e01++) lF += (cG4 * Math.random()).toString(16); | |
| var e01, pG4 = new RegExp("^" + lF); | |
| function iG4(I, d) { | |
| var G = d.lastIndex, | |
| Z = [], | |
| C; | |
| while (C = d.exec(I)) | |
| if (Z.push(C), d.lastIndex === C.index) d.lastIndex += 1; | |
| return d.lastIndex = G, Z | |
| } | |
| function nG4(I, d, G) { | |
| var Z = typeof I === "function" ? I(G) : I[G]; | |
| if (typeof Z === "undefined" && G != "") Z = ""; | |
| else if (typeof Z === "undefined") Z = "$"; | |
| if (typeof Z === "object") return d + lF + JSON.stringify(Z) + lF; | |
| return d + Z | |
| } | |
| function rG4(I, d, G) { | |
| if (!G) G = {}; | |
| var Z = G.escape || "\\", | |
| C = "(\\" + Z + `['"` + bu1 + `]|[^\\s'"` + bu1 + "])+", | |
| W = new RegExp(["(" + ku1 + ")", "(" + C + "|" + jG4 + "|" + kG4 + ")+"].join("|"), "g"), | |
| w = iG4(I, W); | |
| if (w.length === 0) return []; | |
| if (!d) d = {}; | |
| var B = !1; | |
| return w.map(function(A) { | |
| var V = A[0]; | |
| if (!V || B) return; | |
| if (lu1.test(V)) return { | |
| op: V | |
| }; | |
| var X = !1, | |
| _ = !1, | |
| F = "", | |
| g = !1, | |
| J; | |
| function K() { | |
| J += 1; | |
| var S, P, $ = V.charAt(J); | |
| if ($ === "{") { | |
| if (J += 1, V.charAt(J) === "}") throw new Error("Bad substitution: " + V.slice(J - 2, J + 1)); | |
| if (S = V.indexOf("}", J), S < 0) throw new Error("Bad substitution: " + V.slice(J)); | |
| P = V.slice(J, S), J = S | |
| } else if (/[*@#?$!_-]/.test($)) P = $, J += 1; | |
| else { | |
| var h = V.slice(J); | |
| if (S = h.match(/[^\w\d_]/), !S) P = h, J = V.length; | |
| else P = h.slice(0, S.index), J += S.index - 1 | |
| } | |
| return nG4(d, "", P) | |
| } | |
| for (J = 0; J < V.length; J++) { | |
| var Q = V.charAt(J); | |
| if (g = g || !X && (Q === "*" || Q === "?"), _) F += Q, _ = !1; | |
| else if (X) | |
| if (Q === X) X = !1; | |
| else if (X == hu1) F += Q; | |
| else if (Q === Z) | |
| if (J += 1, Q = V.charAt(J), Q === ju1 || Q === Z || Q === o01) F += Q; | |
| else F += Z + Q; | |
| else if (Q === o01) F += K(); | |
| else F += Q; | |
| else if (Q === ju1 || Q === hu1) X = Q; | |
| else if (lu1.test(Q)) return { | |
| op: V | |
| }; | |
| else if (xG4.test(Q)) { | |
| B = !0; | |
| var E = { | |
| comment: I.slice(A.index + J + 1) | |
| }; | |
| if (F.length) return [F, E]; | |
| return [E] | |
| } else if (Q === Z) _ = !0; | |
| else if (Q === o01) F += K(); | |
| else F += Q | |
| } | |
| if (g) return { | |
| op: "glob", | |
| pattern: F | |
| }; | |
| return F | |
| }).reduce(function(A, V) { | |
| return typeof V === "undefined" ? A : A.concat(V) | |
| }, []) | |
| } | |
| xu1.exports = function I(d, G, Z) { | |
| var C = rG4(d, G, Z); | |
| if (typeof G !== "function") return C; | |
| return C.reduce(function(W, w) { | |
| if (typeof w === "object") return W.concat(w); | |
| var B = w.split(RegExp("(" + lF + ".*?" + lF + ")", "g")); | |
| if (B.length === 1) return W.concat(B[0]); | |
| return W.concat(B.filter(Boolean).map(function(A) { | |
| if (pG4.test(A)) return JSON.parse(A.split(lF)[1]); | |
| return A | |
| })) | |
| }, []) | |
| } | |
| }); | |
| var t01 = Y((aG4) => { | |
| aG4.quote = mu1(); | |
| aG4.parse = cu1() | |
| }); | |
| var u1 = Y((QZ4) => { | |
| var NE = Symbol.for("react.element"), | |
| wZ4 = Symbol.for("react.portal"), | |
| BZ4 = Symbol.for("react.fragment"), | |
| AZ4 = Symbol.for("react.strict_mode"), | |
| VZ4 = Symbol.for("react.profiler"), | |
| XZ4 = Symbol.for("react.provider"), | |
| YZ4 = Symbol.for("react.context"), | |
| _Z4 = Symbol.for("react.forward_ref"), | |
| DZ4 = Symbol.for("react.suspense"), | |
| HZ4 = Symbol.for("react.memo"), | |
| FZ4 = Symbol.for("react.lazy"), | |
| ou1 = Symbol.iterator; | |
| function gZ4(I) { | |
| if (I === null || typeof I !== "object") return null; | |
| return I = ou1 && I[ou1] || I["@@iterator"], typeof I === "function" ? I : null | |
| } | |
| var IT1 = { | |
| isMounted: function() { | |
| return !1 | |
| }, | |
| enqueueForceUpdate: function() {}, | |
| enqueueReplaceState: function() {}, | |
| enqueueSetState: function() {} | |
| }, | |
| dT1 = Object.assign, | |
| GT1 = {}; | |
| function Bz(I, d, G) { | |
| this.props = I, this.context = d, this.refs = GT1, this.updater = G || IT1 | |
| } | |
| Bz.prototype.isReactComponent = {}; | |
| Bz.prototype.setState = function(I, d) { | |
| if (typeof I !== "object" && typeof I !== "function" && I != null) throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables."); | |
| this.updater.enqueueSetState(this, I, d, "setState") | |
| }; | |
| Bz.prototype.forceUpdate = function(I) { | |
| this.updater.enqueueForceUpdate(this, I, "forceUpdate") | |
| }; | |
| function ZT1() {} | |
| ZT1.prototype = Bz.prototype; | |
| function A21(I, d, G) { | |
| this.props = I, this.context = d, this.refs = GT1, this.updater = G || IT1 | |
| } | |
| var V21 = A21.prototype = new ZT1; | |
| V21.constructor = A21; | |
| dT1(V21, Bz.prototype); | |
| V21.isPureReactComponent = !0; | |
| var eu1 = Array.isArray, | |
| CT1 = Object.prototype.hasOwnProperty, | |
| X21 = { | |
| current: null | |
| }, | |
| WT1 = { | |
| key: !0, | |
| ref: !0, | |
| __self: !0, | |
| __source: !0 | |
| }; | |
| function wT1(I, d, G) { | |
| var Z, C = {}, | |
| W = null, | |
| w = null; | |
| if (d != null) | |
| for (Z in d.ref !== void 0 && (w = d.ref), d.key !== void 0 && (W = "" + d.key), d) CT1.call(d, Z) && !WT1.hasOwnProperty(Z) && (C[Z] = d[Z]); | |
| var B = arguments.length - 2; | |
| if (B === 1) C.children = G; | |
| else if (1 < B) { | |
| for (var A = Array(B), V = 0; V < B; V++) A[V] = arguments[V + 2]; | |
| C.children = A | |
| } | |
| if (I && I.defaultProps) | |
| for (Z in B = I.defaultProps, B) C[Z] === void 0 && (C[Z] = B[Z]); | |
| return { | |
| $$typeof: NE, | |
| type: I, | |
| key: W, | |
| ref: w, | |
| props: C, | |
| _owner: X21.current | |
| } | |
| } | |
| function JZ4(I, d) { | |
| return { | |
| $$typeof: NE, | |
| type: I.type, | |
| key: d, | |
| ref: I.ref, | |
| props: I.props, | |
| _owner: I._owner | |
| } | |
| } | |
| function Y21(I) { | |
| return typeof I === "object" && I !== null && I.$$typeof === NE | |
| } | |
| function KZ4(I) { | |
| var d = { | |
| "=": "=0", | |
| ":": "=2" | |
| }; | |
| return "$" + I.replace(/[=:]/g, function(G) { | |
| return d[G] | |
| }) | |
| } | |
| var tu1 = /\/+/g; | |
| function B21(I, d) { | |
| return typeof I === "object" && I !== null && I.key != null ? KZ4("" + I.key) : d.toString(36) | |
| } | |
| function jl(I, d, G, Z, C) { | |
| var W = typeof I; | |
| if (W === "undefined" || W === "boolean") I = null; | |
| var w = !1; | |
| if (I === null) w = !0; | |
| else switch (W) { | |
| case "string": | |
| case "number": | |
| w = !0; | |
| break; | |
| case "object": | |
| switch (I.$$typeof) { | |
| case NE: | |
| case wZ4: | |
| w = !0 | |
| } | |
| } | |
| if (w) return w = I, C = C(w), I = Z === "" ? "." + B21(w, 0) : Z, eu1(C) ? (G = "", I != null && (G = I.replace(tu1, "$&/") + "/"), jl(C, d, G, "", function(V) { | |
| return V | |
| })) : C != null && (Y21(C) && (C = JZ4(C, G + (!C.key || w && w.key === C.key ? "" : ("" + C.key).replace(tu1, "$&/") + "/") + I)), d.push(C)), 1; | |
| if (w = 0, Z = Z === "" ? "." : Z + ":", eu1(I)) | |
| for (var B = 0; B < I.length; B++) { | |
| W = I[B]; | |
| var A = Z + B21(W, B); | |
| w += jl(W, d, G, A, C) | |
| } else if (A = gZ4(I), typeof A === "function") | |
| for (I = A.call(I), B = 0; !(W = I.next()).done;) W = W.value, A = Z + B21(W, B++), w += jl(W, d, G, A, C); | |
| else if (W === "object") throw d = String(I), Error("Objects are not valid as a React child (found: " + (d === "[object Object]" ? "object with keys {" + Object.keys(I).join(", ") + "}" : d) + "). If you meant to render a collection of children, use an array instead."); | |
| return w | |
| } | |
| function hl(I, d, G) { | |
| if (I == null) return I; | |
| var Z = [], | |
| C = 0; | |
| return jl(I, Z, "", "", function(W) { | |
| return d.call(G, W, C++) | |
| }), Z | |
| } | |
| function NZ4(I) { | |
| if (I._status === -1) { | |
| var d = I._result; | |
| d = d(), d.then(function(G) { | |
| if (I._status === 0 || I._status === -1) I._status = 1, I._result = G | |
| }, function(G) { | |
| if (I._status === 0 || I._status === -1) I._status = 2, I._result = G | |
| }), I._status === -1 && (I._status = 0, I._result = d) | |
| } | |
| if (I._status === 1) return I._result.default; | |
| throw I._result | |
| } | |
| var e7 = { | |
| current: null | |
| }, | |
| kl = { | |
| transition: null | |
| }, | |
| zZ4 = { | |
| ReactCurrentDispatcher: e7, | |
| ReactCurrentBatchConfig: kl, | |
| ReactCurrentOwner: X21 | |
| }; | |
| function BT1() { | |
| throw Error("act(...) is not supported in production builds of React.") | |
| } | |
| QZ4.Children = { | |
| map: hl, | |
| forEach: function(I, d, G) { | |
| hl(I, function() { | |
| d.apply(this, arguments) | |
| }, G) | |
| }, | |
| count: function(I) { | |
| var d = 0; | |
| return hl(I, function() { | |
| d++ | |
| }), d | |
| }, | |
| toArray: function(I) { | |
| return hl(I, function(d) { | |
| return d | |
| }) || [] | |
| }, | |
| only: function(I) { | |
| if (!Y21(I)) throw Error("React.Children.only expected to receive a single React element child."); | |
| return I | |
| } | |
| }; | |
| QZ4.Component = Bz; | |
| QZ4.Fragment = BZ4; | |
| QZ4.Profiler = VZ4; | |
| QZ4.PureComponent = A21; | |
| QZ4.StrictMode = AZ4; | |
| QZ4.Suspense = DZ4; | |
| QZ4.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = zZ4; | |
| QZ4.act = BT1; | |
| QZ4.cloneElement = function(I, d, G) { | |
| if (I === null || I === void 0) throw Error("React.cloneElement(...): The argument must be a React element, but you passed " + I + "."); | |
| var Z = dT1({}, I.props), | |
| C = I.key, | |
| W = I.ref, | |
| w = I._owner; | |
| if (d != null) { | |
| if (d.ref !== void 0 && (W = d.ref, w = X21.current), d.key !== void 0 && (C = "" + d.key), I.type && I.type.defaultProps) var B = I.type.defaultProps; | |
| for (A in d) CT1.call(d, A) && !WT1.hasOwnProperty(A) && (Z[A] = d[A] === void 0 && B !== void 0 ? B[A] : d[A]) | |
| } | |
| var A = arguments.length - 2; | |
| if (A === 1) Z.children = G; | |
| else if (1 < A) { | |
| B = Array(A); | |
| for (var V = 0; V < A; V++) B[V] = arguments[V + 2]; | |
| Z.children = B | |
| } | |
| return { | |
| $$typeof: NE, | |
| type: I.type, | |
| key: C, | |
| ref: W, | |
| props: Z, | |
| _owner: w | |
| } | |
| }; | |
| QZ4.createContext = function(I) { | |
| return I = { | |
| $$typeof: YZ4, | |
| _currentValue: I, | |
| _currentValue2: I, | |
| _threadCount: 0, | |
| Provider: null, | |
| Consumer: null, | |
| _defaultValue: null, | |
| _globalName: null | |
| }, I.Provider = { | |
| $$typeof: XZ4, | |
| _context: I | |
| }, I.Consumer = I | |
| }; | |
| QZ4.createElement = wT1; | |
| QZ4.createFactory = function(I) { | |
| var d = wT1.bind(null, I); | |
| return d.type = I, d | |
| }; | |
| QZ4.createRef = function() { | |
| return { | |
| current: null | |
| } | |
| }; | |
| QZ4.forwardRef = function(I) { | |
| return { | |
| $$typeof: _Z4, | |
| render: I | |
| } | |
| }; | |
| QZ4.isValidElement = Y21; | |
| QZ4.lazy = function(I) { | |
| return { | |
| $$typeof: FZ4, | |
| _payload: { | |
| _status: -1, | |
| _result: I | |
| }, | |
| _init: NZ4 | |
| } | |
| }; | |
| QZ4.memo = function(I, d) { | |
| return { | |
| $$typeof: HZ4, | |
| type: I, | |
| compare: d === void 0 ? null : d | |
| } | |
| }; | |
| QZ4.startTransition = function(I) { | |
| var d = kl.transition; | |
| kl.transition = {}; | |
| try { | |
| I() | |
| } finally { | |
| kl.transition = d | |
| } | |
| }; | |
| QZ4.unstable_act = BT1; | |
| QZ4.useCallback = function(I, d) { | |
| return e7.current.useCallback(I, d) | |
| }; | |
| QZ4.useContext = function(I) { | |
| return e7.current.useContext(I) | |
| }; | |
| QZ4.useDebugValue = function() {}; | |
| QZ4.useDeferredValue = function(I) { | |
| return e7.current.useDeferredValue(I) | |
| }; | |
| QZ4.useEffect = function(I, d) { | |
| return e7.current.useEffect(I, d) | |
| }; | |
| QZ4.useId = function() { | |
| return e7.current.useId() | |
| }; | |
| QZ4.useImperativeHandle = function(I, d, G) { | |
| return e7.current.useImperativeHandle(I, d, G) | |
| }; | |
| QZ4.useInsertionEffect = function(I, d) { | |
| return e7.current.useInsertionEffect(I, d) | |
| }; | |
| QZ4.useLayoutEffect = function(I, d) { | |
| return e7.current.useLayoutEffect(I, d) | |
| }; | |
| QZ4.useMemo = function(I, d) { | |
| return e7.current.useMemo(I, d) | |
| }; | |
| QZ4.useReducer = function(I, d, G) { | |
| return e7.current.useReducer(I, d, G) | |
| }; | |
| QZ4.useRef = function(I) { | |
| return e7.current.useRef(I) | |
| }; | |
| QZ4.useState = function(I) { | |
| return e7.current.useState(I) | |
| }; | |
| QZ4.useSyncExternalStore = function(I, d, G) { | |
| return e7.current.useSyncExternalStore(I, d, G) | |
| }; | |
| QZ4.useTransition = function() { | |
| return e7.current.useTransition() | |
| }; | |
| QZ4.version = "18.3.1" | |
| }); | |
| var q7 = Y((NT1) => { | |
| Object.defineProperty(NT1, "__esModule", { | |
| value: !0 | |
| }); | |
| NT1.Log = NT1.LogLevel = void 0; | |
| var NC4 = " DEBUG ", | |
| zC4 = " INFO ", | |
| QC4 = " WARN ", | |
| fC4 = " ERROR "; | |
| function pl(I) { | |
| return I.unshift("[Statsig]"), I | |
| } | |
| NT1.LogLevel = { | |
| None: 0, | |
| Error: 1, | |
| Warn: 2, | |
| Info: 3, | |
| Debug: 4 | |
| }; | |
| class bF { | |
| static info(...I) { | |
| if (bF.level >= NT1.LogLevel.Info) console.info(zC4, ...pl(I)) | |
| } | |
| static debug(...I) { | |
| if (bF.level >= NT1.LogLevel.Debug) console.debug(NC4, ...pl(I)) | |
| } | |
| static warn(...I) { | |
| if (bF.level >= NT1.LogLevel.Warn) console.warn(QC4, ...pl(I)) | |
| } | |
| static error(...I) { | |
| if (bF.level >= NT1.LogLevel.Error) console.error(fC4, ...pl(I)) | |
| } | |
| } | |
| NT1.Log = bF; | |
| bF.level = NT1.LogLevel.Warn | |
| }); | |
| var hF = Y((RT1) => { | |
| var g21, J21, K21; | |
| Object.defineProperty(RT1, "__esModule", { | |
| value: !0 | |
| }); | |
| RT1._getInstance = RT1._getStatsigGlobalFlag = RT1._getStatsigGlobal = void 0; | |
| var qC4 = q7(), | |
| RC4 = () => { | |
| return __STATSIG__ ? __STATSIG__ : il | |
| }; | |
| RT1._getStatsigGlobal = RC4; | |
| var UC4 = (I) => { | |
| return RT1._getStatsigGlobal()[I] | |
| }; | |
| RT1._getStatsigGlobalFlag = UC4; | |
| var vC4 = (I) => { | |
| let d = RT1._getStatsigGlobal(); | |
| if (!I) { | |
| if (d.instances && Object.keys(d.instances).length > 1) qC4.Log.warn("Call made to Statsig global instance without an SDK key but there is more than one client instance. If you are using mulitple clients, please specify the SDK key."); | |
| return d.firstInstance | |
| } | |
| return d.instances && d.instances[I] | |
| }; | |
| RT1._getInstance = vC4; | |
| var Yz = "__STATSIG__", | |
| QT1 = typeof window !== "undefined" ? window : {}, | |
| fT1 = typeof global !== "undefined" ? global : {}, | |
| qT1 = typeof globalThis !== "undefined" ? globalThis : {}, | |
| il = (K21 = (J21 = (g21 = QT1[Yz]) !== null && g21 !== void 0 ? g21 : fT1[Yz]) !== null && J21 !== void 0 ? J21 : qT1[Yz]) !== null && K21 !== void 0 ? K21 : { | |
| instance: RT1._getInstance | |
| }; | |
| QT1[Yz] = il; | |
| fT1[Yz] = il; | |
| qT1[Yz] = il | |
| }); | |
| var rl = Y((UT1) => { | |
| Object.defineProperty(UT1, "__esModule", { | |
| value: !0 | |
| }); | |
| UT1.Diagnostics = void 0; | |
| var nl = new Map, | |
| Q21 = "start", | |
| f21 = "end", | |
| MC4 = "statsig::diagnostics"; | |
| UT1.Diagnostics = { | |
| _getMarkers: (I) => { | |
| return nl.get(I) | |
| }, | |
| _markInitOverallStart: (I) => { | |
| Dz(I, _z({}, Q21, "overall")) | |
| }, | |
| _markInitOverallEnd: (I, d, G) => { | |
| Dz(I, _z({ | |
| success: d, | |
| error: d ? void 0 : { | |
| name: "InitializeError", | |
| message: "Failed to initialize" | |
| }, | |
| evaluationDetails: G | |
| }, f21, "overall")) | |
| }, | |
| _markInitNetworkReqStart: (I, d) => { | |
| Dz(I, _z(d, Q21, "initialize", "network_request")) | |
| }, | |
| _markInitNetworkReqEnd: (I, d) => { | |
| Dz(I, _z(d, f21, "initialize", "network_request")) | |
| }, | |
| _markInitProcessStart: (I) => { | |
| Dz(I, _z({}, Q21, "initialize", "process")) | |
| }, | |
| _markInitProcessEnd: (I, d) => { | |
| Dz(I, _z(d, f21, "initialize", "process")) | |
| }, | |
| _clearMarkers: (I) => { | |
| nl.delete(I) | |
| }, | |
| _formatError(I) { | |
| if (!(I && typeof I === "object")) return; | |
| return { | |
| code: q21(I, "code"), | |
| name: q21(I, "name"), | |
| message: q21(I, "message") | |
| } | |
| }, | |
| _getDiagnosticsData(I, d, G, Z) { | |
| var C; | |
| return { | |
| success: (I === null || I === void 0 ? void 0 : I.ok) === !0, | |
| statusCode: I === null || I === void 0 ? void 0 : I.status, | |
| sdkRegion: (C = I === null || I === void 0 ? void 0 : I.headers) === null || C === void 0 ? void 0 : C.get("x-statsig-region"), | |
| isDelta: G.includes('"is_delta":true') === !0 ? !0 : void 0, | |
| attempt: d, | |
| error: UT1.Diagnostics._formatError(Z) | |
| } | |
| }, | |
| _enqueueDiagnosticsEvent(I, d, G, Z) { | |
| let C = UT1.Diagnostics._getMarkers(G); | |
| if (C == null || C.length <= 0) return -1; | |
| let W = C[C.length - 1].timestamp - C[0].timestamp; | |
| UT1.Diagnostics._clearMarkers(G); | |
| let w = SC4(I, { | |
| context: "initialize", | |
| markers: C.slice(), | |
| statsigOptions: Z | |
| }); | |
| return d.enqueue(w), W | |
| } | |
| }; | |
| function _z(I, d, G, Z) { | |
| return Object.assign({ | |
| key: G, | |
| action: d, | |
| step: Z, | |
| timestamp: Date.now() | |
| }, I) | |
| } | |
| function SC4(I, d) { | |
| return { | |
| eventName: MC4, | |
| user: I, | |
| value: null, | |
| metadata: d, | |
| time: Date.now() | |
| } | |
| } | |
| function Dz(I, d) { | |
| var G; | |
| let Z = (G = nl.get(I)) !== null && G !== void 0 ? G : []; | |
| Z.push(d), nl.set(I, Z) | |
| } | |
| function q21(I, d) { | |
| if (d in I) return I[d]; | |
| return | |
| } | |
| }); | |
| var al = Y((vT1) => { | |
| Object.defineProperty(vT1, "__esModule", { | |
| value: !0 | |
| }); | |
| vT1._isTypeMatch = vT1._typeOf = void 0; | |
| function LC4(I) { | |
| return Array.isArray(I) ? "array" : typeof I | |
| } | |
| vT1._typeOf = LC4; | |
| function yC4(I, d) { | |
| let G = (Z) => Array.isArray(Z) ? "array" : typeof Z; | |
| return G(I) === G(d) | |
| } | |
| vT1._isTypeMatch = yC4 | |
| }); | |
| var Hz = Y((MT1) => { | |
| Object.defineProperty(MT1, "__esModule", { | |
| value: !0 | |
| }); | |
| MT1._getSortedObject = MT1._DJB2Object = MT1._DJB2 = void 0; | |
| var $C4 = al(), | |
| uC4 = (I) => { | |
| let d = 0; | |
| for (let G = 0; G < I.length; G++) { | |
| let Z = I.charCodeAt(G); | |
| d = (d << 5) - d + Z, d = d & d | |
| } | |
| return String(d >>> 0) | |
| }; | |
| MT1._DJB2 = uC4; | |
| var TC4 = (I, d) => { | |
| return MT1._DJB2(JSON.stringify(MT1._getSortedObject(I, d))) | |
| }; | |
| MT1._DJB2Object = TC4; | |
| var OC4 = (I, d) => { | |
| if (I == null) return null; | |
| let G = Object.keys(I).sort(), | |
| Z = {}; | |
| return G.forEach((C) => { | |
| let W = I[C]; | |
| if (d === 0 || $C4._typeOf(W) !== "object") { | |
| Z[C] = W; | |
| return | |
| } | |
| Z[C] = MT1._getSortedObject(W, d != null ? d - 1 : d) | |
| }), Z | |
| }; | |
| MT1._getSortedObject = OC4 | |
| }); | |
| var qE = Y((PT1) => { | |
| Object.defineProperty(PT1, "__esModule", { | |
| value: !0 | |
| }); | |
| PT1._getStorageKey = PT1._getUserStorageKey = void 0; | |
| var LT1 = Hz(); | |
| function yT1(I, d, G) { | |
| var Z; | |
| if (G) return G(I, d); | |
| let C = d && d.customIDs ? d.customIDs : {}, | |
| W = [`uid:${(Z=d===null||d===void 0?void 0:d.userID)!==null&&Z!==void 0?Z:""}`, `cids:${Object.keys(C).sort((w,B)=>w.localeCompare(B)).map((w)=>`${w}-${C[w]}`).join(",")}`, `k:${I}`]; | |
| return LT1._DJB2(W.join("|")) | |
| } | |
| PT1._getUserStorageKey = yT1; | |
| function lC4(I, d, G) { | |
| if (d) return yT1(I, d, G); | |
| return LT1._DJB2(`k:${I}`) | |
| } | |
| PT1._getStorageKey = lC4 | |
| }); | |
| var RE = Y((uT1) => { | |
| Object.defineProperty(uT1, "__esModule", { | |
| value: !0 | |
| }); | |
| uT1.NetworkParam = uT1.NetworkDefault = uT1.Endpoint = void 0; | |
| uT1.Endpoint = { | |
| _initialize: "initialize", | |
| _rgstr: "rgstr", | |
| _download_config_specs: "download_config_specs" | |
| }; | |
| uT1.NetworkDefault = { | |
| [uT1.Endpoint._rgstr]: "https://prodregistryv2.org/v1", | |
| [uT1.Endpoint._initialize]: "https://featureassets.org/v1", | |
| [uT1.Endpoint._download_config_specs]: "https://api.statsigcdn.com/v1" | |
| }; | |
| uT1.NetworkParam = { | |
| EventCount: "ec", | |
| SdkKey: "k", | |
| SdkType: "st", | |
| SdkVersion: "sv", | |
| Time: "t", | |
| SessionID: "sid", | |
| StatsigEncoded: "se", | |
| IsGzipped: "gz" | |
| } | |
| }); | |
| var jF = Y((OT1) => { | |
| Object.defineProperty(OT1, "__esModule", { | |
| value: !0 | |
| }); | |
| OT1._getCurrentPageUrlSafe = OT1._addDocumentEventListenerSafe = OT1._addWindowEventListenerSafe = OT1._isServerEnv = OT1._getDocumentSafe = OT1._getWindowSafe = void 0; | |
| var jC4 = () => { | |
| return typeof window !== "undefined" ? window : null | |
| }; | |
| OT1._getWindowSafe = jC4; | |
| var kC4 = () => { | |
| var I; | |
| let d = OT1._getWindowSafe(); | |
| return (I = d === null || d === void 0 ? void 0 : d.document) !== null && I !== void 0 ? I : null | |
| }; | |
| OT1._getDocumentSafe = kC4; | |
| var xC4 = () => { | |
| if (OT1._getDocumentSafe() !== null) return !1; | |
| let I = typeof process !== "undefined" && process.versions != null && process.versions.node != null; | |
| return typeof EdgeRuntime === "string" || I | |
| }; | |
| OT1._isServerEnv = xC4; | |
| var cC4 = (I, d) => { | |
| let G = OT1._getWindowSafe(); | |
| if (typeof(G === null || G === void 0 ? void 0 : G.addEventListener) === "function") G.addEventListener(I, d) | |
| }; | |
| OT1._addWindowEventListenerSafe = cC4; | |
| var pC4 = (I, d) => { | |
| let G = OT1._getDocumentSafe(); | |
| if (typeof(G === null || G === void 0 ? void 0 : G.addEventListener) === "function") G.addEventListener(I, d) | |
| }; | |
| OT1._addDocumentEventListenerSafe = pC4; | |
| var iC4 = () => { | |
| var I; | |
| try { | |
| return (I = OT1._getWindowSafe()) === null || I === void 0 ? void 0 : I.location.href.split(/[?#]/)[0] | |
| } catch (d) { | |
| return | |
| } | |
| }; | |
| OT1._getCurrentPageUrlSafe = iC4 | |
| }); | |
| var v21 = Y((jT1) => { | |
| Object.defineProperty(jT1, "__esModule", { | |
| value: !0 | |
| }); | |
| jT1._createLayerParameterExposure = jT1._createConfigExposure = jT1._createGateExposure = jT1._isExposureEvent = void 0; | |
| var lT1 = "statsig::config_exposure", | |
| bT1 = "statsig::gate_exposure", | |
| hT1 = "statsig::layer_exposure", | |
| U21 = (I, d, G, Z, C) => { | |
| if (G.bootstrapMetadata) Z.bootstrapMetadata = G.bootstrapMetadata; | |
| return { | |
| eventName: I, | |
| user: d, | |
| value: null, | |
| metadata: IW4(G, Z), | |
| secondaryExposures: C, | |
| time: Date.now() | |
| } | |
| }, | |
| sC4 = ({ | |
| eventName: I | |
| }) => { | |
| return I === bT1 || I === lT1 || I === hT1 | |
| }; | |
| jT1._isExposureEvent = sC4; | |
| var oC4 = (I, d) => { | |
| var G, Z, C; | |
| let W = { | |
| gate: d.name, | |
| gateValue: String(d.value), | |
| ruleID: d.ruleID | |
| }; | |
| if (((G = d.__evaluation) === null || G === void 0 ? void 0 : G.version) != null) W.configVersion = d.__evaluation.version; | |
| return U21(bT1, I, d.details, W, (C = (Z = d.__evaluation) === null || Z === void 0 ? void 0 : Z.secondary_exposures) !== null && C !== void 0 ? C : []) | |
| }; | |
| jT1._createGateExposure = oC4; | |
| var eC4 = (I, d) => { | |
| var G, Z, C, W; | |
| let w = { | |
| config: d.name, | |
| ruleID: d.ruleID | |
| }; | |
| if (((G = d.__evaluation) === null || G === void 0 ? void 0 : G.version) != null) w.configVersion = d.__evaluation.version; | |
| if (((Z = d.__evaluation) === null || Z === void 0 ? void 0 : Z.passed) != null) w.rulePassed = String(d.__evaluation.passed); | |
| return U21(lT1, I, d.details, w, (W = (C = d.__evaluation) === null || C === void 0 ? void 0 : C.secondary_exposures) !== null && W !== void 0 ? W : []) | |
| }; | |
| jT1._createConfigExposure = eC4; | |
| var tC4 = (I, d, G) => { | |
| var Z, C, W, w; | |
| let B = d.__evaluation, | |
| A = ((Z = B === null || B === void 0 ? void 0 : B.explicit_parameters) === null || Z === void 0 ? void 0 : Z.includes(G)) === !0, | |
| V = "", | |
| X = (C = B === null || B === void 0 ? void 0 : B.undelegated_secondary_exposures) !== null && C !== void 0 ? C : []; | |
| if (A) V = (W = B.allocated_experiment_name) !== null && W !== void 0 ? W : "", X = B.secondary_exposures; | |
| let _ = { | |
| config: d.name, | |
| parameterName: G, | |
| ruleID: d.ruleID, | |
| allocatedExperiment: V, | |
| isExplicitParameter: String(A) | |
| }; | |
| if (((w = d.__evaluation) === null || w === void 0 ? void 0 : w.version) != null) _.configVersion = d.__evaluation.version; | |
| return U21(hT1, I, d.details, _, X) | |
| }; | |
| jT1._createLayerParameterExposure = tC4; | |
| var IW4 = (I, d) => { | |
| if (d.reason = I.reason, I.lcut) d.lcut = String(I.lcut); | |
| if (I.receivedAt) d.receivedAt = String(I.receivedAt); | |
| return d | |
| } | |
| }); | |
| var bA = Y((xT1) => { | |
| Object.defineProperty(xT1, "__esModule", { | |
| value: !0 | |
| }); | |
| xT1._setObjectInStorage = xT1._getObjectFromStorage = xT1.Storage = void 0; | |
| var CW4 = q7(), | |
| WW4 = jF(), | |
| UE = {}, | |
| M21 = { | |
| isReady: () => !0, | |
| isReadyResolver: () => null, | |
| getProviderName: () => "InMemory", | |
| getItem: (I) => UE[I] ? UE[I] : null, | |
| setItem: (I, d) => { | |
| UE[I] = d | |
| }, | |
| removeItem: (I) => { | |
| delete UE[I] | |
| }, | |
| getAllKeys: () => Object.keys(UE) | |
| }, | |
| tl = null; | |
| try { | |
| let I = WW4._getWindowSafe(); | |
| if (I && I.localStorage && typeof I.localStorage.getItem === "function") tl = { | |
| isReady: () => !0, | |
| isReadyResolver: () => null, | |
| getProviderName: () => "LocalStorage", | |
| getItem: (d) => I.localStorage.getItem(d), | |
| setItem: (d, G) => I.localStorage.setItem(d, G), | |
| removeItem: (d) => I.localStorage.removeItem(d), | |
| getAllKeys: () => Object.keys(I.localStorage) | |
| } | |
| } catch (I) { | |
| CW4.Log.warn("Failed to setup localStorageProvider.") | |
| } | |
| var E21 = tl !== null && tl !== void 0 ? tl : M21, | |
| Qw = E21; | |
| function wW4(I) { | |
| try { | |
| return I() | |
| } catch (d) { | |
| if (d instanceof Error && d.name === "SecurityError") return xT1.Storage._setProvider(M21), null; | |
| throw d | |
| } | |
| } | |
| xT1.Storage = { | |
| isReady: () => Qw.isReady(), | |
| isReadyResolver: () => Qw.isReadyResolver(), | |
| getProviderName: () => Qw.getProviderName(), | |
| getItem: (I) => wW4(() => Qw.getItem(I)), | |
| setItem: (I, d) => Qw.setItem(I, d), | |
| removeItem: (I) => Qw.removeItem(I), | |
| getAllKeys: () => Qw.getAllKeys(), | |
| _setProvider: (I) => { | |
| E21 = I, Qw = I | |
| }, | |
| _setDisabled: (I) => { | |
| if (I) Qw = M21; | |
| else Qw = E21 | |
| } | |
| }; | |
| function BW4(I) { | |
| let d = xT1.Storage.getItem(I); | |
| return JSON.parse(d !== null && d !== void 0 ? d : "null") | |
| } | |
| xT1._getObjectFromStorage = BW4; | |
| function AW4(I, d) { | |
| xT1.Storage.setItem(I, JSON.stringify(d)) | |
| } | |
| xT1._setObjectInStorage = AW4 | |
| }); | |
| var S21 = Y((iT1) => { | |
| Object.defineProperty(iT1, "__esModule", { | |
| value: !0 | |
| }); | |
| iT1.UrlConfiguration = void 0; | |
| var db = RE(), | |
| XW4 = { | |
| [db.Endpoint._initialize]: "i", | |
| [db.Endpoint._rgstr]: "e", | |
| [db.Endpoint._download_config_specs]: "d" | |
| }; | |
| class pT1 { | |
| constructor(I, d, G, Z) { | |
| if (this.customUrl = null, this.fallbackUrls = null, this.endpoint = I, this.endpointDnsKey = XW4[I], d) this.customUrl = d; | |
| if (!d && G) this.customUrl = G.endsWith("/") ? `${G}${I}` : `${G}/${I}`; | |
| if (Z) this.fallbackUrls = Z; | |
| let C = db.NetworkDefault[I]; | |
| this.defaultUrl = `${C}/${I}` | |
| } | |
| getUrl() { | |
| var I; | |
| return (I = this.customUrl) !== null && I !== void 0 ? I : this.defaultUrl | |
| } | |
| } | |
| iT1.UrlConfiguration = pT1 | |
| }); | |
| var Cb = Y((aT1) => { | |
| Object.defineProperty(aT1, "__esModule", { | |
| value: !0 | |
| }); | |
| aT1._notifyVisibilityChanged = aT1._subscribeToVisiblityChanged = aT1._isUnloading = aT1._isCurrentlyVisible = void 0; | |
| var Gb = jF(), | |
| Zb = "foreground", | |
| y21 = "background", | |
| rT1 = [], | |
| L21 = Zb, | |
| P21 = !1, | |
| YW4 = () => { | |
| return L21 === Zb | |
| }; | |
| aT1._isCurrentlyVisible = YW4; | |
| var _W4 = () => P21; | |
| aT1._isUnloading = _W4; | |
| var DW4 = (I) => { | |
| rT1.unshift(I) | |
| }; | |
| aT1._subscribeToVisiblityChanged = DW4; | |
| var HW4 = (I) => { | |
| if (I === L21) return; | |
| L21 = I, rT1.forEach((d) => d(I)) | |
| }; | |
| aT1._notifyVisibilityChanged = HW4; | |
| Gb._addWindowEventListenerSafe("focus", () => { | |
| P21 = !1, aT1._notifyVisibilityChanged(Zb) | |
| }); | |
| Gb._addWindowEventListenerSafe("blur", () => aT1._notifyVisibilityChanged(y21)); | |
| Gb._addWindowEventListenerSafe("beforeunload", () => { | |
| P21 = !0, aT1._notifyVisibilityChanged(y21) | |
| }); | |
| Gb._addDocumentEventListenerSafe("visibilitychange", () => { | |
| aT1._notifyVisibilityChanged(document.visibilityState === "visible" ? Zb : y21) | |
| }) | |
| }); | |
| var u21 = Y((Kz) => { | |
| var gz = Kz && Kz.__awaiter || function(I, d, G, Z) { | |
| function C(W) { | |
| return W instanceof G ? W : new G(function(w) { | |
| w(W) | |
| }) | |
| } | |
| return new(G || (G = Promise))(function(W, w) { | |
| function B(X) { | |
| try { | |
| V(Z.next(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function A(X) { | |
| try { | |
| V(Z.throw(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function V(X) { | |
| X.done ? W(X.value) : C(X.value).then(B, A) | |
| } | |
| V((Z = Z.apply(I, d || [])).next()) | |
| }) | |
| }; | |
| Object.defineProperty(Kz, "__esModule", { | |
| value: !0 | |
| }); | |
| Kz.EventLogger = void 0; | |
| var KW4 = qE(), | |
| NW4 = Hz(), | |
| vE = q7(), | |
| sT1 = RE(), | |
| $21 = jF(), | |
| zW4 = v21(), | |
| Jz = bA(), | |
| QW4 = S21(), | |
| oT1 = Cb(), | |
| fW4 = 100, | |
| qW4 = 1e4, | |
| RW4 = 1000, | |
| UW4 = 600000, | |
| vW4 = 500, | |
| eT1 = 200, | |
| EE = {}, | |
| Wb = { | |
| Startup: "startup", | |
| GainedFocus: "gained_focus" | |
| }; | |
| class kF { | |
| static _safeFlushAndForget(I) { | |
| var d; | |
| (d = EE[I]) === null || d === void 0 || d.flush().catch(() => {}) | |
| } | |
| static _safeRetryFailedLogs(I) { | |
| var d; | |
| (d = EE[I]) === null || d === void 0 || d._retryFailedLogs(Wb.GainedFocus) | |
| } | |
| constructor(I, d, G, Z) { | |
| var C; | |
| this._sdkKey = I, this._emitter = d, this._network = G, this._options = Z, this._queue = [], this._lastExposureTimeMap = {}, this._nonExposedChecks = {}, this._hasRunQuickFlush = !1, this._creationTime = Date.now(), this._isLoggingDisabled = (Z === null || Z === void 0 ? void 0 : Z.disableLogging) === !0, this._maxQueueSize = (C = Z === null || Z === void 0 ? void 0 : Z.loggingBufferMaxSize) !== null && C !== void 0 ? C : fW4; | |
| let W = Z === null || Z === void 0 ? void 0 : Z.networkConfig; | |
| this._logEventUrlConfig = new QW4.UrlConfiguration(sT1.Endpoint._rgstr, W === null || W === void 0 ? void 0 : W.logEventUrl, W === null || W === void 0 ? void 0 : W.api, W === null || W === void 0 ? void 0 : W.logEventFallbackUrls) | |
| } | |
| setLoggingDisabled(I) { | |
| this._isLoggingDisabled = I | |
| } | |
| enqueue(I) { | |
| if (!this._shouldLogEvent(I)) return; | |
| if (this._normalizeAndAppendEvent(I), this._quickFlushIfNeeded(), this._queue.length > this._maxQueueSize) kF._safeFlushAndForget(this._sdkKey) | |
| } | |
| incrementNonExposureCount(I) { | |
| var d; | |
| let G = (d = this._nonExposedChecks[I]) !== null && d !== void 0 ? d : 0; | |
| this._nonExposedChecks[I] = G + 1 | |
| } | |
| reset() { | |
| this._lastExposureTimeMap = {} | |
| } | |
| start() { | |
| if ($21._isServerEnv()) return; | |
| EE[this._sdkKey] = this, oT1._subscribeToVisiblityChanged((I) => { | |
| if (I === "background") kF._safeFlushAndForget(this._sdkKey); | |
| else if (I === "foreground") kF._safeRetryFailedLogs(this._sdkKey) | |
| }), this._retryFailedLogs(Wb.Startup), this._startBackgroundFlushInterval() | |
| } | |
| stop() { | |
| return gz(this, void 0, void 0, function*() { | |
| if (this._flushIntervalId) clearInterval(this._flushIntervalId), this._flushIntervalId = null; | |
| delete EE[this._sdkKey], yield this.flush() | |
| }) | |
| } | |
| flush() { | |
| return gz(this, void 0, void 0, function*() { | |
| if (this._appendAndResetNonExposedChecks(), this._queue.length === 0) return; | |
| let I = this._queue; | |
| this._queue = [], yield this._sendEvents(I) | |
| }) | |
| } | |
| _quickFlushIfNeeded() { | |
| if (this._hasRunQuickFlush) return; | |
| if (this._hasRunQuickFlush = !0, Date.now() - this._creationTime > eT1) return; | |
| setTimeout(() => kF._safeFlushAndForget(this._sdkKey), eT1) | |
| } | |
| _shouldLogEvent(I) { | |
| if ($21._isServerEnv()) return !1; | |
| if (!zW4._isExposureEvent(I)) return !0; | |
| let d = I.user ? I.user : { | |
| statsigEnvironment: void 0 | |
| }, | |
| G = KW4._getUserStorageKey(this._sdkKey, d), | |
| Z = I.metadata ? I.metadata : {}, | |
| C = [I.eventName, G, Z.gate, Z.config, Z.ruleID, Z.allocatedExperiment, Z.parameterName, String(Z.isExplicitParameter), Z.reason].join("|"), | |
| W = this._lastExposureTimeMap[C], | |
| w = Date.now(); | |
| if (W && w - W < UW4) return !1; | |
| if (Object.keys(this._lastExposureTimeMap).length > RW4) this._lastExposureTimeMap = {}; | |
| return this._lastExposureTimeMap[C] = w, !0 | |
| } | |
| _sendEvents(I) { | |
| var d, G; | |
| return gz(this, void 0, void 0, function*() { | |
| if (this._isLoggingDisabled) return this._saveFailedLogsToStorage(I), !1; | |
| try { | |
| let C = oT1._isUnloading() && this._network.isBeaconSupported() && ((G = (d = this._options) === null || d === void 0 ? void 0 : d.networkConfig) === null || G === void 0 ? void 0 : G.networkOverrideFunc) == null; | |
| if (this._emitter({ | |
| name: "pre_logs_flushed", | |
| events: I | |
| }), (C ? yield this._sendEventsViaBeacon(I): yield this._sendEventsViaPost(I)).success) return this._emitter({ | |
| name: "logs_flushed", | |
| events: I | |
| }), !0; | |
| else return vE.Log.warn("Failed to flush events."), this._saveFailedLogsToStorage(I), !1 | |
| } catch (Z) { | |
| return vE.Log.warn("Failed to flush events."), !1 | |
| } | |
| }) | |
| } | |
| _sendEventsViaPost(I) { | |
| var d; | |
| return gz(this, void 0, void 0, function*() { | |
| let G = yield this._network.post(this._getRequestData(I)), Z = (d = G === null || G === void 0 ? void 0 : G.code) !== null && d !== void 0 ? d : -1; | |
| return { | |
| success: Z >= 200 && Z < 300 | |
| } | |
| }) | |
| } | |
| _sendEventsViaBeacon(I) { | |
| return gz(this, void 0, void 0, function*() { | |
| return { | |
| success: yield this._network.beacon(this._getRequestData(I)) | |
| } | |
| }) | |
| } | |
| _getRequestData(I) { | |
| return { | |
| sdkKey: this._sdkKey, | |
| data: { | |
| events: I | |
| }, | |
| urlConfig: this._logEventUrlConfig, | |
| retries: 3, | |
| isCompressable: !0, | |
| params: { | |
| [sT1.NetworkParam.EventCount]: String(I.length) | |
| } | |
| } | |
| } | |
| _saveFailedLogsToStorage(I) { | |
| while (I.length > vW4) I.shift(); | |
| let d = this._getStorageKey(); | |
| try { | |
| Jz._setObjectInStorage(d, I) | |
| } catch (G) { | |
| vE.Log.warn("Unable to save failed logs to storage") | |
| } | |
| } | |
| _retryFailedLogs(I) { | |
| let d = this._getStorageKey(); | |
| (() => gz(this, void 0, void 0, function*() { | |
| if (!Jz.Storage.isReady()) yield Jz.Storage.isReadyResolver(); | |
| let G = Jz._getObjectFromStorage(d); | |
| if (!G) return; | |
| if (I === Wb.Startup) Jz.Storage.removeItem(d); | |
| if ((yield this._sendEvents(G)) && I === Wb.GainedFocus) Jz.Storage.removeItem(d) | |
| }))().catch(() => { | |
| vE.Log.warn("Failed to flush stored logs") | |
| }) | |
| } | |
| _getStorageKey() { | |
| return `statsig.failed_logs.${NW4._DJB2(this._sdkKey)}` | |
| } | |
| _normalizeAndAppendEvent(I) { | |
| if (I.user) I.user = Object.assign({}, I.user), delete I.user.privateAttributes; | |
| let d = {}, | |
| G = this._getCurrentPageUrl(); | |
| if (G) d.statsigMetadata = { | |
| currentPage: G | |
| }; | |
| let Z = Object.assign(Object.assign({}, I), d); | |
| vE.Log.debug("Enqueued Event:", Z), this._queue.push(Z) | |
| } | |
| _appendAndResetNonExposedChecks() { | |
| if (Object.keys(this._nonExposedChecks).length === 0) return; | |
| this._normalizeAndAppendEvent({ | |
| eventName: "statsig::non_exposed_checks", | |
| user: null, | |
| time: Date.now(), | |
| metadata: { | |
| checks: Object.assign({}, this._nonExposedChecks) | |
| } | |
| }), this._nonExposedChecks = {} | |
| } | |
| _getCurrentPageUrl() { | |
| var I; | |
| if (((I = this._options) === null || I === void 0 ? void 0 : I.includeCurrentPageUrlWithEvents) === !1) return; | |
| return $21._getCurrentPageUrlSafe() | |
| } | |
| _startBackgroundFlushInterval() { | |
| var I, d; | |
| let G = (d = (I = this._options) === null || I === void 0 ? void 0 : I.loggingIntervalMs) !== null && d !== void 0 ? d : qW4, | |
| Z = setInterval(() => { | |
| let C = EE[this._sdkKey]; | |
| if (!C || C._flushIntervalId !== Z) clearInterval(Z); | |
| else kF._safeFlushAndForget(this._sdkKey) | |
| }, G); | |
| this._flushIntervalId = Z | |
| } | |
| } | |
| Kz.EventLogger = kF | |
| }); | |
| var ME = Y((tT1) => { | |
| Object.defineProperty(tT1, "__esModule", { | |
| value: !0 | |
| }); | |
| tT1.StatsigMetadataProvider = tT1.SDK_VERSION = void 0; | |
| tT1.SDK_VERSION = "3.12.0"; | |
| var T21 = { | |
| sdkVersion: tT1.SDK_VERSION, | |
| sdkType: "js-mono" | |
| }; | |
| tT1.StatsigMetadataProvider = { | |
| get: () => T21, | |
| add: (I) => { | |
| T21 = Object.assign(Object.assign({}, T21), I) | |
| } | |
| } | |
| }); | |
| var ZO1 = Y((GO1) => { | |
| Object.defineProperty(GO1, "__esModule", { | |
| value: !0 | |
| }) | |
| }); | |
| var wb = Y((CO1) => { | |
| Object.defineProperty(CO1, "__esModule", { | |
| value: !0 | |
| }); | |
| CO1.getUUID = void 0; | |
| function EW4() { | |
| if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") return crypto.randomUUID(); | |
| let I = new Date().getTime(), | |
| d = typeof performance !== "undefined" && performance.now && performance.now() * 1000 || 0; | |
| return `xxxxxxxx-xxxx-4xxx-${"89ab"[Math.floor(Math.random()*4)]}xxx-xxxxxxxxxxxx`.replace(/[xy]/g, (Z) => { | |
| let C = Math.random() * 16; | |
| if (I > 0) C = (I + C) % 16 | 0, I = Math.floor(I / 16); | |
| else C = (d + C) % 16 | 0, d = Math.floor(d / 16); | |
| return (Z === "x" ? C : C & 7 | 8).toString(16) | |
| }) | |
| } | |
| CO1.getUUID = EW4 | |
| }); | |
| var Ab = Y((VO1) => { | |
| Object.defineProperty(VO1, "__esModule", { | |
| value: !0 | |
| }); | |
| VO1.StableID = void 0; | |
| var MW4 = qE(), | |
| SW4 = q7(), | |
| BO1 = bA(), | |
| LW4 = wb(), | |
| Bb = {}; | |
| VO1.StableID = { | |
| get: (I) => { | |
| if (Bb[I] == null) { | |
| let d = yW4(I); | |
| if (d == null) d = LW4.getUUID(), wO1(d, I); | |
| Bb[I] = d | |
| } | |
| return Bb[I] | |
| }, | |
| setOverride: (I, d) => { | |
| Bb[d] = I, wO1(I, d) | |
| } | |
| }; | |
| function AO1(I) { | |
| return `statsig.stable_id.${MW4._getStorageKey(I)}` | |
| } | |
| function wO1(I, d) { | |
| let G = AO1(d); | |
| try { | |
| BO1._setObjectInStorage(G, I) | |
| } catch (Z) { | |
| SW4.Log.warn("Failed to save StableID") | |
| } | |
| } | |
| function yW4(I) { | |
| let d = AO1(I); | |
| return BO1._getObjectFromStorage(d) | |
| } | |
| }); | |
| var O21 = Y((YO1) => { | |
| Object.defineProperty(YO1, "__esModule", { | |
| value: !0 | |
| }); | |
| YO1._getFullUserHash = YO1._normalizeUser = void 0; | |
| var PW4 = Hz(), | |
| $W4 = q7(); | |
| function uW4(I, d, G) { | |
| try { | |
| let Z = JSON.parse(JSON.stringify(I)); | |
| if (d != null && d.environment != null) Z.statsigEnvironment = d.environment; | |
| else if (G != null) Z.statsigEnvironment = { | |
| tier: G | |
| }; | |
| return Z | |
| } catch (Z) { | |
| return $W4.Log.error("Failed to JSON.stringify user"), { | |
| statsigEnvironment: void 0 | |
| } | |
| } | |
| } | |
| YO1._normalizeUser = uW4; | |
| function TW4(I) { | |
| return I ? PW4._DJB2Object(I) : null | |
| } | |
| YO1._getFullUserHash = TW4 | |
| }); | |
| var m21 = Y((DO1) => { | |
| Object.defineProperty(DO1, "__esModule", { | |
| value: !0 | |
| }); | |
| DO1._typedJsonParse = void 0; | |
| var mW4 = q7(); | |
| function lW4(I, d, G) { | |
| try { | |
| let Z = JSON.parse(I); | |
| if (Z && typeof Z === "object" && d in Z) return Z | |
| } catch (Z) {} | |
| return mW4.Log.error(`Failed to parse ${G}`), null | |
| } | |
| DO1._typedJsonParse = lW4 | |
| }); | |
| var zO1 = Y((FY) => { | |
| var l21 = FY && FY.__awaiter || function(I, d, G, Z) { | |
| function C(W) { | |
| return W instanceof G ? W : new G(function(w) { | |
| w(W) | |
| }) | |
| } | |
| return new(G || (G = Promise))(function(W, w) { | |
| function B(X) { | |
| try { | |
| V(Z.next(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function A(X) { | |
| try { | |
| V(Z.throw(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function V(X) { | |
| X.done ? W(X.value) : C(X.value).then(B, A) | |
| } | |
| V((Z = Z.apply(I, d || [])).next()) | |
| }) | |
| }; | |
| Object.defineProperty(FY, "__esModule", { | |
| value: !0 | |
| }); | |
| FY._makeDataAdapterResult = FY.DataAdapterCore = void 0; | |
| var Vb = q7(), | |
| bW4 = Ab(), | |
| Xb = O21(), | |
| HY = bA(), | |
| FO1 = m21(), | |
| gO1 = 10; | |
| class JO1 { | |
| constructor(I, d) { | |
| this._adapterName = I, this._cacheSuffix = d, this._options = null, this._sdkKey = null, this._lastModifiedStoreKey = `statsig.last_modified_time.${d}`, this._inMemoryCache = new KO1 | |
| } | |
| attach(I, d) { | |
| this._sdkKey = I, this._options = d | |
| } | |
| getDataSync(I) { | |
| let d = I && Xb._normalizeUser(I, this._options), | |
| G = this._getCacheKey(d), | |
| Z = this._inMemoryCache.get(G, d); | |
| if (Z) return Z; | |
| let C = this._loadFromCache(G); | |
| if (C) return this._inMemoryCache.add(G, C), this._inMemoryCache.get(G, d); | |
| return null | |
| } | |
| setData(I, d) { | |
| let G = d && Xb._normalizeUser(d, this._options), | |
| Z = this._getCacheKey(G); | |
| this._inMemoryCache.add(Z, Yb("Bootstrap", I, null, G)) | |
| } | |
| _getDataAsyncImpl(I, d, G) { | |
| return l21(this, void 0, void 0, function*() { | |
| if (!HY.Storage.isReady()) yield HY.Storage.isReadyResolver(); | |
| let Z = I !== null && I !== void 0 ? I : this.getDataSync(d), | |
| C = [this._fetchAndPrepFromNetwork(Z, d, G)]; | |
| if (G === null || G === void 0 ? void 0 : G.timeoutMs) C.push(new Promise((W) => setTimeout(W, G.timeoutMs)).then(() => { | |
| return Vb.Log.debug("Fetching latest value timed out"), null | |
| })); | |
| return yield Promise.race(C) | |
| }) | |
| } | |
| _prefetchDataImpl(I, d) { | |
| return l21(this, void 0, void 0, function*() { | |
| let G = I && Xb._normalizeUser(I, this._options), | |
| Z = this._getCacheKey(G), | |
| C = yield this._getDataAsyncImpl(null, G, d); | |
| if (C) this._inMemoryCache.add(Z, Object.assign(Object.assign({}, C), { | |
| source: "Prefetch" | |
| })) | |
| }) | |
| } | |
| _fetchAndPrepFromNetwork(I, d, G) { | |
| return l21(this, void 0, void 0, function*() { | |
| let Z = null; | |
| if (I && this._isCachedResultValidFor204(I, d)) Z = I.data; | |
| let C = yield this._fetchFromNetwork(Z, d, G); | |
| if (!C) return Vb.Log.debug("No response returned for latest value"), null; | |
| let W = FO1._typedJsonParse(C, "has_updates", "Response"), | |
| w = this._getSdkKey(), | |
| B = bW4.StableID.get(w), | |
| A = null; | |
| if ((W === null || W === void 0 ? void 0 : W.has_updates) === !0) A = Yb("Network", C, B, d); | |
| else if (Z && (W === null || W === void 0 ? void 0 : W.has_updates) === !1) A = Yb("NetworkNotModified", Z, B, d); | |
| else return null; | |
| let V = this._getCacheKey(d); | |
| return this._inMemoryCache.add(V, A), this._writeToCache(V, A), A | |
| }) | |
| } | |
| _getSdkKey() { | |
| if (this._sdkKey != null) return this._sdkKey; | |
| return Vb.Log.error(`${this._adapterName} is not attached to a Client`), "" | |
| } | |
| _loadFromCache(I) { | |
| var d; | |
| let G = (d = HY.Storage.getItem) === null || d === void 0 ? void 0 : d.call(HY.Storage, I); | |
| if (G == null) return null; | |
| let Z = FO1._typedJsonParse(G, "source", "Cached Result"); | |
| return Z ? Object.assign(Object.assign({}, Z), { | |
| source: "Cache" | |
| }) : null | |
| } | |
| _writeToCache(I, d) { | |
| HY.Storage.setItem(I, JSON.stringify(d)), this._runLocalStorageCacheEviction(I) | |
| } | |
| _runLocalStorageCacheEviction(I) { | |
| var d; | |
| let G = (d = HY._getObjectFromStorage(this._lastModifiedStoreKey)) !== null && d !== void 0 ? d : {}; | |
| G[I] = Date.now(); | |
| let Z = NO1(G, gO1); | |
| if (Z) delete G[Z], HY.Storage.removeItem(Z); | |
| HY._setObjectInStorage(this._lastModifiedStoreKey, G) | |
| } | |
| } | |
| FY.DataAdapterCore = JO1; | |
| function Yb(I, d, G, Z) { | |
| return { | |
| source: I, | |
| data: d, | |
| receivedAt: Date.now(), | |
| stableID: G, | |
| fullUserHash: Xb._getFullUserHash(Z) | |
| } | |
| } | |
| FY._makeDataAdapterResult = Yb; | |
| class KO1 { | |
| constructor() { | |
| this._data = {} | |
| } | |
| get(I, d) { | |
| var G; | |
| let Z = this._data[I], | |
| C = Z === null || Z === void 0 ? void 0 : Z.stableID, | |
| W = (G = d === null || d === void 0 ? void 0 : d.customIDs) === null || G === void 0 ? void 0 : G.stableID; | |
| if (W && C && W !== C) return Vb.Log.warn("'StatsigUser.customIDs.stableID' mismatch"), null; | |
| return Z | |
| } | |
| add(I, d) { | |
| let G = NO1(this._data, gO1 - 1); | |
| if (G) delete this._data[G]; | |
| this._data[I] = d | |
| } | |
| merge(I) { | |
| this._data = Object.assign(Object.assign({}, this._data), I) | |
| } | |
| } | |
| function NO1(I, d) { | |
| let G = Object.keys(I); | |
| if (G.length <= d) return null; | |
| return G.reduce((Z, C) => { | |
| let W = I[Z], | |
| w = I[C]; | |
| if (typeof W === "object" && typeof w === "object") return w.receivedAt < W.receivedAt ? C : Z; | |
| return w < W ? C : Z | |
| }) | |
| } | |
| }); | |
| var fO1 = Y((QO1) => { | |
| Object.defineProperty(QO1, "__esModule", { | |
| value: !0 | |
| }) | |
| }); | |
| var _b = Y((RO1) => { | |
| Object.defineProperty(RO1, "__esModule", { | |
| value: !0 | |
| }); | |
| RO1.SDKType = void 0; | |
| var qO1 = {}, | |
| Nz; | |
| RO1.SDKType = { | |
| _get: (I) => { | |
| var d; | |
| return ((d = qO1[I]) !== null && d !== void 0 ? d : "js-mono") + (Nz !== null && Nz !== void 0 ? Nz : "") | |
| }, | |
| _setClientType(I, d) { | |
| qO1[I] = d | |
| }, | |
| _setBindingType(I) { | |
| if (!Nz || Nz === "-react") Nz = "-" + I | |
| } | |
| } | |
| }); | |
| var b21 = Y((hA) => { | |
| var hW4 = hA && hA.__awaiter || function(I, d, G, Z) { | |
| function C(W) { | |
| return W instanceof G ? W : new G(function(w) { | |
| w(W) | |
| }) | |
| } | |
| return new(G || (G = Promise))(function(W, w) { | |
| function B(X) { | |
| try { | |
| V(Z.next(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function A(X) { | |
| try { | |
| V(Z.throw(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function V(X) { | |
| X.done ? W(X.value) : C(X.value).then(B, A) | |
| } | |
| V((Z = Z.apply(I, d || [])).next()) | |
| }) | |
| }; | |
| Object.defineProperty(hA, "__esModule", { | |
| value: !0 | |
| }); | |
| hA.ErrorBoundary = hA.EXCEPTION_ENDPOINT = void 0; | |
| var jW4 = q7(), | |
| kW4 = _b(), | |
| xW4 = ME(); | |
| hA.EXCEPTION_ENDPOINT = "https://statsigapi.net/v1/sdk_exception"; | |
| var EO1 = "[Statsig] UnknownError"; | |
| class MO1 { | |
| constructor(I, d, G, Z) { | |
| this._sdkKey = I, this._options = d, this._emitter = G, this._lastSeenError = Z, this._seen = new Set | |
| } | |
| wrap(I) { | |
| try { | |
| let d = I; | |
| pW4(d).forEach((G) => { | |
| let Z = d[G]; | |
| if ("$EB" in Z) return; | |
| d[G] = (...C) => { | |
| return this._capture(G, () => Z.apply(I, C)) | |
| }, d[G].$EB = !0 | |
| }) | |
| } catch (d) { | |
| this._onError("eb:wrap", d) | |
| } | |
| } | |
| logError(I, d) { | |
| this._onError(I, d) | |
| } | |
| getLastSeenErrorAndReset() { | |
| let I = this._lastSeenError; | |
| return this._lastSeenError = void 0, I !== null && I !== void 0 ? I : null | |
| } | |
| attachErrorIfNoneExists(I) { | |
| if (this._lastSeenError) return; | |
| this._lastSeenError = vO1(I) | |
| } | |
| _capture(I, d) { | |
| try { | |
| let G = d(); | |
| if (G && G instanceof Promise) return G.catch((Z) => this._onError(I, Z)); | |
| return G | |
| } catch (G) { | |
| return this._onError(I, G), null | |
| } | |
| } | |
| _onError(I, d) { | |
| try { | |
| jW4.Log.warn(`Caught error in ${I}`, { | |
| error: d | |
| }), (() => hW4(this, void 0, void 0, function*() { | |
| var Z, C, W, w, B, A, V; | |
| let X = d ? d : Error(EO1), | |
| _ = X instanceof Error, | |
| F = _ ? X.name : "No Name", | |
| g = vO1(X); | |
| if (this._lastSeenError = g, this._seen.has(F)) return; | |
| if (this._seen.add(F), (C = (Z = this._options) === null || Z === void 0 ? void 0 : Z.networkConfig) === null || C === void 0 ? void 0 : C.preventAllNetworkTraffic) { | |
| (W = this._emitter) === null || W === void 0 || W.call(this, { | |
| name: "error", | |
| error: d, | |
| tag: I | |
| }); | |
| return | |
| } | |
| let J = kW4.SDKType._get(this._sdkKey), | |
| K = xW4.StatsigMetadataProvider.get(), | |
| Q = _ ? X.stack : cW4(X), | |
| E = JSON.stringify(Object.assign({ | |
| tag: I, | |
| exception: F, | |
| info: Q | |
| }, Object.assign(Object.assign({}, K), { | |
| sdkType: J | |
| }))); | |
| yield((A = (B = (w = this._options) === null || w === void 0 ? void 0 : w.networkConfig) === null || B === void 0 ? void 0 : B.networkOverrideFunc) !== null && A !== void 0 ? A : fetch)(hA.EXCEPTION_ENDPOINT, { | |
| method: "POST", | |
| headers: { | |
| "STATSIG-API-KEY": this._sdkKey, | |
| "STATSIG-SDK-TYPE": String(J), | |
| "STATSIG-SDK-VERSION": String(K.sdkVersion), | |
| "Content-Type": "application/json" | |
| }, | |
| body: E | |
| }), (V = this._emitter) === null || V === void 0 || V.call(this, { | |
| name: "error", | |
| error: d, | |
| tag: I | |
| }) | |
| }))().then(() => {}).catch(() => {}) | |
| } catch (G) {} | |
| } | |
| } | |
| hA.ErrorBoundary = MO1; | |
| function vO1(I) { | |
| if (I instanceof Error) return I; | |
| else if (typeof I === "string") return new Error(I); | |
| else return new Error("An unknown error occurred.") | |
| } | |
| function cW4(I) { | |
| try { | |
| return JSON.stringify(I) | |
| } catch (d) { | |
| return EO1 | |
| } | |
| } | |
| function pW4(I) { | |
| let d = new Set, | |
| G = Object.getPrototypeOf(I); | |
| while (G && G !== Object.prototype) Object.getOwnPropertyNames(G).filter((Z) => typeof(G === null || G === void 0 ? void 0 : G[Z]) === "function").forEach((Z) => d.add(Z)), G = Object.getPrototypeOf(G); | |
| return Array.from(d) | |
| } | |
| }); | |
| var LO1 = Y((SO1) => { | |
| Object.defineProperty(SO1, "__esModule", { | |
| value: !0 | |
| }) | |
| }); | |
| var PO1 = Y((yO1) => { | |
| Object.defineProperty(yO1, "__esModule", { | |
| value: !0 | |
| }) | |
| }); | |
| var uO1 = Y(($O1) => { | |
| Object.defineProperty($O1, "__esModule", { | |
| value: !0 | |
| }) | |
| }); | |
| var h21 = Y((TO1) => { | |
| Object.defineProperty(TO1, "__esModule", { | |
| value: !0 | |
| }); | |
| TO1.createMemoKey = TO1.MemoPrefix = void 0; | |
| TO1.MemoPrefix = { | |
| _gate: "g", | |
| _dynamicConfig: "c", | |
| _experiment: "e", | |
| _layer: "l", | |
| _paramStore: "p" | |
| }; | |
| var iW4 = new Set([]), | |
| nW4 = new Set(["userPersistedValues"]); | |
| function rW4(I, d, G) { | |
| let Z = `${I}|${d}`; | |
| if (!G) return Z; | |
| for (let C of Object.keys(G)) { | |
| if (nW4.has(C)) return; | |
| if (iW4.has(C)) Z += `|${C}=true`; | |
| else Z += `|${C}=${G[C]}` | |
| } | |
| return Z | |
| } | |
| TO1.createMemoKey = rW4 | |
| }); | |
| var mO1 = Y((zz) => { | |
| var sW4 = zz && zz.__awaiter || function(I, d, G, Z) { | |
| function C(W) { | |
| return W instanceof G ? W : new G(function(w) { | |
| w(W) | |
| }) | |
| } | |
| return new(G || (G = Promise))(function(W, w) { | |
| function B(X) { | |
| try { | |
| V(Z.next(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function A(X) { | |
| try { | |
| V(Z.throw(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function V(X) { | |
| X.done ? W(X.value) : C(X.value).then(B, A) | |
| } | |
| V((Z = Z.apply(I, d || [])).next()) | |
| }) | |
| }; | |
| Object.defineProperty(zz, "__esModule", { | |
| value: !0 | |
| }); | |
| zz._fetchTxtRecords = void 0; | |
| var oW4 = new Uint8Array([0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 13, 102, 101, 97, 116, 117, 114, 101, 97, 115, 115, 101, 116, 115, 3, 111, 114, 103, 0, 0, 16, 0, 1]), | |
| eW4 = "https://cloudflare-dns.com/dns-query", | |
| tW4 = ["i", "e", "d"], | |
| Iw4 = 200; | |
| function dw4(I) { | |
| return sW4(this, void 0, void 0, function*() { | |
| let d = yield I(eW4, { | |
| method: "POST", | |
| headers: { | |
| "Content-Type": "application/dns-message", | |
| Accept: "application/dns-message" | |
| }, | |
| body: oW4 | |
| }); | |
| if (!d.ok) { | |
| let C = new Error("Failed to fetch TXT records from DNS"); | |
| throw C.name = "DnsTxtFetchError", C | |
| } | |
| let G = yield d.arrayBuffer(), Z = new Uint8Array(G); | |
| return Gw4(Z) | |
| }) | |
| } | |
| zz._fetchTxtRecords = dw4; | |
| function Gw4(I) { | |
| let d = I.findIndex((Z, C) => C < Iw4 && String.fromCharCode(Z) === "=" && tW4.includes(String.fromCharCode(I[C - 1]))); | |
| if (d === -1) { | |
| let Z = new Error("Failed to parse TXT records from DNS"); | |
| throw Z.name = "DnsTxtParseError", Z | |
| } | |
| let G = ""; | |
| for (let Z = d - 1; Z < I.length; Z++) G += String.fromCharCode(I[Z]); | |
| return G.split(",") | |
| } | |
| }); | |
| var cO1 = Y((gY) => { | |
| var lO1 = gY && gY.__awaiter || function(I, d, G, Z) { | |
| function C(W) { | |
| return W instanceof G ? W : new G(function(w) { | |
| w(W) | |
| }) | |
| } | |
| return new(G || (G = Promise))(function(W, w) { | |
| function B(X) { | |
| try { | |
| V(Z.next(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function A(X) { | |
| try { | |
| V(Z.throw(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function V(X) { | |
| X.done ? W(X.value) : C(X.value).then(B, A) | |
| } | |
| V((Z = Z.apply(I, d || [])).next()) | |
| }) | |
| }; | |
| Object.defineProperty(gY, "__esModule", { | |
| value: !0 | |
| }); | |
| gY._isDomainFailure = gY.NetworkFallbackResolver = void 0; | |
| var Zw4 = mO1(), | |
| Cw4 = Hz(), | |
| Ww4 = q7(), | |
| k21 = bA(), | |
| bO1 = 604800000, | |
| ww4 = 14400000; | |
| class jO1 { | |
| constructor(I) { | |
| var d; | |
| this._fallbackInfo = null, this._errorBoundary = null, this._dnsQueryCooldowns = {}, this._networkOverrideFunc = (d = I.networkConfig) === null || d === void 0 ? void 0 : d.networkOverrideFunc | |
| } | |
| setErrorBoundary(I) { | |
| this._errorBoundary = I | |
| } | |
| tryBumpExpiryTime(I, d) { | |
| var G; | |
| let Z = (G = this._fallbackInfo) === null || G === void 0 ? void 0 : G[d.endpoint]; | |
| if (!Z) return; | |
| Z.expiryTime = Date.now() + bO1, j21(I, Object.assign(Object.assign({}, this._fallbackInfo), { | |
| [d.endpoint]: Z | |
| })) | |
| } | |
| getActiveFallbackUrl(I, d) { | |
| var G, Z; | |
| let C = this._fallbackInfo; | |
| if (C == null) C = (G = Bw4(I)) !== null && G !== void 0 ? G : {}, this._fallbackInfo = C; | |
| let W = C[d.endpoint]; | |
| if (!W || Date.now() > ((Z = W.expiryTime) !== null && Z !== void 0 ? Z : 0)) return delete C[d.endpoint], this._fallbackInfo = C, j21(I, this._fallbackInfo), null; | |
| if (W.url) return W.url; | |
| return null | |
| } | |
| getFallbackFromProvided(I) { | |
| let d = hO1(I); | |
| if (d) return I.replace(d, ""); | |
| return null | |
| } | |
| tryFetchUpdatedFallbackInfo(I, d, G, Z) { | |
| var C, W; | |
| return lO1(this, void 0, void 0, function*() { | |
| try { | |
| if (!kO1(G, Z)) return !1; | |
| let B = d.customUrl == null && d.fallbackUrls == null ? yield this._tryFetchFallbackUrlsFromNetwork(d): d.fallbackUrls, A = this._pickNewFallbackUrl((C = this._fallbackInfo) === null || C === void 0 ? void 0 : C[d.endpoint], B); | |
| if (!A) return !1; | |
| return this._updateFallbackInfoWithNewUrl(I, d.endpoint, A), !0 | |
| } catch (w) { | |
| return (W = this._errorBoundary) === null || W === void 0 || W.logError("tryFetchUpdatedFallbackInfo", w), !1 | |
| } | |
| }) | |
| } | |
| _updateFallbackInfoWithNewUrl(I, d, G) { | |
| var Z, C, W; | |
| let w = { | |
| url: G, | |
| expiryTime: Date.now() + bO1, | |
| previous: [] | |
| }, | |
| B = (Z = this._fallbackInfo) === null || Z === void 0 ? void 0 : Z[d]; | |
| if (B) w.previous.push(...B.previous); | |
| if (w.previous.length > 10) w.previous = []; | |
| let A = (W = (C = this._fallbackInfo) === null || C === void 0 ? void 0 : C[d]) === null || W === void 0 ? void 0 : W.url; | |
| if (A != null) w.previous.push(A); | |
| this._fallbackInfo = Object.assign(Object.assign({}, this._fallbackInfo), { | |
| [d]: w | |
| }), j21(I, this._fallbackInfo) | |
| } | |
| _tryFetchFallbackUrlsFromNetwork(I) { | |
| var d; | |
| return lO1(this, void 0, void 0, function*() { | |
| let G = this._dnsQueryCooldowns[I.endpoint]; | |
| if (G && Date.now() < G) return null; | |
| this._dnsQueryCooldowns[I.endpoint] = Date.now() + ww4; | |
| let Z = [], | |
| C = yield Zw4._fetchTxtRecords((d = this._networkOverrideFunc) !== null && d !== void 0 ? d : fetch), W = hO1(I.defaultUrl); | |
| for (let w of C) { | |
| if (!w.startsWith(I.endpointDnsKey + "=")) continue; | |
| let B = w.split("="); | |
| if (B.length > 1) { | |
| let A = B[1]; | |
| if (A.endsWith("/")) A = A.slice(0, -1); | |
| Z.push(`https://${A}${W}`) | |
| } | |
| } | |
| return Z | |
| }) | |
| } | |
| _pickNewFallbackUrl(I, d) { | |
| var G; | |
| if (d == null) return null; | |
| let Z = new Set((G = I === null || I === void 0 ? void 0 : I.previous) !== null && G !== void 0 ? G : []), | |
| C = I === null || I === void 0 ? void 0 : I.url, | |
| W = null; | |
| for (let w of d) { | |
| let B = w.endsWith("/") ? w.slice(0, -1) : w; | |
| if (!Z.has(w) && B !== C) { | |
| W = B; | |
| break | |
| } | |
| } | |
| return W | |
| } | |
| } | |
| gY.NetworkFallbackResolver = jO1; | |
| function kO1(I, d) { | |
| var G; | |
| let Z = (G = I === null || I === void 0 ? void 0 : I.toLowerCase()) !== null && G !== void 0 ? G : ""; | |
| return d || Z.includes("uncaught exception") || Z.includes("failed to fetch") || Z.includes("networkerror when attempting to fetch resource") | |
| } | |
| gY._isDomainFailure = kO1; | |
| function xO1(I) { | |
| return `statsig.network_fallback.${Cw4._DJB2(I)}` | |
| } | |
| function j21(I, d) { | |
| let G = xO1(I); | |
| if (!d || Object.keys(d).length === 0) { | |
| k21.Storage.removeItem(G); | |
| return | |
| } | |
| k21.Storage.setItem(G, JSON.stringify(d)) | |
| } | |
| function Bw4(I) { | |
| let d = xO1(I), | |
| G = k21.Storage.getItem(d); | |
| if (!G) return null; | |
| try { | |
| return JSON.parse(G) | |
| } catch (Z) { | |
| return Ww4.Log.error("Failed to parse FallbackInfo"), null | |
| } | |
| } | |
| function hO1(I) { | |
| try { | |
| return new URL(I).pathname | |
| } catch (d) { | |
| return null | |
| } | |
| } | |
| }); | |
| var Hb = Y((oO1) => { | |
| Object.defineProperty(oO1, "__esModule", { | |
| value: !0 | |
| }); | |
| oO1.StatsigSession = oO1.SessionID = void 0; | |
| var Aw4 = qE(), | |
| Vw4 = q7(), | |
| iO1 = bA(), | |
| nO1 = wb(), | |
| rO1 = 1800000, | |
| aO1 = 14400000, | |
| Db = {}; | |
| oO1.SessionID = { | |
| get: (I) => { | |
| return oO1.StatsigSession.get(I).data.sessionID | |
| } | |
| }; | |
| oO1.StatsigSession = { | |
| get: (I) => { | |
| if (Db[I] == null) Db[I] = Xw4(I); | |
| let d = Db[I]; | |
| return _w4(d) | |
| }, | |
| overrideInitialSessionID: (I, d) => { | |
| Db[d] = Yw4(I, d) | |
| } | |
| }; | |
| function Xw4(I) { | |
| let d = gw4(I), | |
| G = Date.now(); | |
| if (!d) d = { | |
| sessionID: nO1.getUUID(), | |
| startTime: G, | |
| lastUpdate: G | |
| }; | |
| return { | |
| data: d, | |
| sdkKey: I | |
| } | |
| } | |
| function Yw4(I, d) { | |
| let G = Date.now(); | |
| return { | |
| data: { | |
| sessionID: I, | |
| startTime: G, | |
| lastUpdate: G | |
| }, | |
| sdkKey: d | |
| } | |
| } | |
| function _w4(I) { | |
| let d = Date.now(), | |
| G = I.data; | |
| if (Dw4(G) || Hw4(G)) G.sessionID = nO1.getUUID(), G.startTime = d; | |
| G.lastUpdate = d, Fw4(G, I.sdkKey), clearTimeout(I.idleTimeoutID), clearTimeout(I.ageTimeoutID); | |
| let Z = d - G.startTime, | |
| C = I.sdkKey; | |
| return I.idleTimeoutID = pO1(C, rO1), I.ageTimeoutID = pO1(C, aO1 - Z), I | |
| } | |
| function pO1(I, d) { | |
| return setTimeout(() => { | |
| let G = __STATSIG__ === null || __STATSIG__ === void 0 ? void 0 : __STATSIG__.instance(I); | |
| if (G) G.$emt({ | |
| name: "session_expired" | |
| }) | |
| }, d) | |
| } | |
| function Dw4({ | |
| lastUpdate: I | |
| }) { | |
| return Date.now() - I > rO1 | |
| } | |
| function Hw4({ | |
| startTime: I | |
| }) { | |
| return Date.now() - I > aO1 | |
| } | |
| function sO1(I) { | |
| return `statsig.session_id.${Aw4._getStorageKey(I)}` | |
| } | |
| function Fw4(I, d) { | |
| let G = sO1(d); | |
| try { | |
| iO1._setObjectInStorage(G, I) | |
| } catch (Z) { | |
| Vw4.Log.warn("Failed to save SessionID") | |
| } | |
| } | |
| function gw4(I) { | |
| let d = sO1(I); | |
| return iO1._getObjectFromStorage(d) | |
| } | |
| }); | |
| var c21 = Y((eO1) => { | |
| Object.defineProperty(eO1, "__esModule", { | |
| value: !0 | |
| }); | |
| eO1.ErrorTag = void 0; | |
| eO1.ErrorTag = { | |
| NetworkError: "NetworkError" | |
| } | |
| }); | |
| var Bm1 = Y((fz) => { | |
| var Qz = fz && fz.__awaiter || function(I, d, G, Z) { | |
| function C(W) { | |
| return W instanceof G ? W : new G(function(w) { | |
| w(W) | |
| }) | |
| } | |
| return new(G || (G = Promise))(function(W, w) { | |
| function B(X) { | |
| try { | |
| V(Z.next(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function A(X) { | |
| try { | |
| V(Z.throw(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function V(X) { | |
| X.done ? W(X.value) : C(X.value).then(B, A) | |
| } | |
| V((Z = Z.apply(I, d || [])).next()) | |
| }) | |
| }; | |
| Object.defineProperty(fz, "__esModule", { | |
| value: !0 | |
| }); | |
| fz.NetworkCore = void 0; | |
| hF(); | |
| var Kw4 = hF(), | |
| p21 = rl(), | |
| Fb = q7(), | |
| fw = RE(), | |
| Nw4 = cO1(), | |
| Im1 = _b(), | |
| zw4 = jF(), | |
| dm1 = Hb(), | |
| Qw4 = Ab(), | |
| fw4 = c21(), | |
| Gm1 = ME(), | |
| qw4 = Cb(), | |
| Rw4 = 1e4, | |
| Uw4 = 500, | |
| vw4 = 30000, | |
| Ew4 = 1000, | |
| Wm1 = 50, | |
| Mw4 = Wm1 / Ew4, | |
| Sw4 = new Set([408, 500, 502, 503, 504, 522, 524, 599]); | |
| class wm1 { | |
| constructor(I, d) { | |
| if (this._emitter = d, this._errorBoundary = null, this._timeout = Rw4, this._netConfig = {}, this._options = {}, this._leakyBucket = {}, this._lastUsedInitUrl = null, I) this._options = I; | |
| if (this._options.networkConfig) this._netConfig = this._options.networkConfig; | |
| if (this._netConfig.networkTimeoutMs) this._timeout = this._netConfig.networkTimeoutMs; | |
| this._fallbackResolver = new Nw4.NetworkFallbackResolver(this._options) | |
| } | |
| setErrorBoundary(I) { | |
| this._errorBoundary = I, this._errorBoundary.wrap(this), this._errorBoundary.wrap(this._fallbackResolver), this._fallbackResolver.setErrorBoundary(I) | |
| } | |
| isBeaconSupported() { | |
| return typeof navigator !== "undefined" && typeof navigator.sendBeacon === "function" | |
| } | |
| getLastUsedInitUrlAndReset() { | |
| let I = this._lastUsedInitUrl; | |
| return this._lastUsedInitUrl = null, I | |
| } | |
| beacon(I) { | |
| return Qz(this, void 0, void 0, function*() { | |
| if (!Zm1(I)) return !1; | |
| let d = this._getInternalRequestArgs("POST", I), | |
| G = yield this._getPopulatedBody(d, I.data), Z = yield this._getPopulatedURL(d), C = navigator; | |
| return C.sendBeacon.bind(C)(Z, G) | |
| }) | |
| } | |
| post(I) { | |
| return Qz(this, void 0, void 0, function*() { | |
| let d = this._getInternalRequestArgs("POST", I); | |
| if (d.body = yield this._getPopulatedBody(d, I.data), I.isStatsigEncodable) d.body = this._attemptToEncodeString(d, d.body); | |
| return this._sendRequest(d) | |
| }) | |
| } | |
| get(I) { | |
| let d = this._getInternalRequestArgs("GET", I); | |
| return this._sendRequest(d) | |
| } | |
| _sendRequest(I) { | |
| var d, G, Z, C; | |
| return Qz(this, void 0, void 0, function*() { | |
| if (!Zm1(I)) return null; | |
| if (this._netConfig.preventAllNetworkTraffic) return null; | |
| let { | |
| method: W, | |
| body: w, | |
| retries: B, | |
| attempt: A | |
| } = I, V = I.urlConfig.endpoint; | |
| if (this._isRateLimited(V)) return Fb.Log.warn(`Request to ${V} was blocked because you are making requests too frequently.`), null; | |
| let X = A !== null && A !== void 0 ? A : 1, | |
| _ = typeof AbortController !== "undefined" ? new AbortController : null, | |
| F = setTimeout(() => { | |
| _ === null || _ === void 0 || _.abort(`Timeout of ${this._timeout}ms expired.`) | |
| }, this._timeout), | |
| g = yield this._getPopulatedURL(I), J = null, K = qw4._isUnloading(); | |
| try { | |
| let Q = { | |
| method: W, | |
| body: w, | |
| headers: Object.assign({}, I.headers), | |
| signal: _ === null || _ === void 0 ? void 0 : _.signal, | |
| priority: I.priority, | |
| keepalive: K | |
| }; | |
| Pw4(I, X); | |
| let E = this._leakyBucket[V]; | |
| if (E) E.lastRequestTime = Date.now(), this._leakyBucket[V] = E; | |
| if (J = yield((d = this._netConfig.networkOverrideFunc) !== null && d !== void 0 ? d : fetch)(g, Q), clearTimeout(F), !J.ok) { | |
| let $ = yield J.text().catch(() => "No Text"), h = new Error(`NetworkError: ${g} ${$}`); | |
| throw h.name = "NetworkError", h | |
| } | |
| let P = yield J.text(); | |
| return Cm1(I, J, X, P), this._fallbackResolver.tryBumpExpiryTime(I.sdkKey, I.urlConfig), { | |
| body: P, | |
| code: J.status | |
| } | |
| } catch (Q) { | |
| let E = Lw4(_, Q), | |
| S = yw4(_); | |
| if (Cm1(I, J, X, "", Q), yield this._fallbackResolver.tryFetchUpdatedFallbackInfo(I.sdkKey, I.urlConfig, E, S)) I.fallbackUrl = this._fallbackResolver.getActiveFallbackUrl(I.sdkKey, I.urlConfig); | |
| if (!B || X > B || !Sw4.has((G = J === null || J === void 0 ? void 0 : J.status) !== null && G !== void 0 ? G : 500)) { | |
| (Z = this._emitter) === null || Z === void 0 || Z.call(this, { | |
| name: "error", | |
| error: Q, | |
| tag: fw4.ErrorTag.NetworkError, | |
| requestArgs: I | |
| }); | |
| let $ = `A networking error occurred during ${W} request to ${g}.`; | |
| return Fb.Log.error($, E, Q), (C = this._errorBoundary) === null || C === void 0 || C.attachErrorIfNoneExists($), null | |
| } | |
| return yield $w4(X), this._sendRequest(Object.assign(Object.assign({}, I), { | |
| retries: B, | |
| attempt: X + 1 | |
| })) | |
| } | |
| }) | |
| } | |
| _isRateLimited(I) { | |
| var d; | |
| let G = Date.now(), | |
| Z = (d = this._leakyBucket[I]) !== null && d !== void 0 ? d : { | |
| count: 0, | |
| lastRequestTime: G | |
| }, | |
| C = G - Z.lastRequestTime, | |
| W = Math.floor(C * Mw4); | |
| if (Z.count = Math.max(0, Z.count - W), Z.count >= Wm1) return !0; | |
| return Z.count += 1, Z.lastRequestTime = G, this._leakyBucket[I] = Z, !1 | |
| } | |
| _getPopulatedURL(I) { | |
| var d; | |
| return Qz(this, void 0, void 0, function*() { | |
| let G = (d = I.fallbackUrl) !== null && d !== void 0 ? d : I.urlConfig.getUrl(); | |
| if (I.urlConfig.endpoint === fw.Endpoint._initialize || I.urlConfig.endpoint === fw.Endpoint._download_config_specs) this._lastUsedInitUrl = G; | |
| let Z = Object.assign({ | |
| [fw.NetworkParam.SdkKey]: I.sdkKey, | |
| [fw.NetworkParam.SdkType]: Im1.SDKType._get(I.sdkKey), | |
| [fw.NetworkParam.SdkVersion]: Gm1.SDK_VERSION, | |
| [fw.NetworkParam.Time]: String(Date.now()), | |
| [fw.NetworkParam.SessionID]: dm1.SessionID.get(I.sdkKey) | |
| }, I.params), | |
| C = Object.keys(Z).map((W) => { | |
| return `${encodeURIComponent(W)}=${encodeURIComponent(Z[W])}` | |
| }).join("&"); | |
| return `${G}${C?`?${C}`:""}` | |
| }) | |
| } | |
| _getPopulatedBody(I, d) { | |
| return Qz(this, void 0, void 0, function*() { | |
| let { | |
| sdkKey: G, | |
| fallbackUrl: Z | |
| } = I, C = Qw4.StableID.get(G), W = dm1.SessionID.get(G), w = Im1.SDKType._get(G); | |
| return JSON.stringify(Object.assign(Object.assign({}, d), { | |
| statsigMetadata: Object.assign(Object.assign({}, Gm1.StatsigMetadataProvider.get()), { | |
| stableID: C, | |
| sessionID: W, | |
| sdkType: w, | |
| fallbackUrl: Z | |
| }) | |
| })) | |
| }) | |
| } | |
| _attemptToEncodeString(I, d) { | |
| var G, Z; | |
| let C = zw4._getWindowSafe(); | |
| if (this._options.disableStatsigEncoding || Kw4._getStatsigGlobalFlag("no-encode") != null || !(C === null || C === void 0 ? void 0 : C.btoa)) return d; | |
| try { | |
| let W = (G = C.btoa(d).split("").reverse().join("")) !== null && G !== void 0 ? G : d; | |
| return I.params = Object.assign(Object.assign({}, (Z = I.params) !== null && Z !== void 0 ? Z : {}), { | |
| [fw.NetworkParam.StatsigEncoded]: "1" | |
| }), W | |
| } catch (W) { | |
| return Fb.Log.warn(`Request encoding failed for ${I.urlConfig.getUrl()}`), d | |
| } | |
| } | |
| _getInternalRequestArgs(I, d) { | |
| let G = this._fallbackResolver.getActiveFallbackUrl(d.sdkKey, d.urlConfig); | |
| return Object.assign(Object.assign({}, d), { | |
| method: I, | |
| fallbackUrl: G | |
| }) | |
| } | |
| } | |
| fz.NetworkCore = wm1; | |
| var Zm1 = (I) => { | |
| if (!I.sdkKey) return Fb.Log.warn("Unable to make request without an SDK key"), !1; | |
| return !0 | |
| }; | |
| function Lw4(I, d) { | |
| if ((I === null || I === void 0 ? void 0 : I.signal.aborted) && typeof I.signal.reason === "string") return I.signal.reason; | |
| if (typeof d === "string") return d; | |
| if (d instanceof Error) return `${d.name}: ${d.message}`; | |
| return "Unknown Error" | |
| } | |
| function yw4(I) { | |
| return (I === null || I === void 0 ? void 0 : I.signal.aborted) && typeof I.signal.reason === "string" && I.signal.reason.includes("Timeout") || !1 | |
| } | |
| function Pw4(I, d) { | |
| if (I.urlConfig.endpoint !== fw.Endpoint._initialize) return; | |
| p21.Diagnostics._markInitNetworkReqStart(I.sdkKey, { | |
| attempt: d | |
| }) | |
| } | |
| function Cm1(I, d, G, Z, C) { | |
| if (I.urlConfig.endpoint !== fw.Endpoint._initialize) return; | |
| p21.Diagnostics._markInitNetworkReqEnd(I.sdkKey, p21.Diagnostics._getDiagnosticsData(d, G, Z, C)) | |
| } | |
| function $w4(I) { | |
| return Qz(this, void 0, void 0, function*() { | |
| yield new Promise((d) => setTimeout(d, Math.min(Uw4 * (I * I), vw4))) | |
| }) | |
| } | |
| }); | |
| var Vm1 = Y((Am1) => { | |
| Object.defineProperty(Am1, "__esModule", { | |
| value: !0 | |
| }) | |
| }); | |
| var Ym1 = Y((Xm1) => { | |
| Object.defineProperty(Xm1, "__esModule", { | |
| value: !0 | |
| }) | |
| }); | |
| var Dm1 = Y((qz) => { | |
| var uw4 = qz && qz.__awaiter || function(I, d, G, Z) { | |
| function C(W) { | |
| return W instanceof G ? W : new G(function(w) { | |
| w(W) | |
| }) | |
| } | |
| return new(G || (G = Promise))(function(W, w) { | |
| function B(X) { | |
| try { | |
| V(Z.next(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function A(X) { | |
| try { | |
| V(Z.throw(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function V(X) { | |
| X.done ? W(X.value) : C(X.value).then(B, A) | |
| } | |
| V((Z = Z.apply(I, d || [])).next()) | |
| }) | |
| }; | |
| Object.defineProperty(qz, "__esModule", { | |
| value: !0 | |
| }); | |
| qz.StatsigClientBase = void 0; | |
| hF(); | |
| var Tw4 = hF(), | |
| Ow4 = b21(), | |
| mw4 = u21(), | |
| i21 = q7(), | |
| lw4 = h21(), | |
| bw4 = jF(), | |
| hw4 = Hb(), | |
| gb = bA(), | |
| jw4 = 3000; | |
| class _m1 { | |
| constructor(I, d, G, Z) { | |
| var C; | |
| this.loadingStatus = "Uninitialized", this._initializePromise = null, this._listeners = {}; | |
| let W = this.$emt.bind(this); | |
| (Z === null || Z === void 0 ? void 0 : Z.logLevel) != null && (i21.Log.level = Z.logLevel), (Z === null || Z === void 0 ? void 0 : Z.disableStorage) && gb.Storage._setDisabled(!0), (Z === null || Z === void 0 ? void 0 : Z.initialSessionID) && hw4.StatsigSession.overrideInitialSessionID(Z.initialSessionID, I), (Z === null || Z === void 0 ? void 0 : Z.storageProvider) && gb.Storage._setProvider(Z.storageProvider), this._sdkKey = I, this._options = Z !== null && Z !== void 0 ? Z : {}, this._memoCache = {}, this.overrideAdapter = (C = Z === null || Z === void 0 ? void 0 : Z.overrideAdapter) !== null && C !== void 0 ? C : null, this._logger = new mw4.EventLogger(I, W, G, Z), this._errorBoundary = new Ow4.ErrorBoundary(I, Z, W), this._errorBoundary.wrap(this), this._errorBoundary.wrap(d), this._errorBoundary.wrap(this._logger), G.setErrorBoundary(this._errorBoundary), this.dataAdapter = d, this.dataAdapter.attach(I, Z), this.storageProvider = gb.Storage, this._primeReadyRipcord(), kw4(I, this) | |
| } | |
| updateRuntimeOptions(I) { | |
| if (I.disableLogging != null) this._options.disableLogging = I.disableLogging, this._logger.setLoggingDisabled(I.disableLogging); | |
| if (I.disableStorage != null) this._options.disableStorage = I.disableStorage, gb.Storage._setDisabled(I.disableStorage) | |
| } | |
| flush() { | |
| return this._logger.flush() | |
| } | |
| shutdown() { | |
| return uw4(this, void 0, void 0, function*() { | |
| this.$emt({ | |
| name: "pre_shutdown" | |
| }), this._setStatus("Uninitialized", null), this._initializePromise = null, yield this._logger.stop() | |
| }) | |
| } | |
| on(I, d) { | |
| if (!this._listeners[I]) this._listeners[I] = []; | |
| this._listeners[I].push(d) | |
| } | |
| off(I, d) { | |
| if (this._listeners[I]) { | |
| let G = this._listeners[I].indexOf(d); | |
| if (G !== -1) this._listeners[I].splice(G, 1) | |
| } | |
| } | |
| $on(I, d) { | |
| d.__isInternal = !0, this.on(I, d) | |
| } | |
| $emt(I) { | |
| var d; | |
| let G = (Z) => { | |
| try { | |
| Z(I) | |
| } catch (C) { | |
| if (Z.__isInternal === !0) { | |
| this._errorBoundary.logError(`__emit:${I.name}`, C); | |
| return | |
| } | |
| i21.Log.error("An error occurred in a StatsigClientEvent listener. This is not an issue with Statsig.", I) | |
| } | |
| }; | |
| if (this._listeners[I.name]) this._listeners[I.name].forEach((Z) => G(Z)); | |
| (d = this._listeners["*"]) === null || d === void 0 || d.forEach(G) | |
| } | |
| _setStatus(I, d) { | |
| this.loadingStatus = I, this._memoCache = {}, this.$emt({ | |
| name: "values_updated", | |
| status: I, | |
| values: d | |
| }) | |
| } | |
| _enqueueExposure(I, d, G) { | |
| if ((G === null || G === void 0 ? void 0 : G.disableExposureLog) === !0) { | |
| this._logger.incrementNonExposureCount(I); | |
| return | |
| } | |
| this._logger.enqueue(d) | |
| } | |
| _memoize(I, d) { | |
| return (G, Z) => { | |
| if (this._options.disableEvaluationMemoization) return d(G, Z); | |
| let C = lw4.createMemoKey(I, G, Z); | |
| if (!C) return d(G, Z); | |
| if (!(C in this._memoCache)) { | |
| if (Object.keys(this._memoCache).length >= jw4) this._memoCache = {}; | |
| this._memoCache[C] = d(G, Z) | |
| } | |
| return this._memoCache[C] | |
| } | |
| } | |
| } | |
| qz.StatsigClientBase = _m1; | |
| function kw4(I, d) { | |
| var G; | |
| if (bw4._isServerEnv()) return; | |
| let Z = Tw4._getStatsigGlobal(), | |
| C = (G = Z.instances) !== null && G !== void 0 ? G : {}, | |
| W = d; | |
| if (C[I] != null) i21.Log.warn("Creating multiple Statsig clients with the same SDK key can lead to unexpected behavior. Multi-instance support requires different SDK keys."); | |
| if (C[I] = W, !Z.firstInstance) Z.firstInstance = W; | |
| Z.instances = C, __STATSIG__ = Z | |
| } | |
| }); | |
| var gm1 = Y((Hm1) => { | |
| Object.defineProperty(Hm1, "__esModule", { | |
| value: !0 | |
| }); | |
| Hm1.DataAdapterCachePrefix = void 0; | |
| Hm1.DataAdapterCachePrefix = "statsig.cached" | |
| }); | |
| var Km1 = Y((Jm1) => { | |
| Object.defineProperty(Jm1, "__esModule", { | |
| value: !0 | |
| }) | |
| }); | |
| var zm1 = Y((Nm1) => { | |
| Object.defineProperty(Nm1, "__esModule", { | |
| value: !0 | |
| }) | |
| }); | |
| var Rm1 = Y((fm1) => { | |
| Object.defineProperty(fm1, "__esModule", { | |
| value: !0 | |
| }); | |
| fm1._makeTypedGet = fm1._mergeOverride = fm1._makeLayer = fm1._makeExperiment = fm1._makeDynamicConfig = fm1._makeFeatureGate = void 0; | |
| var xw4 = q7(), | |
| cw4 = al(), | |
| pw4 = "default"; | |
| function n21(I, d, G, Z) { | |
| var C; | |
| return { | |
| name: I, | |
| details: d, | |
| ruleID: (C = G === null || G === void 0 ? void 0 : G.rule_id) !== null && C !== void 0 ? C : pw4, | |
| __evaluation: G, | |
| value: Z | |
| } | |
| } | |
| function iw4(I, d, G) { | |
| return n21(I, d, G, (G === null || G === void 0 ? void 0 : G.value) === !0) | |
| } | |
| fm1._makeFeatureGate = iw4; | |
| function Qm1(I, d, G) { | |
| var Z; | |
| let C = (Z = G === null || G === void 0 ? void 0 : G.value) !== null && Z !== void 0 ? Z : {}; | |
| return Object.assign(Object.assign({}, n21(I, d, G, C)), { | |
| get: Jb(I, G === null || G === void 0 ? void 0 : G.value) | |
| }) | |
| } | |
| fm1._makeDynamicConfig = Qm1; | |
| function nw4(I, d, G) { | |
| var Z; | |
| let C = Qm1(I, d, G); | |
| return Object.assign(Object.assign({}, C), { | |
| groupName: (Z = G === null || G === void 0 ? void 0 : G.group_name) !== null && Z !== void 0 ? Z : null | |
| }) | |
| } | |
| fm1._makeExperiment = nw4; | |
| function rw4(I, d, G, Z) { | |
| var C, W; | |
| return Object.assign(Object.assign({}, n21(I, d, G, void 0)), { | |
| get: Jb(I, G === null || G === void 0 ? void 0 : G.value, Z), | |
| groupName: (C = G === null || G === void 0 ? void 0 : G.group_name) !== null && C !== void 0 ? C : null, | |
| __value: (W = G === null || G === void 0 ? void 0 : G.value) !== null && W !== void 0 ? W : {} | |
| }) | |
| } | |
| fm1._makeLayer = rw4; | |
| function aw4(I, d, G, Z) { | |
| return Object.assign(Object.assign(Object.assign({}, I), d), { | |
| get: Jb(I.name, G, Z) | |
| }) | |
| } | |
| fm1._mergeOverride = aw4; | |
| function Jb(I, d, G) { | |
| return (Z, C) => { | |
| var W; | |
| let w = (W = d === null || d === void 0 ? void 0 : d[Z]) !== null && W !== void 0 ? W : null; | |
| if (w == null) return C !== null && C !== void 0 ? C : null; | |
| if (C != null && !cw4._isTypeMatch(w, C)) return xw4.Log.warn(`Parameter type mismatch. '${I}.${Z}' was found to be type '${typeof w}' but fallback/return type is '${typeof C}'. See https://docs.statsig.com/client/javascript-sdk/#typed-getters`), C !== null && C !== void 0 ? C : null; | |
| return G === null || G === void 0 || G(Z), w | |
| } | |
| } | |
| fm1._makeTypedGet = Jb | |
| }); | |
| var vm1 = Y((Um1) => { | |
| Object.defineProperty(Um1, "__esModule", { | |
| value: !0 | |
| }) | |
| }); | |
| var Sm1 = Y((Em1) => { | |
| Object.defineProperty(Em1, "__esModule", { | |
| value: !0 | |
| }); | |
| Em1.UPDATE_DETAIL_ERROR_MESSAGES = Em1.createUpdateDetails = void 0; | |
| var dB4 = (I, d, G, Z, C, W) => { | |
| return { | |
| duration: G, | |
| source: d, | |
| success: I, | |
| error: Z, | |
| sourceUrl: C, | |
| warnings: W | |
| } | |
| }; | |
| Em1.createUpdateDetails = dB4; | |
| Em1.UPDATE_DETAIL_ERROR_MESSAGES = { | |
| NO_NETWORK_DATA: "No data was returned from the network. This may be due to a network timeout if a timeout value was specified in the options or ad blocker error." | |
| } | |
| }); | |
| var $m1 = Y((ym1) => { | |
| Object.defineProperty(ym1, "__esModule", { | |
| value: !0 | |
| }); | |
| ym1.SDKFlags = void 0; | |
| var Lm1 = {}; | |
| ym1.SDKFlags = { | |
| setFlags: (I, d) => { | |
| Lm1[I] = d | |
| }, | |
| get: (I, d) => { | |
| var G, Z; | |
| return (Z = (G = Lm1[I]) === null || G === void 0 ? void 0 : G[d]) !== null && Z !== void 0 ? Z : !1 | |
| } | |
| } | |
| }); | |
| var JY = Y((n2) => { | |
| var ZB4 = n2 && n2.__createBinding || (Object.create ? function(I, d, G, Z) { | |
| if (Z === void 0) Z = G; | |
| var C = Object.getOwnPropertyDescriptor(d, G); | |
| if (!C || ("get" in C ? !d.__esModule : C.writable || C.configurable)) C = { | |
| enumerable: !0, | |
| get: function() { | |
| return d[G] | |
| } | |
| }; | |
| Object.defineProperty(I, Z, C) | |
| } : function(I, d, G, Z) { | |
| if (Z === void 0) Z = G; | |
| I[Z] = d[G] | |
| }), | |
| l4 = n2 && n2.__exportStar || function(I, d) { | |
| for (var G in I) | |
| if (G !== "default" && !Object.prototype.hasOwnProperty.call(d, G)) ZB4(d, I, G) | |
| }; | |
| Object.defineProperty(n2, "__esModule", { | |
| value: !0 | |
| }); | |
| n2.Storage = n2.Log = n2.EventLogger = n2.Diagnostics = void 0; | |
| hF(); | |
| var CB4 = rl(); | |
| Object.defineProperty(n2, "Diagnostics", { | |
| enumerable: !0, | |
| get: function() { | |
| return CB4.Diagnostics | |
| } | |
| }); | |
| var WB4 = u21(); | |
| Object.defineProperty(n2, "EventLogger", { | |
| enumerable: !0, | |
| get: function() { | |
| return WB4.EventLogger | |
| } | |
| }); | |
| var um1 = q7(); | |
| Object.defineProperty(n2, "Log", { | |
| enumerable: !0, | |
| get: function() { | |
| return um1.Log | |
| } | |
| }); | |
| var wB4 = ME(), | |
| BB4 = bA(); | |
| Object.defineProperty(n2, "Storage", { | |
| enumerable: !0, | |
| get: function() { | |
| return BB4.Storage | |
| } | |
| }); | |
| l4(hF(), n2); | |
| l4(qE(), n2); | |
| l4(ZO1(), n2); | |
| l4(zO1(), n2); | |
| l4(rl(), n2); | |
| l4(fO1(), n2); | |
| l4(b21(), n2); | |
| l4(LO1(), n2); | |
| l4(PO1(), n2); | |
| l4(Hz(), n2); | |
| l4(uO1(), n2); | |
| l4(q7(), n2); | |
| l4(h21(), n2); | |
| l4(RE(), n2); | |
| l4(Bm1(), n2); | |
| l4(Vm1(), n2); | |
| l4(Ym1(), n2); | |
| l4(jF(), n2); | |
| l4(_b(), n2); | |
| l4(Hb(), n2); | |
| l4(Ab(), n2); | |
| l4(Dm1(), n2); | |
| l4(c21(), n2); | |
| l4(gm1(), n2); | |
| l4(v21(), n2); | |
| l4(ME(), n2); | |
| l4(Km1(), n2); | |
| l4(zm1(), n2); | |
| l4(Rm1(), n2); | |
| l4(vm1(), n2); | |
| l4(O21(), n2); | |
| l4(bA(), n2); | |
| l4(m21(), n2); | |
| l4(al(), n2); | |
| l4(S21(), n2); | |
| l4(wb(), n2); | |
| l4(Cb(), n2); | |
| l4(Sm1(), n2); | |
| l4($m1(), n2); | |
| __STATSIG__ = Object.assign(Object.assign({}, __STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {}), { | |
| Log: um1.Log, | |
| SDK_VERSION: wB4.SDK_VERSION | |
| }) | |
| }); | |
| var mm1 = Y((Om1) => { | |
| Object.defineProperty(Om1, "__esModule", { | |
| value: !0 | |
| }); | |
| var KY = JY(); | |
| class Tm1 { | |
| constructor(I) { | |
| this._sdkKey = I, this._rawValues = null, this._values = null, this._source = "Uninitialized", this._lcut = 0, this._receivedAt = 0, this._bootstrapMetadata = null, this._warnings = new Set | |
| } | |
| reset() { | |
| this._values = null, this._rawValues = null, this._source = "Loading", this._lcut = 0, this._receivedAt = 0, this._bootstrapMetadata = null | |
| } | |
| finalize() { | |
| if (this._values) return; | |
| this._source = "NoValues" | |
| } | |
| getValues() { | |
| return this._rawValues ? KY._typedJsonParse(this._rawValues, "has_updates", "EvaluationStoreValues") : null | |
| } | |
| setValues(I, d) { | |
| if (!I) return !1; | |
| let G = KY._typedJsonParse(I.data, "has_updates", "EvaluationResponse"); | |
| if (G == null) return !1; | |
| if (this._source = I.source, (G === null || G === void 0 ? void 0 : G.has_updates) !== !0) return !0; | |
| if (this._rawValues = I.data, this._lcut = G.time, this._receivedAt = I.receivedAt, this._values = G, this._bootstrapMetadata = this._extractBootstrapMetadata(I.source, G), I.source && G.user) this._setWarningState(d, G); | |
| if (G.sdk_flags) KY.SDKFlags.setFlags(this._sdkKey, G.sdk_flags); | |
| else KY.SDKFlags.setFlags(this._sdkKey, {}); | |
| return !0 | |
| } | |
| getWarnings() { | |
| if (this._warnings.size === 0) return; | |
| return Array.from(this._warnings) | |
| } | |
| getGate(I) { | |
| var d; | |
| return this._getDetailedStoreResult((d = this._values) === null || d === void 0 ? void 0 : d.feature_gates, I) | |
| } | |
| getConfig(I) { | |
| var d; | |
| return this._getDetailedStoreResult((d = this._values) === null || d === void 0 ? void 0 : d.dynamic_configs, I) | |
| } | |
| getLayer(I) { | |
| var d; | |
| return this._getDetailedStoreResult((d = this._values) === null || d === void 0 ? void 0 : d.layer_configs, I) | |
| } | |
| getParamStore(I) { | |
| var d; | |
| return this._getDetailedStoreResult((d = this._values) === null || d === void 0 ? void 0 : d.param_stores, I) | |
| } | |
| getSource() { | |
| return this._source | |
| } | |
| _extractBootstrapMetadata(I, d) { | |
| if (I !== "Bootstrap") return null; | |
| let G = {}; | |
| if (d.user) G.user = d.user; | |
| if (d.sdkInfo) G.generatorSDKInfo = d.sdkInfo; | |
| return G.lcut = d.time, G | |
| } | |
| _getDetailedStoreResult(I, d) { | |
| let G = null; | |
| if (I) G = I[d] ? I[d] : I[KY._DJB2(d)]; | |
| return { | |
| result: G, | |
| details: this._getDetails(G == null) | |
| } | |
| } | |
| _setWarningState(I, d) { | |
| var G; | |
| let Z = KY.StableID.get(this._sdkKey); | |
| if (((G = I.customIDs) === null || G === void 0 ? void 0 : G.stableID) !== Z) { | |
| this._warnings.add("StableIDMismatch"); | |
| return | |
| } | |
| if ("user" in d) { | |
| let C = d.user; | |
| if (KY._getFullUserHash(I) !== KY._getFullUserHash(C)) this._warnings.add("PartialUserMatch") | |
| } | |
| } | |
| getCurrentSourceDetails() { | |
| if (this._source === "Uninitialized" || this._source === "NoValues") return { | |
| reason: this._source | |
| }; | |
| let I = { | |
| reason: this._source, | |
| lcut: this._lcut, | |
| receivedAt: this._receivedAt | |
| }; | |
| if (this._warnings.size > 0) I.warnings = Array.from(this._warnings); | |
| return I | |
| } | |
| _getDetails(I) { | |
| var d, G; | |
| let Z = this.getCurrentSourceDetails(), | |
| C = Z.reason, | |
| W = (d = Z.warnings) !== null && d !== void 0 ? d : []; | |
| if (this._source === "Bootstrap" && W.length > 0) C = C + W[0]; | |
| if (C !== "Uninitialized" && C !== "NoValues") C = `${C}:${I?"Unrecognized":"Recognized"}`; | |
| let w = this._source === "Bootstrap" ? (G = this._bootstrapMetadata) !== null && G !== void 0 ? G : void 0 : void 0; | |
| if (w) Z.bootstrapMetadata = w; | |
| return Object.assign(Object.assign({}, Z), { | |
| reason: C | |
| }) | |
| } | |
| } | |
| Om1.default = Tm1 | |
| }); | |
| var jm1 = Y((bm1) => { | |
| Object.defineProperty(bm1, "__esModule", { | |
| value: !0 | |
| }); | |
| bm1._resolveDeltasResponse = void 0; | |
| var lm1 = JY(), | |
| VB4 = 2; | |
| function XB4(I, d) { | |
| let G = lm1._typedJsonParse(d, "checksum", "DeltasEvaluationResponse"); | |
| if (!G) return { | |
| hadBadDeltaChecksum: !0 | |
| }; | |
| let Z = YB4(I, G), | |
| C = _B4(Z), | |
| W = lm1._DJB2Object({ | |
| feature_gates: C.feature_gates, | |
| dynamic_configs: C.dynamic_configs, | |
| layer_configs: C.layer_configs | |
| }, VB4); | |
| if (W !== G.checksumV2) return { | |
| hadBadDeltaChecksum: !0, | |
| badChecksum: W, | |
| badMergedConfigs: C, | |
| badFullResponse: G.deltas_full_response | |
| }; | |
| return JSON.stringify(C) | |
| } | |
| bm1._resolveDeltasResponse = XB4; | |
| function YB4(I, d) { | |
| return Object.assign(Object.assign(Object.assign({}, I), d), { | |
| feature_gates: Object.assign(Object.assign({}, I.feature_gates), d.feature_gates), | |
| layer_configs: Object.assign(Object.assign({}, I.layer_configs), d.layer_configs), | |
| dynamic_configs: Object.assign(Object.assign({}, I.dynamic_configs), d.dynamic_configs) | |
| }) | |
| } | |
| function _B4(I) { | |
| let d = I; | |
| return r21(I.deleted_gates, d.feature_gates), delete d.deleted_gates, r21(I.deleted_configs, d.dynamic_configs), delete d.deleted_configs, r21(I.deleted_layers, d.layer_configs), delete d.deleted_layers, d | |
| } | |
| function r21(I, d) { | |
| I === null || I === void 0 || I.forEach((G) => { | |
| delete d[G] | |
| }) | |
| } | |
| }); | |
| var a21 = Y((SE) => { | |
| var km1 = SE && SE.__awaiter || function(I, d, G, Z) { | |
| function C(W) { | |
| return W instanceof G ? W : new G(function(w) { | |
| w(W) | |
| }) | |
| } | |
| return new(G || (G = Promise))(function(W, w) { | |
| function B(X) { | |
| try { | |
| V(Z.next(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function A(X) { | |
| try { | |
| V(Z.throw(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function V(X) { | |
| X.done ? W(X.value) : C(X.value).then(B, A) | |
| } | |
| V((Z = Z.apply(I, d || [])).next()) | |
| }) | |
| }; | |
| Object.defineProperty(SE, "__esModule", { | |
| value: !0 | |
| }); | |
| var Kb = JY(), | |
| DB4 = jm1(); | |
| class xm1 extends Kb.NetworkCore { | |
| constructor(I, d) { | |
| super(I, d); | |
| let G = I === null || I === void 0 ? void 0 : I.networkConfig; | |
| this._initializeUrlConfig = new Kb.UrlConfiguration(Kb.Endpoint._initialize, G === null || G === void 0 ? void 0 : G.initializeUrl, G === null || G === void 0 ? void 0 : G.api, G === null || G === void 0 ? void 0 : G.initializeFallbackUrls) | |
| } | |
| fetchEvaluations(I, d, G, Z) { | |
| return km1(this, void 0, void 0, function*() { | |
| let C = d ? Kb._typedJsonParse(d, "has_updates", "InitializeResponse") : null, | |
| W = { | |
| user: Z, | |
| hash: "djb2", | |
| deltasResponseRequested: !1, | |
| full_checksum: null | |
| }; | |
| if (C === null || C === void 0 ? void 0 : C.has_updates) W = Object.assign(Object.assign({}, W), { | |
| sinceTime: C.time, | |
| previousDerivedFields: "derived_fields" in C ? C.derived_fields : {}, | |
| deltasResponseRequested: !0, | |
| full_checksum: C.full_checksum | |
| }); | |
| return this._fetchEvaluations(I, C, W, G) | |
| }) | |
| } | |
| _fetchEvaluations(I, d, G, Z) { | |
| var C, W; | |
| return km1(this, void 0, void 0, function*() { | |
| let w = yield this.post({ | |
| sdkKey: I, | |
| urlConfig: this._initializeUrlConfig, | |
| data: G, | |
| retries: 2, | |
| isStatsigEncodable: !0, | |
| priority: Z | |
| }); | |
| if ((w === null || w === void 0 ? void 0 : w.code) === 204) return '{"has_updates": false}'; | |
| if ((w === null || w === void 0 ? void 0 : w.code) !== 200) return (C = w === null || w === void 0 ? void 0 : w.body) !== null && C !== void 0 ? C : null; | |
| if ((d === null || d === void 0 ? void 0 : d.has_updates) !== !0 || ((W = w.body) === null || W === void 0 ? void 0 : W.includes('"is_delta":true')) !== !0 || G.deltasResponseRequested !== !0) return w.body; | |
| let B = DB4._resolveDeltasResponse(d, w.body); | |
| if (typeof B === "string") return B; | |
| return this._fetchEvaluations(I, d, Object.assign(Object.assign(Object.assign({}, G), B), { | |
| deltasResponseRequested: !1 | |
| }), Z) | |
| }) | |
| } | |
| } | |
| SE.default = xm1 | |
| }); | |
| var nm1 = Y((pm1) => { | |
| Object.defineProperty(pm1, "__esModule", { | |
| value: !0 | |
| }); | |
| pm1._makeParamStoreGetter = void 0; | |
| var cm1 = JY(), | |
| Nb = { | |
| disableExposureLog: !0 | |
| }; | |
| function zb(I) { | |
| return I == null || I.disableExposureLog === !1 | |
| } | |
| function s21(I, d) { | |
| return d != null && !cm1._isTypeMatch(I, d) | |
| } | |
| function HB4(I, d) { | |
| return I.value | |
| } | |
| function FB4(I, d, G) { | |
| if (I.getFeatureGate(d.gate_name, zb(G) ? void 0 : Nb).value) return d.pass_value; | |
| return d.fail_value | |
| } | |
| function gB4(I, d, G, Z) { | |
| let W = I.getDynamicConfig(d.config_name, Nb).get(d.param_name); | |
| if (s21(W, G)) return G; | |
| if (zb(Z)) I.getDynamicConfig(d.config_name); | |
| return W | |
| } | |
| function JB4(I, d, G, Z) { | |
| let W = I.getExperiment(d.experiment_name, Nb).get(d.param_name); | |
| if (s21(W, G)) return G; | |
| if (zb(Z)) I.getExperiment(d.experiment_name); | |
| return W | |
| } | |
| function KB4(I, d, G, Z) { | |
| let W = I.getLayer(d.layer_name, Nb).get(d.param_name); | |
| if (s21(W, G)) return G; | |
| if (zb(Z)) I.getLayer(d.layer_name).get(d.param_name); | |
| return W | |
| } | |
| function NB4(I, d, G) { | |
| return (Z, C) => { | |
| if (d == null) return C; | |
| let W = d[Z]; | |
| if (W == null || C != null && cm1._typeOf(C) !== W.param_type) return C; | |
| switch (W.ref_type) { | |
| case "static": | |
| return HB4(W, G); | |
| case "gate": | |
| return FB4(I, W, G); | |
| case "dynamic_config": | |
| return gB4(I, W, C, G); | |
| case "experiment": | |
| return JB4(I, W, C, G); | |
| case "layer": | |
| return KB4(I, W, C, G); | |
| default: | |
| return C | |
| } | |
| } | |
| } | |
| pm1._makeParamStoreGetter = NB4 | |
| }); | |
| var am1 = Y((Rz) => { | |
| var zB4 = Rz && Rz.__awaiter || function(I, d, G, Z) { | |
| function C(W) { | |
| return W instanceof G ? W : new G(function(w) { | |
| w(W) | |
| }) | |
| } | |
| return new(G || (G = Promise))(function(W, w) { | |
| function B(X) { | |
| try { | |
| V(Z.next(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function A(X) { | |
| try { | |
| V(Z.throw(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function V(X) { | |
| X.done ? W(X.value) : C(X.value).then(B, A) | |
| } | |
| V((Z = Z.apply(I, d || [])).next()) | |
| }) | |
| }; | |
| Object.defineProperty(Rz, "__esModule", { | |
| value: !0 | |
| }); | |
| Rz.StatsigEvaluationsDataAdapter = void 0; | |
| var xF = JY(), | |
| QB4 = a21(); | |
| class rm1 extends xF.DataAdapterCore { | |
| constructor() { | |
| super("EvaluationsDataAdapter", "evaluations"); | |
| this._network = null, this._options = null | |
| } | |
| attach(I, d) { | |
| super.attach(I, d), this._network = new QB4.default(d !== null && d !== void 0 ? d : {}) | |
| } | |
| getDataAsync(I, d, G) { | |
| return this._getDataAsyncImpl(I, xF._normalizeUser(d, this._options), G) | |
| } | |
| prefetchData(I, d) { | |
| return this._prefetchDataImpl(I, d) | |
| } | |
| setData(I) { | |
| let d = xF._typedJsonParse(I, "has_updates", "data"); | |
| if (d && "user" in d) super.setData(I, d.user); | |
| else xF.Log.error("StatsigUser not found. You may be using an older server SDK version. Please upgrade your SDK or use setDataLegacy.") | |
| } | |
| setDataLegacy(I, d) { | |
| super.setData(I, d) | |
| } | |
| _fetchFromNetwork(I, d, G) { | |
| var Z; | |
| return zB4(this, void 0, void 0, function*() { | |
| let C = yield(Z = this._network) === null || Z === void 0 ? void 0 : Z.fetchEvaluations(this._getSdkKey(), I, G === null || G === void 0 ? void 0 : G.priority, d); | |
| return C !== null && C !== void 0 ? C : null | |
| }) | |
| } | |
| _getCacheKey(I) { | |
| var d; | |
| let G = xF._getStorageKey(this._getSdkKey(), I, (d = this._options) === null || d === void 0 ? void 0 : d.customUserCacheKeyFunc); | |
| return `${xF.DataAdapterCachePrefix}.${this._cacheSuffix}.${G}` | |
| } | |
| _isCachedResultValidFor204(I, d) { | |
| return I.fullUserHash != null && I.fullUserHash === xF._getFullUserHash(d) | |
| } | |
| } | |
| Rz.StatsigEvaluationsDataAdapter = rm1 | |
| }); | |
| var sm1 = Y((LE) => { | |
| var o21 = LE && LE.__awaiter || function(I, d, G, Z) { | |
| function C(W) { | |
| return W instanceof G ? W : new G(function(w) { | |
| w(W) | |
| }) | |
| } | |
| return new(G || (G = Promise))(function(W, w) { | |
| function B(X) { | |
| try { | |
| V(Z.next(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function A(X) { | |
| try { | |
| V(Z.throw(X)) | |
| } catch (_) { | |
| w(_) | |
| } | |
| } | |
| function V(X) { | |
| X.done ? W(X.value) : C(X.value).then(B, A) | |
| } | |
| V((Z = Z.apply(I, d || [])).next()) | |
| }) | |
| }; | |
| Object.defineProperty(LE, "__esModule", { | |
| value: !0 | |
| }); | |
| var a4 = JY(), | |
| fB4 = mm1(), | |
| qB4 = a21(), | |
| RB4 = nm1(), | |
| UB4 = am1(); | |
| class Qb extends a4.StatsigClientBase { | |
| static instance(I) { | |
| let d = a4._getStatsigGlobal().instance(I); | |
| if (d instanceof Qb) return d; | |
| return a4.Log.warn(a4._isServerEnv() ? "StatsigClient.instance is not supported in server environments" : "Unable to find StatsigClient instance"), new Qb(I !== null && I !== void 0 ? I : "", {}) | |
| } | |
| constructor(I, d, G = null) { | |
| var Z, C; | |
| a4.SDKType._setClientType(I, "javascript-client"); | |
| let W = new qB4.default(G, (B) => { | |
| this.$emt(B) | |
| }); | |
| super(I, (Z = G === null || G === void 0 ? void 0 : G.dataAdapter) !== null && Z !== void 0 ? Z : new UB4.StatsigEvaluationsDataAdapter, W, G); | |
| this.getFeatureGate = this._memoize(a4.MemoPrefix._gate, this._getFeatureGateImpl.bind(this)), this.getDynamicConfig = this._memoize(a4.MemoPrefix._dynamicConfig, this._getDynamicConfigImpl.bind(this)), this.getExperiment = this._memoize(a4.MemoPrefix._experiment, this._getExperimentImpl.bind(this)), this.getLayer = this._memoize(a4.MemoPrefix._layer, this._getLayerImpl.bind(this)), this.getParameterStore = this._memoize(a4.MemoPrefix._paramStore, this._getParameterStoreImpl.bind(this)), this._store = new fB4.default(I), this._network = W, this._user = this._configureUser(d, G); | |
| let w = (C = G === null || G === void 0 ? void 0 : G.plugins) !== null && C !== void 0 ? C : []; | |
| for (let B of w) B.bind(this) | |
| } | |
| initializeSync(I) { | |
| var d; | |
| if (this.loadingStatus !== "Uninitialized") return a4.createUpdateDetails(!0, this._store.getSource(), -1, null, null, ["MultipleInitializations", ...(d = this._store.getWarnings()) !== null && d !== void 0 ? d : []]); | |
| return this._logger.start(), this.updateUserSync(this._user, I) | |
| } | |
| initializeAsync(I) { | |
| return o21(this, void 0, void 0, function*() { | |
| if (this._initializePromise) return this._initializePromise; | |
| return this._initializePromise = this._initializeAsyncImpl(I), this._initializePromise | |
| }) | |
| } | |
| updateUserSync(I, d) { | |
| var G; | |
| let Z = performance.now(), | |
| C = [...(G = this._store.getWarnings()) !== null && G !== void 0 ? G : []]; | |
| this._resetForUser(I); | |
| let W = this.dataAdapter.getDataSync(this._user); | |
| if (W == null) C.push("NoCachedValues"); | |
| this._store.setValues(W, this._user), this._finalizeUpdate(W); | |
| let w = d === null || d === void 0 ? void 0 : d.disableBackgroundCacheRefresh; | |
| if (w === !0 || w == null && (W === null || W === void 0 ? void 0 : W.source) === "Bootstrap") return a4.createUpdateDetails(!0, this._store.getSource(), performance.now() - Z, this._errorBoundary.getLastSeenErrorAndReset(), this._network.getLastUsedInitUrlAndReset(), C); | |
| return this._runPostUpdate(W !== null && W !== void 0 ? W : null, this._user), a4.createUpdateDetails(!0, this._store.getSource(), performance.now() - Z, this._errorBoundary.getLastSeenErrorAndReset(), this._network.getLastUsedInitUrlAndReset(), C) | |
| } | |
| updateUserAsync(I, d) { | |
| return o21(this, void 0, void 0, function*() { | |
| this._resetForUser(I); | |
| let G = this._user; | |
| a4.Diagnostics._markInitOverallStart(this._sdkKey); | |
| let Z = this.dataAdapter.getDataSync(G); | |
| if (this._store.setValues(Z, this._user), this._setStatus("Loading", Z), Z = yield this.dataAdapter.getDataAsync(Z, G, d), G !== this._user) return a4.createUpdateDetails(!1, this._store.getSource(), -1, new Error("User changed during update"), this._network.getLastUsedInitUrlAndReset()); | |
| let C = !1; | |
| if (Z != null) a4.Diagnostics._markInitProcessStart(this._sdkKey), C = this._store.setValues(Z, this._user), a4.Diagnostics._markInitProcessEnd(this._sdkKey, { | |
| success: C | |
| }); | |
| if (this._finalizeUpdate(Z), !C) this._errorBoundary.attachErrorIfNoneExists(a4.UPDATE_DETAIL_ERROR_MESSAGES.NO_NETWORK_DATA), this.$emt({ | |
| name: "initialization_failure" | |
| }); | |
| a4.Diagnostics._markInitOverallEnd(this._sdkKey, C, this._store.getCurrentSourceDetails()); | |
| let W = a4.Diagnostics._enqueueDiagnosticsEvent(this._user, this._logger, this._sdkKey, this._options); | |
| return a4.createUpdateDetails(C, this._store.getSource(), W, this._errorBoundary.getLastSeenErrorAndReset(), this._network.getLastUsedInitUrlAndReset(), this._store.getWarnings()) | |
| }) | |
| } | |
| getContext() { | |
| return { | |
| sdkKey: this._sdkKey, | |
| options: this._options, | |
| values: this._store.getValues(), | |
| user: JSON.parse(JSON.stringify(this._user)), | |
| errorBoundary: this._errorBoundary, | |
| session: a4.StatsigSession.get(this._sdkKey), | |
| stableID: a4.StableID.get(this._sdkKey) | |
| } | |
| } | |
| checkGate(I, d) { | |
| return this.getFeatureGate(I, d).value | |
| } | |
| logEvent(I, d, G) { | |
| let Z = typeof I === "string" ? { | |
| eventName: I, | |
| value: d, | |
| metadata: G | |
| } : I; | |
| this._logger.enqueue(Object.assign(Object.assign({}, Z), { | |
| user: this._user, | |
| time: Date.now() | |
| })) | |
| } | |
| _primeReadyRipcord() { | |
| this.$on("error", () => { | |
| this.loadingStatus === "Loading" && this._finalizeUpdate(null) | |
| }) | |
| } | |
| _initializeAsyncImpl(I) { | |
| return o21(this, void 0, void 0, function*() { | |
| if (!a4.Storage.isReady()) yield a4.Storage.isReadyResolver(); | |
| return this._logger.start(), this.updateUserAsync(this._user, I) | |
| }) | |
| } | |
| _finalizeUpdate(I) { | |
| this._store.finalize(), this._setStatus("Ready", I) | |
| } | |
| _runPostUpdate(I, d) { | |
| this.dataAdapter.getDataAsync(I, d, { | |
| priority: "low" | |
| }).catch((G) => { | |
| a4.Log.error("An error occurred after update.", G) | |
| }) | |
| } | |
| _resetForUser(I) { | |
| this._logger.reset(), this._store.reset(), this._user = this._configureUser(I, this._options) | |
| } | |
| _configureUser(I, d) { | |
| var G; | |
| let Z = a4._normalizeUser(I, d), | |
| C = (G = Z.customIDs) === null || G === void 0 ? void 0 : G.stableID; | |
| if (C) a4.StableID.setOverride(C, this._sdkKey); | |
| return Z | |
| } | |
| _getFeatureGateImpl(I, d) { | |
| var G, Z; | |
| let { | |
| result: C, | |
| details: W | |
| } = this._store.getGate(I), w = a4._makeFeatureGate(I, W, C), B = (Z = (G = this.overrideAdapter) === null || G === void 0 ? void 0 : G.getGateOverride) === null || Z === void 0 ? void 0 : Z.call(G, w, this._user, d), A = B !== null && B !== void 0 ? B : w; | |
| return this._enqueueExposure(I, a4._createGateExposure(this._user, A), d), this.$emt({ | |
| name: "gate_evaluation", | |
| gate: A | |
| }), A | |
| } | |
| _getDynamicConfigImpl(I, d) { | |
| var G, Z; | |
| let { | |
| result: C, | |
| details: W | |
| } = this._store.getConfig(I), w = a4._makeDynamicConfig(I, W, C), B = (Z = (G = this.overrideAdapter) === null || G === void 0 ? void 0 : G.getDynamicConfigOverride) === null || Z === void 0 ? void 0 : Z.call(G, w, this._user, d), A = B !== null && B !== void 0 ? B : w; | |
| return this._enqueueExposure(I, a4._createConfigExposure(this._user, A), d), this.$emt({ | |
| name: "dynamic_config_evaluation", | |
| dynamicConfig: A | |
| }), A | |
| } | |
| _getExperimentImpl(I, d) { | |
| var G, Z; | |
| let { | |
| result: C, | |
| details: W | |
| } = this._store.getConfig(I), w = a4._makeExperiment(I, W, C), B = (Z = (G = this.overrideAdapter) === null || G === void 0 ? void 0 : G.getExperimentOverride) === null || Z === void 0 ? void 0 : Z.call(G, w, this._user, d), A = B !== null && B !== void 0 ? B : w; | |
| return this._enqueueExposure(I, a4._createConfigExposure(this._user, A), d), this.$emt({ | |
| name: "experiment_evaluation", | |
| experiment: A | |
| }), A | |
| } | |
| _getLayerImpl(I, d) { | |
| var G, Z, C; | |
| let { | |
| result: W, | |
| details: w | |
| } = this._store.getLayer(I), B = a4._makeLayer(I, w, W), A = (Z = (G = this.overrideAdapter) === null || G === void 0 ? void 0 : G.getLayerOverride) === null || Z === void 0 ? void 0 : Z.call(G, B, this._user, d); | |
| if (d === null || d === void 0 ? void 0 : d.disableExposureLog) this._logger.incrementNonExposureCount(I); | |
| let V = a4._mergeOverride(B, A, (C = A === null || A === void 0 ? void 0 : A.__value) !== null && C !== void 0 ? C : B.__value, (X) => { | |
| if (d === null || d === void 0 ? void 0 : d.disableExposureLog) return; | |
| this._enqueueExposure(I, a4._createLayerParameterExposure(this._user, V, X), d) | |
| }); | |
| return this.$emt({ | |
| name: "layer_evaluation", | |
| layer: V | |
| }), V | |
| } | |
| _getParameterStoreImpl(I, d) { | |
| let { | |
| result: G, | |
| details: Z | |
| } = this._store.getParamStore(I); | |
| return this._logger.incrementNonExposureCount(I), { | |
| name: I, | |
| details: Z, | |
| __configuration: G, | |
| get: RB4._makeParamStoreGetter(this, G, d) | |
| } | |
| } | |
| } | |
| LE.default = Qb | |
| }); | |
| var em1 = Y((qw) => { | |
| var vB4 = qw && qw.__createBinding || (Object.create ? function(I, d, G, Z) { | |
| if (Z === void 0) Z = G; | |
| var C = Object.getOwnPropertyDescriptor(d, G); | |
| if (!C || ("get" in C ? !d.__esModule : C.writable || C.configurable)) C = { | |
| enumerable: !0, | |
| get: function() { | |
| return d[G] | |
| } | |
| }; | |
| Object.defineProperty(I, Z, C) | |
| } : function(I, d, G, Z) { | |
| if (Z === void 0) Z = G; | |
| I[Z] = d[G] | |
| }), | |
| EB4 = qw && qw.__exportStar || function(I, d) { | |
| for (var G in I) | |
| if (G !== "default" && !Object.prototype.hasOwnProperty.call(d, G)) vB4(d, I, G) | |
| }; | |
| Object.defineProperty(qw, "__esModule", { | |
| value: !0 | |
| }); | |
| qw.StatsigClient = void 0; | |
| var om1 = sm1(); | |
| qw.StatsigClient = om1.default; | |
| EB4(JY(), qw); | |
| __STATSIG__ = Object.assign(Object.assign({}, __STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {}), { | |
| StatsigClient: om1.default | |
| }); | |
| qw.default = __STATSIG__ | |
| }); | |
| var Ol1 = Y((Lv9, Tl1) => { | |
| var m3 = {}; | |
| Tl1.exports = m3; | |
| function ul1(I) { | |
| return I < 0 ? -1 : 1 | |
| } | |
| function YA4(I) { | |
| if (I % 1 === 0.5 && (I & 1) === 0) return Math.floor(I); | |
| else return Math.round(I) | |
| } | |
| function zY(I, d) { | |
| if (!d.unsigned) --I; | |
| let G = d.unsigned ? 0 : -Math.pow(2, I), | |
| Z = Math.pow(2, I) - 1, | |
| C = d.moduloBitLength ? Math.pow(2, d.moduloBitLength) : Math.pow(2, I), | |
| W = d.moduloBitLength ? Math.pow(2, d.moduloBitLength - 1) : Math.pow(2, I - 1); | |
| return function(w, B) { | |
| if (!B) B = {}; | |
| let A = +w; | |
| if (B.enforceRange) { | |
| if (!Number.isFinite(A)) throw new TypeError("Argument is not a finite number"); | |
| if (A = ul1(A) * Math.floor(Math.abs(A)), A < G || A > Z) throw new TypeError("Argument is not in byte range"); | |
| return A | |
| } | |
| if (!isNaN(A) && B.clamp) { | |
| if (A = YA4(A), A < G) A = G; | |
| if (A > Z) A = Z; | |
| return A | |
| } | |
| if (!Number.isFinite(A) || A === 0) return 0; | |
| if (A = ul1(A) * Math.floor(Math.abs(A)), A = A % C, !d.unsigned && A >= W) return A - C; | |
| else if (d.unsigned) { | |
| if (A < 0) A += C; | |
| else if (A === -0) return 0 | |
| } | |
| return A | |
| } | |
| } | |
| m3.void = function() { | |
| return | |
| }; | |
| m3.boolean = function(I) { | |
| return !!I | |
| }; | |
| m3.byte = zY(8, { | |
| unsigned: !1 | |
| }); | |
| m3.octet = zY(8, { | |
| unsigned: !0 | |
| }); | |
| m3.short = zY(16, { | |
| unsigned: !1 | |
| }); | |
| m3["unsigned short"] = zY(16, { | |
| unsigned: !0 | |
| }); | |
| m3.long = zY(32, { | |
| unsigned: !1 | |
| }); | |
| m3["unsigned long"] = zY(32, { | |
| unsigned: !0 | |
| }); | |
| m3["long long"] = zY(32, { | |
| unsigned: !1, | |
| moduloBitLength: 64 | |
| }); | |
| m3["unsigned long long"] = zY(32, { | |
| unsigned: !0, | |
| moduloBitLength: 64 | |
| }); | |
| m3.double = function(I) { | |
| let d = +I; | |
| if (!Number.isFinite(d)) throw new TypeError("Argument is not a finite floating-point value"); | |
| return d | |
| }; | |
| m3["unrestricted double"] = function(I) { | |
| let d = +I; | |
| if (isNaN(d)) throw new TypeError("Argument is NaN"); | |
| return d | |
| }; | |
| m3.float = m3.double; | |
| m3["unrestricted float"] = m3["unrestricted double"]; | |
| m3.DOMString = function(I, d) { | |
| if (!d) d = {}; | |
| if (d.treatNullAsEmptyString && I === null) return ""; | |
| return String(I) | |
| }; | |
| m3.ByteString = function(I, d) { | |
| let G = String(I), | |
| Z = void 0; | |
| for (let C = 0; | |
| (Z = G.codePointAt(C)) !== void 0; ++C) | |
| if (Z > 255) throw new TypeError("Argument is not a valid bytestring"); | |
| return G | |
| }; | |
| m3.USVString = function(I) { | |
| let d = String(I), | |
| G = d.length, | |
| Z = []; | |
| for (let C = 0; C < G; ++C) { | |
| let W = d.charCodeAt(C); | |
| if (W < 55296 || W > 57343) Z.push(String.fromCodePoint(W)); | |
| else if (56320 <= W && W <= 57343) Z.push(String.fromCodePoint(65533)); | |
| else if (C === G - 1) Z.push(String.fromCodePoint(65533)); | |
| else { | |
| let w = d.charCodeAt(C + 1); | |
| if (56320 <= w && w <= 57343) { | |
| let B = W & 1023, | |
| A = w & 1023; | |
| Z.push(String.fromCodePoint(65536 + 1024 * B + A)), ++C | |
| } else Z.push(String.fromCodePoint(65533)) | |
| } | |
| } | |
| return Z.join("") | |
| }; | |
| m3.Date = function(I, d) { | |
| if (!(I instanceof Date)) throw new TypeError("Argument is not a Date object"); | |
| if (isNaN(I)) return; | |
| return I | |
| }; | |
| m3.RegExp = function(I, d) { | |
| if (!(I instanceof RegExp)) I = new RegExp(I); | |
| return I | |
| } | |
| }); | |
| var bl1 = Y((_A4, QY) => { | |
| _A4.mixin = function I(d, G) { | |
| let Z = Object.getOwnPropertyNames(G); | |
| for (let C = 0; C < Z.length; ++C) Object.defineProperty(d, Z[C], Object.getOwnPropertyDescriptor(G, Z[C])) | |
| }; | |
| _A4.wrapperSymbol = Symbol("wrapper"); | |
| _A4.implSymbol = Symbol("impl"); | |
| _A4.wrapperForImpl = function(I) { | |
| return I[_A4.wrapperSymbol] | |
| }; | |
| _A4.implForWrapper = function(I) { | |
| return I[_A4.implSymbol] | |
| } | |
| }); | |
| var hl1 = Y((yv9, gA4) => { | |
| gA4.exports = [ | |
| [ | |
| [0, 44], "disallowed_STD3_valid" | |
| ], | |
| [ | |
| [45, 46], "valid" | |
| ], | |
| [ | |
| [47, 47], "disallowed_STD3_valid" | |
| ], | |
| [ | |
| [48, 57], "valid" | |
| ], | |
| [ | |
| [58, 64], "disallowed_STD3_valid" | |
| ], | |
| [ | |
| [65, 65], "mapped", [97] | |
| ], | |
| [ | |
| [66, 66], "mapped", [98] | |
| ], | |
| [ | |
| [67, 67], "mapped", [99] | |
| ], | |
| [ | |
| [68, 68], "mapped", [100] | |
| ], | |
| [ | |
| [69, 69], "mapped", [101] | |
| ], | |
| [ | |
| [70, 70], "mapped", [102] | |
| ], | |
| [ | |
| [71, 71], "mapped", [103] | |
| ], | |
| [ | |
| [72, 72], "mapped", [104] | |
| ], | |
| [ | |
| [73, 73], "mapped", [105] | |
| ], | |
| [ | |
| [74, 74], "mapped", [106] | |
| ], | |
| [ | |
| [75, 75], "mapped", [107] | |
| ], | |
| [ | |
| [76, 76], "mapped", [108] | |
| ], | |
| [ | |
| [77, 77], "mapped", [109] | |
| ], | |
| [ | |
| [78, 78], "mapped", [110] | |
| ], | |
| [ | |
| [79, 79], "mapped", [111] | |
| ], | |
| [ | |
| [80, 80], "mapped", [112] | |
| ], | |
| [ | |
| [81, 81], "mapped", [113] | |
| ], | |
| [ | |
| [82, 82], "mapped", [114] | |
| ], | |
| [ | |
| [83, 83], "mapped", [115] | |
| ], | |
| [ | |
| [84, 84], "mapped", [116] | |
| ], | |
| [ | |
| [85, 85], "mapped", [117] | |
| ], | |
| [ | |
| [86, 86], "mapped", [118] | |
| ], | |
| [ | |
| [87, 87], "mapped", [119] | |
| ], | |
| [ | |
| [88, 88], "mapped", [120] | |
| ], | |
| [ | |
| [89, 89], "mapped", [121] | |
| ], | |
| [ | |
| [90, 90], "mapped", [122] | |
| ], | |
| [ | |
| [91, 96], "disallowed_STD3_valid" | |
| ], | |
| [ | |
| [97, 122], "valid" | |
| ], | |
| [ | |
| [123, 127], "disallowed_STD3_valid" | |
| ], | |
| [ | |
| [128, 159], "disallowed" | |
| ], | |
| [ | |
| [160, 160], "disallowed_STD3_mapped", [32] | |
| ], | |
| [ | |
| [161, 167], "valid", [], "NV8" | |
| ], | |
| [ | |
| [168, 168], "disallowed_STD3_mapped", [32, 776] | |
| ], | |
| [ | |
| [169, 169], "valid", [], "NV8" | |
| ], | |
| [ | |
| [170, 170], "mapped", [97] | |
| ], | |
| [ | |
| [171, 172], "valid", [], "NV8" | |
| ], | |
| [ | |
| [173, 173], "ignored" | |
| ], | |
| [ | |
| [174, 174], "valid", [], "NV8" | |
| ], | |
| [ | |
| [175, 175], "disallowed_STD3_mapped", [32, 772] | |
| ], | |
| [ | |
| [176, 177], "valid", [], "NV8" | |
| ], | |
| [ | |
| [178, 178], "mapped", [50] | |
| ], | |
| [ | |
| [179, 179], "mapped", [51] | |
| ], | |
| [ | |
| [180, 180], "disallowed_STD3_mapped", [32, 769] | |
| ], | |
| [ | |
| [181, 181], "mapped", [956] | |
| ], | |
| [ | |
| [182, 182], "valid", [], "NV8" | |
| ], | |
| [ | |
| [183, 183], "valid" | |
| ], | |
| [ | |
| [184, 184], "disallowed_STD3_mapped", [32, 807] | |
| ], | |
| [ | |
| [185, 185], "mapped", [49] | |
| ], | |
| [ | |
| [186, 186], "mapped", [111] | |
| ], | |
| [ | |
| [187, 187], "valid", [], "NV8" | |
| ], | |
| [ | |
| [188, 188], "mapped", [49, 8260, 52] | |
| ], | |
| [ | |
| [189, 189], "mapped", [49, 8260, 50] | |
| ], | |
| [ | |
| [190, 190], "mapped", [51, 8260, 52] | |
| ], | |
| [ | |
| [191, 191], "valid", [], "NV8" | |
| ], | |
| [ | |
| [192, 192], "mapped", [224] | |
| ], | |
| [ | |
| [193, 193], "mapped", [225] | |
| ], | |
| [ | |
| [194, 194], "mapped", [226] | |
| ], | |
| [ | |
| [195, 195], "mapped", [227] | |
| ], | |
| [ | |
| [196, 196], "mapped", [228] | |
| ], | |
| [ | |
| [197, 197], "mapped", [229] | |
| ], | |
| [ | |
| [198, 198], "mapped", [230] | |
| ], | |
| [ | |
| [199, 199], "mapped", [231] | |
| ], | |
| [ | |
| [200, 200], "mapped", [232] | |
| ], | |
| [ | |
| [201, 201], "mapped", [233] | |
| ], | |
| [ | |
| [202, 202], "mapped", [234] | |
| ], | |
| [ | |
| [203, 203], "mapped", [235] | |
| ], | |
| [ | |
| [204, 204], "mapped", [236] | |
| ], | |
| [ | |
| [205, 205], "mapped", [237] | |
| ], | |
| [ | |
| [206, 206], "mapped", [238] | |
| ], | |
| [ | |
| [207, 207], "mapped", [239] | |
| ], | |
| [ | |
| [208, 208], "mapped", [240] | |
| ], | |
| [ | |
| [209, 209], "mapped", [241] | |
| ], | |
| [ | |
| [210, 210], "mapped", [242] | |
| ], | |
| [ | |
| [211, 211], "mapped", [243] | |
| ], | |
| [ | |
| [212, 212], "mapped", [244] | |
| ], | |
| [ | |
| [213, 213], "mapped", [245] | |
| ], | |
| [ | |
| [214, 214], "mapped", [246] | |
| ], | |
| [ | |
| [215, 215], "valid", [], "NV8" | |
| ], | |
| [ | |
| [216, 216], "mapped", [248] | |
| ], | |
| [ | |
| [217, 217], "mapped", [249] | |
| ], | |
| [ | |
| [218, 218], "mapped", [250] | |
| ], | |
| [ | |
| [219, 219], "mapped", [251] | |
| ], | |
| [ | |
| [220, 220], "mapped", [252] | |
| ], | |
| [ | |
| [221, 221], "mapped", [253] | |
| ], | |
| [ | |
| [222, 222], "mapped", [254] | |
| ], | |
| [ | |
| [223, 223], "deviation", [115, 115] | |
| ], | |
| [ | |
| [224, 246], "valid" | |
| ], | |
| [ | |
| [247, 247], "valid", [], "NV8" | |
| ], | |
| [ | |
| [248, 255], "valid" | |
| ], | |
| [ | |
| [256, 256], "mapped", [257] | |
| ], | |
| [ | |
| [257, 257], "valid" | |
| ], | |
| [ | |
| [258, 258], "mapped", [259] | |
| ], | |
| [ | |
| [259, 259], "valid" | |
| ], | |
| [ | |
| [260, 260], "mapped", [261] | |
| ], | |
| [ | |
| [261, 261], "valid" | |
| ], | |
| [ | |
| [262, 262], "mapped", [263] | |
| ], | |
| [ | |
| [263, 263], "valid" | |
| ], | |
| [ | |
| [264, 264], "mapped", [265] | |
| ], | |
| [ | |
| [265, 265], "valid" | |
| ], | |
| [ | |
| [266, 266], "mapped", [267] | |
| ], | |
| [ | |
| [267, 267], "valid" | |
| ], | |
| [ | |
| [268, 268], "mapped", [269] | |
| ], | |
| [ | |
| [269, 269], "valid" | |
| ], | |
| [ | |
| [270, 270], "mapped", [271] | |
| ], | |
| [ | |
| [271, 271], "valid" | |
| ], | |
| [ | |
| [272, 272], "mapped", [273] | |
| ], | |
| [ | |
| [273, 273], "valid" | |
| ], | |
| [ | |
| [274, 274], "mapped", [275] | |
| ], | |
| [ | |
| [275, 275], "valid" | |
| ], | |
| [ | |
| [276, 276], "mapped", [277] | |
| ], | |
| [ | |
| [277, 277], "valid" | |
| ], | |
| [ | |
| [278, 278], "mapped", [279] | |
| ], | |
| [ | |
| [279, 279], "valid" | |
| ], | |
| [ | |
| [280, 280], "mapped", [281] | |
| ], | |
| [ | |
| [281, 281], "valid" | |
| ], | |
| [ | |
| [282, 282], "mapped", [283] | |
| ], | |
| [ | |
| [283, 283], "valid" | |
| ], | |
| [ | |
| [284, 284], "mapped", [285] | |
| ], | |
| [ | |
| [285, 285], "valid" | |
| ], | |
| [ | |
| [286, 286], "mapped", [287] | |
| ], | |
| [ | |
| [287, 287], "valid" | |
| ], | |
| [ | |
| [288, 288], "mapped", [289] | |
| ], | |
| [ | |
| [289, 289], "valid" | |
| ], | |
| [ | |
| [290, 290], "mapped", [291] | |
| ], | |
| [ | |
| [291, 291], "valid" | |
| ], | |
| [ | |
| [292, 292], "mapped", [293] | |
| ], | |
| [ | |
| [293, 293], "valid" | |
| ], | |
| [ | |
| [294, 294], "mapped", [295] | |
| ], | |
| [ | |
| [295, 295], "valid" | |
| ], | |
| [ | |
| [296, 296], "mapped", [297] | |
| ], | |
| [ | |
| [297, 297], "valid" | |
| ], | |
| [ | |
| [298, 298], "mapped", [299] | |
| ], | |
| [ | |
| [299, 299], "valid" | |
| ], | |
| [ | |
| [300, 300], "mapped", [301] | |
| ], | |
| [ | |
| [301, 301], "valid" | |
| ], | |
| [ | |
| [302, 302], "mapped", [303] | |
| ], | |
| [ | |
| [303, 303], "valid" | |
| ], | |
| [ | |
| [304, 304], "mapped", [105, 775] | |
| ], | |
| [ | |
| [305, 305], "valid" | |
| ], | |
| [ | |
| [306, 307], "mapped", [105, 106] | |
| ], | |
| [ | |
| [308, 308], "mapped", [309] | |
| ], | |
| [ | |
| [309, 309], "valid" | |
| ], | |
| [ | |
| [310, 310], "mapped", [311] | |
| ], | |
| [ | |
| [311, 312], "valid" | |
| ], | |
| [ | |
| [313, 313], "mapped", [314] | |
| ], | |
| [ | |
| [314, 314], "valid" | |
| ], | |
| [ | |
| [315, 315], "mapped", [316] | |
| ], | |
| [ | |
| [316, 316], "valid" | |
| ], | |
| [ | |
| [317, 317], "mapped", [318] | |
| ], | |
| [ | |
| [318, 318], "valid" | |
| ], | |
| [ | |
| [319, 320], "mapped", [108, 183] | |
| ], | |
| [ | |
| [321, 321], "mapped", [322] | |
| ], | |
| [ | |
| [322, 322], "valid" | |
| ], | |
| [ | |
| [323, 323], "mapped", [324] | |
| ], | |
| [ | |
| [324, 324], "valid" | |
| ], | |
| [ | |
| [325, 325], "mapped", [326] | |
| ], | |
| [ | |
| [326, 326], "valid" | |
| ], | |
| [ | |
| [327, 327], "mapped", [328] | |
| ], | |
| [ | |
| [328, 328], "valid" | |
| ], | |
| [ | |
| [329, 329], "mapped", [700, 110] | |
| ], | |
| [ | |
| [330, 330], "mapped", [331] | |
| ], | |
| [ | |
| [331, 331], "valid" | |
| ], | |
| [ | |
| [332, 332], "mapped", [333] | |
| ], | |
| [ | |
| [333, 333], "valid" | |
| ], | |
| [ | |
| [334, 334], "mapped", [335] | |
| ], | |
| [ | |
| [335, 335], "valid" | |
| ], | |
| [ | |
| [336, 336], "mapped", [337] | |
| ], | |
| [ | |
| [337, 337], "valid" | |
| ], | |
| [ | |
| [338, 338], "mapped", [339] | |
| ], | |
| [ | |
| [339, 339], "valid" | |
| ], | |
| [ | |
| [340, 340], "mapped", [341] | |
| ], | |
| [ | |
| [341, 341], "valid" | |
| ], | |
| [ | |
| [342, 342], "mapped", [343] | |
| ], | |
| [ | |
| [343, 343], "valid" | |
| ], | |
| [ | |
| [344, 344], "mapped", [345] | |
| ], | |
| [ | |
| [345, 345], "valid" | |
| ], | |
| [ | |
| [346, 346], "mapped", [347] | |
| ], | |
| [ | |
| [347, 347], "valid" | |
| ], | |
| [ | |
| [348, 348], "mapped", [349] | |
| ], | |
| [ | |
| [349, 349], "valid" | |
| ], | |
| [ | |
| [350, 350], "mapped", [351] | |
| ], | |
| [ | |
| [351, 351], "valid" | |
| ], | |
| [ | |
| [352, 352], "mapped", [353] | |
| ], | |
| [ | |
| [353, 353], "valid" | |
| ], | |
| [ | |
| [354, 354], "mapped", [355] | |
| ], | |
| [ | |
| [355, 355], "valid" | |
| ], | |
| [ | |
| [356, 356], "mapped", [357] | |
| ], | |
| [ | |
| [357, 357], "valid" | |
| ], | |
| [ | |
| [358, 358], "mapped", [359] | |
| ], | |
| [ | |
| [359, 359], "valid" | |
| ], | |
| [ | |
| [360, 360], "mapped", [361] | |
| ], | |
| [ | |
| [361, 361], "valid" | |
| ], | |
| [ | |
| [362, 362], "mapped", [363] | |
| ], | |
| [ | |
| [363, 363], "valid" | |
| ], | |
| [ | |
| [364, 364], "mapped", [365] | |
| ], | |
| [ | |
| [365, 365], "valid" | |
| ], | |
| [ | |
| [366, 366], "mapped", [367] | |
| ], | |
| [ | |
| [367, 367], "valid" | |
| ], | |
| [ | |
| [368, 368], "mapped", [369] | |
| ], | |
| [ | |
| [369, 369], "valid" | |
| ], | |
| [ | |
| [370, 370], "mapped", [371] | |
| ], | |
| [ | |
| [371, 371], "valid" | |
| ], | |
| [ | |
| [372, 372], "mapped", [373] | |
| ], | |
| [ | |
| [373, 373], "valid" | |
| ], | |
| [ | |
| [374, 374], "mapped", [375] | |
| ], | |
| [ | |
| [375, 375], "valid" | |
| ], | |
| [ | |
| [376, 376], "mapped", [255] | |
| ], | |
| [ | |
| [377, 377], "mapped", [378] | |
| ], | |
| [ | |
| [378, 378], "valid" | |
| ], | |
| [ | |
| [379, 379], "mapped", [380] | |
| ], | |
| [ | |
| [380, 380], "valid" | |
| ], | |
| [ | |
| [381, 381], "mapped", [382] | |
| ], | |
| [ | |
| [382, 382], "valid" | |
| ], | |
| [ | |
| [383, 383], "mapped", [115] | |
| ], | |
| [ | |
| [384, 384], "valid" | |
| ], | |
| [ | |
| [385, 385], "mapped", [595] | |
| ], | |
| [ | |
| [386, 386], "mapped", [387] | |
| ], | |
| [ | |
| [387, 387], "valid" | |
| ], | |
| [ | |
| [388, 388], "mapped", [389] | |
| ], | |
| [ | |
| [389, 389], "valid" | |
| ], | |
| [ | |
| [390, 390], "mapped", [596] | |
| ], | |
| [ | |
| [391, 391], "mapped", [392] | |
| ], | |
| [ | |
| [392, 392], "valid" | |
| ], | |
| [ | |
| [393, 393], "mapped", [598] | |
| ], | |
| [ | |
| [394, 394], "mapped", [599] | |
| ], | |
| [ | |
| [395, 395], "mapped", [396] | |
| ], | |
| [ | |
| [396, 397], "valid" | |
| ], | |
| [ | |
| [398, 398], "mapped", [477] | |
| ], | |
| [ | |
| [399, 399], "mapped", [601] | |
| ], | |
| [ | |
| [400, 400], "mapped", [603] | |
| ], | |
| [ | |
| [401, 401], "mapped", [402] | |
| ], | |
| [ | |
| [402, 402], "valid" | |
| ], | |
| [ | |
| [403, 403], "mapped", [608] | |
| ], | |
| [ | |
| [404, 404], "mapped", [611] | |
| ], | |
| [ | |
| [405, 405], "valid" | |
| ], | |
| [ | |
| [406, 406], "mapped", [617] | |
| ], | |
| [ | |
| [407, 407], "mapped", [616] | |
| ], | |
| [ | |
| [408, 408], "mapped", [409] | |
| ], | |
| [ | |
| [409, 411], "valid" | |
| ], | |
| [ | |
| [412, 412], "mapped", [623] | |
| ], | |
| [ | |
| [413, 413], "mapped", [626] | |
| ], | |
| [ | |
| [414, 414], "valid" | |
| ], | |
| [ | |
| [415, 415], "mapped", [629] | |
| ], | |
| [ | |
| [416, 416], "mapped", [417] | |
| ], | |
| [ | |
| [417, 417], "valid" | |
| ], | |
| [ | |
| [418, 418], "mapped", [419] | |
| ], | |
| [ | |
| [419, 419], "valid" | |
| ], | |
| [ | |
| [420, 420], "mapped", [421] | |
| ], | |
| [ | |
| [421, 421], "valid" | |
| ], | |
| [ | |
| [422, 422], "mapped", [640] | |
| ], | |
| [ | |
| [423, 423], "mapped", [424] | |
| ], | |
| [ | |
| [424, 424], "valid" | |
| ], | |
| [ | |
| [425, 425], "mapped", [643] | |
| ], | |
| [ | |
| [426, 427], "valid" | |
| ], | |
| [ | |
| [428, 428], "mapped", [429] | |
| ], | |
| [ | |
| [429, 429], "valid" | |
| ], | |
| [ | |
| [430, 430], "mapped", [648] | |
| ], | |
| [ | |
| [431, 431], "mapped", [432] | |
| ], | |
| [ | |
| [432, 432], "valid" | |
| ], | |
| [ | |
| [433, 433], "mapped", [650] | |
| ], | |
| [ | |
| [434, 434], "mapped", [651] | |
| ], | |
| [ | |
| [435, 435], "mapped", [436] | |
| ], | |
| [ | |
| [436, 436], "valid" | |
| ], | |
| [ | |
| [437, 437], "mapped", [438] | |
| ], | |
| [ | |
| [438, 438], "valid" | |
| ], | |
| [ | |
| [439, 439], "mapped", [658] | |
| ], | |
| [ | |
| [440, 440], "mapped", [441] | |
| ], | |
| [ | |
| [441, 443], "valid" | |
| ], | |
| [ | |
| [444, 444], "mapped", [445] | |
| ], | |
| [ | |
| [445, 451], "valid" | |
| ], | |
| [ | |
| [452, 454], "mapped", [100, 382] | |
| ], | |
| [ | |
| [455, 457], "mapped", [108, 106] | |
| ], | |
| [ | |
| [458, 460], "mapped", [110, 106] | |
| ], | |
| [ | |
| [461, 461], "mapped", [462] | |
| ], | |
| [ | |
| [462, 462], "valid" | |
| ], | |
| [ | |
| [463, 463], "mapped", [464] | |
| ], | |
| [ | |
| [464, 464], "valid" | |
| ], | |
| [ | |
| [465, 465], "mapped", [466] | |
| ], | |
| [ | |
| [466, 466], "valid" | |
| ], | |
| [ | |
| [467, 467], "mapped", [468] | |
| ], | |
| [ | |
| [468, 468], "valid" | |
| ], | |
| [ | |
| [469, 469], "mapped", [470] | |
| ], | |
| [ | |
| [470, 470], "valid" | |
| ], | |
| [ | |
| [471, 471], "mapped", [472] | |
| ], | |
| [ | |
| [472, 472], "valid" | |
| ], | |
| [ | |
| [473, 473], "mapped", [474] | |
| ], | |
| [ | |
| [474, 474], "valid" | |
| ], | |
| [ | |
| [475, 475], "mapped", [476] | |
| ], | |
| [ | |
| [476, 477], "valid" | |
| ], | |
| [ | |
| [478, 478], "mapped", [479] | |
| ], | |
| [ | |
| [479, 479], "valid" | |
| ], | |
| [ | |
| [480, 480], "mapped", [481] | |
| ], | |
| [ | |
| [481, 481], "valid" | |
| ], | |
| [ | |
| [482, 482], "mapped", [483] | |
| ], | |
| [ | |
| [483, 483], "valid" | |
| ], | |
| [ | |
| [484, 484], "mapped", [485] | |
| ], | |
| [ | |
| [485, 485], "valid" | |
| ], | |
| [ | |
| [486, 486], "mapped", [487] | |
| ], | |
| [ | |
| [487, 487], "valid" | |
| ], | |
| [ | |
| [488, 488], "mapped", [489] | |
| ], | |
| [ | |
| [489, 489], "valid" | |
| ], | |
| [ | |
| [490, 490], "mapped", [491] | |
| ], | |
| [ | |
| [491, 491], "valid" | |
| ], | |
| [ | |
| [492, 492], "mapped", [493] | |
| ], | |
| [ | |
| [493, 493], "valid" | |
| ], | |
| [ | |
| [494, 494], "mapped", [495] | |
| ], | |
| [ | |
| [495, 496], "valid" | |
| ], | |
| [ | |
| [497, 499], "mapped", [100, 122] | |
| ], | |
| [ | |
| [500, 500], "mapped", [501] | |
| ], | |
| [ | |
| [501, 501], "valid" | |
| ], | |
| [ | |
| [502, 502], "mapped", [405] | |
| ], | |
| [ | |
| [503, 503], "mapped", [447] | |
| ], | |
| [ | |
| [504, 504], "mapped", [505] | |
| ], | |
| [ | |
| [505, 505], "valid" | |
| ], | |
| [ | |
| [506, 506], "mapped", [507] | |
| ], | |
| [ | |
| [507, 507], "valid" | |
| ], | |
| [ | |
| [508, 508], "mapped", [509] | |
| ], | |
| [ | |
| [509, 509], "valid" | |
| ], | |
| [ | |
| [510, 510], "mapped", [511] | |
| ], | |
| [ | |
| [511, 511], "valid" | |
| ], | |
| [ | |
| [512, 512], "mapped", [513] | |
| ], | |
| [ | |
| [513, 513], "valid" | |
| ], | |
| [ | |
| [514, 514], "mapped", [515] | |
| ], | |
| [ | |
| [515, 515], "valid" | |
| ], | |
| [ | |
| [516, 516], "mapped", [517] | |
| ], | |
| [ | |
| [517, 517], "valid" | |
| ], | |
| [ | |
| [518, 518], "mapped", [519] | |
| ], | |
| [ | |
| [519, 519], "valid" | |
| ], | |
| [ | |
| [520, 520], "mapped", [521] | |
| ], | |
| [ | |
| [521, 521], "valid" | |
| ], | |
| [ | |
| [522, 522], "mapped", [523] | |
| ], | |
| [ | |
| [523, 523], "valid" | |
| ], | |
| [ | |
| [524, 524], "mapped", [525] | |
| ], | |
| [ | |
| [525, 525], "valid" | |
| ], | |
| [ | |
| [526, 526], "mapped", [527] | |
| ], | |
| [ | |
| [527, 527], "valid" | |
| ], | |
| [ | |
| [528, 528], "mapped", [529] | |
| ], | |
| [ | |
| [529, 529], "valid" | |
| ], | |
| [ | |
| [530, 530], "mapped", [531] | |
| ], | |
| [ | |
| [531, 531], "valid" | |
| ], | |
| [ | |
| [532, 532], "mapped", [533] | |
| ], | |
| [ | |
| [533, 533], "valid" | |
| ], | |
| [ | |
| [534, 534], "mapped", [535] | |
| ], | |
| [ | |
| [535, 535], "valid" | |
| ], | |
| [ | |
| [536, 536], "mapped", [537] | |
| ], | |
| [ | |
| [537, 537], "valid" | |
| ], | |
| [ | |
| [538, 538], "mapped", [539] | |
| ], | |
| [ | |
| [539, 539], "valid" | |
| ], | |
| [ | |
| [540, 540], "mapped", [541] | |
| ], | |
| [ | |
| [541, 541], "valid" | |
| ], | |
| [ | |
| [542, 542], "mapped", [543] | |
| ], | |
| [ | |
| [543, 543], "valid" | |
| ], | |
| [ | |
| [544, 544], "mapped", [414] | |
| ], | |
| [ | |
| [545, 545], "valid" | |
| ], | |
| [ | |
| [546, 546], "mapped", [547] | |
| ], | |
| [ | |
| [547, 547], "valid" | |
| ], | |
| [ | |
| [548, 548], "mapped", [549] | |
| ], | |
| [ | |
| [549, 549], "valid" | |
| ], | |
| [ | |
| [550, 550], "mapped", [551] | |
| ], | |
| [ | |
| [551, 551], "valid" | |
| ], | |
| [ | |
| [552, 552], "mapped", [553] | |
| ], | |
| [ | |
| [553, 553], "valid" | |
| ], | |
| [ | |
| [554, 554], "mapped", [555] | |
| ], | |
| [ | |
| [555, 555], "valid" | |
| ], | |
| [ | |
| [556, 556], "mapped", [557] | |
| ], | |
| [ | |
| [557, 557], "valid" | |
| ], | |
| [ | |
| [558, 558], "mapped", [559] | |
| ], | |
| [ | |
| [559, 559], "valid" | |
| ], | |
| [ | |
| [560, 560], "mapped", [561] | |
| ], | |
| [ | |
| [561, 561], "valid" | |
| ], | |
| [ | |
| [562, 562], "mapped", [563] | |
| ], | |
| [ | |
| [563, 563], "valid" | |
| ], | |
| [ | |
| [564, 566], "valid" | |
| ], | |
| [ | |
| [567, 569], "valid" | |
| ], | |
| [ | |
| [570, 570], "mapped", [11365] | |
| ], | |
| [ | |
| [571, 571], "mapped", [572] | |
| ], | |
| [ | |
| [572, 572], "valid" | |
| ], | |
| [ | |
| [573, 573], "mapped", [410] | |
| ], | |
| [ | |
| [574, 574], "mapped", [11366] | |
| ], | |
| [ | |
| [575, 576], "valid" | |
| ], | |
| [ | |
| [577, 577], "mapped", [578] | |
| ], | |
| [ | |
| [578, 578], "valid" | |
| ], | |
| [ | |
| [579, 579], "mapped", [384] | |
| ], | |
| [ | |
| [580, 580], "mapped", [649] | |
| ], | |
| [ | |
| [581, 581], "mapped", [652] | |
| ], | |
| [ | |
| [582, 582], "mapped", [583] | |
| ], | |
| [ | |
| [583, 583], "valid" | |
| ], | |
| [ | |
| [584, 584], "mapped", [585] | |
| ], | |
| [ | |
| [585, 585], "valid" | |
| ], | |
| [ | |
| [586, 586], "mapped", [587] | |
| ], | |
| [ | |
| [587, 587], "valid" | |
| ], | |
| [ | |
| [588, 588], "mapped", [589] | |
| ], | |
| [ | |
| [589, 589], "valid" | |
| ], | |
| [ | |
| [590, 590], "mapped", [591] | |
| ], | |
| [ | |
| [591, 591], "valid" | |
| ], | |
| [ | |
| [592, 680], "valid" | |
| ], | |
| [ | |
| [681, 685], "valid" | |
| ], | |
| [ | |
| [686, 687], "valid" | |
| ], | |
| [ | |
| [688, 688], "mapped", [104] | |
| ], | |
| [ | |
| [689, 689], "mapped", [614] | |
| ], | |
| [ | |
| [690, 690], "mapped", [106] | |
| ], | |
| [ | |
| [691, 691], "mapped", [114] | |
| ], | |
| [ | |
| [692, 692], "mapped", [633] | |
| ], | |
| [ | |
| [693, 693], "mapped", [635] | |
| ], | |
| [ | |
| [694, 694], "mapped", [641] | |
| ], | |
| [ | |
| [695, 695], "mapped", [119] | |
| ], | |
| [ | |
| [696, 696], "mapped", [121] | |
| ], | |
| [ | |
| [697, 705], "valid" | |
| ], | |
| [ | |
| [706, 709], "valid", [], "NV8" | |
| ], | |
| [ | |
| [710, 721], "valid" | |
| ], | |
| [ | |
| [722, 727], "valid", [], "NV8" | |
| ], | |
| [ | |
| [728, 728], "disallowed_STD3_mapped", [32, 774] | |
| ], | |
| [ | |
| [729, 729], "disallowed_STD3_mapped", [32, 775] | |
| ], | |
| [ | |
| [730, 730], "disallowed_STD3_mapped", [32, 778] | |
| ], | |
| [ | |
| [731, 731], "disallowed_STD3_mapped", [32, 808] | |
| ], | |
| [ | |
| [732, 732], "disallowed_STD3_mapped", [32, 771] | |
| ], | |
| [ | |
| [733, 733], "disallowed_STD3_mapped", [32, 779] | |
| ], | |
| [ | |
| [734, 734], "valid", [], "NV8" | |
| ], | |
| [ | |
| [735, 735], "valid", [], "NV8" | |
| ], | |
| [ | |
| [736, 736], "mapped", [611] | |
| ], | |
| [ | |
| [737, 737], "mapped", [108] | |
| ], | |
| [ | |
| [738, 738], "mapped", [115] | |
| ], | |
| [ | |
| [739, 739], "mapped", [120] | |
| ], | |
| [ | |
| [740, 740], "mapped", [661] | |
| ], | |
| [ | |
| [741, 745], "valid", [], "NV8" | |
| ], | |
| [ | |
| [746, 747], "valid", [], "NV8" | |
| ], | |
| [ | |
| [748, 748], "valid" | |
| ], | |
| [ | |
| [749, 749], "valid", [], "NV8" | |
| ], | |
| [ | |
| [750, 750], "valid" | |
| ], | |
| [ | |
| [751, 767], "valid", [], "NV8" | |
| ], | |
| [ | |
| [768, 831], "valid" | |
| ], | |
| [ | |
| [832, 832], "mapped", [768] | |
| ], | |
| [ | |
| [833, 833], "mapped", [769] | |
| ], | |
| [ | |
| [834, 834], "valid" | |
| ], | |
| [ | |
| [835, 835], "mapped", [787] | |
| ], | |
| [ | |
| [836, 836], "mapped", [776, 769] | |
| ], | |
| [ | |
| [837, 837], "mapped", [953] | |
| ], | |
| [ | |
| [838, 846], "valid" | |
| ], | |
| [ | |
| [847, 847], "ignored" | |
| ], | |
| [ | |
| [848, 855], "valid" | |
| ], | |
| [ | |
| [856, 860], "valid" | |
| ], | |
| [ | |
| [861, 863], "valid" | |
| ], | |
| [ | |
| [864, 865], "valid" | |
| ], | |
| [ | |
| [866, 866], "valid" | |
| ], | |
| [ | |
| [867, 879], "valid" | |
| ], | |
| [ | |
| [880, 880], "mapped", [881] | |
| ], | |
| [ | |
| [881, 881], "valid" | |
| ], | |
| [ | |
| [882, 882], "mapped", [883] | |
| ], | |
| [ | |
| [883, 883], "valid" | |
| ], | |
| [ | |
| [884, 884], "mapped", [697] | |
| ], | |
| [ | |
| [885, 885], "valid" | |
| ], | |
| [ | |
| [886, 886], "mapped", [887] | |
| ], | |
| [ | |
| [887, 887], "valid" | |
| ], | |
| [ | |
| [888, 889], "disallowed" | |
| ], | |
| [ | |
| [890, 890], "disallowed_STD3_mapped", [32, 953] | |
| ], | |
| [ | |
| [891, 893], "valid" | |
| ], | |
| [ | |
| [894, 894], "disallowed_STD3_mapped", [59] | |
| ], | |
| [ | |
| [895, 895], "mapped", [1011] | |
| ], | |
| [ | |
| [896, 899], "disallowed" | |
| ], | |
| [ | |
| [900, 900], "disallowed_STD3_mapped", [32, 769] | |
| ], | |
| [ | |
| [901, 901], "disallowed_STD3_mapped", [32, 776, 769] | |
| ], | |
| [ | |
| [902, 902], "mapped", [940] | |
| ], | |
| [ | |
| [903, 903], "mapped", [183] | |
| ], | |
| [ | |
| [904, 904], "mapped", [941] | |
| ], | |
| [ | |
| [905, 905], "mapped", [942] | |
| ], | |
| [ | |
| [906, 906], "mapped", [943] | |
| ], | |
| [ | |
| [907, 907], "disallowed" | |
| ], | |
| [ | |
| [908, 908], "mapped", [972] | |
| ], | |
| [ | |
| [909, 909], "disallowed" | |
| ], | |
| [ | |
| [910, 910], "mapped", [973] | |
| ], | |
| [ | |
| [911, 911], "mapped", [974] | |
| ], | |
| [ | |
| [912, 912], "valid" | |
| ], | |
| [ | |
| [913, 913], "mapped", [945] | |
| ], | |
| [ | |
| [914, 914], "mapped", [946] | |
| ], | |
| [ | |
| [915, 915], "mapped", [947] | |
| ], | |
| [ | |
| [916, 916], "mapped", [948] | |
| ], | |
| [ | |
| [917, 917], "mapped", [949] | |
| ], | |
| [ | |
| [918, 918], "mapped", [950] | |
| ], | |
| [ | |
| [919, 919], "mapped", [951] | |
| ], | |
| [ | |
| [920, 920], "mapped", [952] | |
| ], | |
| [ | |
| [921, 921], "mapped", [953] | |
| ], | |
| [ | |
| [922, 922], "mapped", [954] | |
| ], | |
| [ | |
| [923, 923], "mapped", [955] | |
| ], | |
| [ | |
| [924, 924], "mapped", [956] | |
| ], | |
| [ | |
| [925, 925], "mapped", [957] | |
| ], | |
| [ | |
| [926, 926], "mapped", [958] | |
| ], | |
| [ | |
| [927, 927], "mapped", [959] | |
| ], | |
| [ | |
| [928, 928], "mapped", [960] | |
| ], | |
| [ | |
| [929, 929], "mapped", [961] | |
| ], | |
| [ | |
| [930, 930], "disallowed" | |
| ], | |
| [ | |
| [931, 931], "mapped", [963] | |
| ], | |
| [ | |
| [932, 932], "mapped", [964] | |
| ], | |
| [ | |
| [933, 933], "mapped", [965] | |
| ], | |
| [ | |
| [934, 934], "mapped", [966] | |
| ], | |
| [ | |
| [935, 935], "mapped", [967] | |
| ], | |
| [ | |
| [936, 936], "mapped", [968] | |
| ], | |
| [ | |
| [937, 937], "mapped", [969] | |
| ], | |
| [ | |
| [938, 938], "mapped", [970] | |
| ], | |
| [ | |
| [939, 939], "mapped", [971] | |
| ], | |
| [ | |
| [940, 961], "valid" | |
| ], | |
| [ | |
| [962, 962], "deviation", [963] | |
| ], | |
| [ | |
| [963, 974], "valid" | |
| ], | |
| [ | |
| [975, 975], "mapped", [983] | |
| ], | |
| [ | |
| [976, 976], "mapped", [946] | |
| ], | |
| [ | |
| [977, 977], "mapped", [952] | |
| ], | |
| [ | |
| [978, 978], "mapped", [965] | |
| ], | |
| [ | |
| [979, 979], "mapped", [973] | |
| ], | |
| [ | |
| [980, 980], "mapped", [971] | |
| ], | |
| [ | |
| [981, 981], "mapped", [966] | |
| ], | |
| [ | |
| [982, 982], "mapped", [960] | |
| ], | |
| [ | |
| [983, 983], "valid" | |
| ], | |
| [ | |
| [984, 984], "mapped", [985] | |
| ], | |
| [ | |
| [985, 985], "valid" | |
| ], | |
| [ | |
| [986, 986], "mapped", [987] | |
| ], | |
| [ | |
| [987, 987], "valid" | |
| ], | |
| [ | |
| [988, 988], "mapped", [989] | |
| ], | |
| [ | |
| [989, 989], "valid" | |
| ], | |
| [ | |
| [990, 990], "mapped", [991] | |
| ], | |
| [ | |
| [991, 991], "valid" | |
| ], | |
| [ | |
| [992, 992], "mapped", [993] | |
| ], | |
| [ | |
| [993, 993], "valid" | |
| ], | |
| [ | |
| [994, 994], "mapped", [995] | |
| ], | |
| [ | |
| [995, 995], "valid" | |
| ], | |
| [ | |
| [996, 996], "mapped", [997] | |
| ], | |
| [ | |
| [997, 997], "valid" | |
| ], | |
| [ | |
| [998, 998], "mapped", [999] | |
| ], | |
| [ | |
| [999, 999], "valid" | |
| ], | |
| [ | |
| [1000, 1000], "mapped", [1001] | |
| ], | |
| [ | |
| [1001, 1001], "valid" | |
| ], | |
| [ | |
| [1002, 1002], "mapped", [1003] | |
| ], | |
| [ | |
| [1003, 1003], "valid" | |
| ], | |
| [ | |
| [1004, 1004], "mapped", [1005] | |
| ], | |
| [ | |
| [1005, 1005], "valid" | |
| ], | |
| [ | |
| [1006, 1006], "mapped", [1007] | |
| ], | |
| [ | |
| [1007, 1007], "valid" | |
| ], | |
| [ | |
| [1008, 1008], "mapped", [954] | |
| ], | |
| [ | |
| [1009, 1009], "mapped", [961] | |
| ], | |
| [ | |
| [1010, 1010], "mapped", [963] | |
| ], | |
| [ | |
| [1011, 1011], "valid" | |
| ], | |
| [ | |
| [1012, 1012], "mapped", [952] | |
| ], | |
| [ | |
| [1013, 1013], "mapped", [949] | |
| ], | |
| [ | |
| [1014, 1014], "valid", [], "NV8" | |
| ], | |
| [ | |
| [1015, 1015], "mapped", [1016] | |
| ], | |
| [ | |
| [1016, 1016], "valid" | |
| ], | |
| [ | |
| [1017, 1017], "mapped", [963] | |
| ], | |
| [ | |
| [1018, 1018], "mapped", [1019] | |
| ], | |
| [ | |
| [1019, 1019], "valid" | |
| ], | |
| [ | |
| [1020, 1020], "valid" | |
| ], | |
| [ | |
| [1021, 1021], "mapped", [891] | |
| ], | |
| [ | |
| [1022, 1022], "mapped", [892] | |
| ], | |
| [ | |
| [1023, 1023], "mapped", [893] | |
| ], | |
| [ | |
| [1024, 1024], "mapped", [1104] | |
| ], | |
| [ | |
| [1025, 1025], "mapped", [1105] | |
| ], | |
| [ | |
| [1026, 1026], "mapped", [1106] | |
| ], | |
| [ | |
| [1027, 1027], "mapped", [1107] | |
| ], | |
| [ | |
| [1028, 1028], "mapped", [1108] | |
| ], | |
| [ | |
| [1029, 1029], "mapped", [1109] | |
| ], | |
| [ | |
| [1030, 1030], "mapped", [1110] | |
| ], | |
| [ | |
| [1031, 1031], "mapped", [1111] | |
| ], | |
| [ | |
| [1032, 1032], "mapped", [1112] | |
| ], | |
| [ | |
| [1033, 1033], "mapped", [1113] | |
| ], | |
| [ | |
| [1034, 1034], "mapped", [1114] | |
| ], | |
| [ | |
| [1035, 1035], "mapped", [1115] | |
| ], | |
| [ | |
| [1036, 1036], "mapped", [1116] | |
| ], | |
| [ | |
| [1037, 1037], "mapped", [1117] | |
| ], | |
| [ | |
| [1038, 1038], "mapped", [1118] | |
| ], | |
| [ | |
| [1039, 1039], "mapped", [1119] | |
| ], | |
| [ | |
| [1040, 1040], "mapped", [1072] | |
| ], | |
| [ | |
| [1041, 1041], "mapped", [1073] | |
| ], | |
| [ | |
| [1042, 1042], "mapped", [1074] | |
| ], | |
| [ | |
| [1043, 1043], "mapped", [1075] | |
| ], | |
| [ | |
| [1044, 1044], "mapped", [1076] | |
| ], | |
| [ | |
| [1045, 1045], "mapped", [1077] | |
| ], | |
| [ | |
| [1046, 1046], "mapped", [1078] | |
| ], | |
| [ | |
| [1047, 1047], "mapped", [1079] | |
| ], | |
| [ | |
| [1048, 1048], "mapped", [1080] | |
| ], | |
| [ | |
| [1049, 1049], "mapped", [1081] | |
| ], | |
| [ | |
| [1050, 1050], "mapped", [1082] | |
| ], | |
| [ | |
| [1051, 1051], "mapped", [1083] | |
| ], | |
| [ | |
| [1052, 1052], "mapped", [1084] | |
| ], | |
| [ | |
| [1053, 1053], "mapped", [1085] | |
| ], | |
| [ | |
| [1054, 1054], "mapped", [1086] | |
| ], | |
| [ | |
| [1055, 1055], "mapped", [1087] | |
| ], | |
| [ | |
| [1056, 1056], "mapped", [1088] | |
| ], | |
| [ | |
| [1057, 1057], "mapped", [1089] | |
| ], | |
| [ | |
| [1058, 1058], "mapped", [1090] | |
| ], | |
| [ | |
| [1059, 1059], "mapped", [1091] | |
| ], | |
| [ | |
| [1060, 1060], "mapped", [1092] | |
| ], | |
| [ | |
| [1061, 1061], "mapped", [1093] | |
| ], | |
| [ | |
| [1062, 1062], "mapped", [1094] | |
| ], | |
| [ | |
| [1063, 1063], "mapped", [1095] | |
| ], | |
| [ | |
| [1064, 1064], "mapped", [1096] | |
| ], | |
| [ | |
| [1065, 1065], "mapped", [1097] | |
| ], | |
| [ | |
| [1066, 1066], "mapped", [1098] | |
| ], | |
| [ | |
| [1067, 1067], "mapped", [1099] | |
| ], | |
| [ | |
| [1068, 1068], "mapped", [1100] | |
| ], | |
| [ | |
| [1069, 1069], "mapped", [1101] | |
| ], | |
| [ | |
| [1070, 1070], "mapped", [1102] | |
| ], | |
| [ | |
| [1071, 1071], "mapped", [1103] | |
| ], | |
| [ | |
| [1072, 1103], "valid" | |
| ], | |
| [ | |
| [1104, 1104], "valid" | |
| ], | |
| [ | |
| [1105, 1116], "valid" | |
| ], | |
| [ | |
| [1117, 1117], "valid" | |
| ], | |
| [ | |
| [1118, 1119], "valid" | |
| ], | |
| [ | |
| [1120, 1120], "mapped", [1121] | |
| ], | |
| [ | |
| [1121, 1121], "valid" | |
| ], | |
| [ | |
| [1122, 1122], "mapped", [1123] | |
| ], | |
| [ | |
| [1123, 1123], "valid" | |
| ], | |
| [ | |
| [1124, 1124], "mapped", [1125] | |
| ], | |
| [ | |
| [1125, 1125], "valid" | |
| ], | |
| [ | |
| [1126, 1126], "mapped", [1127] | |
| ], | |
| [ | |
| [1127, 1127], "valid" | |
| ], | |
| [ | |
| [1128, 1128], "mapped", [1129] | |
| ], | |
| [ | |
| [1129, 1129], "valid" | |
| ], | |
| [ | |
| [1130, 1130], "mapped", [1131] | |
| ], | |
| [ | |
| [1131, 1131], "valid" | |
| ], | |
| [ | |
| [1132, 1132], "mapped", [1133] | |
| ], | |
| [ | |
| [1133, 1133], "valid" | |
| ], | |
| [ | |
| [1134, 1134], "mapped", [1135] | |
| ], | |
| [ | |
| [1135, 1135], "valid" | |
| ], | |
| [ | |
| [1136, 1136], "mapped", [1137] | |
| ], | |
| [ | |
| [1137, 1137], "valid" | |
| ], | |
| [ | |
| [1138, 1138], "mapped", [1139] | |
| ], | |
| [ | |
| [1139, 1139], "valid" | |
| ], | |
| [ | |
| [1140, 1140], "mapped", [1141] | |
| ], | |
| [ | |
| [1141, 1141], "valid" | |
| ], | |
| [ | |
| [1142, 1142], "mapped", [1143] | |
| ], | |
| [ | |
| [1143, 1143], "valid" | |
| ], | |
| [ | |
| [1144, 1144], "mapped", [1145] | |
| ], | |
| [ | |
| [1145, 1145], "valid" | |
| ], | |
| [ | |
| [1146, 1146], "mapped", [1147] | |
| ], | |
| [ | |
| [1147, 1147], "valid" | |
| ], | |
| [ | |
| [1148, 1148], "mapped", [1149] | |
| ], | |
| [ | |
| [1149, 1149], "valid" | |
| ], | |
| [ | |
| [1150, 1150], "mapped", [1151] | |
| ], | |
| [ | |
| [1151, 1151], "valid" | |
| ], | |
| [ | |
| [1152, 1152], "mapped", [1153] | |
| ], | |
| [ | |
| [1153, 1153], "valid" | |
| ], | |
| [ | |
| [1154, 1154], "valid", [], "NV8" | |
| ], | |
| [ | |
| [1155, 1158], "valid" | |
| ], | |
| [ | |
| [1159, 1159], "valid" | |
| ], | |
| [ | |
| [1160, 1161], "valid", [], "NV8" | |
| ], | |
| [ | |
| [1162, 1162], "mapped", [1163] | |
| ], | |
| [ | |
| [1163, 1163], "valid" | |
| ], | |
| [ | |
| [1164, 1164], "mapped", [1165] | |
| ], | |
| [ | |
| [1165, 1165], "valid" | |
| ], | |
| [ | |
| [1166, 1166], "mapped", [1167] | |
| ], | |
| [ | |
| [1167, 1167], "valid" | |
| ], | |
| [ | |
| [1168, 1168], "mapped", [1169] | |
| ], | |
| [ | |
| [1169, 1169], "valid" | |
| ], | |
| [ | |
| [1170, 1170], "mapped", [1171] | |
| ], | |
| [ | |
| [1171, 1171], "valid" | |
| ], | |
| [ | |
| [1172, 1172], "mapped", [1173] | |
| ], | |
| [ | |
| [1173, 1173], "valid" | |
| ], | |
| [ | |
| [1174, 1174], "mapped", [1175] | |
| ], | |
| [ | |
| [1175, 1175], "valid" | |
| ], | |
| [ | |
| [1176, 1176], "mapped", [1177] | |
| ], | |
| [ | |
| [1177, 1177], "valid" | |
| ], | |
| [ | |
| [1178, 1178], "mapped", [1179] | |
| ], | |
| [ | |
| [1179, 1179], "valid" | |
| ], | |
| [ | |
| [1180, 1180], "mapped", [1181] | |
| ], | |
| [ | |
| [1181, 1181], "valid" | |
| ], | |
| [ | |
| [1182, 1182], "mapped", [1183] | |
| ], | |
| [ | |
| [1183, 1183], "valid" | |
| ], | |
| [ | |
| [1184, 1184], "mapped", [1185] | |
| ], | |
| [ | |
| [1185, 1185], "valid" | |
| ], | |
| [ | |
| [1186, 1186], "mapped", [1187] | |
| ], | |
| [ | |
| [1187, 1187], "valid" | |
| ], | |
| [ | |
| [1188, 1188], "mapped", [1189] | |
| ], | |
| [ | |
| [1189, 1189], "valid" | |
| ], | |
| [ | |
| [1190, 1190], "mapped", [1191] | |
| ], | |
| [ | |
| [1191, 1191], "valid" | |
| ], | |
| [ | |
| [1192, 1192], "mapped", [1193] | |
| ], | |
| [ | |
| [1193, 1193], "valid" | |
| ], | |
| [ | |
| [1194, 1194], "mapped", [1195] | |
| ], | |
| [ | |
| [1195, 1195], "valid" | |
| ], | |
| [ | |
| [1196, 1196], "mapped", [1197] | |
| ], | |
| [ | |
| [1197, 1197], "valid" | |
| ], | |
| [ | |
| [1198, 1198], "mapped", [1199] | |
| ], | |
| [ | |
| [1199, 1199], "valid" | |
| ], | |
| [ | |
| [1200, 1200], "mapped", [1201] | |
| ], | |
| [ | |
| [1201, 1201], "valid" | |
| ], | |
| [ | |
| [1202, 1202], "mapped", [1203] | |
| ], | |
| [ | |
| [1203, 1203], "valid" | |
| ], | |
| [ | |
| [1204, 1204], "mapped", [1205] | |
| ], | |
| [ | |
| [1205, 1205], "valid" | |
| ], | |
| [ | |
| [1206, 1206], "mapped", [1207] | |
| ], | |
| [ | |
| [1207, 1207], "valid" | |
| ], | |
| [ | |
| [1208, 1208], "mapped", [1209] | |
| ], | |
| [ | |
| [1209, 1209], "valid" | |
| ], | |
| [ | |
| [1210, 1210], "mapped", [1211] | |
| ], | |
| [ | |
| [1211, 1211], "valid" | |
| ], | |
| [ | |
| [1212, 1212], "mapped", [1213] | |
| ], | |
| [ | |
| [1213, 1213], "valid" | |
| ], | |
| [ | |
| [1214, 1214], "mapped", [1215] | |
| ], | |
| [ | |
| [1215, 1215], "valid" | |
| ], | |
| [ | |
| [1216, 1216], "disallowed" | |
| ], | |
| [ | |
| [1217, 1217], "mapped", [1218] | |
| ], | |
| [ | |
| [1218, 1218], "valid" | |
| ], | |
| [ | |
| [1219, 1219], "mapped", [1220] | |
| ], | |
| [ | |
| [1220, 1220], "valid" | |
| ], | |
| [ | |
| [1221, 1221], "mapped", [1222] | |
| ], | |
| [ | |
| [1222, 1222], "valid" | |
| ], | |
| [ | |
| [1223, 1223], "mapped", [1224] | |
| ], | |
| [ | |
| [1224, 1224], "valid" | |
| ], | |
| [ | |
| [1225, 1225], "mapped", [1226] | |
| ], | |
| [ | |
| [1226, 1226], "valid" | |
| ], | |
| [ | |
| [1227, 1227], "mapped", [1228] | |
| ], | |
| [ | |
| [1228, 1228], "valid" | |
| ], | |
| [ | |
| [1229, 1229], "mapped", [1230] | |
| ], | |
| [ | |
| [1230, 1230], "valid" | |
| ], | |
| [ | |
| [1231, 1231], "valid" | |
| ], | |
| [ | |
| [1232, 1232], "mapped", [1233] | |
| ], | |
| [ | |
| [1233, 1233], "valid" | |
| ], | |
| [ | |
| [1234, 1234], "mapped", [1235] | |
| ], | |
| [ | |
| [1235, 1235], "valid" | |
| ], | |
| [ | |
| [1236, 1236], "mapped", [1237] | |
| ], | |
| [ | |
| [1237, 1237], "valid" | |
| ], | |
| [ | |
| [1238, 1238], "mapped", [1239] | |
| ], | |
| [ | |
| [1239, 1239], "valid" | |
| ], | |
| [ | |
| [1240, 1240], "mapped", [1241] | |
| ], | |
| [ | |
| [1241, 1241], "valid" | |
| ], | |
| [ | |
| [1242, 1242], "mapped", [1243] | |
| ], | |
| [ | |
| [1243, 1243], "valid" | |
| ], | |
| [ | |
| [1244, 1244], "mapped", [1245] | |
| ], | |
| [ | |
| [1245, 1245], "valid" | |
| ], | |
| [ | |
| [1246, 1246], "mapped", [1247] | |
| ], | |
| [ | |
| [1247, 1247], "valid" | |
| ], | |
| [ | |
| [1248, 1248], "mapped", [1249] | |
| ], | |
| [ | |
| [1249, 1249], "valid" | |
| ], | |
| [ | |
| [1250, 1250], "mapped", [1251] | |
| ], | |
| [ | |
| [1251, 1251], "valid" | |
| ], | |
| [ | |
| [1252, 1252], "mapped", [1253] | |
| ], | |
| [ | |
| [1253, 1253], "valid" | |
| ], | |
| [ | |
| [1254, 1254], "mapped", [1255] | |
| ], | |
| [ | |
| [1255, 1255], "valid" | |
| ], | |
| [ | |
| [1256, 1256], "mapped", [1257] | |
| ], | |
| [ | |
| [1257, 1257], "valid" | |
| ], | |
| [ | |
| [1258, 1258], "mapped", [1259] | |
| ], | |
| [ | |
| [1259, 1259], "valid" | |
| ], | |
| [ | |
| [1260, 1260], "mapped", [1261] | |
| ], | |
| [ | |
| [1261, 1261], "valid" | |
| ], | |
| [ | |
| [1262, 1262], "mapped", [1263] | |
| ], | |
| [ | |
| [1263, 1263], "valid" | |
| ], | |
| [ | |
| [1264, 1264], "mapped", [1265] | |
| ], | |
| [ | |
| [1265, 1265], "valid" | |
| ], | |
| [ | |
| [1266, 1266], "mapped", [1267] | |
| ], | |
| [ | |
| [1267, 1267], "valid" | |
| ], | |
| [ | |
| [1268, 1268], "mapped", [1269] | |
| ], | |
| [ | |
| [1269, 1269], "valid" | |
| ], | |
| [ | |
| [1270, 1270], "mapped", [1271] | |
| ], | |
| [ | |
| [1271, 1271], "valid" | |
| ], | |
| [ | |
| [1272, 1272], "mapped", [1273] | |
| ], | |
| [ | |
| [1273, 1273], "valid" | |
| ], | |
| [ | |
| [1274, 1274], "mapped", [1275] | |
| ], | |
| [ | |
| [1275, 1275], "valid" | |
| ], | |
| [ | |
| [1276, 1276], "mapped", [1277] | |
| ], | |
| [ | |
| [1277, 1277], "valid" | |
| ], | |
| [ | |
| [1278, 1278], "mapped", [1279] | |
| ], | |
| [ | |
| [1279, 1279], "valid" | |
| ], | |
| [ | |
| [1280, 1280], "mapped", [1281] | |
| ], | |
| [ | |
| [1281, 1281], "valid" | |
| ], | |
| [ | |
| [1282, 1282], "mapped", [1283] | |
| ], | |
| [ | |
| [1283, 1283], "valid" | |
| ], | |
| [ | |
| [1284, 1284], "mapped", [1285] | |
| ], | |
| [ | |
| [1285, 1285], "valid" | |
| ], | |
| [ | |
| [1286, 1286], "mapped", [1287] | |
| ], | |
| [ | |
| [1287, 1287], "valid" | |
| ], | |
| [ | |
| [1288, 1288], "mapped", [1289] | |
| ], | |
| [ | |
| [1289, 1289], "valid" | |
| ], | |
| [ | |
| [1290, 1290], "mapped", [1291] | |
| ], | |
| [ | |
| [1291, 1291], "valid" | |
| ], | |
| [ | |
| [1292, 1292], "mapped", [1293] | |
| ], | |
| [ | |
| [1293, 1293], "valid" | |
| ], | |
| [ | |
| [1294, 1294], "mapped", [1295] | |
| ], | |
| [ | |
| [1295, 1295], "valid" | |
| ], | |
| [ | |
| [1296, 1296], "mapped", [1297] | |
| ], | |
| [ | |
| [1297, 1297], "valid" | |
| ], | |
| [ | |
| [1298, 1298], "mapped", [1299] | |
| ], | |
| [ | |
| [1299, 1299], "valid" | |
| ], | |
| [ | |
| [1300, 1300], "mapped", [1301] | |
| ], | |
| [ | |
| [1301, 1301], "valid" | |
| ], | |
| [ | |
| [1302, 1302], "mapped", [1303] | |
| ], | |
| [ | |
| [1303, 1303], "valid" | |
| ], | |
| [ | |
| [1304, 1304], "mapped", [1305] | |
| ], | |
| [ | |
| [1305, 1305], "valid" | |
| ], | |
| [ | |
| [1306, 1306], "mapped", [1307] | |
| ], | |
| [ | |
| [1307, 1307], "valid" | |
| ], | |
| [ | |
| [1308, 1308], "mapped", [1309] | |
| ], | |
| [ | |
| [1309, 1309], "valid" | |
| ], | |
| [ | |
| [1310, 1310], "mapped", [1311] | |
| ], | |
| [ | |
| [1311, 1311], "valid" | |
| ], | |
| [ | |
| [1312, 1312], "mapped", [1313] | |
| ], | |
| [ | |
| [1313, 1313], "valid" | |
| ], | |
| [ | |
| [1314, 1314], "mapped", [1315] | |
| ], | |
| [ | |
| [1315, 1315], "valid" | |
| ], | |
| [ | |
| [1316, 1316], "mapped", [1317] | |
| ], | |
| [ | |
| [1317, 1317], "valid" | |
| ], | |
| [ | |
| [1318, 1318], "mapped", [1319] | |
| ], | |
| [ | |
| [1319, 1319], "valid" | |
| ], | |
| [ | |
| [1320, 1320], "mapped", [1321] | |
| ], | |
| [ | |
| [1321, 1321], "valid" | |
| ], | |
| [ | |
| [1322, 1322], "mapped", [1323] | |
| ], | |
| [ | |
| [1323, 1323], "valid" | |
| ], | |
| [ | |
| [1324, 1324], "mapped", [1325] | |
| ], | |
| [ | |
| [1325, 1325], "valid" | |
| ], | |
| [ | |
| [1326, 1326], "mapped", [1327] | |
| ], | |
| [ | |
| [1327, 1327], "valid" | |
| ], | |
| [ | |
| [1328, 1328], "disallowed" | |
| ], | |
| [ | |
| [1329, 1329], "mapped", [1377] | |
| ], | |
| [ | |
| [1330, 1330], "mapped", [1378] | |
| ], | |
| [ | |
| [1331, 1331], "mapped", [1379] | |
| ], | |
| [ | |
| [1332, 1332], "mapped", [1380] | |
| ], | |
| [ | |
| [1333, 1333], "mapped", [1381] | |
| ], | |
| [ | |
| [1334, 1334], "mapped", [1382] | |
| ], | |
| [ | |
| [1335, 1335], "mapped", [1383] | |
| ], | |
| [ | |
| [1336, 1336], "mapped", [1384] | |
| ], | |
| [ | |
| [1337, 1337], "mapped", [1385] | |
| ], | |
| [ | |
| [1338, 1338], "mapped", [1386] | |
| ], | |
| [ | |
| [1339, 1339], "mapped", [1387] | |
| ], | |
| [ | |
| [1340, 1340], "mapped", [1388] | |
| ], | |
| [ | |
| [1341, 1341], "mapped", [1389] | |
| ], | |
| [ | |
| [1342, 1342], "mapped", [1390] | |
| ], | |
| [ | |
| [1343, 1343], "mapped", [1391] | |
| ], | |
| [ | |
| [1344, 1344], "mapped", [1392] | |
| ], | |
| [ | |
| [1345, 1345], "mapped", [1393] | |
| ], | |
| [ | |
| [1346, 1346], "mapped", [1394] | |
| ], | |
| [ | |
| [1347, 1347], "mapped", [1395] | |
| ], | |
| [ | |
| [1348, 1348], "mapped", [1396] | |
| ], | |
| [ | |
| [1349, 1349], "mapped", [1397] | |
| ], | |
| [ | |
| [1350, 1350], "mapped", [1398] | |
| ], | |
| [ | |
| [1351, 1351], "mapped", [1399] | |
| ], | |
| [ | |
| [1352, 1352], "mapped", [1400] | |
| ], | |
| [ | |
| [1353, 1353], "mapped", [1401] | |
| ], | |
| [ | |
| [1354, 1354], "mapped", [1402] | |
| ], | |
| [ | |
| [1355, 1355], "mapped", [1403] | |
| ], | |
| [ | |
| [1356, 1356], "mapped", [1404] | |
| ], | |
| [ | |
| [1357, 1357], "mapped", [1405] | |
| ], | |
| [ | |
| [1358, 1358], "mapped", [1406] | |
| ], | |
| [ | |
| [1359, 1359], "mapped", [1407] | |
| ], | |
| [ | |
| [1360, 1360], "mapped", [1408] | |
| ], | |
| [ | |
| [1361, 1361], "mapped", [1409] | |
| ], | |
| [ | |
| [1362, 1362], "mapped", [1410] | |
| ], | |
| [ | |
| [1363, 1363], "mapped", [1411] | |
| ], | |
| [ | |
| [1364, 1364], "mapped", [1412] | |
| ], | |
| [ | |
| [1365, 1365], "mapped", [1413] | |
| ], | |
| [ | |
| [1366, 1366], "mapped", [1414] | |
| ], | |
| [ | |
| [1367, 1368], "disallowed" | |
| ], | |
| [ | |
| [1369, 1369], "valid" | |
| ], | |
| [ | |
| [1370, 1375], "valid", [], "NV8" | |
| ], | |
| [ | |
| [1376, 1376], "disallowed" | |
| ], | |
| [ | |
| [1377, 1414], "valid" | |
| ], | |
| [ | |
| [1415, 1415], "mapped", [1381, 1410] | |
| ], | |
| [ | |
| [1416, 1416], "disallowed" | |
| ], | |
| [ | |
| [1417, 1417], "valid", [], "NV8" | |
| ], | |
| [ | |
| [1418, 1418], "valid", [], "NV8" | |
| ], | |
| [ | |
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment