-
-
Save ochsec/1f2bf145e2750d56bc731de2bac47ba6 to your computer and use it in GitHub Desktop.
formatted claude code cli.mjs
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). | |
| // Version: 0.2.29 | |
| import { createRequire as iv2 } from 'node:module' | |
| var hv2 = Object.create | |
| var { getPrototypeOf: xv2, defineProperty: lt, getOwnPropertyNames: cv2 } = Object | |
| var pv2 = Object.prototype.hasOwnProperty | |
| var X1 = (I, G, Z) => { | |
| Z = I != null ? hv2(xv2(I)) : {} | |
| let d = G || !I || !I.__esModule ? lt(Z, 'default', { value: I, enumerable: !0 }) : Z | |
| for (let W of cv2(I)) if (!pv2.call(d, W)) lt(d, W, { get: () => I[W], enumerable: !0 }) | |
| return d | |
| } | |
| var _ = (I, G) => () => (G || I((G = { exports: {} }).exports, G), G.exports) | |
| var rE = (I, G) => { | |
| for (var Z in G) | |
| lt(I, Z, { get: G[Z], enumerable: !0, configurable: !0, set: (d) => (G[Z] = () => d) }) | |
| } | |
| var XB = (I, G) => () => (I && (G = I((I = 0))), G) | |
| var A1 = iv2(import.meta.url) | |
| var sZ = _((SQ1) => { | |
| Object.defineProperty(SQ1, '__esModule', { value: !0 }) | |
| var EQ1 = Object.prototype.toString | |
| function nv2(I) { | |
| switch (EQ1.call(I)) { | |
| case '[object Error]': | |
| case '[object Exception]': | |
| case '[object DOMException]': | |
| return !0 | |
| default: | |
| return mT(I, Error) | |
| } | |
| } | |
| function SN(I, G) { | |
| return EQ1.call(I) === `[object ${G}]` | |
| } | |
| function av2(I) { | |
| return SN(I, 'ErrorEvent') | |
| } | |
| function rv2(I) { | |
| return SN(I, 'DOMError') | |
| } | |
| function sv2(I) { | |
| return SN(I, 'DOMException') | |
| } | |
| function ov2(I) { | |
| return SN(I, 'String') | |
| } | |
| function vQ1(I) { | |
| return ( | |
| typeof I === 'object' && | |
| I !== null && | |
| '__sentry_template_string__' in I && | |
| '__sentry_template_values__' in I | |
| ) | |
| } | |
| function ev2(I) { | |
| return I === null || vQ1(I) || (typeof I !== 'object' && typeof I !== 'function') | |
| } | |
| function MQ1(I) { | |
| return SN(I, 'Object') | |
| } | |
| function tv2(I) { | |
| return typeof Event !== 'undefined' && mT(I, Event) | |
| } | |
| function IM2(I) { | |
| return typeof Element !== 'undefined' && mT(I, Element) | |
| } | |
| function GM2(I) { | |
| return SN(I, 'RegExp') | |
| } | |
| function ZM2(I) { | |
| return Boolean(I && I.then && typeof I.then === 'function') | |
| } | |
| function dM2(I) { | |
| return MQ1(I) && 'nativeEvent' in I && 'preventDefault' in I && 'stopPropagation' in I | |
| } | |
| function WM2(I) { | |
| return typeof I === 'number' && I !== I | |
| } | |
| function mT(I, G) { | |
| try { | |
| return I instanceof G | |
| } catch (Z) { | |
| return !1 | |
| } | |
| } | |
| function wM2(I) { | |
| return !!(typeof I === 'object' && I !== null && (I.__isVue || I._isVue)) | |
| } | |
| SQ1.isDOMError = rv2 | |
| SQ1.isDOMException = sv2 | |
| SQ1.isElement = IM2 | |
| SQ1.isError = nv2 | |
| SQ1.isErrorEvent = av2 | |
| SQ1.isEvent = tv2 | |
| SQ1.isInstanceOf = mT | |
| SQ1.isNaN = WM2 | |
| SQ1.isParameterizedString = vQ1 | |
| SQ1.isPlainObject = MQ1 | |
| SQ1.isPrimitive = ev2 | |
| SQ1.isRegExp = GM2 | |
| SQ1.isString = ov2 | |
| SQ1.isSyntheticEvent = dM2 | |
| SQ1.isThenable = ZM2 | |
| SQ1.isVueViewModel = wM2 | |
| }) | |
| var sE = _(($Q1) => { | |
| Object.defineProperty($Q1, '__esModule', { value: !0 }) | |
| var bT = sZ() | |
| function qM2(I, G = 0) { | |
| if (typeof I !== 'string' || G === 0) return I | |
| return I.length <= G ? I : `${I.slice(0, G)}...` | |
| } | |
| function UM2(I, G) { | |
| let Z = I, | |
| d = Z.length | |
| if (d <= 150) return Z | |
| if (G > d) G = d | |
| let W = Math.max(G - 60, 0) | |
| if (W < 5) W = 0 | |
| let w = Math.min(W + 140, d) | |
| if (w > d - 5) w = d | |
| if (w === d) W = Math.max(w - 140, 0) | |
| if (((Z = Z.slice(W, w)), W > 0)) Z = `'{snip} ${Z}` | |
| if (w < d) Z += ' {snip}' | |
| return Z | |
| } | |
| function fM2(I, G) { | |
| if (!Array.isArray(I)) return '' | |
| let Z = [] | |
| for (let d = 0; d < I.length; d++) { | |
| let W = I[d] | |
| try { | |
| if (bT.isVueViewModel(W)) Z.push('[VueViewModel]') | |
| else Z.push(String(W)) | |
| } catch (w) { | |
| Z.push('[value cannot be serialized]') | |
| } | |
| } | |
| return Z.join(G) | |
| } | |
| function LQ1(I, G, Z = !1) { | |
| if (!bT.isString(I)) return !1 | |
| if (bT.isRegExp(G)) return G.test(I) | |
| if (bT.isString(G)) return Z ? I === G : I.includes(G) | |
| return !1 | |
| } | |
| function RM2(I, G = [], Z = !1) { | |
| return G.some((d) => LQ1(I, d, Z)) | |
| } | |
| $Q1.isMatchingPattern = LQ1 | |
| $Q1.safeJoin = fM2 | |
| $Q1.snipLine = UM2 | |
| $Q1.stringMatchesSomePattern = RM2 | |
| $Q1.truncate = qM2 | |
| }) | |
| var uQ1 = _((OQ1) => { | |
| Object.defineProperty(OQ1, '__esModule', { value: !0 }) | |
| var jt = sZ(), | |
| $M2 = sE() | |
| function yM2(I, G, Z = 250, d, W, w, B) { | |
| if (!w.exception || !w.exception.values || !B || !jt.isInstanceOf(B.originalException, Error)) | |
| return | |
| let C = | |
| w.exception.values.length > 0 ? w.exception.values[w.exception.values.length - 1] : void 0 | |
| if (C) | |
| w.exception.values = PM2(kt(I, G, W, B.originalException, d, w.exception.values, C, 0), Z) | |
| } | |
| function kt(I, G, Z, d, W, w, B, C) { | |
| if (w.length >= Z + 1) return w | |
| let V = [...w] | |
| if (jt.isInstanceOf(d[W], Error)) { | |
| yQ1(B, C) | |
| let A = I(G, d[W]), | |
| X = V.length | |
| PQ1(A, W, X, C), (V = kt(I, G, Z, d[W], W, [A, ...V], A, X)) | |
| } | |
| if (Array.isArray(d.errors)) | |
| d.errors.forEach((A, X) => { | |
| if (jt.isInstanceOf(A, Error)) { | |
| yQ1(B, C) | |
| let Y = I(G, A), | |
| H = V.length | |
| PQ1(Y, `errors[${X}]`, H, C), (V = kt(I, G, Z, A, W, [Y, ...V], Y, H)) | |
| } | |
| }) | |
| return V | |
| } | |
| function yQ1(I, G) { | |
| ;(I.mechanism = I.mechanism || { type: 'generic', handled: !0 }), | |
| (I.mechanism = { | |
| ...I.mechanism, | |
| ...(I.type === 'AggregateError' && { is_exception_group: !0 }), | |
| exception_id: G, | |
| }) | |
| } | |
| function PQ1(I, G, Z, d) { | |
| ;(I.mechanism = I.mechanism || { type: 'generic', handled: !0 }), | |
| (I.mechanism = { ...I.mechanism, type: 'chained', source: G, exception_id: Z, parent_id: d }) | |
| } | |
| function PM2(I, G) { | |
| return I.map((Z) => { | |
| if (Z.value) Z.value = $M2.truncate(Z.value, G) | |
| return Z | |
| }) | |
| } | |
| OQ1.applyAggregateErrorsToEvent = yM2 | |
| }) | |
| var q7 = _((TQ1) => { | |
| Object.defineProperty(TQ1, '__esModule', { value: !0 }) | |
| function lT(I) { | |
| return I && I.Math == Math ? I : void 0 | |
| } | |
| var ht = | |
| (typeof globalThis == 'object' && lT(globalThis)) || | |
| (typeof window == 'object' && lT(window)) || | |
| (typeof self == 'object' && lT(self)) || | |
| (typeof global == 'object' && lT(global)) || | |
| (function () { | |
| return this | |
| })() || | |
| {} | |
| function uM2() { | |
| return ht | |
| } | |
| function TM2(I, G, Z) { | |
| let d = Z || ht, | |
| W = (d.__SENTRY__ = d.__SENTRY__ || {}) | |
| return W[I] || (W[I] = G()) | |
| } | |
| TQ1.GLOBAL_OBJ = ht | |
| TQ1.getGlobalObject = uM2 | |
| TQ1.getGlobalSingleton = TM2 | |
| }) | |
| var xt = _((mQ1) => { | |
| Object.defineProperty(mQ1, '__esModule', { value: !0 }) | |
| var jM2 = sZ(), | |
| kM2 = q7(), | |
| LN = kM2.getGlobalObject(), | |
| hM2 = 80 | |
| function xM2(I, G = {}) { | |
| if (!I) return '<unknown>' | |
| try { | |
| let Z = I, | |
| d = 5, | |
| W = [], | |
| w = 0, | |
| B = 0, | |
| C = ' > ', | |
| V = C.length, | |
| A, | |
| X = Array.isArray(G) ? G : G.keyAttrs, | |
| Y = (!Array.isArray(G) && G.maxStringLength) || hM2 | |
| while (Z && w++ < d) { | |
| if (((A = cM2(Z, X)), A === 'html' || (w > 1 && B + W.length * V + A.length >= Y))) break | |
| W.push(A), (B += A.length), (Z = Z.parentNode) | |
| } | |
| return W.reverse().join(C) | |
| } catch (Z) { | |
| return '<unknown>' | |
| } | |
| } | |
| function cM2(I, G) { | |
| let Z = I, | |
| d = [], | |
| W, | |
| w, | |
| B, | |
| C, | |
| V | |
| if (!Z || !Z.tagName) return '' | |
| if (LN.HTMLElement) { | |
| if (Z instanceof HTMLElement && Z.dataset && Z.dataset.sentryComponent) | |
| return Z.dataset.sentryComponent | |
| } | |
| d.push(Z.tagName.toLowerCase()) | |
| let A = | |
| G && G.length ? G.filter((Y) => Z.getAttribute(Y)).map((Y) => [Y, Z.getAttribute(Y)]) : null | |
| if (A && A.length) | |
| A.forEach((Y) => { | |
| d.push(`[${Y[0]}="${Y[1]}"]`) | |
| }) | |
| else { | |
| if (Z.id) d.push(`#${Z.id}`) | |
| if (((W = Z.className), W && jM2.isString(W))) { | |
| w = W.split(/\s+/) | |
| for (V = 0; V < w.length; V++) d.push(`.${w[V]}`) | |
| } | |
| } | |
| let X = ['aria-label', 'type', 'name', 'title', 'alt'] | |
| for (V = 0; V < X.length; V++) | |
| if (((B = X[V]), (C = Z.getAttribute(B)), C)) d.push(`[${B}="${C}"]`) | |
| return d.join('') | |
| } | |
| function pM2() { | |
| try { | |
| return LN.document.location.href | |
| } catch (I) { | |
| return '' | |
| } | |
| } | |
| function iM2(I) { | |
| if (LN.document && LN.document.querySelector) return LN.document.querySelector(I) | |
| return null | |
| } | |
| function nM2(I) { | |
| if (!LN.HTMLElement) return null | |
| let G = I, | |
| Z = 5 | |
| for (let d = 0; d < Z; d++) { | |
| if (!G) return null | |
| if (G instanceof HTMLElement && G.dataset.sentryComponent) return G.dataset.sentryComponent | |
| G = G.parentNode | |
| } | |
| return null | |
| } | |
| mQ1.getComponentName = nM2 | |
| mQ1.getDomElement = iM2 | |
| mQ1.getLocationHref = pM2 | |
| mQ1.htmlTreeAsString = xM2 | |
| }) | |
| var YB = _((bQ1) => { | |
| Object.defineProperty(bQ1, '__esModule', { value: !0 }) | |
| var eM2 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__ | |
| bQ1.DEBUG_BUILD = eM2 | |
| }) | |
| var NW = _((jQ1) => { | |
| Object.defineProperty(jQ1, '__esModule', { value: !0 }) | |
| var IS2 = YB(), | |
| ct = q7(), | |
| GS2 = 'Sentry Logger ', | |
| pt = ['debug', 'info', 'warn', 'error', 'log', 'assert', 'trace'], | |
| it = {} | |
| function lQ1(I) { | |
| if (!('console' in ct.GLOBAL_OBJ)) return I() | |
| let G = ct.GLOBAL_OBJ.console, | |
| Z = {}, | |
| d = Object.keys(it) | |
| d.forEach((W) => { | |
| let w = it[W] | |
| ;(Z[W] = G[W]), (G[W] = w) | |
| }) | |
| try { | |
| return I() | |
| } finally { | |
| d.forEach((W) => { | |
| G[W] = Z[W] | |
| }) | |
| } | |
| } | |
| function ZS2() { | |
| let I = !1, | |
| G = { | |
| enable: () => { | |
| I = !0 | |
| }, | |
| disable: () => { | |
| I = !1 | |
| }, | |
| isEnabled: () => I, | |
| } | |
| if (IS2.DEBUG_BUILD) | |
| pt.forEach((Z) => { | |
| G[Z] = (...d) => { | |
| if (I) | |
| lQ1(() => { | |
| ct.GLOBAL_OBJ.console[Z](`${GS2}[${Z}]:`, ...d) | |
| }) | |
| } | |
| }) | |
| else | |
| pt.forEach((Z) => { | |
| G[Z] = () => { | |
| return | |
| } | |
| }) | |
| return G | |
| } | |
| var dS2 = ZS2() | |
| jQ1.CONSOLE_LEVELS = pt | |
| jQ1.consoleSandbox = lQ1 | |
| jQ1.logger = dS2 | |
| jQ1.originalConsoleMethods = it | |
| }) | |
| var nt = _((xQ1) => { | |
| Object.defineProperty(xQ1, '__esModule', { value: !0 }) | |
| var VS2 = YB(), | |
| oE = NW(), | |
| AS2 = /^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/ | |
| function XS2(I) { | |
| return I === 'http' || I === 'https' | |
| } | |
| function YS2(I, G = !1) { | |
| let { host: Z, path: d, pass: W, port: w, projectId: B, protocol: C, publicKey: V } = I | |
| return `${C}://${V}${G && W ? `:${W}` : ''}@${Z}${w ? `:${w}` : ''}/${d ? `${d}/` : d}${B}` | |
| } | |
| function kQ1(I) { | |
| let G = AS2.exec(I) | |
| if (!G) { | |
| oE.consoleSandbox(() => { | |
| console.error(`Invalid Sentry Dsn: ${I}`) | |
| }) | |
| return | |
| } | |
| let [Z, d, W = '', w, B = '', C] = G.slice(1), | |
| V = '', | |
| A = C, | |
| X = A.split('/') | |
| if (X.length > 1) (V = X.slice(0, -1).join('/')), (A = X.pop()) | |
| if (A) { | |
| let Y = A.match(/^\d+/) | |
| if (Y) A = Y[0] | |
| } | |
| return hQ1({ host: w, pass: W, path: V, projectId: A, port: B, protocol: Z, publicKey: d }) | |
| } | |
| function hQ1(I) { | |
| return { | |
| protocol: I.protocol, | |
| publicKey: I.publicKey || '', | |
| pass: I.pass || '', | |
| host: I.host, | |
| port: I.port || '', | |
| path: I.path || '', | |
| projectId: I.projectId, | |
| } | |
| } | |
| function _S2(I) { | |
| if (!VS2.DEBUG_BUILD) return !0 | |
| let { port: G, projectId: Z, protocol: d } = I | |
| if ( | |
| ['protocol', 'publicKey', 'host', 'projectId'].find((B) => { | |
| if (!I[B]) return oE.logger.error(`Invalid Sentry Dsn: ${B} missing`), !0 | |
| return !1 | |
| }) | |
| ) | |
| return !1 | |
| if (!Z.match(/^\d+$/)) return oE.logger.error(`Invalid Sentry Dsn: Invalid projectId ${Z}`), !1 | |
| if (!XS2(d)) return oE.logger.error(`Invalid Sentry Dsn: Invalid protocol ${d}`), !1 | |
| if (G && isNaN(parseInt(G, 10))) | |
| return oE.logger.error(`Invalid Sentry Dsn: Invalid port ${G}`), !1 | |
| return !0 | |
| } | |
| function DS2(I) { | |
| let G = typeof I === 'string' ? kQ1(I) : hQ1(I) | |
| if (!G || !_S2(G)) return | |
| return G | |
| } | |
| xQ1.dsnFromString = kQ1 | |
| xQ1.dsnToString = YS2 | |
| xQ1.makeDsn = DS2 | |
| }) | |
| var at = _((pQ1) => { | |
| Object.defineProperty(pQ1, '__esModule', { value: !0 }) | |
| class cQ1 extends Error { | |
| constructor(I, G = 'warn') { | |
| super(I) | |
| ;(this.message = I), | |
| (this.name = new.target.prototype.constructor.name), | |
| Object.setPrototypeOf(this, new.target.prototype), | |
| (this.logLevel = G) | |
| } | |
| } | |
| pQ1.SentryError = cQ1 | |
| }) | |
| var oZ = _((eQ1) => { | |
| Object.defineProperty(eQ1, '__esModule', { value: !0 }) | |
| var gS2 = xt(), | |
| NS2 = YB(), | |
| $N = sZ(), | |
| zS2 = NW(), | |
| iQ1 = sE() | |
| function QS2(I, G, Z) { | |
| if (!(G in I)) return | |
| let d = I[G], | |
| W = Z(d) | |
| if (typeof W === 'function') sQ1(W, d) | |
| I[G] = W | |
| } | |
| function rQ1(I, G, Z) { | |
| try { | |
| Object.defineProperty(I, G, { value: Z, writable: !0, configurable: !0 }) | |
| } catch (d) { | |
| NS2.DEBUG_BUILD && zS2.logger.log(`Failed to add non-enumerable property "${G}" to object`, I) | |
| } | |
| } | |
| function sQ1(I, G) { | |
| try { | |
| let Z = G.prototype || {} | |
| ;(I.prototype = G.prototype = Z), rQ1(I, '__sentry_original__', G) | |
| } catch (Z) {} | |
| } | |
| function qS2(I) { | |
| return I.__sentry_original__ | |
| } | |
| function US2(I) { | |
| return Object.keys(I) | |
| .map((G) => `${encodeURIComponent(G)}=${encodeURIComponent(I[G])}`) | |
| .join('&') | |
| } | |
| function oQ1(I) { | |
| if ($N.isError(I)) return { message: I.message, name: I.name, stack: I.stack, ...aQ1(I) } | |
| else if ($N.isEvent(I)) { | |
| let G = { | |
| type: I.type, | |
| target: nQ1(I.target), | |
| currentTarget: nQ1(I.currentTarget), | |
| ...aQ1(I), | |
| } | |
| if (typeof CustomEvent !== 'undefined' && $N.isInstanceOf(I, CustomEvent)) G.detail = I.detail | |
| return G | |
| } else return I | |
| } | |
| function nQ1(I) { | |
| try { | |
| return $N.isElement(I) ? gS2.htmlTreeAsString(I) : Object.prototype.toString.call(I) | |
| } catch (G) { | |
| return '<unknown>' | |
| } | |
| } | |
| function aQ1(I) { | |
| if (typeof I === 'object' && I !== null) { | |
| let G = {} | |
| for (let Z in I) if (Object.prototype.hasOwnProperty.call(I, Z)) G[Z] = I[Z] | |
| return G | |
| } else return {} | |
| } | |
| function fS2(I, G = 40) { | |
| let Z = Object.keys(oQ1(I)) | |
| if ((Z.sort(), !Z.length)) return '[object has no keys]' | |
| if (Z[0].length >= G) return iQ1.truncate(Z[0], G) | |
| for (let d = Z.length; d > 0; d--) { | |
| let W = Z.slice(0, d).join(', ') | |
| if (W.length > G) continue | |
| if (d === Z.length) return W | |
| return iQ1.truncate(W, G) | |
| } | |
| return '' | |
| } | |
| function RS2(I) { | |
| return rt(I, new Map()) | |
| } | |
| function rt(I, G) { | |
| if (ES2(I)) { | |
| let Z = G.get(I) | |
| if (Z !== void 0) return Z | |
| let d = {} | |
| G.set(I, d) | |
| for (let W of Object.keys(I)) if (typeof I[W] !== 'undefined') d[W] = rt(I[W], G) | |
| return d | |
| } | |
| if (Array.isArray(I)) { | |
| let Z = G.get(I) | |
| if (Z !== void 0) return Z | |
| let d = [] | |
| return ( | |
| G.set(I, d), | |
| I.forEach((W) => { | |
| d.push(rt(W, G)) | |
| }), | |
| d | |
| ) | |
| } | |
| return I | |
| } | |
| function ES2(I) { | |
| if (!$N.isPlainObject(I)) return !1 | |
| try { | |
| let G = Object.getPrototypeOf(I).constructor.name | |
| return !G || G === 'Object' | |
| } catch (G) { | |
| return !0 | |
| } | |
| } | |
| function vS2(I) { | |
| let G | |
| switch (!0) { | |
| case I === void 0 || I === null: | |
| G = new String(I) | |
| break | |
| case typeof I === 'symbol' || typeof I === 'bigint': | |
| G = Object(I) | |
| break | |
| case $N.isPrimitive(I): | |
| G = new I.constructor(I) | |
| break | |
| default: | |
| G = I | |
| break | |
| } | |
| return G | |
| } | |
| eQ1.addNonEnumerableProperty = rQ1 | |
| eQ1.convertToPlainObject = oQ1 | |
| eQ1.dropUndefinedKeys = RS2 | |
| eQ1.extractExceptionKeysForMessage = fS2 | |
| eQ1.fill = QS2 | |
| eQ1.getOriginalFunction = qS2 | |
| eQ1.markFunctionWrapped = sQ1 | |
| eQ1.objectify = vS2 | |
| eQ1.urlEncode = US2 | |
| }) | |
| var jT = _((Iq1) => { | |
| Object.defineProperty(Iq1, '__esModule', { value: !0 }) | |
| function tQ1(I, G = !1) { | |
| return ( | |
| !( | |
| G || | |
| (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 mS2(I) { | |
| let G = /^\s*[-]{4,}$/, | |
| Z = /at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/ | |
| return (d) => { | |
| let W = d.match(Z) | |
| if (W) { | |
| let w, B, C, V, A | |
| if (W[1]) { | |
| C = W[1] | |
| let H = C.lastIndexOf('.') | |
| if (C[H - 1] === '.') H-- | |
| if (H > 0) { | |
| ;(w = C.slice(0, H)), (B = C.slice(H + 1)) | |
| let J = w.indexOf('.Module') | |
| if (J > 0) (C = C.slice(J + 1)), (w = w.slice(0, J)) | |
| } | |
| V = void 0 | |
| } | |
| if (B) (V = w), (A = B) | |
| if (B === '<anonymous>') (A = void 0), (C = void 0) | |
| if (C === void 0) (A = A || '<anonymous>'), (C = V ? `${V}.${A}` : A) | |
| let X = W[2] && W[2].startsWith('file://') ? W[2].slice(7) : W[2], | |
| Y = W[5] === 'native' | |
| if (X && X.match(/\/[A-Z]:/)) X = X.slice(1) | |
| if (!X && W[5] && !Y) X = W[5] | |
| return { | |
| filename: X, | |
| module: I ? I(X) : void 0, | |
| function: C, | |
| lineno: parseInt(W[3], 10) || void 0, | |
| colno: parseInt(W[4], 10) || void 0, | |
| in_app: tQ1(X, Y), | |
| } | |
| } | |
| if (d.match(G)) return { filename: d } | |
| return | |
| } | |
| } | |
| Iq1.filenameIsInApp = tQ1 | |
| Iq1.node = mS2 | |
| }) | |
| var kT = _((Cq1) => { | |
| Object.defineProperty(Cq1, '__esModule', { value: !0 }) | |
| var dq1 = jT(), | |
| Wq1 = 50, | |
| Gq1 = /\(error: (.*)\)/, | |
| Zq1 = /captureMessage|captureException/ | |
| function wq1(...I) { | |
| let G = I.sort((Z, d) => Z[0] - d[0]).map((Z) => Z[1]) | |
| return (Z, d = 0) => { | |
| let W = [], | |
| w = Z.split(` | |
| `) | |
| for (let B = d; B < w.length; B++) { | |
| let C = w[B] | |
| if (C.length > 1024) continue | |
| let V = Gq1.test(C) ? C.replace(Gq1, '$1') : C | |
| if (V.match(/\S*Error: /)) continue | |
| for (let A of G) { | |
| let X = A(V) | |
| if (X) { | |
| W.push(X) | |
| break | |
| } | |
| } | |
| if (W.length >= Wq1) break | |
| } | |
| return Bq1(W) | |
| } | |
| } | |
| function jS2(I) { | |
| if (Array.isArray(I)) return wq1(...I) | |
| return I | |
| } | |
| function Bq1(I) { | |
| if (!I.length) return [] | |
| let G = Array.from(I) | |
| if (/sentryWrapped/.test(G[G.length - 1].function || '')) G.pop() | |
| if ((G.reverse(), Zq1.test(G[G.length - 1].function || ''))) { | |
| if ((G.pop(), Zq1.test(G[G.length - 1].function || ''))) G.pop() | |
| } | |
| return G.slice(0, Wq1).map((Z) => ({ | |
| ...Z, | |
| filename: Z.filename || G[G.length - 1].filename, | |
| function: Z.function || '?', | |
| })) | |
| } | |
| var st = '<anonymous>' | |
| function kS2(I) { | |
| try { | |
| if (!I || typeof I !== 'function') return st | |
| return I.name || st | |
| } catch (G) { | |
| return st | |
| } | |
| } | |
| function hS2(I) { | |
| return [90, dq1.node(I)] | |
| } | |
| Cq1.filenameIsInApp = dq1.filenameIsInApp | |
| Cq1.createStackParser = wq1 | |
| Cq1.getFunctionName = kS2 | |
| Cq1.nodeStackLineParser = hS2 | |
| Cq1.stackParserFromStackParserOptions = jS2 | |
| Cq1.stripSentryFramesAndReverse = Bq1 | |
| }) | |
| var $V = _((Aq1) => { | |
| Object.defineProperty(Aq1, '__esModule', { value: !0 }) | |
| var rS2 = YB(), | |
| sS2 = NW(), | |
| oS2 = kT(), | |
| yN = {}, | |
| Vq1 = {} | |
| function eS2(I, G) { | |
| ;(yN[I] = yN[I] || []), yN[I].push(G) | |
| } | |
| function tS2() { | |
| Object.keys(yN).forEach((I) => { | |
| yN[I] = void 0 | |
| }) | |
| } | |
| function IL2(I, G) { | |
| if (!Vq1[I]) G(), (Vq1[I] = !0) | |
| } | |
| function GL2(I, G) { | |
| let Z = I && yN[I] | |
| if (!Z) return | |
| for (let d of Z) | |
| try { | |
| d(G) | |
| } catch (W) { | |
| rS2.DEBUG_BUILD && | |
| sS2.logger.error( | |
| `Error while triggering instrumentation handler. | |
| Type: ${I} | |
| Name: ${oS2.getFunctionName(d)} | |
| Error:`, | |
| W, | |
| ) | |
| } | |
| } | |
| Aq1.addHandler = eS2 | |
| Aq1.maybeInstrument = IL2 | |
| Aq1.resetInstrumentationHandlers = tS2 | |
| Aq1.triggerHandlers = GL2 | |
| }) | |
| var tt = _((Xq1) => { | |
| Object.defineProperty(Xq1, '__esModule', { value: !0 }) | |
| var ot = NW(), | |
| BL2 = oZ(), | |
| hT = q7(), | |
| et = $V() | |
| function CL2(I) { | |
| et.addHandler('console', I), et.maybeInstrument('console', VL2) | |
| } | |
| function VL2() { | |
| if (!('console' in hT.GLOBAL_OBJ)) return | |
| ot.CONSOLE_LEVELS.forEach(function (I) { | |
| if (!(I in hT.GLOBAL_OBJ.console)) return | |
| BL2.fill(hT.GLOBAL_OBJ.console, I, function (G) { | |
| return ( | |
| (ot.originalConsoleMethods[I] = G), | |
| function (...Z) { | |
| let d = { args: Z, level: I } | |
| et.triggerHandlers('console', d) | |
| let W = ot.originalConsoleMethods[I] | |
| W && W.apply(hT.GLOBAL_OBJ.console, Z) | |
| } | |
| ) | |
| }) | |
| }) | |
| } | |
| Xq1.addConsoleInstrumentationHandler = CL2 | |
| }) | |
| var eE = _((_q1) => { | |
| Object.defineProperty(_q1, '__esModule', { value: !0 }) | |
| var XL2 = oZ(), | |
| I11 = sE(), | |
| YL2 = q7() | |
| function _L2() { | |
| let I = YL2.GLOBAL_OBJ, | |
| G = I.crypto || I.msCrypto, | |
| Z = () => Math.random() * 16 | |
| try { | |
| if (G && G.randomUUID) return G.randomUUID().replace(/-/g, '') | |
| if (G && G.getRandomValues) | |
| Z = () => { | |
| let d = new Uint8Array(1) | |
| return G.getRandomValues(d), d[0] | |
| } | |
| } catch (d) {} | |
| return ([1e7] + 1000 + 4000 + 8000 + 100000000000).replace(/[018]/g, (d) => | |
| (d ^ ((Z() & 15) >> (d / 4))).toString(16), | |
| ) | |
| } | |
| function Yq1(I) { | |
| return I.exception && I.exception.values ? I.exception.values[0] : void 0 | |
| } | |
| function DL2(I) { | |
| let { message: G, event_id: Z } = I | |
| if (G) return G | |
| let d = Yq1(I) | |
| if (d) { | |
| if (d.type && d.value) return `${d.type}: ${d.value}` | |
| return d.type || d.value || Z || '<unknown>' | |
| } | |
| return Z || '<unknown>' | |
| } | |
| function HL2(I, G, Z) { | |
| let d = (I.exception = I.exception || {}), | |
| W = (d.values = d.values || []), | |
| w = (W[0] = W[0] || {}) | |
| if (!w.value) w.value = G || '' | |
| if (!w.type) w.type = Z || 'Error' | |
| } | |
| function FL2(I, G) { | |
| let Z = Yq1(I) | |
| if (!Z) return | |
| let d = { type: 'generic', handled: !0 }, | |
| W = Z.mechanism | |
| if (((Z.mechanism = { ...d, ...W, ...G }), G && 'data' in G)) { | |
| let w = { ...(W && W.data), ...G.data } | |
| Z.mechanism.data = w | |
| } | |
| } | |
| var JL2 = | |
| /^(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 KL2(I) { | |
| let G = I.match(JL2) || [], | |
| Z = parseInt(G[1], 10), | |
| d = parseInt(G[2], 10), | |
| W = parseInt(G[3], 10) | |
| return { | |
| buildmetadata: G[5], | |
| major: isNaN(Z) ? void 0 : Z, | |
| minor: isNaN(d) ? void 0 : d, | |
| patch: isNaN(W) ? void 0 : W, | |
| prerelease: G[4], | |
| } | |
| } | |
| function gL2(I, G, Z = 5) { | |
| if (G.lineno === void 0) return | |
| let d = I.length, | |
| W = Math.max(Math.min(d - 1, G.lineno - 1), 0) | |
| ;(G.pre_context = I.slice(Math.max(0, W - Z), W).map((w) => I11.snipLine(w, 0))), | |
| (G.context_line = I11.snipLine(I[Math.min(d - 1, W)], G.colno || 0)), | |
| (G.post_context = I.slice(Math.min(W + 1, d), W + 1 + Z).map((w) => I11.snipLine(w, 0))) | |
| } | |
| function NL2(I) { | |
| if (I && I.__sentry_captured__) return !0 | |
| try { | |
| XL2.addNonEnumerableProperty(I, '__sentry_captured__', !0) | |
| } catch (G) {} | |
| return !1 | |
| } | |
| function zL2(I) { | |
| return Array.isArray(I) ? I : [I] | |
| } | |
| _q1.addContextToFrame = gL2 | |
| _q1.addExceptionMechanism = FL2 | |
| _q1.addExceptionTypeValue = HL2 | |
| _q1.arrayify = zL2 | |
| _q1.checkOrSetAlreadyCaught = NL2 | |
| _q1.getEventDescription = DL2 | |
| _q1.parseSemver = KL2 | |
| _q1.uuid4 = _L2 | |
| }) | |
| var W11 = _((Jq1) => { | |
| Object.defineProperty(Jq1, '__esModule', { value: !0 }) | |
| var SL2 = eE(), | |
| xT = oZ(), | |
| LL2 = q7(), | |
| G11 = $V(), | |
| PN = LL2.GLOBAL_OBJ, | |
| $L2 = 1000, | |
| Dq1, | |
| Z11, | |
| d11 | |
| function yL2(I) { | |
| G11.addHandler('dom', I), G11.maybeInstrument('dom', Fq1) | |
| } | |
| function Fq1() { | |
| if (!PN.document) return | |
| let I = G11.triggerHandlers.bind(null, 'dom'), | |
| G = Hq1(I, !0) | |
| PN.document.addEventListener('click', G, !1), | |
| PN.document.addEventListener('keypress', G, !1), | |
| ['EventTarget', 'Node'].forEach((Z) => { | |
| let d = PN[Z] && PN[Z].prototype | |
| if (!d || !d.hasOwnProperty || !d.hasOwnProperty('addEventListener')) return | |
| xT.fill(d, 'addEventListener', function (W) { | |
| return function (w, B, C) { | |
| if (w === 'click' || w == 'keypress') | |
| try { | |
| let V = this, | |
| A = (V.__sentry_instrumentation_handlers__ = | |
| V.__sentry_instrumentation_handlers__ || {}), | |
| X = (A[w] = A[w] || { refCount: 0 }) | |
| if (!X.handler) { | |
| let Y = Hq1(I) | |
| ;(X.handler = Y), W.call(this, w, Y, C) | |
| } | |
| X.refCount++ | |
| } catch (V) {} | |
| return W.call(this, w, B, C) | |
| } | |
| }), | |
| xT.fill(d, 'removeEventListener', function (W) { | |
| return function (w, B, C) { | |
| if (w === 'click' || w == 'keypress') | |
| try { | |
| let V = this, | |
| A = V.__sentry_instrumentation_handlers__ || {}, | |
| X = A[w] | |
| if (X) { | |
| if ((X.refCount--, X.refCount <= 0)) | |
| W.call(this, w, X.handler, C), (X.handler = void 0), delete A[w] | |
| if (Object.keys(A).length === 0) delete V.__sentry_instrumentation_handlers__ | |
| } | |
| } catch (V) {} | |
| return W.call(this, w, B, C) | |
| } | |
| }) | |
| }) | |
| } | |
| function PL2(I) { | |
| if (I.type !== Z11) return !1 | |
| try { | |
| if (!I.target || I.target._sentryId !== d11) return !1 | |
| } catch (G) {} | |
| return !0 | |
| } | |
| function OL2(I, G) { | |
| if (I !== 'keypress') return !1 | |
| if (!G || !G.tagName) return !0 | |
| if (G.tagName === 'INPUT' || G.tagName === 'TEXTAREA' || G.isContentEditable) return !1 | |
| return !0 | |
| } | |
| function Hq1(I, G = !1) { | |
| return (Z) => { | |
| if (!Z || Z._sentryCaptured) return | |
| let d = uL2(Z) | |
| if (OL2(Z.type, d)) return | |
| if ((xT.addNonEnumerableProperty(Z, '_sentryCaptured', !0), d && !d._sentryId)) | |
| xT.addNonEnumerableProperty(d, '_sentryId', SL2.uuid4()) | |
| let W = Z.type === 'keypress' ? 'input' : Z.type | |
| if (!PL2(Z)) | |
| I({ event: Z, name: W, global: G }), (Z11 = Z.type), (d11 = d ? d._sentryId : void 0) | |
| clearTimeout(Dq1), | |
| (Dq1 = PN.setTimeout(() => { | |
| ;(d11 = void 0), (Z11 = void 0) | |
| }, $L2)) | |
| } | |
| } | |
| function uL2(I) { | |
| try { | |
| return I.target | |
| } catch (G) { | |
| return null | |
| } | |
| } | |
| Jq1.addClickKeypressInstrumentationHandler = yL2 | |
| Jq1.instrumentDOM = Fq1 | |
| }) | |
| var C11 = _((Kq1) => { | |
| Object.defineProperty(Kq1, '__esModule', { value: !0 }) | |
| var bL2 = YB(), | |
| lL2 = NW(), | |
| jL2 = q7(), | |
| cT = jL2.getGlobalObject() | |
| function kL2() { | |
| try { | |
| return new ErrorEvent(''), !0 | |
| } catch (I) { | |
| return !1 | |
| } | |
| } | |
| function hL2() { | |
| try { | |
| return new DOMError(''), !0 | |
| } catch (I) { | |
| return !1 | |
| } | |
| } | |
| function xL2() { | |
| try { | |
| return new DOMException(''), !0 | |
| } catch (I) { | |
| return !1 | |
| } | |
| } | |
| function B11() { | |
| if (!('fetch' in cT)) return !1 | |
| try { | |
| return new Request('http://www.example.com'), !0 | |
| } catch (I) { | |
| return !1 | |
| } | |
| } | |
| function w11(I) { | |
| return I && /^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(I.toString()) | |
| } | |
| function cL2() { | |
| if (typeof EdgeRuntime === 'string') return !0 | |
| if (!B11()) return !1 | |
| if (w11(cT.fetch)) return !0 | |
| let I = !1, | |
| G = cT.document | |
| if (G && typeof G.createElement === 'function') | |
| try { | |
| let Z = G.createElement('iframe') | |
| if (((Z.hidden = !0), G.head.appendChild(Z), Z.contentWindow && Z.contentWindow.fetch)) | |
| I = w11(Z.contentWindow.fetch) | |
| G.head.removeChild(Z) | |
| } catch (Z) { | |
| bL2.DEBUG_BUILD && | |
| lL2.logger.warn( | |
| 'Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', | |
| Z, | |
| ) | |
| } | |
| return I | |
| } | |
| function pL2() { | |
| return 'ReportingObserver' in cT | |
| } | |
| function iL2() { | |
| if (!B11()) return !1 | |
| try { | |
| return new Request('_', { referrerPolicy: 'origin' }), !0 | |
| } catch (I) { | |
| return !1 | |
| } | |
| } | |
| Kq1.isNativeFetch = w11 | |
| Kq1.supportsDOMError = hL2 | |
| Kq1.supportsDOMException = xL2 | |
| Kq1.supportsErrorEvent = kL2 | |
| Kq1.supportsFetch = B11 | |
| Kq1.supportsNativeFetch = cL2 | |
| Kq1.supportsReferrerPolicy = iL2 | |
| Kq1.supportsReportingObserver = pL2 | |
| }) | |
| var A11 = _((Qq1) => { | |
| Object.defineProperty(Qq1, '__esModule', { value: !0 }) | |
| var G$2 = oZ(), | |
| Z$2 = C11(), | |
| gq1 = q7(), | |
| tE = $V() | |
| function d$2(I) { | |
| tE.addHandler('fetch', I), tE.maybeInstrument('fetch', W$2) | |
| } | |
| function W$2() { | |
| if (!Z$2.supportsNativeFetch()) return | |
| G$2.fill(gq1.GLOBAL_OBJ, 'fetch', function (I) { | |
| return function (...G) { | |
| let { method: Z, url: d } = zq1(G), | |
| W = { args: G, fetchData: { method: Z, url: d }, startTimestamp: Date.now() } | |
| return ( | |
| tE.triggerHandlers('fetch', { ...W }), | |
| I.apply(gq1.GLOBAL_OBJ, G).then( | |
| (w) => { | |
| let B = { ...W, endTimestamp: Date.now(), response: w } | |
| return tE.triggerHandlers('fetch', B), w | |
| }, | |
| (w) => { | |
| let B = { ...W, endTimestamp: Date.now(), error: w } | |
| throw (tE.triggerHandlers('fetch', B), w) | |
| }, | |
| ) | |
| ) | |
| } | |
| }) | |
| } | |
| function V11(I, G) { | |
| return !!I && typeof I === 'object' && !!I[G] | |
| } | |
| function Nq1(I) { | |
| if (typeof I === 'string') return I | |
| if (!I) return '' | |
| if (V11(I, 'url')) return I.url | |
| if (I.toString) return I.toString() | |
| return '' | |
| } | |
| function zq1(I) { | |
| if (I.length === 0) return { method: 'GET', url: '' } | |
| if (I.length === 2) { | |
| let [Z, d] = I | |
| return { url: Nq1(Z), method: V11(d, 'method') ? String(d.method).toUpperCase() : 'GET' } | |
| } | |
| let G = I[0] | |
| return { url: Nq1(G), method: V11(G, 'method') ? String(G.method).toUpperCase() : 'GET' } | |
| } | |
| Qq1.addFetchInstrumentationHandler = d$2 | |
| Qq1.parseFetchArgs = zq1 | |
| }) | |
| var _11 = _((qq1) => { | |
| Object.defineProperty(qq1, '__esModule', { value: !0 }) | |
| var X11 = q7(), | |
| Y11 = $V(), | |
| pT = null | |
| function C$2(I) { | |
| Y11.addHandler('error', I), Y11.maybeInstrument('error', V$2) | |
| } | |
| function V$2() { | |
| ;(pT = X11.GLOBAL_OBJ.onerror), | |
| (X11.GLOBAL_OBJ.onerror = function (I, G, Z, d, W) { | |
| let w = { column: d, error: W, line: Z, msg: I, url: G } | |
| if ((Y11.triggerHandlers('error', w), pT && !pT.__SENTRY_LOADER__)) | |
| return pT.apply(this, arguments) | |
| return !1 | |
| }), | |
| (X11.GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = !0) | |
| } | |
| qq1.addGlobalErrorInstrumentationHandler = C$2 | |
| }) | |
| var F11 = _((Uq1) => { | |
| Object.defineProperty(Uq1, '__esModule', { value: !0 }) | |
| var D11 = q7(), | |
| H11 = $V(), | |
| iT = null | |
| function X$2(I) { | |
| H11.addHandler('unhandledrejection', I), H11.maybeInstrument('unhandledrejection', Y$2) | |
| } | |
| function Y$2() { | |
| ;(iT = D11.GLOBAL_OBJ.onunhandledrejection), | |
| (D11.GLOBAL_OBJ.onunhandledrejection = function (I) { | |
| let G = I | |
| if ((H11.triggerHandlers('unhandledrejection', G), iT && !iT.__SENTRY_LOADER__)) | |
| return iT.apply(this, arguments) | |
| return !0 | |
| }), | |
| (D11.GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = !0) | |
| } | |
| Uq1.addGlobalUnhandledRejectionInstrumentationHandler = X$2 | |
| }) | |
| var J11 = _((fq1) => { | |
| Object.defineProperty(fq1, '__esModule', { value: !0 }) | |
| var D$2 = q7(), | |
| nT = D$2.getGlobalObject() | |
| function H$2() { | |
| let I = nT.chrome, | |
| G = I && I.app && I.app.runtime, | |
| Z = 'history' in nT && !!nT.history.pushState && !!nT.history.replaceState | |
| return !G && Z | |
| } | |
| fq1.supportsHistory = H$2 | |
| }) | |
| var K11 = _((Eq1) => { | |
| Object.defineProperty(Eq1, '__esModule', { value: !0 }) | |
| var Rq1 = oZ() | |
| YB() | |
| NW() | |
| var J$2 = q7(), | |
| K$2 = J11(), | |
| rT = $V(), | |
| Iv = J$2.GLOBAL_OBJ, | |
| aT | |
| function g$2(I) { | |
| rT.addHandler('history', I), rT.maybeInstrument('history', N$2) | |
| } | |
| function N$2() { | |
| if (!K$2.supportsHistory()) return | |
| let I = Iv.onpopstate | |
| Iv.onpopstate = function (...Z) { | |
| let d = Iv.location.href, | |
| W = aT | |
| aT = d | |
| let w = { from: W, to: d } | |
| if ((rT.triggerHandlers('history', w), I)) | |
| try { | |
| return I.apply(this, Z) | |
| } catch (B) {} | |
| } | |
| function G(Z) { | |
| return function (...d) { | |
| let W = d.length > 2 ? d[2] : void 0 | |
| if (W) { | |
| let w = aT, | |
| B = String(W) | |
| aT = B | |
| let C = { from: w, to: B } | |
| rT.triggerHandlers('history', C) | |
| } | |
| return Z.apply(this, d) | |
| } | |
| } | |
| Rq1.fill(Iv.history, 'pushState', G), Rq1.fill(Iv.history, 'replaceState', G) | |
| } | |
| Eq1.addHistoryInstrumentationHandler = g$2 | |
| }) | |
| var g11 = _((Mq1) => { | |
| Object.defineProperty(Mq1, '__esModule', { value: !0 }) | |
| var oT = sZ(), | |
| sT = oZ(), | |
| Q$2 = q7(), | |
| eT = $V(), | |
| q$2 = Q$2.GLOBAL_OBJ, | |
| Gv = '__sentry_xhr_v3__' | |
| function U$2(I) { | |
| eT.addHandler('xhr', I), eT.maybeInstrument('xhr', vq1) | |
| } | |
| function vq1() { | |
| if (!q$2.XMLHttpRequest) return | |
| let I = XMLHttpRequest.prototype | |
| sT.fill(I, 'open', function (G) { | |
| return function (...Z) { | |
| let d = Date.now(), | |
| W = oT.isString(Z[0]) ? Z[0].toUpperCase() : void 0, | |
| w = f$2(Z[1]) | |
| if (!W || !w) return G.apply(this, Z) | |
| if ( | |
| ((this[Gv] = { method: W, url: w, request_headers: {} }), | |
| W === 'POST' && w.match(/sentry_key/)) | |
| ) | |
| this.__sentry_own_request__ = !0 | |
| let B = () => { | |
| let C = this[Gv] | |
| if (!C) return | |
| if (this.readyState === 4) { | |
| try { | |
| C.status_code = this.status | |
| } catch (A) {} | |
| let V = { args: [W, w], endTimestamp: Date.now(), startTimestamp: d, xhr: this } | |
| eT.triggerHandlers('xhr', V) | |
| } | |
| } | |
| if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') | |
| sT.fill(this, 'onreadystatechange', function (C) { | |
| return function (...V) { | |
| return B(), C.apply(this, V) | |
| } | |
| }) | |
| else this.addEventListener('readystatechange', B) | |
| return ( | |
| sT.fill(this, 'setRequestHeader', function (C) { | |
| return function (...V) { | |
| let [A, X] = V, | |
| Y = this[Gv] | |
| if (Y && oT.isString(A) && oT.isString(X)) Y.request_headers[A.toLowerCase()] = X | |
| return C.apply(this, V) | |
| } | |
| }), | |
| G.apply(this, Z) | |
| ) | |
| } | |
| }), | |
| sT.fill(I, 'send', function (G) { | |
| return function (...Z) { | |
| let d = this[Gv] | |
| if (!d) return G.apply(this, Z) | |
| if (Z[0] !== void 0) d.body = Z[0] | |
| let W = { args: [d.method, d.url], startTimestamp: Date.now(), xhr: this } | |
| return eT.triggerHandlers('xhr', W), G.apply(this, Z) | |
| } | |
| }) | |
| } | |
| function f$2(I) { | |
| if (oT.isString(I)) return I | |
| try { | |
| return I.toString() | |
| } catch (G) {} | |
| return | |
| } | |
| Mq1.SENTRY_XHR_DATA_KEY = Gv | |
| Mq1.addXhrInstrumentationHandler = U$2 | |
| Mq1.instrumentXHR = vq1 | |
| }) | |
| var Tq1 = _((uq1) => { | |
| Object.defineProperty(uq1, '__esModule', { value: !0 }) | |
| var M$2 = YB(), | |
| S$2 = NW(), | |
| Sq1 = tt(), | |
| Lq1 = W11(), | |
| $q1 = A11(), | |
| yq1 = _11(), | |
| Pq1 = F11(), | |
| Oq1 = K11(), | |
| N11 = g11() | |
| function L$2(I, G) { | |
| switch (I) { | |
| case 'console': | |
| return Sq1.addConsoleInstrumentationHandler(G) | |
| case 'dom': | |
| return Lq1.addClickKeypressInstrumentationHandler(G) | |
| case 'xhr': | |
| return N11.addXhrInstrumentationHandler(G) | |
| case 'fetch': | |
| return $q1.addFetchInstrumentationHandler(G) | |
| case 'history': | |
| return Oq1.addHistoryInstrumentationHandler(G) | |
| case 'error': | |
| return yq1.addGlobalErrorInstrumentationHandler(G) | |
| case 'unhandledrejection': | |
| return Pq1.addGlobalUnhandledRejectionInstrumentationHandler(G) | |
| default: | |
| M$2.DEBUG_BUILD && S$2.logger.warn('unknown instrumentation type:', I) | |
| } | |
| } | |
| uq1.addConsoleInstrumentationHandler = Sq1.addConsoleInstrumentationHandler | |
| uq1.addClickKeypressInstrumentationHandler = Lq1.addClickKeypressInstrumentationHandler | |
| uq1.addFetchInstrumentationHandler = $q1.addFetchInstrumentationHandler | |
| uq1.addGlobalErrorInstrumentationHandler = yq1.addGlobalErrorInstrumentationHandler | |
| uq1.addGlobalUnhandledRejectionInstrumentationHandler = | |
| Pq1.addGlobalUnhandledRejectionInstrumentationHandler | |
| uq1.addHistoryInstrumentationHandler = Oq1.addHistoryInstrumentationHandler | |
| uq1.SENTRY_XHR_DATA_KEY = N11.SENTRY_XHR_DATA_KEY | |
| uq1.addXhrInstrumentationHandler = N11.addXhrInstrumentationHandler | |
| uq1.addInstrumentationHandler = L$2 | |
| }) | |
| var z11 = _((mq1) => { | |
| Object.defineProperty(mq1, '__esModule', { value: !0 }) | |
| function j$2() { | |
| return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__ | |
| } | |
| function k$2() { | |
| return 'npm' | |
| } | |
| mq1.getSDKSource = k$2 | |
| mq1.isBrowserBundle = j$2 | |
| }) | |
| var Q11 = _((bq1, Im) => { | |
| Object.defineProperty(bq1, '__esModule', { value: !0 }) | |
| var c$2 = z11() | |
| function p$2() { | |
| return ( | |
| !c$2.isBrowserBundle() && | |
| Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === | |
| '[object process]' | |
| ) | |
| } | |
| function tT(I, G) { | |
| return I.require(G) | |
| } | |
| function i$2(I) { | |
| let G | |
| try { | |
| G = tT(Im, I) | |
| } catch (Z) {} | |
| try { | |
| let { cwd: Z } = tT(Im, 'process') | |
| G = tT(Im, `${Z()}/node_modules/${I}`) | |
| } catch (Z) {} | |
| return G | |
| } | |
| bq1.dynamicRequire = tT | |
| bq1.isNodeEnv = p$2 | |
| bq1.loadModule = i$2 | |
| }) | |
| var kq1 = _((jq1) => { | |
| Object.defineProperty(jq1, '__esModule', { value: !0 }) | |
| var s$2 = Q11(), | |
| lq1 = q7() | |
| function o$2() { | |
| return typeof window !== 'undefined' && (!s$2.isNodeEnv() || e$2()) | |
| } | |
| function e$2() { | |
| return lq1.GLOBAL_OBJ.process !== void 0 && lq1.GLOBAL_OBJ.process.type === 'renderer' | |
| } | |
| jq1.isBrowser = o$2 | |
| }) | |
| var q11 = _((hq1) => { | |
| Object.defineProperty(hq1, '__esModule', { value: !0 }) | |
| function Iy2() { | |
| let I = typeof WeakSet === 'function', | |
| G = I ? new WeakSet() : [] | |
| function Z(W) { | |
| if (I) { | |
| if (G.has(W)) return !0 | |
| return G.add(W), !1 | |
| } | |
| for (let w = 0; w < G.length; w++) if (G[w] === W) return !0 | |
| return G.push(W), !1 | |
| } | |
| function d(W) { | |
| if (I) G.delete(W) | |
| else | |
| for (let w = 0; w < G.length; w++) | |
| if (G[w] === W) { | |
| G.splice(w, 1) | |
| break | |
| } | |
| } | |
| return [Z, d] | |
| } | |
| hq1.memoBuilder = Iy2 | |
| }) | |
| var Zv = _((pq1) => { | |
| Object.defineProperty(pq1, '__esModule', { value: !0 }) | |
| var U11 = sZ(), | |
| Zy2 = q11(), | |
| dy2 = oZ(), | |
| Wy2 = kT() | |
| function xq1(I, G = 100, Z = 1 / 0) { | |
| try { | |
| return Gm('', I, G, Z) | |
| } catch (d) { | |
| return { ERROR: `**non-serializable** (${d})` } | |
| } | |
| } | |
| function cq1(I, G = 3, Z = 102400) { | |
| let d = xq1(I, G) | |
| if (Vy2(d) > Z) return cq1(I, G - 1, Z) | |
| return d | |
| } | |
| function Gm(I, G, Z = 1 / 0, d = 1 / 0, W = Zy2.memoBuilder()) { | |
| let [w, B] = W | |
| if (G == null || (['number', 'boolean', 'string'].includes(typeof G) && !U11.isNaN(G))) return G | |
| let C = wy2(I, G) | |
| if (!C.startsWith('[object ')) return C | |
| if (G.__sentry_skip_normalization__) return G | |
| let V = | |
| typeof G.__sentry_override_normalization_depth__ === 'number' | |
| ? G.__sentry_override_normalization_depth__ | |
| : Z | |
| if (V === 0) return C.replace('object ', '') | |
| if (w(G)) return '[Circular ~]' | |
| let A = G | |
| if (A && typeof A.toJSON === 'function') | |
| try { | |
| let J = A.toJSON() | |
| return Gm('', J, V - 1, d, W) | |
| } catch (J) {} | |
| let X = Array.isArray(G) ? [] : {}, | |
| Y = 0, | |
| H = dy2.convertToPlainObject(G) | |
| for (let J in H) { | |
| if (!Object.prototype.hasOwnProperty.call(H, J)) continue | |
| if (Y >= d) { | |
| X[J] = '[MaxProperties ~]' | |
| break | |
| } | |
| let K = H[J] | |
| ;(X[J] = Gm(J, K, V - 1, d, W)), Y++ | |
| } | |
| return B(G), X | |
| } | |
| function wy2(I, G) { | |
| try { | |
| if (I === 'domain' && G && typeof G === 'object' && G._events) return '[Domain]' | |
| if (I === 'domainEmitter') return '[DomainEmitter]' | |
| if (typeof global !== 'undefined' && G === global) return '[Global]' | |
| if (typeof window !== 'undefined' && G === window) return '[Window]' | |
| if (typeof document !== 'undefined' && G === document) return '[Document]' | |
| if (U11.isVueViewModel(G)) return '[VueViewModel]' | |
| if (U11.isSyntheticEvent(G)) return '[SyntheticEvent]' | |
| if (typeof G === 'number' && G !== G) return '[NaN]' | |
| if (typeof G === 'function') return `[Function: ${Wy2.getFunctionName(G)}]` | |
| if (typeof G === 'symbol') return `[${String(G)}]` | |
| if (typeof G === 'bigint') return `[BigInt: ${String(G)}]` | |
| let Z = By2(G) | |
| if (/^HTML(\w*)Element$/.test(Z)) return `[HTMLElement: ${Z}]` | |
| return `[object ${Z}]` | |
| } catch (Z) { | |
| return `**non-serializable** (${Z})` | |
| } | |
| } | |
| function By2(I) { | |
| let G = Object.getPrototypeOf(I) | |
| return G ? G.constructor.name : 'null prototype' | |
| } | |
| function Cy2(I) { | |
| return ~-encodeURI(I).split(/%..|./).length | |
| } | |
| function Vy2(I) { | |
| return Cy2(JSON.stringify(I)) | |
| } | |
| function Ay2(I, G) { | |
| let Z = G.replace(/\\/g, '/').replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'), | |
| d = I | |
| try { | |
| d = decodeURI(I) | |
| } catch (W) {} | |
| return d | |
| .replace(/\\/g, '/') | |
| .replace(/webpack:\/?/g, '') | |
| .replace(new RegExp(`(file://)?/*${Z}/*`, 'ig'), 'app:///') | |
| } | |
| pq1.normalize = xq1 | |
| pq1.normalizeToSize = cq1 | |
| pq1.normalizeUrlToBase = Ay2 | |
| pq1.walk = Gm | |
| }) | |
| var eq1 = _((oq1) => { | |
| Object.defineProperty(oq1, '__esModule', { value: !0 }) | |
| function nq1(I, G) { | |
| let Z = 0 | |
| for (let d = I.length - 1; d >= 0; d--) { | |
| let W = I[d] | |
| if (W === '.') I.splice(d, 1) | |
| else if (W === '..') I.splice(d, 1), Z++ | |
| else if (Z) I.splice(d, 1), Z-- | |
| } | |
| if (G) for (; Z--; Z) I.unshift('..') | |
| return I | |
| } | |
| var Hy2 = /^(\S+:\\|\/?)([\s\S]*?)((?:\.{1,2}|[^/\\]+?|)(\.[^./\\]*|))(?:[/\\]*)$/ | |
| function aq1(I) { | |
| let G = I.length > 1024 ? `<truncated>${I.slice(-1024)}` : I, | |
| Z = Hy2.exec(G) | |
| return Z ? Z.slice(1) : [] | |
| } | |
| function f11(...I) { | |
| let G = '', | |
| Z = !1 | |
| for (let d = I.length - 1; d >= -1 && !Z; d--) { | |
| let W = d >= 0 ? I[d] : '/' | |
| if (!W) continue | |
| ;(G = `${W}/${G}`), (Z = W.charAt(0) === '/') | |
| } | |
| return ( | |
| (G = nq1( | |
| G.split('/').filter((d) => !!d), | |
| !Z, | |
| ).join('/')), | |
| (Z ? '/' : '') + G || '.' | |
| ) | |
| } | |
| function iq1(I) { | |
| let G = 0 | |
| for (; G < I.length; G++) if (I[G] !== '') break | |
| let Z = I.length - 1 | |
| for (; Z >= 0; Z--) if (I[Z] !== '') break | |
| if (G > Z) return [] | |
| return I.slice(G, Z - G + 1) | |
| } | |
| function Fy2(I, G) { | |
| ;(I = f11(I).slice(1)), (G = f11(G).slice(1)) | |
| let Z = iq1(I.split('/')), | |
| d = iq1(G.split('/')), | |
| W = Math.min(Z.length, d.length), | |
| w = W | |
| for (let C = 0; C < W; C++) | |
| if (Z[C] !== d[C]) { | |
| w = C | |
| break | |
| } | |
| let B = [] | |
| for (let C = w; C < Z.length; C++) B.push('..') | |
| return (B = B.concat(d.slice(w))), B.join('/') | |
| } | |
| function rq1(I) { | |
| let G = sq1(I), | |
| Z = I.slice(-1) === '/', | |
| d = nq1( | |
| I.split('/').filter((W) => !!W), | |
| !G, | |
| ).join('/') | |
| if (!d && !G) d = '.' | |
| if (d && Z) d += '/' | |
| return (G ? '/' : '') + d | |
| } | |
| function sq1(I) { | |
| return I.charAt(0) === '/' | |
| } | |
| function Jy2(...I) { | |
| return rq1(I.join('/')) | |
| } | |
| function Ky2(I) { | |
| let G = aq1(I), | |
| Z = G[0], | |
| d = G[1] | |
| if (!Z && !d) return '.' | |
| if (d) d = d.slice(0, d.length - 1) | |
| return Z + d | |
| } | |
| function gy2(I, G) { | |
| let Z = aq1(I)[2] | |
| if (G && Z.slice(G.length * -1) === G) Z = Z.slice(0, Z.length - G.length) | |
| return Z | |
| } | |
| oq1.basename = gy2 | |
| oq1.dirname = Ky2 | |
| oq1.isAbsolute = sq1 | |
| oq1.join = Jy2 | |
| oq1.normalizePath = rq1 | |
| oq1.relative = Fy2 | |
| oq1.resolve = f11 | |
| }) | |
| var R11 = _((tq1) => { | |
| Object.defineProperty(tq1, '__esModule', { value: !0 }) | |
| var Ey2 = sZ(), | |
| yV | |
| ;(function (I) { | |
| I[(I.PENDING = 0)] = 'PENDING' | |
| let Z = 1 | |
| I[(I.RESOLVED = Z)] = 'RESOLVED' | |
| let d = 2 | |
| I[(I.REJECTED = d)] = 'REJECTED' | |
| })(yV || (yV = {})) | |
| function vy2(I) { | |
| return new _B((G) => { | |
| G(I) | |
| }) | |
| } | |
| function My2(I) { | |
| return new _B((G, Z) => { | |
| Z(I) | |
| }) | |
| } | |
| class _B { | |
| constructor(I) { | |
| _B.prototype.__init.call(this), | |
| _B.prototype.__init2.call(this), | |
| _B.prototype.__init3.call(this), | |
| _B.prototype.__init4.call(this), | |
| (this._state = yV.PENDING), | |
| (this._handlers = []) | |
| try { | |
| I(this._resolve, this._reject) | |
| } catch (G) { | |
| this._reject(G) | |
| } | |
| } | |
| then(I, G) { | |
| return new _B((Z, d) => { | |
| this._handlers.push([ | |
| !1, | |
| (W) => { | |
| if (!I) Z(W) | |
| else | |
| try { | |
| Z(I(W)) | |
| } catch (w) { | |
| d(w) | |
| } | |
| }, | |
| (W) => { | |
| if (!G) d(W) | |
| else | |
| try { | |
| Z(G(W)) | |
| } catch (w) { | |
| d(w) | |
| } | |
| }, | |
| ]), | |
| this._executeHandlers() | |
| }) | |
| } | |
| catch(I) { | |
| return this.then((G) => G, I) | |
| } | |
| finally(I) { | |
| return new _B((G, Z) => { | |
| let d, W | |
| return this.then( | |
| (w) => { | |
| if (((W = !1), (d = w), I)) I() | |
| }, | |
| (w) => { | |
| if (((W = !0), (d = w), I)) I() | |
| }, | |
| ).then(() => { | |
| if (W) { | |
| Z(d) | |
| return | |
| } | |
| G(d) | |
| }) | |
| }) | |
| } | |
| __init() { | |
| this._resolve = (I) => { | |
| this._setResult(yV.RESOLVED, I) | |
| } | |
| } | |
| __init2() { | |
| this._reject = (I) => { | |
| this._setResult(yV.REJECTED, I) | |
| } | |
| } | |
| __init3() { | |
| this._setResult = (I, G) => { | |
| if (this._state !== yV.PENDING) return | |
| if (Ey2.isThenable(G)) { | |
| G.then(this._resolve, this._reject) | |
| return | |
| } | |
| ;(this._state = I), (this._value = G), this._executeHandlers() | |
| } | |
| } | |
| __init4() { | |
| this._executeHandlers = () => { | |
| if (this._state === yV.PENDING) return | |
| let I = this._handlers.slice() | |
| ;(this._handlers = []), | |
| I.forEach((G) => { | |
| if (G[0]) return | |
| if (this._state === yV.RESOLVED) G[1](this._value) | |
| if (this._state === yV.REJECTED) G[2](this._value) | |
| G[0] = !0 | |
| }) | |
| } | |
| } | |
| } | |
| tq1.SyncPromise = _B | |
| tq1.rejectedSyncPromise = My2 | |
| tq1.resolvedSyncPromise = vy2 | |
| }) | |
| var GU1 = _((IU1) => { | |
| Object.defineProperty(IU1, '__esModule', { value: !0 }) | |
| var yy2 = at(), | |
| E11 = R11() | |
| function Py2(I) { | |
| let G = [] | |
| function Z() { | |
| return I === void 0 || G.length < I | |
| } | |
| function d(B) { | |
| return G.splice(G.indexOf(B), 1)[0] | |
| } | |
| function W(B) { | |
| if (!Z()) | |
| return E11.rejectedSyncPromise( | |
| new yy2.SentryError('Not adding Promise because buffer limit was reached.'), | |
| ) | |
| let C = B() | |
| if (G.indexOf(C) === -1) G.push(C) | |
| return C.then(() => d(C)).then(null, () => d(C).then(null, () => {})), C | |
| } | |
| function w(B) { | |
| return new E11.SyncPromise((C, V) => { | |
| let A = G.length | |
| if (!A) return C(!0) | |
| let X = setTimeout(() => { | |
| if (B && B > 0) C(!1) | |
| }, B) | |
| G.forEach((Y) => { | |
| E11.resolvedSyncPromise(Y).then(() => { | |
| if (!--A) clearTimeout(X), C(!0) | |
| }, V) | |
| }) | |
| }) | |
| } | |
| return { $: G, add: W, drain: w } | |
| } | |
| IU1.makePromiseBuffer = Py2 | |
| }) | |
| var dU1 = _((ZU1) => { | |
| Object.defineProperty(ZU1, '__esModule', { value: !0 }) | |
| function uy2(I) { | |
| let G = {}, | |
| Z = 0 | |
| while (Z < I.length) { | |
| let d = I.indexOf('=', Z) | |
| if (d === -1) break | |
| let W = I.indexOf(';', Z) | |
| if (W === -1) W = I.length | |
| else if (W < d) { | |
| Z = I.lastIndexOf(';', d - 1) + 1 | |
| continue | |
| } | |
| let w = I.slice(Z, d).trim() | |
| if (G[w] === void 0) { | |
| let B = I.slice(d + 1, W).trim() | |
| if (B.charCodeAt(0) === 34) B = B.slice(1, -1) | |
| try { | |
| G[w] = B.indexOf('%') !== -1 ? decodeURIComponent(B) : B | |
| } catch (C) { | |
| G[w] = B | |
| } | |
| } | |
| Z = W + 1 | |
| } | |
| return G | |
| } | |
| ZU1.parseCookie = uy2 | |
| }) | |
| var v11 = _((WU1) => { | |
| Object.defineProperty(WU1, '__esModule', { value: !0 }) | |
| function my2(I) { | |
| if (!I) return {} | |
| let G = I.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/) | |
| if (!G) return {} | |
| let Z = G[6] || '', | |
| d = G[8] || '' | |
| return { host: G[4], path: G[5], protocol: G[2], search: Z, hash: d, relative: G[5] + Z + d } | |
| } | |
| function by2(I) { | |
| return I.split(/[\?#]/, 1)[0] | |
| } | |
| function ly2(I) { | |
| return I.split(/\\?\//).filter((G) => G.length > 0 && G !== ',').length | |
| } | |
| function jy2(I) { | |
| let { protocol: G, host: Z, path: d } = I, | |
| W = | |
| (Z && | |
| Z.replace(/^.*@/, '[filtered]:[filtered]@') | |
| .replace(/(:80)$/, '') | |
| .replace(/(:443)$/, '')) || | |
| '' | |
| return `${G ? `${G}://` : ''}${W}${d}` | |
| } | |
| WU1.getNumberOfUrlSegments = ly2 | |
| WU1.getSanitizedUrlString = jy2 | |
| WU1.parseUrl = my2 | |
| WU1.stripUrlQueryAndFragment = by2 | |
| }) | |
| var XU1 = _((AU1) => { | |
| Object.defineProperty(AU1, '__esModule', { value: !0 }) | |
| var py2 = dU1(), | |
| iy2 = YB(), | |
| wU1 = sZ(), | |
| ny2 = NW(), | |
| ay2 = Zv(), | |
| ry2 = v11(), | |
| sy2 = { ip: !1, request: !0, transaction: !0, user: !0 }, | |
| oy2 = ['cookies', 'data', 'headers', 'method', 'query_string', 'url'], | |
| BU1 = ['id', 'username', 'email'] | |
| function ey2(I, G, Z) { | |
| if (!I) return | |
| if (!I.metadata.source || I.metadata.source === 'url') { | |
| let [d, W] = Zm(G, { path: !0, method: !0 }) | |
| I.updateName(d), I.setMetadata({ source: W }) | |
| } | |
| if ((I.setAttribute('url', G.originalUrl || G.url), G.baseUrl)) | |
| I.setAttribute('baseUrl', G.baseUrl) | |
| I.setData('query', CU1(G, Z)) | |
| } | |
| function Zm(I, G = {}) { | |
| let Z = I.method && I.method.toUpperCase(), | |
| d = '', | |
| W = 'url' | |
| if (G.customRoute || I.route) | |
| (d = G.customRoute || `${I.baseUrl || ''}${I.route && I.route.path}`), (W = 'route') | |
| else if (I.originalUrl || I.url) d = ry2.stripUrlQueryAndFragment(I.originalUrl || I.url || '') | |
| let w = '' | |
| if (G.method && Z) w += Z | |
| if (G.method && G.path) w += ' ' | |
| if (G.path && d) w += d | |
| return [w, W] | |
| } | |
| function ty2(I, G) { | |
| switch (G) { | |
| case 'path': | |
| return Zm(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 Z = I._reconstructedRoute ? I._reconstructedRoute : void 0 | |
| return Zm(I, { path: !0, method: !0, customRoute: Z })[0] | |
| } | |
| } | |
| } | |
| function IP2(I, G) { | |
| let Z = {} | |
| return ( | |
| (Array.isArray(G) ? G : BU1).forEach((W) => { | |
| if (I && W in I) Z[W] = I[W] | |
| }), | |
| Z | |
| ) | |
| } | |
| function M11(I, G) { | |
| let { include: Z = oy2, deps: d } = G || {}, | |
| W = {}, | |
| w = I.headers || {}, | |
| B = I.method, | |
| C = w.host || I.hostname || I.host || '<no host>', | |
| V = I.protocol === 'https' || (I.socket && I.socket.encrypted) ? 'https' : 'http', | |
| A = I.originalUrl || I.url || '', | |
| X = A.startsWith(V) ? A : `${V}://${C}${A}` | |
| return ( | |
| Z.forEach((Y) => { | |
| switch (Y) { | |
| case 'headers': { | |
| if (((W.headers = w), !Z.includes('cookies'))) delete W.headers.cookie | |
| break | |
| } | |
| case 'method': { | |
| W.method = B | |
| break | |
| } | |
| case 'url': { | |
| W.url = X | |
| break | |
| } | |
| case 'cookies': { | |
| W.cookies = I.cookies || (w.cookie && py2.parseCookie(w.cookie)) || {} | |
| break | |
| } | |
| case 'query_string': { | |
| W.query_string = CU1(I, d) | |
| break | |
| } | |
| case 'data': { | |
| if (B === 'GET' || B === 'HEAD') break | |
| if (I.body !== void 0) | |
| W.data = wU1.isString(I.body) ? I.body : JSON.stringify(ay2.normalize(I.body)) | |
| break | |
| } | |
| default: | |
| if ({}.hasOwnProperty.call(I, Y)) W[Y] = I[Y] | |
| } | |
| }), | |
| W | |
| ) | |
| } | |
| function GP2(I, G, Z) { | |
| let d = { ...sy2, ...(Z && Z.include) } | |
| if (d.request) { | |
| let W = Array.isArray(d.request) | |
| ? M11(G, { include: d.request, deps: Z && Z.deps }) | |
| : M11(G, { deps: Z && Z.deps }) | |
| I.request = { ...I.request, ...W } | |
| } | |
| if (d.user) { | |
| let W = G.user && wU1.isPlainObject(G.user) ? IP2(G.user, d.user) : {} | |
| if (Object.keys(W).length) I.user = { ...I.user, ...W } | |
| } | |
| if (d.ip) { | |
| let W = G.ip || (G.socket && G.socket.remoteAddress) | |
| if (W) I.user = { ...I.user, ip_address: W } | |
| } | |
| if (d.transaction && !I.transaction) I.transaction = ty2(G, d.transaction) | |
| return I | |
| } | |
| function CU1(I, G) { | |
| let Z = I.originalUrl || I.url || '' | |
| if (!Z) return | |
| if (Z.startsWith('/')) Z = `http://dogs.are.great${Z}` | |
| try { | |
| return ( | |
| I.query || | |
| (typeof URL !== 'undefined' && new URL(Z).search.slice(1)) || | |
| (G && G.url && G.url.parse(Z).query) || | |
| void 0 | |
| ) | |
| } catch (d) { | |
| return | |
| } | |
| } | |
| function VU1(I) { | |
| let G = {} | |
| try { | |
| I.forEach((Z, d) => { | |
| if (typeof Z === 'string') G[d] = Z | |
| }) | |
| } catch (Z) { | |
| iy2.DEBUG_BUILD && | |
| ny2.logger.warn( | |
| 'Sentry failed extracting headers from a request object. If you see this, please file an issue.', | |
| ) | |
| } | |
| return G | |
| } | |
| function ZP2(I) { | |
| let G = VU1(I.headers) | |
| return { method: I.method, url: I.url, headers: G } | |
| } | |
| AU1.DEFAULT_USER_INCLUDES = BU1 | |
| AU1.addRequestDataToEvent = GP2 | |
| AU1.addRequestDataToTransaction = ey2 | |
| AU1.extractPathForTransaction = Zm | |
| AU1.extractRequestData = M11 | |
| AU1.winterCGHeadersToDict = VU1 | |
| AU1.winterCGRequestToRequestData = ZP2 | |
| }) | |
| var HU1 = _((DU1) => { | |
| Object.defineProperty(DU1, '__esModule', { value: !0 }) | |
| var YU1 = ['fatal', 'error', 'warning', 'log', 'info', 'debug'] | |
| function XP2(I) { | |
| return _U1(I) | |
| } | |
| function _U1(I) { | |
| return I === 'warn' ? 'warning' : YU1.includes(I) ? I : 'log' | |
| } | |
| DU1.severityFromString = XP2 | |
| DU1.severityLevelFromString = _U1 | |
| DU1.validSeverityLevels = YU1 | |
| }) | |
| var S11 = _((NU1) => { | |
| Object.defineProperty(NU1, '__esModule', { value: !0 }) | |
| var FU1 = q7(), | |
| JU1 = 1000 | |
| function KU1() { | |
| return Date.now() / JU1 | |
| } | |
| function HP2() { | |
| let { performance: I } = FU1.GLOBAL_OBJ | |
| if (!I || !I.now) return KU1 | |
| let G = Date.now() - I.now(), | |
| Z = I.timeOrigin == null ? G : I.timeOrigin | |
| return () => { | |
| return (Z + I.now()) / JU1 | |
| } | |
| } | |
| var gU1 = HP2(), | |
| FP2 = gU1 | |
| NU1._browserPerformanceTimeOriginMode = void 0 | |
| var JP2 = (() => { | |
| let { performance: I } = FU1.GLOBAL_OBJ | |
| if (!I || !I.now) { | |
| NU1._browserPerformanceTimeOriginMode = 'none' | |
| return | |
| } | |
| let G = 3600000, | |
| Z = I.now(), | |
| d = Date.now(), | |
| W = I.timeOrigin ? Math.abs(I.timeOrigin + Z - d) : G, | |
| w = W < G, | |
| B = I.timing && I.timing.navigationStart, | |
| V = typeof B === 'number' ? Math.abs(B + Z - d) : G, | |
| A = V < G | |
| if (w || A) | |
| if (W <= V) return (NU1._browserPerformanceTimeOriginMode = 'timeOrigin'), I.timeOrigin | |
| else return (NU1._browserPerformanceTimeOriginMode = 'navigationStart'), B | |
| return (NU1._browserPerformanceTimeOriginMode = 'dateNow'), d | |
| })() | |
| NU1.browserPerformanceTimeOrigin = JP2 | |
| NU1.dateTimestampInSeconds = KU1 | |
| NU1.timestampInSeconds = gU1 | |
| NU1.timestampWithMs = FP2 | |
| }) | |
| var $11 = _((UU1) => { | |
| Object.defineProperty(UU1, '__esModule', { value: !0 }) | |
| var QP2 = YB(), | |
| qP2 = sZ(), | |
| UP2 = NW(), | |
| fP2 = 'baggage', | |
| L11 = 'sentry-', | |
| QU1 = /^sentry-/, | |
| qU1 = 8192 | |
| function RP2(I) { | |
| if (!qP2.isString(I) && !Array.isArray(I)) return | |
| let G = {} | |
| if (Array.isArray(I)) | |
| G = I.reduce((d, W) => { | |
| let w = zU1(W) | |
| for (let B of Object.keys(w)) d[B] = w[B] | |
| return d | |
| }, {}) | |
| else { | |
| if (!I) return | |
| G = zU1(I) | |
| } | |
| let Z = Object.entries(G).reduce((d, [W, w]) => { | |
| if (W.match(QU1)) { | |
| let B = W.slice(L11.length) | |
| d[B] = w | |
| } | |
| return d | |
| }, {}) | |
| if (Object.keys(Z).length > 0) return Z | |
| else return | |
| } | |
| function EP2(I) { | |
| if (!I) return | |
| let G = Object.entries(I).reduce((Z, [d, W]) => { | |
| if (W) Z[`${L11}${d}`] = W | |
| return Z | |
| }, {}) | |
| return vP2(G) | |
| } | |
| function zU1(I) { | |
| return I.split(',') | |
| .map((G) => G.split('=').map((Z) => decodeURIComponent(Z.trim()))) | |
| .reduce((G, [Z, d]) => { | |
| return (G[Z] = d), G | |
| }, {}) | |
| } | |
| function vP2(I) { | |
| if (Object.keys(I).length === 0) return | |
| return Object.entries(I).reduce((G, [Z, d], W) => { | |
| let w = `${encodeURIComponent(Z)}=${encodeURIComponent(d)}`, | |
| B = W === 0 ? w : `${G},${w}` | |
| if (B.length > qU1) | |
| return ( | |
| QP2.DEBUG_BUILD && | |
| UP2.logger.warn( | |
| `Not adding key: ${Z} with val: ${d} to baggage header due to exceeding baggage size limits.`, | |
| ), | |
| G | |
| ) | |
| else return B | |
| }, '') | |
| } | |
| UU1.BAGGAGE_HEADER_NAME = fP2 | |
| UU1.MAX_BAGGAGE_STRING_LENGTH = qU1 | |
| UU1.SENTRY_BAGGAGE_KEY_PREFIX = L11 | |
| UU1.SENTRY_BAGGAGE_KEY_PREFIX_REGEX = QU1 | |
| UU1.baggageHeaderToDynamicSamplingContext = RP2 | |
| UU1.dynamicSamplingContextToSentryBaggageHeader = EP2 | |
| }) | |
| var vU1 = _((EU1) => { | |
| Object.defineProperty(EU1, '__esModule', { value: !0 }) | |
| var fU1 = $11(), | |
| eZ = eE(), | |
| RU1 = new RegExp('^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$') | |
| function y11(I) { | |
| if (!I) return | |
| let G = I.match(RU1) | |
| if (!G) return | |
| let Z | |
| if (G[3] === '1') Z = !0 | |
| else if (G[3] === '0') Z = !1 | |
| return { traceId: G[1], parentSampled: Z, parentSpanId: G[2] } | |
| } | |
| function OP2(I, G) { | |
| let Z = y11(I), | |
| d = fU1.baggageHeaderToDynamicSamplingContext(G), | |
| { traceId: W, parentSpanId: w, parentSampled: B } = Z || {} | |
| if (!Z) | |
| return { | |
| traceparentData: Z, | |
| dynamicSamplingContext: void 0, | |
| propagationContext: { traceId: W || eZ.uuid4(), spanId: eZ.uuid4().substring(16) }, | |
| } | |
| else | |
| return { | |
| traceparentData: Z, | |
| dynamicSamplingContext: d || {}, | |
| propagationContext: { | |
| traceId: W || eZ.uuid4(), | |
| parentSpanId: w || eZ.uuid4().substring(16), | |
| spanId: eZ.uuid4().substring(16), | |
| sampled: B, | |
| dsc: d || {}, | |
| }, | |
| } | |
| } | |
| function uP2(I, G) { | |
| let Z = y11(I), | |
| d = fU1.baggageHeaderToDynamicSamplingContext(G), | |
| { traceId: W, parentSpanId: w, parentSampled: B } = Z || {} | |
| if (!Z) return { traceId: W || eZ.uuid4(), spanId: eZ.uuid4().substring(16) } | |
| else | |
| return { | |
| traceId: W || eZ.uuid4(), | |
| parentSpanId: w || eZ.uuid4().substring(16), | |
| spanId: eZ.uuid4().substring(16), | |
| sampled: B, | |
| dsc: d || {}, | |
| } | |
| } | |
| function TP2(I = eZ.uuid4(), G = eZ.uuid4().substring(16), Z) { | |
| let d = '' | |
| if (Z !== void 0) d = Z ? '-1' : '-0' | |
| return `${I}-${G}${d}` | |
| } | |
| EU1.TRACEPARENT_REGEXP = RU1 | |
| EU1.extractTraceparentData = y11 | |
| EU1.generateSentryTraceHeader = TP2 | |
| EU1.propagationContextFromHeaders = uP2 | |
| EU1.tracingContextFromHeaders = OP2 | |
| }) | |
| var O11 = _((LU1) => { | |
| Object.defineProperty(LU1, '__esModule', { value: !0 }) | |
| var hP2 = nt(), | |
| xP2 = Zv(), | |
| MU1 = oZ() | |
| function cP2(I, G = []) { | |
| return [I, G] | |
| } | |
| function pP2(I, G) { | |
| let [Z, d] = I | |
| return [Z, [...d, G]] | |
| } | |
| function SU1(I, G) { | |
| let Z = I[1] | |
| for (let d of Z) { | |
| let W = d[0].type | |
| if (G(d, W)) return !0 | |
| } | |
| return !1 | |
| } | |
| function iP2(I, G) { | |
| return SU1(I, (Z, d) => G.includes(d)) | |
| } | |
| function P11(I, G) { | |
| return (G || new TextEncoder()).encode(I) | |
| } | |
| function nP2(I, G) { | |
| let [Z, d] = I, | |
| W = JSON.stringify(Z) | |
| function w(B) { | |
| if (typeof W === 'string') W = typeof B === 'string' ? W + B : [P11(W, G), B] | |
| else W.push(typeof B === 'string' ? P11(B, G) : B) | |
| } | |
| for (let B of d) { | |
| let [C, V] = B | |
| if ( | |
| (w(` | |
| ${JSON.stringify(C)} | |
| `), | |
| typeof V === 'string' || V instanceof Uint8Array) | |
| ) | |
| w(V) | |
| else { | |
| let A | |
| try { | |
| A = JSON.stringify(V) | |
| } catch (X) { | |
| A = JSON.stringify(xP2.normalize(V)) | |
| } | |
| w(A) | |
| } | |
| } | |
| return typeof W === 'string' ? W : aP2(W) | |
| } | |
| function aP2(I) { | |
| let G = I.reduce((W, w) => W + w.length, 0), | |
| Z = new Uint8Array(G), | |
| d = 0 | |
| for (let W of I) Z.set(W, d), (d += W.length) | |
| return Z | |
| } | |
| function rP2(I, G, Z) { | |
| let d = typeof I === 'string' ? G.encode(I) : I | |
| function W(V) { | |
| let A = d.subarray(0, V) | |
| return (d = d.subarray(V + 1)), A | |
| } | |
| function w() { | |
| let V = d.indexOf(10) | |
| if (V < 0) V = d.length | |
| return JSON.parse(Z.decode(W(V))) | |
| } | |
| let B = w(), | |
| C = [] | |
| while (d.length) { | |
| let V = w(), | |
| A = typeof V.length === 'number' ? V.length : void 0 | |
| C.push([V, A ? W(A) : w()]) | |
| } | |
| return [B, C] | |
| } | |
| function sP2(I, G) { | |
| let Z = typeof I.data === 'string' ? P11(I.data, G) : I.data | |
| return [ | |
| MU1.dropUndefinedKeys({ | |
| type: 'attachment', | |
| length: Z.length, | |
| filename: I.filename, | |
| content_type: I.contentType, | |
| attachment_type: I.attachmentType, | |
| }), | |
| Z, | |
| ] | |
| } | |
| var oP2 = { | |
| 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 eP2(I) { | |
| return oP2[I] | |
| } | |
| function tP2(I) { | |
| if (!I || !I.sdk) return | |
| let { name: G, version: Z } = I.sdk | |
| return { name: G, version: Z } | |
| } | |
| function IO2(I, G, Z, d) { | |
| let W = I.sdkProcessingMetadata && I.sdkProcessingMetadata.dynamicSamplingContext | |
| return { | |
| event_id: I.event_id, | |
| sent_at: new Date().toISOString(), | |
| ...(G && { sdk: G }), | |
| ...(!!Z && d && { dsn: hP2.dsnToString(d) }), | |
| ...(W && { trace: MU1.dropUndefinedKeys({ ...W }) }), | |
| } | |
| } | |
| LU1.addItemToEnvelope = pP2 | |
| LU1.createAttachmentEnvelopeItem = sP2 | |
| LU1.createEnvelope = cP2 | |
| LU1.createEventEnvelopeHeaders = IO2 | |
| LU1.envelopeContainsItemType = iP2 | |
| LU1.envelopeItemTypeToDataCategory = eP2 | |
| LU1.forEachEnvelopeItem = SU1 | |
| LU1.getSdkMetadataForEnvelopeHeader = tP2 | |
| LU1.parseEnvelope = rP2 | |
| LU1.serializeEnvelope = nP2 | |
| }) | |
| var yU1 = _(($U1) => { | |
| Object.defineProperty($U1, '__esModule', { value: !0 }) | |
| var YO2 = O11(), | |
| _O2 = S11() | |
| function DO2(I, G, Z) { | |
| let d = [ | |
| { type: 'client_report' }, | |
| { timestamp: Z || _O2.dateTimestampInSeconds(), discarded_events: I }, | |
| ] | |
| return YO2.createEnvelope(G ? { dsn: G } : {}, [d]) | |
| } | |
| $U1.createClientReportEnvelope = DO2 | |
| }) | |
| var mU1 = _((TU1) => { | |
| Object.defineProperty(TU1, '__esModule', { value: !0 }) | |
| var PU1 = 60000 | |
| function OU1(I, G = Date.now()) { | |
| let Z = parseInt(`${I}`, 10) | |
| if (!isNaN(Z)) return Z * 1000 | |
| let d = Date.parse(`${I}`) | |
| if (!isNaN(d)) return d - G | |
| return PU1 | |
| } | |
| function uU1(I, G) { | |
| return I[G] || I.all || 0 | |
| } | |
| function FO2(I, G, Z = Date.now()) { | |
| return uU1(I, G) > Z | |
| } | |
| function JO2(I, { statusCode: G, headers: Z }, d = Date.now()) { | |
| let W = { ...I }, | |
| w = Z && Z['x-sentry-rate-limits'], | |
| B = Z && Z['retry-after'] | |
| if (w) | |
| for (let C of w.trim().split(',')) { | |
| let [V, A, , , X] = C.split(':', 5), | |
| Y = parseInt(V, 10), | |
| H = (!isNaN(Y) ? Y : 60) * 1000 | |
| if (!A) W.all = d + H | |
| else | |
| for (let J of A.split(';')) | |
| if (J === 'metric_bucket') { | |
| if (!X || X.split(';').includes('custom')) W[J] = d + H | |
| } else W[J] = d + H | |
| } | |
| else if (B) W.all = d + OU1(B, d) | |
| else if (G === 429) W.all = d + 60000 | |
| return W | |
| } | |
| TU1.DEFAULT_RETRY_AFTER = PU1 | |
| TU1.disabledUntil = uU1 | |
| TU1.isRateLimited = FO2 | |
| TU1.parseRetryAfterHeader = OU1 | |
| TU1.updateRateLimits = JO2 | |
| }) | |
| var kU1 = _((jU1) => { | |
| Object.defineProperty(jU1, '__esModule', { value: !0 }) | |
| function bU1(I, G, Z) { | |
| let d = G.match(/([a-z_]+)\.(.*)/i) | |
| if (d === null) I[G] = Z | |
| else { | |
| let W = I[d[1]] | |
| bU1(W, d[2], Z) | |
| } | |
| } | |
| function qO2(I, G, Z = {}) { | |
| return Array.isArray(G) ? lU1(I, G, Z) : UO2(I, G, Z) | |
| } | |
| function lU1(I, G, Z) { | |
| let d = G.find((W) => W.name === I.name) | |
| if (d) { | |
| for (let [W, w] of Object.entries(Z)) bU1(d, W, w) | |
| return G | |
| } | |
| return [...G, I] | |
| } | |
| function UO2(I, G, Z) { | |
| return (W) => { | |
| let w = G(W) | |
| if (I.allowExclusionByUser) { | |
| if (!w.find((C) => C.name === I.name)) return w | |
| } | |
| return lU1(I, w, Z) | |
| } | |
| } | |
| jU1.addOrUpdateIntegration = qO2 | |
| }) | |
| var xU1 = _((hU1) => { | |
| Object.defineProperty(hU1, '__esModule', { value: !0 }) | |
| function RO2(I) { | |
| let G = [], | |
| Z = {} | |
| return { | |
| add(d, W) { | |
| while (G.length >= I) { | |
| let w = G.shift() | |
| if (w !== void 0) delete Z[w] | |
| } | |
| if (Z[d]) this.delete(d) | |
| G.push(d), (Z[d] = W) | |
| }, | |
| clear() { | |
| ;(Z = {}), (G = []) | |
| }, | |
| get(d) { | |
| return Z[d] | |
| }, | |
| size() { | |
| return G.length | |
| }, | |
| delete(d) { | |
| if (!Z[d]) return !1 | |
| delete Z[d] | |
| for (let W = 0; W < G.length; W++) | |
| if (G[W] === d) { | |
| G.splice(W, 1) | |
| break | |
| } | |
| return !0 | |
| }, | |
| } | |
| } | |
| hU1.makeFifoCache = RO2 | |
| }) | |
| var nU1 = _((iU1) => { | |
| Object.defineProperty(iU1, '__esModule', { value: !0 }) | |
| var u11 = sZ(), | |
| cU1 = eE(), | |
| vO2 = Zv(), | |
| MO2 = oZ() | |
| function T11(I, G) { | |
| return I(G.stack || '', 1) | |
| } | |
| function pU1(I, G) { | |
| let Z = { type: G.name || G.constructor.name, value: G.message }, | |
| d = T11(I, G) | |
| if (d.length) Z.stacktrace = { frames: d } | |
| return Z | |
| } | |
| function SO2(I) { | |
| if ('name' in I && typeof I.name === 'string') { | |
| let G = `'${I.name}' captured as exception` | |
| if ('message' in I && typeof I.message === 'string') G += ` with message '${I.message}'` | |
| return G | |
| } else if ('message' in I && typeof I.message === 'string') return I.message | |
| else return `Object captured as exception with keys: ${MO2.extractExceptionKeysForMessage(I)}` | |
| } | |
| function LO2(I, G, Z, d) { | |
| let W = typeof I === 'function' ? I().getClient() : I, | |
| w = Z, | |
| C = (d && d.data && d.data.mechanism) || { handled: !0, type: 'generic' }, | |
| V | |
| if (!u11.isError(Z)) { | |
| if (u11.isPlainObject(Z)) { | |
| let X = W && W.getOptions().normalizeDepth | |
| V = { ['__serialized__']: vO2.normalizeToSize(Z, X) } | |
| let Y = SO2(Z) | |
| ;(w = (d && d.syntheticException) || new Error(Y)), (w.message = Y) | |
| } else (w = (d && d.syntheticException) || new Error(Z)), (w.message = Z) | |
| C.synthetic = !0 | |
| } | |
| let A = { exception: { values: [pU1(G, w)] } } | |
| if (V) A.extra = V | |
| return ( | |
| cU1.addExceptionTypeValue(A, void 0, void 0), | |
| cU1.addExceptionMechanism(A, C), | |
| { ...A, event_id: d && d.event_id } | |
| ) | |
| } | |
| function $O2(I, G, Z = 'info', d, W) { | |
| let w = { event_id: d && d.event_id, level: Z } | |
| if (W && d && d.syntheticException) { | |
| let B = T11(I, d.syntheticException) | |
| if (B.length) w.exception = { values: [{ value: G, stacktrace: { frames: B } }] } | |
| } | |
| if (u11.isParameterizedString(G)) { | |
| let { __sentry_template_string__: B, __sentry_template_values__: C } = G | |
| return (w.logentry = { message: B, params: C }), w | |
| } | |
| return (w.message = G), w | |
| } | |
| iU1.eventFromMessage = $O2 | |
| iU1.eventFromUnknownInput = LO2 | |
| iU1.exceptionFromError = pU1 | |
| iU1.parseStackFrames = T11 | |
| }) | |
| var rU1 = _((aU1) => { | |
| Object.defineProperty(aU1, '__esModule', { value: !0 }) | |
| var TO2 = oZ(), | |
| mO2 = jT() | |
| function bO2(I, G, Z, d) { | |
| let W = I(), | |
| w = !1, | |
| B = !0 | |
| return ( | |
| setInterval(() => { | |
| let C = W.getTimeMs() | |
| if (w === !1 && C > G + Z) { | |
| if (((w = !0), B)) d() | |
| } | |
| if (C < G + Z) w = !1 | |
| }, 20), | |
| { | |
| poll: () => { | |
| W.reset() | |
| }, | |
| enabled: (C) => { | |
| B = C | |
| }, | |
| } | |
| ) | |
| } | |
| function lO2(I, G, Z) { | |
| let d = G ? G.replace(/^file:\/\//, '') : void 0, | |
| W = I.location.columnNumber ? I.location.columnNumber + 1 : void 0, | |
| w = I.location.lineNumber ? I.location.lineNumber + 1 : void 0 | |
| return TO2.dropUndefinedKeys({ | |
| filename: d, | |
| module: Z(d), | |
| function: I.functionName || '?', | |
| colno: W, | |
| lineno: w, | |
| in_app: d ? mO2.filenameIsInApp(d) : void 0, | |
| }) | |
| } | |
| aU1.callFrameToStackFrame = lO2 | |
| aU1.watchdogTimer = bO2 | |
| }) | |
| var eU1 = _((oU1) => { | |
| Object.defineProperty(oU1, '__esModule', { value: !0 }) | |
| class sU1 { | |
| constructor(I) { | |
| ;(this._maxSize = I), (this._cache = new Map()) | |
| } | |
| get size() { | |
| return this._cache.size | |
| } | |
| get(I) { | |
| let G = this._cache.get(I) | |
| if (G === void 0) return | |
| return this._cache.delete(I), this._cache.set(I, G), G | |
| } | |
| set(I, G) { | |
| if (this._cache.size >= this._maxSize) this._cache.delete(this._cache.keys().next().value) | |
| this._cache.set(I, G) | |
| } | |
| remove(I) { | |
| let G = this._cache.get(I) | |
| if (G) this._cache.delete(I) | |
| return G | |
| } | |
| clear() { | |
| this._cache.clear() | |
| } | |
| keys() { | |
| return Array.from(this._cache.keys()) | |
| } | |
| values() { | |
| let I = [] | |
| return this._cache.forEach((G) => I.push(G)), I | |
| } | |
| } | |
| oU1.LRUMap = sU1 | |
| }) | |
| var m11 = _((tU1) => { | |
| Object.defineProperty(tU1, '__esModule', { value: !0 }) | |
| function xO2(I, G) { | |
| return I != null ? I : G() | |
| } | |
| tU1._nullishCoalesce = xO2 | |
| }) | |
| var Gf1 = _((If1) => { | |
| Object.defineProperty(If1, '__esModule', { value: !0 }) | |
| var pO2 = m11() | |
| async function iO2(I, G) { | |
| return pO2._nullishCoalesce(I, G) | |
| } | |
| If1._asyncNullishCoalesce = iO2 | |
| }) | |
| var b11 = _((Zf1) => { | |
| Object.defineProperty(Zf1, '__esModule', { value: !0 }) | |
| async function aO2(I) { | |
| let G = void 0, | |
| Z = I[0], | |
| d = 1 | |
| while (d < I.length) { | |
| let W = I[d], | |
| w = I[d + 1] | |
| if (((d += 2), (W === 'optionalAccess' || W === 'optionalCall') && Z == null)) return | |
| if (W === 'access' || W === 'optionalAccess') (G = Z), (Z = await w(Z)) | |
| else if (W === 'call' || W === 'optionalCall') | |
| (Z = await w((...B) => Z.call(G, ...B))), (G = void 0) | |
| } | |
| return Z | |
| } | |
| Zf1._asyncOptionalChain = aO2 | |
| }) | |
| var Wf1 = _((df1) => { | |
| Object.defineProperty(df1, '__esModule', { value: !0 }) | |
| var sO2 = b11() | |
| async function oO2(I) { | |
| let G = await sO2._asyncOptionalChain(I) | |
| return G == null ? !0 : G | |
| } | |
| df1._asyncOptionalChainDelete = oO2 | |
| }) | |
| var l11 = _((wf1) => { | |
| Object.defineProperty(wf1, '__esModule', { value: !0 }) | |
| function tO2(I) { | |
| let G = void 0, | |
| Z = I[0], | |
| d = 1 | |
| while (d < I.length) { | |
| let W = I[d], | |
| w = I[d + 1] | |
| if (((d += 2), (W === 'optionalAccess' || W === 'optionalCall') && Z == null)) return | |
| if (W === 'access' || W === 'optionalAccess') (G = Z), (Z = w(Z)) | |
| else if (W === 'call' || W === 'optionalCall') | |
| (Z = w((...B) => Z.call(G, ...B))), (G = void 0) | |
| } | |
| return Z | |
| } | |
| wf1._optionalChain = tO2 | |
| }) | |
| var Cf1 = _((Bf1) => { | |
| Object.defineProperty(Bf1, '__esModule', { value: !0 }) | |
| var Gu2 = l11() | |
| function Zu2(I) { | |
| let G = Gu2._optionalChain(I) | |
| return G == null ? !0 : G | |
| } | |
| Bf1._optionalChainDelete = Zu2 | |
| }) | |
| var Af1 = _((Vf1) => { | |
| Object.defineProperty(Vf1, '__esModule', { value: !0 }) | |
| function Wu2(I) { | |
| return I.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d') | |
| } | |
| Vf1.escapeStringForRegex = Wu2 | |
| }) | |
| var X0 = _((p11) => { | |
| Object.defineProperty(p11, '__esModule', { value: !0 }) | |
| var Bu2 = uQ1(), | |
| dm = xt(), | |
| j11 = nt(), | |
| Cu2 = at(), | |
| k11 = q7(), | |
| Vu2 = Tq1(), | |
| U7 = sZ(), | |
| Au2 = kq1(), | |
| Wm = NW(), | |
| Xu2 = q11(), | |
| VY = eE(), | |
| h11 = Q11(), | |
| wm = Zv(), | |
| PV = oZ(), | |
| PF = eq1(), | |
| Yu2 = GU1(), | |
| OF = XU1(), | |
| x11 = HU1(), | |
| Wv = kT(), | |
| wv = sE(), | |
| AY = C11(), | |
| c11 = R11(), | |
| Bv = S11(), | |
| Cv = vU1(), | |
| Xf1 = z11(), | |
| DB = O11(), | |
| _u2 = yU1(), | |
| Vv = mU1(), | |
| ON = $11(), | |
| Bm = v11(), | |
| Du2 = kU1(), | |
| Hu2 = xU1(), | |
| Cm = nU1(), | |
| Yf1 = rU1(), | |
| Fu2 = eU1(), | |
| Ju2 = Gf1(), | |
| Ku2 = b11(), | |
| gu2 = Wf1(), | |
| Nu2 = m11(), | |
| zu2 = l11(), | |
| Qu2 = Cf1(), | |
| qu2 = tt(), | |
| Uu2 = W11(), | |
| _f1 = g11(), | |
| fu2 = A11(), | |
| Ru2 = K11(), | |
| Eu2 = _11(), | |
| vu2 = F11(), | |
| Mu2 = $V(), | |
| Su2 = jT(), | |
| Lu2 = Af1(), | |
| $u2 = J11() | |
| p11.applyAggregateErrorsToEvent = Bu2.applyAggregateErrorsToEvent | |
| p11.getComponentName = dm.getComponentName | |
| p11.getDomElement = dm.getDomElement | |
| p11.getLocationHref = dm.getLocationHref | |
| p11.htmlTreeAsString = dm.htmlTreeAsString | |
| p11.dsnFromString = j11.dsnFromString | |
| p11.dsnToString = j11.dsnToString | |
| p11.makeDsn = j11.makeDsn | |
| p11.SentryError = Cu2.SentryError | |
| p11.GLOBAL_OBJ = k11.GLOBAL_OBJ | |
| p11.getGlobalObject = k11.getGlobalObject | |
| p11.getGlobalSingleton = k11.getGlobalSingleton | |
| p11.addInstrumentationHandler = Vu2.addInstrumentationHandler | |
| p11.isDOMError = U7.isDOMError | |
| p11.isDOMException = U7.isDOMException | |
| p11.isElement = U7.isElement | |
| p11.isError = U7.isError | |
| p11.isErrorEvent = U7.isErrorEvent | |
| p11.isEvent = U7.isEvent | |
| p11.isInstanceOf = U7.isInstanceOf | |
| p11.isNaN = U7.isNaN | |
| p11.isParameterizedString = U7.isParameterizedString | |
| p11.isPlainObject = U7.isPlainObject | |
| p11.isPrimitive = U7.isPrimitive | |
| p11.isRegExp = U7.isRegExp | |
| p11.isString = U7.isString | |
| p11.isSyntheticEvent = U7.isSyntheticEvent | |
| p11.isThenable = U7.isThenable | |
| p11.isVueViewModel = U7.isVueViewModel | |
| p11.isBrowser = Au2.isBrowser | |
| p11.CONSOLE_LEVELS = Wm.CONSOLE_LEVELS | |
| p11.consoleSandbox = Wm.consoleSandbox | |
| p11.logger = Wm.logger | |
| p11.originalConsoleMethods = Wm.originalConsoleMethods | |
| p11.memoBuilder = Xu2.memoBuilder | |
| p11.addContextToFrame = VY.addContextToFrame | |
| p11.addExceptionMechanism = VY.addExceptionMechanism | |
| p11.addExceptionTypeValue = VY.addExceptionTypeValue | |
| p11.arrayify = VY.arrayify | |
| p11.checkOrSetAlreadyCaught = VY.checkOrSetAlreadyCaught | |
| p11.getEventDescription = VY.getEventDescription | |
| p11.parseSemver = VY.parseSemver | |
| p11.uuid4 = VY.uuid4 | |
| p11.dynamicRequire = h11.dynamicRequire | |
| p11.isNodeEnv = h11.isNodeEnv | |
| p11.loadModule = h11.loadModule | |
| p11.normalize = wm.normalize | |
| p11.normalizeToSize = wm.normalizeToSize | |
| p11.normalizeUrlToBase = wm.normalizeUrlToBase | |
| p11.walk = wm.walk | |
| p11.addNonEnumerableProperty = PV.addNonEnumerableProperty | |
| p11.convertToPlainObject = PV.convertToPlainObject | |
| p11.dropUndefinedKeys = PV.dropUndefinedKeys | |
| p11.extractExceptionKeysForMessage = PV.extractExceptionKeysForMessage | |
| p11.fill = PV.fill | |
| p11.getOriginalFunction = PV.getOriginalFunction | |
| p11.markFunctionWrapped = PV.markFunctionWrapped | |
| p11.objectify = PV.objectify | |
| p11.urlEncode = PV.urlEncode | |
| p11.basename = PF.basename | |
| p11.dirname = PF.dirname | |
| p11.isAbsolute = PF.isAbsolute | |
| p11.join = PF.join | |
| p11.normalizePath = PF.normalizePath | |
| p11.relative = PF.relative | |
| p11.resolve = PF.resolve | |
| p11.makePromiseBuffer = Yu2.makePromiseBuffer | |
| p11.DEFAULT_USER_INCLUDES = OF.DEFAULT_USER_INCLUDES | |
| p11.addRequestDataToEvent = OF.addRequestDataToEvent | |
| p11.addRequestDataToTransaction = OF.addRequestDataToTransaction | |
| p11.extractPathForTransaction = OF.extractPathForTransaction | |
| p11.extractRequestData = OF.extractRequestData | |
| p11.winterCGHeadersToDict = OF.winterCGHeadersToDict | |
| p11.winterCGRequestToRequestData = OF.winterCGRequestToRequestData | |
| p11.severityFromString = x11.severityFromString | |
| p11.severityLevelFromString = x11.severityLevelFromString | |
| p11.validSeverityLevels = x11.validSeverityLevels | |
| p11.createStackParser = Wv.createStackParser | |
| p11.getFunctionName = Wv.getFunctionName | |
| p11.nodeStackLineParser = Wv.nodeStackLineParser | |
| p11.stackParserFromStackParserOptions = Wv.stackParserFromStackParserOptions | |
| p11.stripSentryFramesAndReverse = Wv.stripSentryFramesAndReverse | |
| p11.isMatchingPattern = wv.isMatchingPattern | |
| p11.safeJoin = wv.safeJoin | |
| p11.snipLine = wv.snipLine | |
| p11.stringMatchesSomePattern = wv.stringMatchesSomePattern | |
| p11.truncate = wv.truncate | |
| p11.isNativeFetch = AY.isNativeFetch | |
| p11.supportsDOMError = AY.supportsDOMError | |
| p11.supportsDOMException = AY.supportsDOMException | |
| p11.supportsErrorEvent = AY.supportsErrorEvent | |
| p11.supportsFetch = AY.supportsFetch | |
| p11.supportsNativeFetch = AY.supportsNativeFetch | |
| p11.supportsReferrerPolicy = AY.supportsReferrerPolicy | |
| p11.supportsReportingObserver = AY.supportsReportingObserver | |
| p11.SyncPromise = c11.SyncPromise | |
| p11.rejectedSyncPromise = c11.rejectedSyncPromise | |
| p11.resolvedSyncPromise = c11.resolvedSyncPromise | |
| Object.defineProperty(p11, '_browserPerformanceTimeOriginMode', { | |
| enumerable: !0, | |
| get: () => Bv._browserPerformanceTimeOriginMode, | |
| }) | |
| p11.browserPerformanceTimeOrigin = Bv.browserPerformanceTimeOrigin | |
| p11.dateTimestampInSeconds = Bv.dateTimestampInSeconds | |
| p11.timestampInSeconds = Bv.timestampInSeconds | |
| p11.timestampWithMs = Bv.timestampWithMs | |
| p11.TRACEPARENT_REGEXP = Cv.TRACEPARENT_REGEXP | |
| p11.extractTraceparentData = Cv.extractTraceparentData | |
| p11.generateSentryTraceHeader = Cv.generateSentryTraceHeader | |
| p11.propagationContextFromHeaders = Cv.propagationContextFromHeaders | |
| p11.tracingContextFromHeaders = Cv.tracingContextFromHeaders | |
| p11.getSDKSource = Xf1.getSDKSource | |
| p11.isBrowserBundle = Xf1.isBrowserBundle | |
| p11.addItemToEnvelope = DB.addItemToEnvelope | |
| p11.createAttachmentEnvelopeItem = DB.createAttachmentEnvelopeItem | |
| p11.createEnvelope = DB.createEnvelope | |
| p11.createEventEnvelopeHeaders = DB.createEventEnvelopeHeaders | |
| p11.envelopeContainsItemType = DB.envelopeContainsItemType | |
| p11.envelopeItemTypeToDataCategory = DB.envelopeItemTypeToDataCategory | |
| p11.forEachEnvelopeItem = DB.forEachEnvelopeItem | |
| p11.getSdkMetadataForEnvelopeHeader = DB.getSdkMetadataForEnvelopeHeader | |
| p11.parseEnvelope = DB.parseEnvelope | |
| p11.serializeEnvelope = DB.serializeEnvelope | |
| p11.createClientReportEnvelope = _u2.createClientReportEnvelope | |
| p11.DEFAULT_RETRY_AFTER = Vv.DEFAULT_RETRY_AFTER | |
| p11.disabledUntil = Vv.disabledUntil | |
| p11.isRateLimited = Vv.isRateLimited | |
| p11.parseRetryAfterHeader = Vv.parseRetryAfterHeader | |
| p11.updateRateLimits = Vv.updateRateLimits | |
| p11.BAGGAGE_HEADER_NAME = ON.BAGGAGE_HEADER_NAME | |
| p11.MAX_BAGGAGE_STRING_LENGTH = ON.MAX_BAGGAGE_STRING_LENGTH | |
| p11.SENTRY_BAGGAGE_KEY_PREFIX = ON.SENTRY_BAGGAGE_KEY_PREFIX | |
| p11.SENTRY_BAGGAGE_KEY_PREFIX_REGEX = ON.SENTRY_BAGGAGE_KEY_PREFIX_REGEX | |
| p11.baggageHeaderToDynamicSamplingContext = ON.baggageHeaderToDynamicSamplingContext | |
| p11.dynamicSamplingContextToSentryBaggageHeader = ON.dynamicSamplingContextToSentryBaggageHeader | |
| p11.getNumberOfUrlSegments = Bm.getNumberOfUrlSegments | |
| p11.getSanitizedUrlString = Bm.getSanitizedUrlString | |
| p11.parseUrl = Bm.parseUrl | |
| p11.stripUrlQueryAndFragment = Bm.stripUrlQueryAndFragment | |
| p11.addOrUpdateIntegration = Du2.addOrUpdateIntegration | |
| p11.makeFifoCache = Hu2.makeFifoCache | |
| p11.eventFromMessage = Cm.eventFromMessage | |
| p11.eventFromUnknownInput = Cm.eventFromUnknownInput | |
| p11.exceptionFromError = Cm.exceptionFromError | |
| p11.parseStackFrames = Cm.parseStackFrames | |
| p11.callFrameToStackFrame = Yf1.callFrameToStackFrame | |
| p11.watchdogTimer = Yf1.watchdogTimer | |
| p11.LRUMap = Fu2.LRUMap | |
| p11._asyncNullishCoalesce = Ju2._asyncNullishCoalesce | |
| p11._asyncOptionalChain = Ku2._asyncOptionalChain | |
| p11._asyncOptionalChainDelete = gu2._asyncOptionalChainDelete | |
| p11._nullishCoalesce = Nu2._nullishCoalesce | |
| p11._optionalChain = zu2._optionalChain | |
| p11._optionalChainDelete = Qu2._optionalChainDelete | |
| p11.addConsoleInstrumentationHandler = qu2.addConsoleInstrumentationHandler | |
| p11.addClickKeypressInstrumentationHandler = Uu2.addClickKeypressInstrumentationHandler | |
| p11.SENTRY_XHR_DATA_KEY = _f1.SENTRY_XHR_DATA_KEY | |
| p11.addXhrInstrumentationHandler = _f1.addXhrInstrumentationHandler | |
| p11.addFetchInstrumentationHandler = fu2.addFetchInstrumentationHandler | |
| p11.addHistoryInstrumentationHandler = Ru2.addHistoryInstrumentationHandler | |
| p11.addGlobalErrorInstrumentationHandler = Eu2.addGlobalErrorInstrumentationHandler | |
| p11.addGlobalUnhandledRejectionInstrumentationHandler = | |
| vu2.addGlobalUnhandledRejectionInstrumentationHandler | |
| p11.resetInstrumentationHandlers = Mu2.resetInstrumentationHandlers | |
| p11.filenameIsInApp = Su2.filenameIsInApp | |
| p11.escapeStringForRegex = Lu2.escapeStringForRegex | |
| p11.supportsHistory = $u2.supportsHistory | |
| }) | |
| var Q6 = _((Df1) => { | |
| Object.defineProperty(Df1, '__esModule', { value: !0 }) | |
| var yb2 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__ | |
| Df1.DEBUG_BUILD = yb2 | |
| }) | |
| var uN = _((Hf1) => { | |
| Object.defineProperty(Hf1, '__esModule', { value: !0 }) | |
| var Ob2 = 'production' | |
| Hf1.DEFAULT_ENVIRONMENT = Ob2 | |
| }) | |
| var Av = _((Jf1) => { | |
| Object.defineProperty(Jf1, '__esModule', { value: !0 }) | |
| var Vm = X0(), | |
| Tb2 = Q6() | |
| function Ff1() { | |
| return Vm.getGlobalSingleton('globalEventProcessors', () => []) | |
| } | |
| function mb2(I) { | |
| Ff1().push(I) | |
| } | |
| function i11(I, G, Z, d = 0) { | |
| return new Vm.SyncPromise((W, w) => { | |
| let B = I[d] | |
| if (G === null || typeof B !== 'function') W(G) | |
| else { | |
| let C = B({ ...G }, Z) | |
| if ( | |
| (Tb2.DEBUG_BUILD && | |
| B.id && | |
| C === null && | |
| Vm.logger.log(`Event processor "${B.id}" dropped event`), | |
| Vm.isThenable(C)) | |
| ) | |
| C.then((V) => i11(I, V, Z, d + 1).then(W)).then(null, w) | |
| else | |
| i11(I, C, Z, d + 1) | |
| .then(W) | |
| .then(null, w) | |
| } | |
| }) | |
| } | |
| Jf1.addGlobalEventProcessor = mb2 | |
| Jf1.getGlobalEventProcessors = Ff1 | |
| Jf1.notifyEventProcessors = i11 | |
| }) | |
| var TN = _((Kf1) => { | |
| Object.defineProperty(Kf1, '__esModule', { value: !0 }) | |
| var Xv = X0() | |
| function kb2(I) { | |
| let G = Xv.timestampInSeconds(), | |
| Z = { | |
| sid: Xv.uuid4(), | |
| init: !0, | |
| timestamp: G, | |
| started: G, | |
| duration: 0, | |
| status: 'ok', | |
| errors: 0, | |
| ignoreDuration: !1, | |
| toJSON: () => xb2(Z), | |
| } | |
| if (I) n11(Z, I) | |
| return Z | |
| } | |
| function n11(I, G = {}) { | |
| if (G.user) { | |
| if (!I.ipAddress && G.user.ip_address) I.ipAddress = G.user.ip_address | |
| if (!I.did && !G.did) I.did = G.user.id || G.user.email || G.user.username | |
| } | |
| if (((I.timestamp = G.timestamp || Xv.timestampInSeconds()), G.abnormal_mechanism)) | |
| I.abnormal_mechanism = G.abnormal_mechanism | |
| if (G.ignoreDuration) I.ignoreDuration = G.ignoreDuration | |
| if (G.sid) I.sid = G.sid.length === 32 ? G.sid : Xv.uuid4() | |
| if (G.init !== void 0) I.init = G.init | |
| if (!I.did && G.did) I.did = `${G.did}` | |
| if (typeof G.started === 'number') I.started = G.started | |
| if (I.ignoreDuration) I.duration = void 0 | |
| else if (typeof G.duration === 'number') I.duration = G.duration | |
| else { | |
| let Z = I.timestamp - I.started | |
| I.duration = Z >= 0 ? Z : 0 | |
| } | |
| if (G.release) I.release = G.release | |
| if (G.environment) I.environment = G.environment | |
| if (!I.ipAddress && G.ipAddress) I.ipAddress = G.ipAddress | |
| if (!I.userAgent && G.userAgent) I.userAgent = G.userAgent | |
| if (typeof G.errors === 'number') I.errors = G.errors | |
| if (G.status) I.status = G.status | |
| } | |
| function hb2(I, G) { | |
| let Z = {} | |
| if (G) Z = { status: G } | |
| else if (I.status === 'ok') Z = { status: 'exited' } | |
| n11(I, Z) | |
| } | |
| function xb2(I) { | |
| return Xv.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, | |
| }, | |
| }) | |
| } | |
| Kf1.closeSession = hb2 | |
| Kf1.makeSession = kb2 | |
| Kf1.updateSession = n11 | |
| }) | |
| var iI = _((qf1) => { | |
| Object.defineProperty(qf1, '__esModule', { value: !0 }) | |
| var a11 = X0(), | |
| nb2 = 0, | |
| Nf1 = 1 | |
| function ab2(I) { | |
| let { spanId: G, traceId: Z } = I.spanContext(), | |
| { data: d, op: W, parent_span_id: w, status: B, tags: C, origin: V } = zf1(I) | |
| return a11.dropUndefinedKeys({ | |
| data: d, | |
| op: W, | |
| parent_span_id: w, | |
| span_id: G, | |
| status: B, | |
| tags: C, | |
| trace_id: Z, | |
| origin: V, | |
| }) | |
| } | |
| function rb2(I) { | |
| let { traceId: G, spanId: Z } = I.spanContext(), | |
| d = Qf1(I) | |
| return a11.generateSentryTraceHeader(G, Z, d) | |
| } | |
| function sb2(I) { | |
| if (typeof I === 'number') return gf1(I) | |
| if (Array.isArray(I)) return I[0] + I[1] / 1e9 | |
| if (I instanceof Date) return gf1(I.getTime()) | |
| return a11.timestampInSeconds() | |
| } | |
| function gf1(I) { | |
| return I > 9999999999 ? I / 1000 : I | |
| } | |
| function zf1(I) { | |
| if (ob2(I)) return I.getSpanJSON() | |
| if (typeof I.toJSON === 'function') return I.toJSON() | |
| return {} | |
| } | |
| function ob2(I) { | |
| return typeof I.getSpanJSON === 'function' | |
| } | |
| function Qf1(I) { | |
| let { traceFlags: G } = I.spanContext() | |
| return Boolean(G & Nf1) | |
| } | |
| qf1.TRACE_FLAG_NONE = nb2 | |
| qf1.TRACE_FLAG_SAMPLED = Nf1 | |
| qf1.spanIsSampled = Qf1 | |
| qf1.spanTimeInputToSeconds = sb2 | |
| qf1.spanToJSON = zf1 | |
| qf1.spanToTraceContext = ab2 | |
| qf1.spanToTraceHeader = rb2 | |
| }) | |
| var Am = _((vf1) => { | |
| Object.defineProperty(vf1, '__esModule', { value: !0 }) | |
| var cG = X0(), | |
| wl2 = uN(), | |
| Uf1 = Av(), | |
| s11 = Ym(), | |
| r11 = Xm(), | |
| Bl2 = iI() | |
| function Cl2(I, G, Z, d, W, w) { | |
| let { normalizeDepth: B = 3, normalizeMaxBreadth: C = 1000 } = I, | |
| V = { | |
| ...G, | |
| event_id: G.event_id || Z.event_id || cG.uuid4(), | |
| timestamp: G.timestamp || cG.dateTimestampInSeconds(), | |
| }, | |
| A = Z.integrations || I.integrations.map((z) => z.name) | |
| if ((Vl2(V, I), Al2(V, A), G.type === void 0)) Rf1(V, I.stackParser) | |
| let X = Yl2(d, Z.captureContext) | |
| if (Z.mechanism) cG.addExceptionMechanism(V, Z.mechanism) | |
| let Y = W && W.getEventProcessors ? W.getEventProcessors() : [], | |
| H = s11.getGlobalScope().getScopeData() | |
| if (w) { | |
| let z = w.getScopeData() | |
| r11.mergeScopeData(H, z) | |
| } | |
| if (X) { | |
| let z = X.getScopeData() | |
| r11.mergeScopeData(H, z) | |
| } | |
| let J = [...(Z.attachments || []), ...H.attachments] | |
| if (J.length) Z.attachments = J | |
| r11.applyScopeDataToEvent(V, H) | |
| let K = [...Y, ...Uf1.getGlobalEventProcessors(), ...H.eventProcessors] | |
| return Uf1.notifyEventProcessors(K, V, Z).then((z) => { | |
| if (z) Ef1(z) | |
| if (typeof B === 'number' && B > 0) return Xl2(z, B, C) | |
| return z | |
| }) | |
| } | |
| function Vl2(I, G) { | |
| let { environment: Z, release: d, dist: W, maxValueLength: w = 250 } = G | |
| if (!('environment' in I)) I.environment = 'environment' in G ? Z : wl2.DEFAULT_ENVIRONMENT | |
| if (I.release === void 0 && d !== void 0) I.release = d | |
| if (I.dist === void 0 && W !== void 0) I.dist = W | |
| if (I.message) I.message = cG.truncate(I.message, w) | |
| let B = I.exception && I.exception.values && I.exception.values[0] | |
| if (B && B.value) B.value = cG.truncate(B.value, w) | |
| let C = I.request | |
| if (C && C.url) C.url = cG.truncate(C.url, w) | |
| } | |
| var ff1 = new WeakMap() | |
| function Rf1(I, G) { | |
| let Z = cG.GLOBAL_OBJ._sentryDebugIds | |
| if (!Z) return | |
| let d, | |
| W = ff1.get(G) | |
| if (W) d = W | |
| else (d = new Map()), ff1.set(G, d) | |
| let w = Object.keys(Z).reduce((B, C) => { | |
| let V, | |
| A = d.get(C) | |
| if (A) V = A | |
| else (V = G(C)), d.set(C, V) | |
| for (let X = V.length - 1; X >= 0; X--) { | |
| let Y = V[X] | |
| if (Y.filename) { | |
| B[Y.filename] = Z[C] | |
| break | |
| } | |
| } | |
| return B | |
| }, {}) | |
| try { | |
| I.exception.values.forEach((B) => { | |
| B.stacktrace.frames.forEach((C) => { | |
| if (C.filename) C.debug_id = w[C.filename] | |
| }) | |
| }) | |
| } catch (B) {} | |
| } | |
| function Ef1(I) { | |
| let G = {} | |
| try { | |
| I.exception.values.forEach((d) => { | |
| d.stacktrace.frames.forEach((W) => { | |
| if (W.debug_id) { | |
| if (W.abs_path) G[W.abs_path] = W.debug_id | |
| else if (W.filename) G[W.filename] = W.debug_id | |
| delete W.debug_id | |
| } | |
| }) | |
| }) | |
| } catch (d) {} | |
| if (Object.keys(G).length === 0) return | |
| ;(I.debug_meta = I.debug_meta || {}), (I.debug_meta.images = I.debug_meta.images || []) | |
| let Z = I.debug_meta.images | |
| Object.keys(G).forEach((d) => { | |
| Z.push({ type: 'sourcemap', code_file: d, debug_id: G[d] }) | |
| }) | |
| } | |
| function Al2(I, G) { | |
| if (G.length > 0) | |
| (I.sdk = I.sdk || {}), (I.sdk.integrations = [...(I.sdk.integrations || []), ...G]) | |
| } | |
| function Xl2(I, G, Z) { | |
| if (!I) return null | |
| let d = { | |
| ...I, | |
| ...(I.breadcrumbs && { | |
| breadcrumbs: I.breadcrumbs.map((W) => ({ | |
| ...W, | |
| ...(W.data && { data: cG.normalize(W.data, G, Z) }), | |
| })), | |
| }), | |
| ...(I.user && { user: cG.normalize(I.user, G, Z) }), | |
| ...(I.contexts && { contexts: cG.normalize(I.contexts, G, Z) }), | |
| ...(I.extra && { extra: cG.normalize(I.extra, G, Z) }), | |
| } | |
| if (I.contexts && I.contexts.trace && d.contexts) { | |
| if (((d.contexts.trace = I.contexts.trace), I.contexts.trace.data)) | |
| d.contexts.trace.data = cG.normalize(I.contexts.trace.data, G, Z) | |
| } | |
| if (I.spans) | |
| d.spans = I.spans.map((W) => { | |
| let w = Bl2.spanToJSON(W).data | |
| if (w) W.data = cG.normalize(w, G, Z) | |
| return W | |
| }) | |
| return d | |
| } | |
| function Yl2(I, G) { | |
| if (!G) return I | |
| let Z = I ? I.clone() : new s11.Scope() | |
| return Z.update(G), Z | |
| } | |
| function _l2(I) { | |
| if (!I) return | |
| if (Dl2(I)) return { captureContext: I } | |
| if (Fl2(I)) return { captureContext: I } | |
| return I | |
| } | |
| function Dl2(I) { | |
| return I instanceof s11.Scope || typeof I === 'function' | |
| } | |
| var Hl2 = [ | |
| 'user', | |
| 'level', | |
| 'extra', | |
| 'contexts', | |
| 'tags', | |
| 'fingerprint', | |
| 'requestSession', | |
| 'propagationContext', | |
| ] | |
| function Fl2(I) { | |
| return Object.keys(I).some((G) => Hl2.includes(G)) | |
| } | |
| vf1.applyDebugIds = Rf1 | |
| vf1.applyDebugMeta = Ef1 | |
| vf1.parseEventHintOrCaptureContext = _l2 | |
| vf1.prepareEvent = Cl2 | |
| }) | |
| var tZ = _((Lf1) => { | |
| Object.defineProperty(Lf1, '__esModule', { value: !0 }) | |
| var OV = X0(), | |
| zl2 = uN(), | |
| _m = Q6(), | |
| w6 = HB(), | |
| o11 = TN(), | |
| Ql2 = Am() | |
| function ql2(I, G) { | |
| return w6.getCurrentHub().captureException(I, Ql2.parseEventHintOrCaptureContext(G)) | |
| } | |
| function Ul2(I, G) { | |
| let Z = typeof G === 'string' ? G : void 0, | |
| d = typeof G !== 'string' ? { captureContext: G } : void 0 | |
| return w6.getCurrentHub().captureMessage(I, Z, d) | |
| } | |
| function fl2(I, G) { | |
| return w6.getCurrentHub().captureEvent(I, G) | |
| } | |
| function Rl2(I) { | |
| w6.getCurrentHub().configureScope(I) | |
| } | |
| function El2(I, G) { | |
| w6.getCurrentHub().addBreadcrumb(I, G) | |
| } | |
| function vl2(I, G) { | |
| w6.getCurrentHub().setContext(I, G) | |
| } | |
| function Ml2(I) { | |
| w6.getCurrentHub().setExtras(I) | |
| } | |
| function Sl2(I, G) { | |
| w6.getCurrentHub().setExtra(I, G) | |
| } | |
| function Ll2(I) { | |
| w6.getCurrentHub().setTags(I) | |
| } | |
| function $l2(I, G) { | |
| w6.getCurrentHub().setTag(I, G) | |
| } | |
| function yl2(I) { | |
| w6.getCurrentHub().setUser(I) | |
| } | |
| function Mf1(...I) { | |
| let G = w6.getCurrentHub() | |
| if (I.length === 2) { | |
| let [Z, d] = I | |
| if (!Z) return G.withScope(d) | |
| return G.withScope(() => { | |
| return (G.getStackTop().scope = Z), d(Z) | |
| }) | |
| } | |
| return G.withScope(I[0]) | |
| } | |
| function Pl2(I) { | |
| return w6.runWithAsyncContext(() => { | |
| return I(w6.getIsolationScope()) | |
| }) | |
| } | |
| function Ol2(I, G) { | |
| return Mf1((Z) => { | |
| return Z.setSpan(I), G(Z) | |
| }) | |
| } | |
| function ul2(I, G) { | |
| return w6.getCurrentHub().startTransaction({ ...I }, G) | |
| } | |
| function e11(I, G) { | |
| let Z = Yv(), | |
| d = uF() | |
| if (!d) _m.DEBUG_BUILD && OV.logger.warn('Cannot capture check-in. No client defined.') | |
| else if (!d.captureCheckIn) | |
| _m.DEBUG_BUILD && | |
| OV.logger.warn('Cannot capture check-in. Client does not support sending check-ins.') | |
| else return d.captureCheckIn(I, G, Z) | |
| return OV.uuid4() | |
| } | |
| function Tl2(I, G, Z) { | |
| let d = e11({ monitorSlug: I, status: 'in_progress' }, Z), | |
| W = OV.timestampInSeconds() | |
| function w(C) { | |
| e11({ monitorSlug: I, status: C, checkInId: d, duration: OV.timestampInSeconds() - W }) | |
| } | |
| let B | |
| try { | |
| B = G() | |
| } catch (C) { | |
| throw (w('error'), C) | |
| } | |
| if (OV.isThenable(B)) | |
| Promise.resolve(B).then( | |
| () => { | |
| w('ok') | |
| }, | |
| () => { | |
| w('error') | |
| }, | |
| ) | |
| else w('ok') | |
| return B | |
| } | |
| async function ml2(I) { | |
| let G = uF() | |
| if (G) return G.flush(I) | |
| return ( | |
| _m.DEBUG_BUILD && OV.logger.warn('Cannot flush events. No client defined.'), | |
| Promise.resolve(!1) | |
| ) | |
| } | |
| async function bl2(I) { | |
| let G = uF() | |
| if (G) return G.close(I) | |
| return ( | |
| _m.DEBUG_BUILD && OV.logger.warn('Cannot flush events and disable SDK. No client defined.'), | |
| Promise.resolve(!1) | |
| ) | |
| } | |
| function ll2() { | |
| return w6.getCurrentHub().lastEventId() | |
| } | |
| function uF() { | |
| return w6.getCurrentHub().getClient() | |
| } | |
| function jl2() { | |
| return !!uF() | |
| } | |
| function Yv() { | |
| return w6.getCurrentHub().getScope() | |
| } | |
| function kl2(I) { | |
| let G = uF(), | |
| Z = w6.getIsolationScope(), | |
| d = Yv(), | |
| { release: W, environment: w = zl2.DEFAULT_ENVIRONMENT } = (G && G.getOptions()) || {}, | |
| { userAgent: B } = OV.GLOBAL_OBJ.navigator || {}, | |
| C = o11.makeSession({ | |
| release: W, | |
| environment: w, | |
| user: d.getUser() || Z.getUser(), | |
| ...(B && { userAgent: B }), | |
| ...I, | |
| }), | |
| V = Z.getSession() | |
| if (V && V.status === 'ok') o11.updateSession(V, { status: 'exited' }) | |
| return t11(), Z.setSession(C), d.setSession(C), C | |
| } | |
| function t11() { | |
| let I = w6.getIsolationScope(), | |
| G = Yv(), | |
| Z = G.getSession() || I.getSession() | |
| if (Z) o11.closeSession(Z) | |
| Sf1(), I.setSession(), G.setSession() | |
| } | |
| function Sf1() { | |
| let I = w6.getIsolationScope(), | |
| G = Yv(), | |
| Z = uF(), | |
| d = G.getSession() || I.getSession() | |
| if (d && Z && Z.captureSession) Z.captureSession(d) | |
| } | |
| function hl2(I = !1) { | |
| if (I) { | |
| t11() | |
| return | |
| } | |
| Sf1() | |
| } | |
| Lf1.addBreadcrumb = El2 | |
| Lf1.captureCheckIn = e11 | |
| Lf1.captureEvent = fl2 | |
| Lf1.captureException = ql2 | |
| Lf1.captureMessage = Ul2 | |
| Lf1.captureSession = hl2 | |
| Lf1.close = bl2 | |
| Lf1.configureScope = Rl2 | |
| Lf1.endSession = t11 | |
| Lf1.flush = ml2 | |
| Lf1.getClient = uF | |
| Lf1.getCurrentScope = Yv | |
| Lf1.isInitialized = jl2 | |
| Lf1.lastEventId = ll2 | |
| Lf1.setContext = vl2 | |
| Lf1.setExtra = Sl2 | |
| Lf1.setExtras = Ml2 | |
| Lf1.setTag = $l2 | |
| Lf1.setTags = Ll2 | |
| Lf1.setUser = yl2 | |
| Lf1.startSession = kl2 | |
| Lf1.startTransaction = ul2 | |
| Lf1.withActiveSpan = Ol2 | |
| Lf1.withIsolationScope = Pl2 | |
| Lf1.withMonitor = Tl2 | |
| Lf1.withScope = Mf1 | |
| }) | |
| var mN = _(($f1) => { | |
| Object.defineProperty($f1, '__esModule', { value: !0 }) | |
| function Fj2(I) { | |
| return I.transaction | |
| } | |
| $f1.getRootSpan = Fj2 | |
| }) | |
| var TF = _((Of1) => { | |
| Object.defineProperty(Of1, '__esModule', { value: !0 }) | |
| var Kj2 = X0(), | |
| gj2 = uN(), | |
| yf1 = tZ(), | |
| Nj2 = mN(), | |
| I01 = iI() | |
| function Pf1(I, G, Z) { | |
| let d = G.getOptions(), | |
| { publicKey: W } = G.getDsn() || {}, | |
| { segment: w } = (Z && Z.getUser()) || {}, | |
| B = Kj2.dropUndefinedKeys({ | |
| environment: d.environment || gj2.DEFAULT_ENVIRONMENT, | |
| release: d.release, | |
| user_segment: w, | |
| public_key: W, | |
| trace_id: I, | |
| }) | |
| return G.emit && G.emit('createDsc', B), B | |
| } | |
| function zj2(I) { | |
| let G = yf1.getClient() | |
| if (!G) return {} | |
| let Z = Pf1(I01.spanToJSON(I).trace_id || '', G, yf1.getCurrentScope()), | |
| d = Nj2.getRootSpan(I) | |
| if (!d) return Z | |
| let W = d && d._frozenDynamicSamplingContext | |
| if (W) return W | |
| let { sampleRate: w, source: B } = d.metadata | |
| if (w != null) Z.sample_rate = `${w}` | |
| let C = I01.spanToJSON(d) | |
| if (B && B !== 'url') Z.transaction = C.description | |
| return (Z.sampled = String(I01.spanIsSampled(d))), G.emit && G.emit('createDsc', Z), Z | |
| } | |
| Of1.getDynamicSamplingContextFromClient = Pf1 | |
| Of1.getDynamicSamplingContextFromSpan = zj2 | |
| }) | |
| var Xm = _((Tf1) => { | |
| Object.defineProperty(Tf1, '__esModule', { value: !0 }) | |
| var _v = X0(), | |
| Uj2 = TF(), | |
| fj2 = mN(), | |
| uf1 = iI() | |
| function Rj2(I, G) { | |
| let { fingerprint: Z, span: d, breadcrumbs: W, sdkProcessingMetadata: w } = G | |
| if ((vj2(I, G), d)) Lj2(I, d) | |
| $j2(I, Z), Mj2(I, W), Sj2(I, w) | |
| } | |
| function Ej2(I, G) { | |
| let { | |
| extra: Z, | |
| tags: d, | |
| user: W, | |
| contexts: w, | |
| level: B, | |
| sdkProcessingMetadata: C, | |
| breadcrumbs: V, | |
| fingerprint: A, | |
| eventProcessors: X, | |
| attachments: Y, | |
| propagationContext: H, | |
| transactionName: J, | |
| span: K, | |
| } = G | |
| if ( | |
| (bN(I, 'extra', Z), | |
| bN(I, 'tags', d), | |
| bN(I, 'user', W), | |
| bN(I, 'contexts', w), | |
| bN(I, 'sdkProcessingMetadata', C), | |
| B) | |
| ) | |
| I.level = B | |
| if (J) I.transactionName = J | |
| if (K) I.span = K | |
| if (V.length) I.breadcrumbs = [...I.breadcrumbs, ...V] | |
| if (A.length) I.fingerprint = [...I.fingerprint, ...A] | |
| if (X.length) I.eventProcessors = [...I.eventProcessors, ...X] | |
| if (Y.length) I.attachments = [...I.attachments, ...Y] | |
| I.propagationContext = { ...I.propagationContext, ...H } | |
| } | |
| function bN(I, G, Z) { | |
| if (Z && Object.keys(Z).length) { | |
| I[G] = { ...I[G] } | |
| for (let d in Z) if (Object.prototype.hasOwnProperty.call(Z, d)) I[G][d] = Z[d] | |
| } | |
| } | |
| function vj2(I, G) { | |
| let { extra: Z, tags: d, user: W, contexts: w, level: B, transactionName: C } = G, | |
| V = _v.dropUndefinedKeys(Z) | |
| if (V && Object.keys(V).length) I.extra = { ...V, ...I.extra } | |
| let A = _v.dropUndefinedKeys(d) | |
| if (A && Object.keys(A).length) I.tags = { ...A, ...I.tags } | |
| let X = _v.dropUndefinedKeys(W) | |
| if (X && Object.keys(X).length) I.user = { ...X, ...I.user } | |
| let Y = _v.dropUndefinedKeys(w) | |
| if (Y && Object.keys(Y).length) I.contexts = { ...Y, ...I.contexts } | |
| if (B) I.level = B | |
| if (C) I.transaction = C | |
| } | |
| function Mj2(I, G) { | |
| let Z = [...(I.breadcrumbs || []), ...G] | |
| I.breadcrumbs = Z.length ? Z : void 0 | |
| } | |
| function Sj2(I, G) { | |
| I.sdkProcessingMetadata = { ...I.sdkProcessingMetadata, ...G } | |
| } | |
| function Lj2(I, G) { | |
| I.contexts = { trace: uf1.spanToTraceContext(G), ...I.contexts } | |
| let Z = fj2.getRootSpan(G) | |
| if (Z) { | |
| I.sdkProcessingMetadata = { | |
| dynamicSamplingContext: Uj2.getDynamicSamplingContextFromSpan(G), | |
| ...I.sdkProcessingMetadata, | |
| } | |
| let d = uf1.spanToJSON(Z).description | |
| if (d) I.tags = { transaction: d, ...I.tags } | |
| } | |
| } | |
| function $j2(I, G) { | |
| if (((I.fingerprint = I.fingerprint ? _v.arrayify(I.fingerprint) : []), G)) | |
| I.fingerprint = I.fingerprint.concat(G) | |
| if (I.fingerprint && !I.fingerprint.length) delete I.fingerprint | |
| } | |
| Tf1.applyScopeDataToEvent = Rj2 | |
| Tf1.mergeAndOverwriteScopeData = bN | |
| Tf1.mergeScopeData = Ej2 | |
| }) | |
| var Ym = _((lf1) => { | |
| Object.defineProperty(lf1, '__esModule', { value: !0 }) | |
| var FB = X0(), | |
| mf1 = Av(), | |
| uj2 = TN(), | |
| Tj2 = Xm(), | |
| mj2 = 100, | |
| Dm | |
| class lN { | |
| constructor() { | |
| ;(this._notifyingListeners = !1), | |
| (this._scopeListeners = []), | |
| (this._eventProcessors = []), | |
| (this._breadcrumbs = []), | |
| (this._attachments = []), | |
| (this._user = {}), | |
| (this._tags = {}), | |
| (this._extra = {}), | |
| (this._contexts = {}), | |
| (this._sdkProcessingMetadata = {}), | |
| (this._propagationContext = bf1()) | |
| } | |
| static clone(I) { | |
| return I ? I.clone() : new lN() | |
| } | |
| clone() { | |
| let I = new lN() | |
| 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) | |
| ) | |
| uj2.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, G) { | |
| return (this._tags = { ...this._tags, [I]: G }), this._notifyScopeListeners(), this | |
| } | |
| setExtras(I) { | |
| return (this._extra = { ...this._extra, ...I }), this._notifyScopeListeners(), this | |
| } | |
| setExtra(I, G) { | |
| return (this._extra = { ...this._extra, [I]: G }), 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, G) { | |
| if (G === null) delete this._contexts[I] | |
| else this._contexts[I] = G | |
| 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 G = typeof I === 'function' ? I(this) : I | |
| if (G instanceof lN) { | |
| let Z = G.getScopeData() | |
| if ( | |
| ((this._tags = { ...this._tags, ...Z.tags }), | |
| (this._extra = { ...this._extra, ...Z.extra }), | |
| (this._contexts = { ...this._contexts, ...Z.contexts }), | |
| Z.user && Object.keys(Z.user).length) | |
| ) | |
| this._user = Z.user | |
| if (Z.level) this._level = Z.level | |
| if (Z.fingerprint.length) this._fingerprint = Z.fingerprint | |
| if (G.getRequestSession()) this._requestSession = G.getRequestSession() | |
| if (Z.propagationContext) this._propagationContext = Z.propagationContext | |
| } else if (FB.isPlainObject(G)) { | |
| let Z = I | |
| if ( | |
| ((this._tags = { ...this._tags, ...Z.tags }), | |
| (this._extra = { ...this._extra, ...Z.extra }), | |
| (this._contexts = { ...this._contexts, ...Z.contexts }), | |
| Z.user) | |
| ) | |
| this._user = Z.user | |
| if (Z.level) this._level = Z.level | |
| if (Z.fingerprint) this._fingerprint = Z.fingerprint | |
| if (Z.requestSession) this._requestSession = Z.requestSession | |
| if (Z.propagationContext) this._propagationContext = Z.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 = bf1()), | |
| this | |
| ) | |
| } | |
| addBreadcrumb(I, G) { | |
| let Z = typeof G === 'number' ? G : mj2 | |
| if (Z <= 0) return this | |
| let d = { timestamp: FB.dateTimestampInSeconds(), ...I }, | |
| W = this._breadcrumbs | |
| return ( | |
| W.push(d), | |
| (this._breadcrumbs = W.length > Z ? W.slice(-Z) : W), | |
| 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: G, | |
| _contexts: Z, | |
| _tags: d, | |
| _extra: W, | |
| _user: w, | |
| _level: B, | |
| _fingerprint: C, | |
| _eventProcessors: V, | |
| _propagationContext: A, | |
| _sdkProcessingMetadata: X, | |
| _transactionName: Y, | |
| _span: H, | |
| } = this | |
| return { | |
| breadcrumbs: I, | |
| attachments: G, | |
| contexts: Z, | |
| tags: d, | |
| extra: W, | |
| user: w, | |
| level: B, | |
| fingerprint: C || [], | |
| eventProcessors: V, | |
| propagationContext: A, | |
| sdkProcessingMetadata: X, | |
| transactionName: Y, | |
| span: H, | |
| } | |
| } | |
| applyToEvent(I, G = {}, Z = []) { | |
| Tj2.applyScopeDataToEvent(I, this.getScopeData()) | |
| let d = [...Z, ...mf1.getGlobalEventProcessors(), ...this._eventProcessors] | |
| return mf1.notifyEventProcessors(d, I, G) | |
| } | |
| setSDKProcessingMetadata(I) { | |
| return (this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...I }), this | |
| } | |
| setPropagationContext(I) { | |
| return (this._propagationContext = I), this | |
| } | |
| getPropagationContext() { | |
| return this._propagationContext | |
| } | |
| captureException(I, G) { | |
| let Z = G && G.event_id ? G.event_id : FB.uuid4() | |
| if (!this._client) | |
| return FB.logger.warn('No client configured on scope - will not capture exception!'), Z | |
| let d = new Error('Sentry syntheticException') | |
| return ( | |
| this._client.captureException( | |
| I, | |
| { originalException: I, syntheticException: d, ...G, event_id: Z }, | |
| this, | |
| ), | |
| Z | |
| ) | |
| } | |
| captureMessage(I, G, Z) { | |
| let d = Z && Z.event_id ? Z.event_id : FB.uuid4() | |
| if (!this._client) | |
| return FB.logger.warn('No client configured on scope - will not capture message!'), d | |
| let W = new Error(I) | |
| return ( | |
| this._client.captureMessage( | |
| I, | |
| G, | |
| { originalException: I, syntheticException: W, ...Z, event_id: d }, | |
| this, | |
| ), | |
| d | |
| ) | |
| } | |
| captureEvent(I, G) { | |
| let Z = G && G.event_id ? G.event_id : FB.uuid4() | |
| if (!this._client) | |
| return FB.logger.warn('No client configured on scope - will not capture event!'), Z | |
| return this._client.captureEvent(I, { ...G, event_id: Z }, this), Z | |
| } | |
| _notifyScopeListeners() { | |
| if (!this._notifyingListeners) | |
| (this._notifyingListeners = !0), | |
| this._scopeListeners.forEach((I) => { | |
| I(this) | |
| }), | |
| (this._notifyingListeners = !1) | |
| } | |
| } | |
| function bj2() { | |
| if (!Dm) Dm = new lN() | |
| return Dm | |
| } | |
| function lj2(I) { | |
| Dm = I | |
| } | |
| function bf1() { | |
| return { traceId: FB.uuid4(), spanId: FB.uuid4().substring(16) } | |
| } | |
| lf1.Scope = lN | |
| lf1.getGlobalScope = bj2 | |
| lf1.setGlobalScope = lj2 | |
| }) | |
| var Hm = _((jf1) => { | |
| Object.defineProperty(jf1, '__esModule', { value: !0 }) | |
| var xj2 = '7.120.0' | |
| jf1.SDK_VERSION = xj2 | |
| }) | |
| var HB = _((pf1) => { | |
| Object.defineProperty(pf1, '__esModule', { value: !0 }) | |
| var ZI = X0(), | |
| pj2 = uN(), | |
| G01 = Q6(), | |
| kf1 = Ym(), | |
| Z01 = TN(), | |
| ij2 = Hm(), | |
| Fm = parseFloat(ij2.SDK_VERSION), | |
| nj2 = 100 | |
| class Hv { | |
| constructor(I, G, Z, d = Fm) { | |
| this._version = d | |
| let W | |
| if (!G) (W = new kf1.Scope()), W.setClient(I) | |
| else W = G | |
| let w | |
| if (!Z) (w = new kf1.Scope()), w.setClient(I) | |
| else w = Z | |
| if (((this._stack = [{ scope: W }]), I)) this.bindClient(I) | |
| this._isolationScope = w | |
| } | |
| isOlderThan(I) { | |
| return this._version < I | |
| } | |
| bindClient(I) { | |
| let G = this.getStackTop() | |
| if (((G.client = I), G.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 G = this.pushScope(), | |
| Z | |
| try { | |
| Z = I(G) | |
| } catch (d) { | |
| throw (this.popScope(), d) | |
| } | |
| if (ZI.isThenable(Z)) | |
| return Z.then( | |
| (d) => { | |
| return this.popScope(), d | |
| }, | |
| (d) => { | |
| throw (this.popScope(), d) | |
| }, | |
| ) | |
| return this.popScope(), Z | |
| } | |
| 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, G) { | |
| let Z = (this._lastEventId = G && G.event_id ? G.event_id : ZI.uuid4()), | |
| d = new Error('Sentry syntheticException') | |
| return ( | |
| this.getScope().captureException(I, { | |
| originalException: I, | |
| syntheticException: d, | |
| ...G, | |
| event_id: Z, | |
| }), | |
| Z | |
| ) | |
| } | |
| captureMessage(I, G, Z) { | |
| let d = (this._lastEventId = Z && Z.event_id ? Z.event_id : ZI.uuid4()), | |
| W = new Error(I) | |
| return ( | |
| this.getScope().captureMessage(I, G, { | |
| originalException: I, | |
| syntheticException: W, | |
| ...Z, | |
| event_id: d, | |
| }), | |
| d | |
| ) | |
| } | |
| captureEvent(I, G) { | |
| let Z = G && G.event_id ? G.event_id : ZI.uuid4() | |
| if (!I.type) this._lastEventId = Z | |
| return this.getScope().captureEvent(I, { ...G, event_id: Z }), Z | |
| } | |
| lastEventId() { | |
| return this._lastEventId | |
| } | |
| addBreadcrumb(I, G) { | |
| let { scope: Z, client: d } = this.getStackTop() | |
| if (!d) return | |
| let { beforeBreadcrumb: W = null, maxBreadcrumbs: w = nj2 } = | |
| (d.getOptions && d.getOptions()) || {} | |
| if (w <= 0) return | |
| let C = { timestamp: ZI.dateTimestampInSeconds(), ...I }, | |
| V = W ? ZI.consoleSandbox(() => W(C, G)) : C | |
| if (V === null) return | |
| if (d.emit) d.emit('beforeAddBreadcrumb', V, G) | |
| Z.addBreadcrumb(V, 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, G) { | |
| this.getScope().setTag(I, G), this.getIsolationScope().setTag(I, G) | |
| } | |
| setExtra(I, G) { | |
| this.getScope().setExtra(I, G), this.getIsolationScope().setExtra(I, G) | |
| } | |
| setContext(I, G) { | |
| this.getScope().setContext(I, G), this.getIsolationScope().setContext(I, G) | |
| } | |
| configureScope(I) { | |
| let { scope: G, client: Z } = this.getStackTop() | |
| if (Z) I(G) | |
| } | |
| run(I) { | |
| let G = d01(this) | |
| try { | |
| I(this) | |
| } finally { | |
| d01(G) | |
| } | |
| } | |
| getIntegration(I) { | |
| let G = this.getClient() | |
| if (!G) return null | |
| try { | |
| return G.getIntegration(I) | |
| } catch (Z) { | |
| return ( | |
| G01.DEBUG_BUILD && | |
| ZI.logger.warn(`Cannot retrieve integration ${I.id} from the current Hub`), | |
| null | |
| ) | |
| } | |
| } | |
| startTransaction(I, G) { | |
| let Z = this._callExtensionMethod('startTransaction', I, G) | |
| if (G01.DEBUG_BUILD && !Z) | |
| if (!this.getClient()) | |
| ZI.logger.warn( | |
| "Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'", | |
| ) | |
| else | |
| ZI.logger | |
| .warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init': | |
| Sentry.addTracingExtensions(); | |
| Sentry.init({...}); | |
| `) | |
| return Z | |
| } | |
| traceHeaders() { | |
| return this._callExtensionMethod('traceHeaders') | |
| } | |
| captureSession(I = !1) { | |
| if (I) return this.endSession() | |
| this._sendSessionUpdate() | |
| } | |
| endSession() { | |
| let G = this.getStackTop().scope, | |
| Z = G.getSession() | |
| if (Z) Z01.closeSession(Z) | |
| this._sendSessionUpdate(), G.setSession() | |
| } | |
| startSession(I) { | |
| let { scope: G, client: Z } = this.getStackTop(), | |
| { release: d, environment: W = pj2.DEFAULT_ENVIRONMENT } = (Z && Z.getOptions()) || {}, | |
| { userAgent: w } = ZI.GLOBAL_OBJ.navigator || {}, | |
| B = Z01.makeSession({ | |
| release: d, | |
| environment: W, | |
| user: G.getUser(), | |
| ...(w && { userAgent: w }), | |
| ...I, | |
| }), | |
| C = G.getSession && G.getSession() | |
| if (C && C.status === 'ok') Z01.updateSession(C, { status: 'exited' }) | |
| return this.endSession(), G.setSession(B), B | |
| } | |
| shouldSendDefaultPii() { | |
| let I = this.getClient(), | |
| G = I && I.getOptions() | |
| return Boolean(G && G.sendDefaultPii) | |
| } | |
| _sendSessionUpdate() { | |
| let { scope: I, client: G } = this.getStackTop(), | |
| Z = I.getSession() | |
| if (Z && G && G.captureSession) G.captureSession(Z) | |
| } | |
| _callExtensionMethod(I, ...G) { | |
| let d = mF().__SENTRY__ | |
| if (d && d.extensions && typeof d.extensions[I] === 'function') | |
| return d.extensions[I].apply(this, G) | |
| G01.DEBUG_BUILD && ZI.logger.warn(`Extension method ${I} couldn't be found, doing nothing.`) | |
| } | |
| } | |
| function mF() { | |
| return ( | |
| (ZI.GLOBAL_OBJ.__SENTRY__ = ZI.GLOBAL_OBJ.__SENTRY__ || { extensions: {}, hub: void 0 }), | |
| ZI.GLOBAL_OBJ | |
| ) | |
| } | |
| function d01(I) { | |
| let G = mF(), | |
| Z = Dv(G) | |
| return Jm(G, I), Z | |
| } | |
| function hf1() { | |
| let I = mF() | |
| if (I.__SENTRY__ && I.__SENTRY__.acs) { | |
| let G = I.__SENTRY__.acs.getCurrentHub() | |
| if (G) return G | |
| } | |
| return xf1(I) | |
| } | |
| function aj2() { | |
| return hf1().getIsolationScope() | |
| } | |
| function xf1(I = mF()) { | |
| if (!cf1(I) || Dv(I).isOlderThan(Fm)) Jm(I, new Hv()) | |
| return Dv(I) | |
| } | |
| function rj2(I, G = xf1()) { | |
| if (!cf1(I) || Dv(I).isOlderThan(Fm)) { | |
| let Z = G.getClient(), | |
| d = G.getScope(), | |
| W = G.getIsolationScope() | |
| Jm(I, new Hv(Z, d.clone(), W.clone())) | |
| } | |
| } | |
| function sj2(I) { | |
| let G = mF() | |
| ;(G.__SENTRY__ = G.__SENTRY__ || {}), (G.__SENTRY__.acs = I) | |
| } | |
| function oj2(I, G = {}) { | |
| let Z = mF() | |
| if (Z.__SENTRY__ && Z.__SENTRY__.acs) return Z.__SENTRY__.acs.runWithAsyncContext(I, G) | |
| return I() | |
| } | |
| function cf1(I) { | |
| return !!(I && I.__SENTRY__ && I.__SENTRY__.hub) | |
| } | |
| function Dv(I) { | |
| return ZI.getGlobalSingleton('hub', () => new Hv(), I) | |
| } | |
| function Jm(I, G) { | |
| if (!I) return !1 | |
| let Z = (I.__SENTRY__ = I.__SENTRY__ || {}) | |
| return (Z.hub = G), !0 | |
| } | |
| pf1.API_VERSION = Fm | |
| pf1.Hub = Hv | |
| pf1.ensureHubOnCarrier = rj2 | |
| pf1.getCurrentHub = hf1 | |
| pf1.getHubFromCarrier = Dv | |
| pf1.getIsolationScope = aj2 | |
| pf1.getMainCarrier = mF | |
| pf1.makeMain = d01 | |
| pf1.runWithAsyncContext = oj2 | |
| pf1.setAsyncContextStrategy = sj2 | |
| pf1.setHubOnCarrier = Jm | |
| }) | |
| var Km = _((nf1) => { | |
| Object.defineProperty(nf1, '__esModule', { value: !0 }) | |
| var if1 = X0(), | |
| Ak2 = HB() | |
| function Xk2(I) { | |
| return (I || Ak2.getCurrentHub()).getScope().getTransaction() | |
| } | |
| var Yk2 = if1.extractTraceparentData | |
| nf1.stripUrlQueryAndFragment = if1.stripUrlQueryAndFragment | |
| nf1.extractTraceparentData = Yk2 | |
| nf1.getActiveTransaction = Xk2 | |
| }) | |
| var gm = _((rf1) => { | |
| Object.defineProperty(rf1, '__esModule', { value: !0 }) | |
| var W01 = X0(), | |
| Fk2 = Q6(), | |
| Jk2 = Km(), | |
| af1 = !1 | |
| function Kk2() { | |
| if (af1) return | |
| ;(af1 = !0), | |
| W01.addGlobalErrorInstrumentationHandler(w01), | |
| W01.addGlobalUnhandledRejectionInstrumentationHandler(w01) | |
| } | |
| function w01() { | |
| let I = Jk2.getActiveTransaction() | |
| if (I) | |
| Fk2.DEBUG_BUILD && | |
| W01.logger.log('[Tracing] Transaction: internal_error -> Global error occured'), | |
| I.setStatus('internal_error') | |
| } | |
| w01.tag = 'sentry_tracingErrorCallback' | |
| rf1.registerErrorInstrumentation = Kk2 | |
| }) | |
| var jN = _((sf1) => { | |
| Object.defineProperty(sf1, '__esModule', { value: !0 }) | |
| sf1.SpanStatus = void 0 | |
| ;(function (I) { | |
| I.Ok = 'ok' | |
| let Z = 'deadline_exceeded' | |
| I.DeadlineExceeded = Z | |
| let d = 'unauthenticated' | |
| I.Unauthenticated = d | |
| let W = 'permission_denied' | |
| I.PermissionDenied = W | |
| let w = 'not_found' | |
| I.NotFound = w | |
| let B = 'resource_exhausted' | |
| I.ResourceExhausted = B | |
| let C = 'invalid_argument' | |
| I.InvalidArgument = C | |
| let V = 'unimplemented' | |
| I.Unimplemented = V | |
| let A = 'unavailable' | |
| I.Unavailable = A | |
| let X = 'internal_error' | |
| I.InternalError = X | |
| let Y = 'unknown_error' | |
| I.UnknownError = Y | |
| let H = 'cancelled' | |
| I.Cancelled = H | |
| let J = 'already_exists' | |
| I.AlreadyExists = J | |
| let K = 'failed_precondition' | |
| I.FailedPrecondition = K | |
| let g = 'aborted' | |
| I.Aborted = g | |
| let z = 'out_of_range' | |
| I.OutOfRange = z | |
| let f = 'data_loss' | |
| I.DataLoss = f | |
| })(sf1.SpanStatus || (sf1.SpanStatus = {})) | |
| function C01(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 Nk2 = C01 | |
| function zk2(I, G) { | |
| I.setTag('http.status_code', String(G)), I.setData('http.response.status_code', G) | |
| let Z = C01(G) | |
| if (Z !== 'unknown_error') I.setStatus(Z) | |
| } | |
| sf1.getSpanStatusFromHttpCode = C01 | |
| sf1.setHttpStatus = zk2 | |
| sf1.spanStatusfromHttpCode = Nk2 | |
| }) | |
| var V01 = _((of1) => { | |
| Object.defineProperty(of1, '__esModule', { value: !0 }) | |
| var fk2 = X0() | |
| function Rk2(I, G, Z = () => {}) { | |
| let d | |
| try { | |
| d = I() | |
| } catch (W) { | |
| throw (G(W), Z(), W) | |
| } | |
| return Ek2(d, G, Z) | |
| } | |
| function Ek2(I, G, Z) { | |
| if (fk2.isThenable(I)) | |
| return I.then( | |
| (d) => { | |
| return Z(), d | |
| }, | |
| (d) => { | |
| throw (G(d), Z(), d) | |
| }, | |
| ) | |
| return Z(), I | |
| } | |
| of1.handleCallbackErrors = Rk2 | |
| }) | |
| var Nm = _((ef1) => { | |
| Object.defineProperty(ef1, '__esModule', { value: !0 }) | |
| var Mk2 = tZ() | |
| function Sk2(I) { | |
| if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) return !1 | |
| let G = Mk2.getClient(), | |
| Z = I || (G && G.getOptions()) | |
| return !!Z && (Z.enableTracing || 'tracesSampleRate' in Z || 'tracesSampler' in Z) | |
| } | |
| ef1.hasTracingEnabled = Sk2 | |
| }) | |
| var Um = _((WR1) => { | |
| Object.defineProperty(WR1, '__esModule', { value: !0 }) | |
| var Fv = X0(), | |
| $k2 = Q6(), | |
| XY = HB(), | |
| zm = iI() | |
| gm() | |
| jN() | |
| var yk2 = TF(), | |
| kN = tZ(), | |
| A01 = V01(), | |
| tf1 = Nm() | |
| function Pk2(I, G, Z = () => {}, d = () => {}) { | |
| let W = XY.getCurrentHub(), | |
| w = kN.getCurrentScope(), | |
| B = w.getSpan(), | |
| C = qm(I), | |
| V = Qm(W, { parentSpan: B, spanContext: C, forceTransaction: !1, scope: w }) | |
| return ( | |
| w.setSpan(V), | |
| A01.handleCallbackErrors( | |
| () => G(V), | |
| (A) => { | |
| V && V.setStatus('internal_error'), Z(A, V) | |
| }, | |
| () => { | |
| V && V.end(), w.setSpan(B), d() | |
| }, | |
| ) | |
| ) | |
| } | |
| function IR1(I, G) { | |
| let Z = qm(I) | |
| return XY.runWithAsyncContext(() => { | |
| return kN.withScope(I.scope, (d) => { | |
| let W = XY.getCurrentHub(), | |
| w = d.getSpan(), | |
| C = | |
| I.onlyIfParent && !w | |
| ? void 0 | |
| : Qm(W, { | |
| parentSpan: w, | |
| spanContext: Z, | |
| forceTransaction: I.forceTransaction, | |
| scope: d, | |
| }) | |
| return A01.handleCallbackErrors( | |
| () => G(C), | |
| () => { | |
| if (C) { | |
| let { status: V } = zm.spanToJSON(C) | |
| if (!V || V === 'ok') C.setStatus('internal_error') | |
| } | |
| }, | |
| () => C && C.end(), | |
| ) | |
| }) | |
| }) | |
| } | |
| var Ok2 = IR1 | |
| function uk2(I, G) { | |
| let Z = qm(I) | |
| return XY.runWithAsyncContext(() => { | |
| return kN.withScope(I.scope, (d) => { | |
| let W = XY.getCurrentHub(), | |
| w = d.getSpan(), | |
| C = | |
| I.onlyIfParent && !w | |
| ? void 0 | |
| : Qm(W, { | |
| parentSpan: w, | |
| spanContext: Z, | |
| forceTransaction: I.forceTransaction, | |
| scope: d, | |
| }) | |
| function V() { | |
| C && C.end() | |
| } | |
| return A01.handleCallbackErrors( | |
| () => G(C, V), | |
| () => { | |
| if (C && C.isRecording()) { | |
| let { status: A } = zm.spanToJSON(C) | |
| if (!A || A === 'ok') C.setStatus('internal_error') | |
| } | |
| }, | |
| ) | |
| }) | |
| }) | |
| } | |
| function Tk2(I) { | |
| if (!tf1.hasTracingEnabled()) return | |
| let G = qm(I), | |
| Z = XY.getCurrentHub(), | |
| d = I.scope ? I.scope.getSpan() : GR1() | |
| if (I.onlyIfParent && !d) return | |
| let B = (I.scope || kN.getCurrentScope()).clone() | |
| return Qm(Z, { parentSpan: d, spanContext: G, forceTransaction: I.forceTransaction, scope: B }) | |
| } | |
| function GR1() { | |
| return kN.getCurrentScope().getSpan() | |
| } | |
| var mk2 = ({ sentryTrace: I, baggage: G }, Z) => { | |
| let d = kN.getCurrentScope(), | |
| { | |
| traceparentData: W, | |
| dynamicSamplingContext: w, | |
| propagationContext: B, | |
| } = Fv.tracingContextFromHeaders(I, G) | |
| if ((d.setPropagationContext(B), $k2.DEBUG_BUILD && W)) | |
| Fv.logger.log(`[Tracing] Continuing trace ${W.traceId}.`) | |
| let C = { ...W, metadata: Fv.dropUndefinedKeys({ dynamicSamplingContext: w }) } | |
| if (!Z) return C | |
| return XY.runWithAsyncContext(() => { | |
| return Z(C) | |
| }) | |
| } | |
| function Qm(I, { parentSpan: G, spanContext: Z, forceTransaction: d, scope: W }) { | |
| if (!tf1.hasTracingEnabled()) return | |
| let w = XY.getIsolationScope(), | |
| B | |
| if (G && !d) B = G.startChild(Z) | |
| else if (G) { | |
| let C = yk2.getDynamicSamplingContextFromSpan(G), | |
| { traceId: V, spanId: A } = G.spanContext(), | |
| X = zm.spanIsSampled(G) | |
| B = I.startTransaction({ | |
| traceId: V, | |
| parentSpanId: A, | |
| parentSampled: X, | |
| ...Z, | |
| metadata: { dynamicSamplingContext: C, ...Z.metadata }, | |
| }) | |
| } else { | |
| let { | |
| traceId: C, | |
| dsc: V, | |
| parentSpanId: A, | |
| sampled: X, | |
| } = { ...w.getPropagationContext(), ...W.getPropagationContext() } | |
| B = I.startTransaction({ | |
| traceId: C, | |
| parentSpanId: A, | |
| parentSampled: X, | |
| ...Z, | |
| metadata: { dynamicSamplingContext: V, ...Z.metadata }, | |
| }) | |
| } | |
| return W.setSpan(B), bk2(B, W, w), B | |
| } | |
| function qm(I) { | |
| if (I.startTime) { | |
| let G = { ...I } | |
| return (G.startTimestamp = zm.spanTimeInputToSeconds(I.startTime)), delete G.startTime, G | |
| } | |
| return I | |
| } | |
| var ZR1 = '_sentryScope', | |
| dR1 = '_sentryIsolationScope' | |
| function bk2(I, G, Z) { | |
| if (I) Fv.addNonEnumerableProperty(I, dR1, Z), Fv.addNonEnumerableProperty(I, ZR1, G) | |
| } | |
| function lk2(I) { | |
| return { scope: I[ZR1], isolationScope: I[dR1] } | |
| } | |
| WR1.continueTrace = mk2 | |
| WR1.getActiveSpan = GR1 | |
| WR1.getCapturedScopesOnSpan = lk2 | |
| WR1.startActiveSpan = Ok2 | |
| WR1.startInactiveSpan = Tk2 | |
| WR1.startSpan = IR1 | |
| WR1.startSpanManual = uk2 | |
| WR1.trace = Pk2 | |
| }) | |
| var Kv = _((BR1) => { | |
| Object.defineProperty(BR1, '__esModule', { value: !0 }) | |
| var ak2 = X0() | |
| Q6() | |
| gm() | |
| jN() | |
| var rk2 = Um(), | |
| Jv | |
| function wR1(I) { | |
| return Jv ? Jv.get(I) : void 0 | |
| } | |
| function sk2(I) { | |
| let G = wR1(I) | |
| if (!G) return | |
| let Z = {} | |
| for (let [, [d, W]] of G) { | |
| if (!Z[d]) Z[d] = [] | |
| Z[d].push(ak2.dropUndefinedKeys(W)) | |
| } | |
| return Z | |
| } | |
| function ok2(I, G, Z, d, W, w) { | |
| let B = rk2.getActiveSpan() | |
| if (B) { | |
| let C = wR1(B) || new Map(), | |
| V = `${I}:${G}@${d}`, | |
| A = C.get(w) | |
| if (A) { | |
| let [, X] = A | |
| C.set(w, [ | |
| V, | |
| { | |
| min: Math.min(X.min, Z), | |
| max: Math.max(X.max, Z), | |
| count: (X.count += 1), | |
| sum: (X.sum += Z), | |
| tags: X.tags, | |
| }, | |
| ]) | |
| } else C.set(w, [V, { min: Z, max: Z, count: 1, sum: Z, tags: W }]) | |
| if (!Jv) Jv = new WeakMap() | |
| Jv.set(B, C) | |
| } | |
| } | |
| BR1.getMetricSummaryJsonForSpan = sk2 | |
| BR1.updateMetricSummaryOnActiveSpan = ok2 | |
| }) | |
| var gv = _((CR1) => { | |
| Object.defineProperty(CR1, '__esModule', { value: !0 }) | |
| var Ih2 = 'sentry.source', | |
| Gh2 = 'sentry.sample_rate', | |
| Zh2 = 'sentry.op', | |
| dh2 = 'sentry.origin', | |
| Wh2 = 'profile_id' | |
| CR1.SEMANTIC_ATTRIBUTE_PROFILE_ID = Wh2 | |
| CR1.SEMANTIC_ATTRIBUTE_SENTRY_OP = Zh2 | |
| CR1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = dh2 | |
| CR1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = Gh2 | |
| CR1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = Ih2 | |
| }) | |
| var fm = _((YR1) => { | |
| Object.defineProperty(YR1, '__esModule', { value: !0 }) | |
| var bF = X0(), | |
| VR1 = Q6(), | |
| Xh2 = Kv(), | |
| uV = gv(), | |
| AR1 = mN(), | |
| hN = iI(), | |
| Yh2 = jN() | |
| class XR1 { | |
| 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 X01 { | |
| constructor(I = {}) { | |
| if ( | |
| ((this._traceId = I.traceId || bF.uuid4()), | |
| (this._spanId = I.spanId || bF.uuid4().substring(16)), | |
| (this._startTime = I.startTimestamp || bF.timestampInSeconds()), | |
| (this.tags = I.tags ? { ...I.tags } : {}), | |
| (this.data = I.data ? { ...I.data } : {}), | |
| (this.instrumenter = I.instrumenter || 'sentry'), | |
| (this._attributes = {}), | |
| this.setAttributes({ | |
| [uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: I.origin || 'manual', | |
| [uV.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[uV.SEMANTIC_ATTRIBUTE_SENTRY_OP] | |
| } | |
| set op(I) { | |
| this.setAttribute(uV.SEMANTIC_ATTRIBUTE_SENTRY_OP, I) | |
| } | |
| get origin() { | |
| return this._attributes[uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] | |
| } | |
| set origin(I) { | |
| this.setAttribute(uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, I) | |
| } | |
| spanContext() { | |
| let { _spanId: I, _traceId: G, _sampled: Z } = this | |
| return { spanId: I, traceId: G, traceFlags: Z ? hN.TRACE_FLAG_SAMPLED : hN.TRACE_FLAG_NONE } | |
| } | |
| startChild(I) { | |
| let G = new X01({ | |
| ...I, | |
| parentSpanId: this._spanId, | |
| sampled: this._sampled, | |
| traceId: this._traceId, | |
| }) | |
| if (((G.spanRecorder = this.spanRecorder), G.spanRecorder)) G.spanRecorder.add(G) | |
| let Z = AR1.getRootSpan(this) | |
| if (((G.transaction = Z), VR1.DEBUG_BUILD && Z)) { | |
| let d = (I && I.op) || '< unknown op >', | |
| W = hN.spanToJSON(G).description || '< unknown name >', | |
| w = Z.spanContext().spanId, | |
| B = `[Tracing] Starting '${d}' span on transaction '${W}' (${w}).` | |
| bF.logger.log(B), (this._logMessage = B) | |
| } | |
| return G | |
| } | |
| setTag(I, G) { | |
| return (this.tags = { ...this.tags, [I]: G }), this | |
| } | |
| setData(I, G) { | |
| return (this.data = { ...this.data, [I]: G }), this | |
| } | |
| setAttribute(I, G) { | |
| if (G === void 0) delete this._attributes[I] | |
| else this._attributes[I] = G | |
| } | |
| setAttributes(I) { | |
| Object.keys(I).forEach((G) => this.setAttribute(G, I[G])) | |
| } | |
| setStatus(I) { | |
| return (this._status = I), this | |
| } | |
| setHttpStatus(I) { | |
| return Yh2.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 G = AR1.getRootSpan(this) | |
| if (VR1.DEBUG_BUILD && G && G.spanContext().spanId !== this._spanId) { | |
| let Z = this._logMessage | |
| if (Z) bF.logger.log(Z.replace('Starting', 'Finishing')) | |
| } | |
| this._endTime = hN.spanTimeInputToSeconds(I) | |
| } | |
| toTraceparent() { | |
| return hN.spanToTraceHeader(this) | |
| } | |
| toContext() { | |
| return bF.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 hN.spanToTraceContext(this) | |
| } | |
| getSpanJSON() { | |
| return bF.dropUndefinedKeys({ | |
| data: this._getData(), | |
| description: this._name, | |
| op: this._attributes[uV.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[uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN], | |
| _metrics_summary: Xh2.getMetricSummaryJsonForSpan(this), | |
| profile_id: this._attributes[uV.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: G } = this, | |
| Z = Object.keys(I).length > 0, | |
| d = Object.keys(G).length > 0 | |
| if (!Z && !d) return | |
| if (Z && d) return { ...I, ...G } | |
| return Z ? I : G | |
| } | |
| } | |
| YR1.Span = X01 | |
| YR1.SpanRecorder = XR1 | |
| }) | |
| var vm = _((FR1) => { | |
| Object.defineProperty(FR1, '__esModule', { value: !0 }) | |
| var xN = X0(), | |
| Rm = Q6(), | |
| Hh2 = HB(), | |
| Fh2 = Kv(), | |
| Nv = gv(), | |
| Em = iI(), | |
| _R1 = TF(), | |
| DR1 = fm(), | |
| Jh2 = Um() | |
| class HR1 extends DR1.Span { | |
| constructor(I, G) { | |
| super(I) | |
| ;(this._contexts = {}), | |
| (this._hub = G || Hh2.getCurrentHub()), | |
| (this._name = I.name || ''), | |
| (this._metadata = { ...I.metadata }), | |
| (this._trimEnd = I.trimEnd), | |
| (this.transaction = this) | |
| let Z = this._metadata.dynamicSamplingContext | |
| if (Z) this._frozenDynamicSamplingContext = { ...Z } | |
| } | |
| get name() { | |
| return this._name | |
| } | |
| set name(I) { | |
| this.setName(I) | |
| } | |
| get metadata() { | |
| return { | |
| source: 'custom', | |
| spanMetadata: {}, | |
| ...this._metadata, | |
| ...(this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] && { | |
| source: this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
| }), | |
| ...(this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] && { | |
| sampleRate: this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE], | |
| }), | |
| } | |
| } | |
| set metadata(I) { | |
| this._metadata = I | |
| } | |
| setName(I, G = 'custom') { | |
| ;(this._name = I), this.setAttribute(Nv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, G) | |
| } | |
| updateName(I) { | |
| return (this._name = I), this | |
| } | |
| initSpanRecorder(I = 1000) { | |
| if (!this.spanRecorder) this.spanRecorder = new DR1.SpanRecorder(I) | |
| this.spanRecorder.add(this) | |
| } | |
| setContext(I, G) { | |
| if (G === null) delete this._contexts[I] | |
| else this._contexts[I] = G | |
| } | |
| setMeasurement(I, G, Z = '') { | |
| this._measurements[I] = { value: G, unit: Z } | |
| } | |
| setMetadata(I) { | |
| this._metadata = { ...this._metadata, ...I } | |
| } | |
| end(I) { | |
| let G = Em.spanTimeInputToSeconds(I), | |
| Z = this._finishTransaction(G) | |
| if (!Z) return | |
| return this._hub.captureEvent(Z) | |
| } | |
| toContext() { | |
| let I = super.toContext() | |
| return xN.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 _R1.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) | |
| Rm.DEBUG_BUILD && | |
| xN.logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.'), | |
| (this._name = '<unlabeled transaction>') | |
| super.end(I) | |
| let G = this._hub.getClient() | |
| if (G && G.emit) G.emit('finishTransaction', this) | |
| if (this._sampled !== !0) { | |
| if ( | |
| (Rm.DEBUG_BUILD && | |
| xN.logger.log( | |
| '[Tracing] Discarding transaction because its trace was not chosen to be sampled.', | |
| ), | |
| G) | |
| ) | |
| G.recordDroppedEvent('sample_rate', 'transaction') | |
| return | |
| } | |
| let Z = this.spanRecorder | |
| ? this.spanRecorder.spans.filter((A) => A !== this && Em.spanToJSON(A).timestamp) | |
| : [] | |
| if (this._trimEnd && Z.length > 0) { | |
| let A = Z.map((X) => Em.spanToJSON(X).timestamp).filter(Boolean) | |
| this._endTime = A.reduce((X, Y) => { | |
| return X > Y ? X : Y | |
| }) | |
| } | |
| let { scope: d, isolationScope: W } = Jh2.getCapturedScopesOnSpan(this), | |
| { metadata: w } = this, | |
| { source: B } = w, | |
| C = { | |
| contexts: { ...this._contexts, trace: Em.spanToTraceContext(this) }, | |
| spans: Z, | |
| start_timestamp: this._startTime, | |
| tags: this.tags, | |
| timestamp: this._endTime, | |
| transaction: this._name, | |
| type: 'transaction', | |
| sdkProcessingMetadata: { | |
| ...w, | |
| capturedSpanScope: d, | |
| capturedSpanIsolationScope: W, | |
| ...xN.dropUndefinedKeys({ | |
| dynamicSamplingContext: _R1.getDynamicSamplingContextFromSpan(this), | |
| }), | |
| }, | |
| _metrics_summary: Fh2.getMetricSummaryJsonForSpan(this), | |
| ...(B && { transaction_info: { source: B } }), | |
| } | |
| if (Object.keys(this._measurements).length > 0) | |
| Rm.DEBUG_BUILD && | |
| xN.logger.log( | |
| '[Measurements] Adding measurements to transaction', | |
| JSON.stringify(this._measurements, void 0, 2), | |
| ), | |
| (C.measurements = this._measurements) | |
| return ( | |
| Rm.DEBUG_BUILD && | |
| xN.logger.log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`), | |
| C | |
| ) | |
| } | |
| } | |
| FR1.Transaction = HR1 | |
| }) | |
| var _01 = _((KR1) => { | |
| Object.defineProperty(KR1, '__esModule', { value: !0 }) | |
| var f7 = X0(), | |
| nI = Q6(), | |
| Mm = iI(), | |
| gh2 = fm(), | |
| Nh2 = vm(), | |
| Sm = { idleTimeout: 1000, finalTimeout: 30000, heartbeatInterval: 5000 }, | |
| zh2 = 'finishReason', | |
| cN = [ | |
| 'heartbeatFailed', | |
| 'idleTimeout', | |
| 'documentHidden', | |
| 'finalTimeout', | |
| 'externalFinish', | |
| 'cancelled', | |
| ] | |
| class Y01 extends gh2.SpanRecorder { | |
| constructor(I, G, Z, d) { | |
| super(d) | |
| ;(this._pushActivity = I), (this._popActivity = G), (this.transactionSpanId = Z) | |
| } | |
| add(I) { | |
| if (I.spanContext().spanId !== this.transactionSpanId) { | |
| let G = I.end | |
| if ( | |
| ((I.end = (...Z) => { | |
| return this._popActivity(I.spanContext().spanId), G.apply(I, Z) | |
| }), | |
| Mm.spanToJSON(I).timestamp === void 0) | |
| ) | |
| this._pushActivity(I.spanContext().spanId) | |
| } | |
| super.add(I) | |
| } | |
| } | |
| class JR1 extends Nh2.Transaction { | |
| constructor( | |
| I, | |
| G, | |
| Z = Sm.idleTimeout, | |
| d = Sm.finalTimeout, | |
| W = Sm.heartbeatInterval, | |
| w = !1, | |
| B = !1, | |
| ) { | |
| super(I, G) | |
| if ( | |
| ((this._idleHub = G), | |
| (this._idleTimeout = Z), | |
| (this._finalTimeout = d), | |
| (this._heartbeatInterval = W), | |
| (this._onScope = w), | |
| (this.activities = {}), | |
| (this._heartbeatCounter = 0), | |
| (this._finished = !1), | |
| (this._idleTimeoutCanceledPermanently = !1), | |
| (this._beforeFinishCallbacks = []), | |
| (this._finishReason = cN[4]), | |
| (this._autoFinishAllowed = !B), | |
| w) | |
| ) | |
| nI.DEBUG_BUILD && | |
| f7.logger.log(`Setting idle transaction on scope. Span ID: ${this.spanContext().spanId}`), | |
| G.getScope().setSpan(this) | |
| if (!B) this._restartIdleTimeout() | |
| setTimeout(() => { | |
| if (!this._finished) | |
| this.setStatus('deadline_exceeded'), (this._finishReason = cN[3]), this.end() | |
| }, this._finalTimeout) | |
| } | |
| end(I) { | |
| let G = Mm.spanTimeInputToSeconds(I) | |
| if (((this._finished = !0), (this.activities = {}), this.op === 'ui.action.click')) | |
| this.setAttribute(zh2, this._finishReason) | |
| if (this.spanRecorder) { | |
| nI.DEBUG_BUILD && | |
| f7.logger.log( | |
| '[Tracing] finishing IdleTransaction', | |
| new Date(G * 1000).toISOString(), | |
| this.op, | |
| ) | |
| for (let Z of this._beforeFinishCallbacks) Z(this, G) | |
| ;(this.spanRecorder.spans = this.spanRecorder.spans.filter((Z) => { | |
| if (Z.spanContext().spanId === this.spanContext().spanId) return !0 | |
| if (!Mm.spanToJSON(Z).timestamp) | |
| Z.setStatus('cancelled'), | |
| Z.end(G), | |
| nI.DEBUG_BUILD && | |
| f7.logger.log( | |
| '[Tracing] cancelling span since transaction ended early', | |
| JSON.stringify(Z, void 0, 2), | |
| ) | |
| let { start_timestamp: d, timestamp: W } = Mm.spanToJSON(Z), | |
| w = d && d < G, | |
| B = (this._finalTimeout + this._idleTimeout) / 1000, | |
| C = W && d && W - d < B | |
| if (nI.DEBUG_BUILD) { | |
| let V = JSON.stringify(Z, void 0, 2) | |
| if (!w) | |
| f7.logger.log( | |
| '[Tracing] discarding Span since it happened after Transaction was finished', | |
| V, | |
| ) | |
| else if (!C) | |
| f7.logger.log( | |
| '[Tracing] discarding Span since it finished after Transaction final timeout', | |
| V, | |
| ) | |
| } | |
| return w && C | |
| })), | |
| nI.DEBUG_BUILD && f7.logger.log('[Tracing] flushing IdleTransaction') | |
| } else nI.DEBUG_BUILD && f7.logger.log('[Tracing] No active IdleTransaction') | |
| if (this._onScope) { | |
| let Z = this._idleHub.getScope() | |
| if (Z.getTransaction() === this) Z.setSpan(void 0) | |
| } | |
| return super.end(I) | |
| } | |
| registerBeforeFinishCallback(I) { | |
| this._beforeFinishCallbacks.push(I) | |
| } | |
| initSpanRecorder(I) { | |
| if (!this.spanRecorder) { | |
| let G = (d) => { | |
| if (this._finished) return | |
| this._pushActivity(d) | |
| }, | |
| Z = (d) => { | |
| if (this._finished) return | |
| this._popActivity(d) | |
| } | |
| ;(this.spanRecorder = new Y01(G, Z, this.spanContext().spanId, I)), | |
| nI.DEBUG_BUILD && f7.logger.log('Starting heartbeat'), | |
| this._pingHeartbeat() | |
| } | |
| this.spanRecorder.add(this) | |
| } | |
| cancelIdleTimeout(I, { restartOnChildSpanChange: G } = { restartOnChildSpanChange: !0 }) { | |
| if (((this._idleTimeoutCanceledPermanently = G === !1), this._idleTimeoutID)) { | |
| if ( | |
| (clearTimeout(this._idleTimeoutID), | |
| (this._idleTimeoutID = void 0), | |
| Object.keys(this.activities).length === 0 && this._idleTimeoutCanceledPermanently) | |
| ) | |
| (this._finishReason = cN[5]), this.end(I) | |
| } | |
| } | |
| setFinishReason(I) { | |
| this._finishReason = I | |
| } | |
| sendAutoFinishSignal() { | |
| if (!this._autoFinishAllowed) | |
| nI.DEBUG_BUILD && f7.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 = cN[1]), this.end(I) | |
| }, this._idleTimeout)) | |
| } | |
| _pushActivity(I) { | |
| this.cancelIdleTimeout(void 0, { | |
| restartOnChildSpanChange: !this._idleTimeoutCanceledPermanently, | |
| }), | |
| nI.DEBUG_BUILD && f7.logger.log(`[Tracing] pushActivity: ${I}`), | |
| (this.activities[I] = !0), | |
| nI.DEBUG_BUILD && | |
| f7.logger.log('[Tracing] new activities count', Object.keys(this.activities).length) | |
| } | |
| _popActivity(I) { | |
| if (this.activities[I]) | |
| nI.DEBUG_BUILD && f7.logger.log(`[Tracing] popActivity ${I}`), | |
| delete this.activities[I], | |
| nI.DEBUG_BUILD && | |
| f7.logger.log('[Tracing] new activities count', Object.keys(this.activities).length) | |
| if (Object.keys(this.activities).length === 0) { | |
| let G = f7.timestampInSeconds() | |
| if (this._idleTimeoutCanceledPermanently) { | |
| if (this._autoFinishAllowed) (this._finishReason = cN[5]), this.end(G) | |
| } else this._restartIdleTimeout(G + 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) | |
| nI.DEBUG_BUILD && | |
| f7.logger.log('[Tracing] Transaction finished because of no change for 3 heart beats'), | |
| this.setStatus('deadline_exceeded'), | |
| (this._finishReason = cN[0]), | |
| this.end() | |
| } else this._pingHeartbeat() | |
| } | |
| _pingHeartbeat() { | |
| nI.DEBUG_BUILD && | |
| f7.logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`), | |
| setTimeout(() => { | |
| this._beat() | |
| }, this._heartbeatInterval) | |
| } | |
| } | |
| KR1.IdleTransaction = JR1 | |
| KR1.IdleTransactionSpanRecorder = Y01 | |
| KR1.TRACING_DEFAULTS = Sm | |
| }) | |
| var D01 = _((NR1) => { | |
| Object.defineProperty(NR1, '__esModule', { value: !0 }) | |
| var lF = X0(), | |
| pN = Q6(), | |
| Lm = gv(), | |
| fh2 = Nm(), | |
| Rh2 = iI() | |
| function Eh2(I, G, Z) { | |
| if (!fh2.hasTracingEnabled(G)) return (I.sampled = !1), I | |
| if (I.sampled !== void 0) | |
| return I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(I.sampled)), I | |
| let d | |
| if (typeof G.tracesSampler === 'function') | |
| (d = G.tracesSampler(Z)), I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(d)) | |
| else if (Z.parentSampled !== void 0) d = Z.parentSampled | |
| else if (typeof G.tracesSampleRate !== 'undefined') | |
| (d = G.tracesSampleRate), I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(d)) | |
| else (d = 1), I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, d) | |
| if (!gR1(d)) | |
| return ( | |
| pN.DEBUG_BUILD && | |
| lF.logger.warn('[Tracing] Discarding transaction because of invalid sample rate.'), | |
| (I.sampled = !1), | |
| I | |
| ) | |
| if (!d) | |
| return ( | |
| pN.DEBUG_BUILD && | |
| lF.logger.log( | |
| `[Tracing] Discarding transaction because ${typeof G.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() < d), !I.sampled)) | |
| return ( | |
| pN.DEBUG_BUILD && | |
| lF.logger.log( | |
| `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(d)})`, | |
| ), | |
| I | |
| ) | |
| return ( | |
| pN.DEBUG_BUILD && | |
| lF.logger.log(`[Tracing] starting ${I.op} transaction - ${Rh2.spanToJSON(I).description}`), | |
| I | |
| ) | |
| } | |
| function gR1(I) { | |
| if (lF.isNaN(I) || !(typeof I === 'number' || typeof I === 'boolean')) | |
| return ( | |
| pN.DEBUG_BUILD && | |
| lF.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 ( | |
| pN.DEBUG_BUILD && | |
| lF.logger.warn( | |
| `[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${I}.`, | |
| ), | |
| !1 | |
| ) | |
| return !0 | |
| } | |
| NR1.isValidSampleRate = gR1 | |
| NR1.sampleTransaction = Eh2 | |
| }) | |
| var H01 = _((QR1) => { | |
| Object.defineProperty(QR1, '__esModule', { value: !0 }) | |
| var Sh2 = X0(), | |
| Lh2 = Q6(), | |
| $h2 = HB(), | |
| yh2 = iI(), | |
| Ph2 = gm(), | |
| Oh2 = _01(), | |
| zR1 = D01(), | |
| uh2 = vm() | |
| function Th2() { | |
| let G = this.getScope().getSpan() | |
| return G ? { 'sentry-trace': yh2.spanToTraceHeader(G) } : {} | |
| } | |
| function mh2(I, G) { | |
| let Z = this.getClient(), | |
| d = (Z && Z.getOptions()) || {}, | |
| W = d.instrumenter || 'sentry', | |
| w = I.instrumenter || 'sentry' | |
| if (W !== w) | |
| Lh2.DEBUG_BUILD && | |
| Sh2.logger | |
| .error(`A transaction was started with instrumenter=\`${w}\`, but the SDK is configured with the \`${W}\` instrumenter. | |
| The transaction will not be sampled. Please use the ${W} instrumentation to start transactions.`), | |
| (I.sampled = !1) | |
| let B = new uh2.Transaction(I, this) | |
| if ( | |
| ((B = zR1.sampleTransaction(B, d, { | |
| name: I.name, | |
| parentSampled: I.parentSampled, | |
| transactionContext: I, | |
| attributes: { ...I.data, ...I.attributes }, | |
| ...G, | |
| })), | |
| B.isRecording()) | |
| ) | |
| B.initSpanRecorder(d._experiments && d._experiments.maxSpans) | |
| if (Z && Z.emit) Z.emit('startTransaction', B) | |
| return B | |
| } | |
| function bh2(I, G, Z, d, W, w, B, C = !1) { | |
| let V = I.getClient(), | |
| A = (V && V.getOptions()) || {}, | |
| X = new Oh2.IdleTransaction(G, I, Z, d, B, W, C) | |
| if ( | |
| ((X = zR1.sampleTransaction(X, A, { | |
| name: G.name, | |
| parentSampled: G.parentSampled, | |
| transactionContext: G, | |
| attributes: { ...G.data, ...G.attributes }, | |
| ...w, | |
| })), | |
| X.isRecording()) | |
| ) | |
| X.initSpanRecorder(A._experiments && A._experiments.maxSpans) | |
| if (V && V.emit) V.emit('startTransaction', X) | |
| return X | |
| } | |
| function lh2() { | |
| let I = $h2.getMainCarrier() | |
| if (!I.__SENTRY__) return | |
| if ( | |
| ((I.__SENTRY__.extensions = I.__SENTRY__.extensions || {}), | |
| !I.__SENTRY__.extensions.startTransaction) | |
| ) | |
| I.__SENTRY__.extensions.startTransaction = mh2 | |
| if (!I.__SENTRY__.extensions.traceHeaders) I.__SENTRY__.extensions.traceHeaders = Th2 | |
| Ph2.registerErrorInstrumentation() | |
| } | |
| QR1.addTracingExtensions = lh2 | |
| QR1.startIdleTransaction = bh2 | |
| }) | |
| var UR1 = _((qR1) => { | |
| Object.defineProperty(qR1, '__esModule', { value: !0 }) | |
| var hh2 = Km() | |
| function xh2(I, G, Z) { | |
| let d = hh2.getActiveTransaction() | |
| if (d) d.setMeasurement(I, G, Z) | |
| } | |
| qR1.setMeasurement = xh2 | |
| }) | |
| var F01 = _((fR1) => { | |
| Object.defineProperty(fR1, '__esModule', { value: !0 }) | |
| var iN = X0() | |
| function ph2(I, G) { | |
| if (!G) return I | |
| return ( | |
| (I.sdk = I.sdk || {}), | |
| (I.sdk.name = I.sdk.name || G.name), | |
| (I.sdk.version = I.sdk.version || G.version), | |
| (I.sdk.integrations = [...(I.sdk.integrations || []), ...(G.integrations || [])]), | |
| (I.sdk.packages = [...(I.sdk.packages || []), ...(G.packages || [])]), | |
| I | |
| ) | |
| } | |
| function ih2(I, G, Z, d) { | |
| let W = iN.getSdkMetadataForEnvelopeHeader(Z), | |
| w = { | |
| sent_at: new Date().toISOString(), | |
| ...(W && { sdk: W }), | |
| ...(!!d && G && { dsn: iN.dsnToString(G) }), | |
| }, | |
| B = 'aggregates' in I ? [{ type: 'sessions' }, I] : [{ type: 'session' }, I.toJSON()] | |
| return iN.createEnvelope(w, [B]) | |
| } | |
| function nh2(I, G, Z, d) { | |
| let W = iN.getSdkMetadataForEnvelopeHeader(Z), | |
| w = I.type && I.type !== 'replay_event' ? I.type : 'event' | |
| ph2(I, Z && Z.sdk) | |
| let B = iN.createEventEnvelopeHeaders(I, W, d, G) | |
| delete I.sdkProcessingMetadata | |
| let C = [{ type: w }, I] | |
| return iN.createEnvelope(B, [C]) | |
| } | |
| fR1.createEventEnvelope = nh2 | |
| fR1.createSessionEnvelope = ih2 | |
| }) | |
| var J01 = _((ER1) => { | |
| Object.defineProperty(ER1, '__esModule', { value: !0 }) | |
| var sh2 = X0(), | |
| oh2 = tZ() | |
| class RR1 { | |
| constructor(I, G) { | |
| 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 = G | |
| } | |
| 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((Z) => { | |
| return this._pendingAggregates[parseInt(Z)] | |
| }), | |
| G = { attrs: this._sessionAttrs, aggregates: I } | |
| return sh2.dropUndefinedKeys(G) | |
| } | |
| close() { | |
| clearInterval(this._intervalId), (this._isEnabled = !1), this.flush() | |
| } | |
| incrementSessionStatusCount() { | |
| if (!this._isEnabled) return | |
| let I = oh2.getCurrentScope(), | |
| G = I.getRequestSession() | |
| if (G && G.status) | |
| this._incrementSessionStatusCount(G.status, new Date()), I.setRequestSession(void 0) | |
| } | |
| _incrementSessionStatusCount(I, G) { | |
| let Z = new Date(G).setSeconds(0, 0) | |
| this._pendingAggregates[Z] = this._pendingAggregates[Z] || {} | |
| let d = this._pendingAggregates[Z] | |
| if (!d.started) d.started = new Date(Z).toISOString() | |
| switch (I) { | |
| case 'errored': | |
| return (d.errored = (d.errored || 0) + 1), d.errored | |
| case 'ok': | |
| return (d.exited = (d.exited || 0) + 1), d.exited | |
| default: | |
| return (d.crashed = (d.crashed || 0) + 1), d.crashed | |
| } | |
| } | |
| } | |
| ER1.SessionFlusher = RR1 | |
| }) | |
| var $m = _((MR1) => { | |
| Object.defineProperty(MR1, '__esModule', { value: !0 }) | |
| var K01 = X0(), | |
| th2 = '7' | |
| function vR1(I) { | |
| let G = I.protocol ? `${I.protocol}:` : '', | |
| Z = I.port ? `:${I.port}` : '' | |
| return `${G}//${I.host}${Z}${I.path ? `/${I.path}` : ''}/api/` | |
| } | |
| function Ix2(I) { | |
| return `${vR1(I)}${I.projectId}/envelope/` | |
| } | |
| function Gx2(I, G) { | |
| return K01.urlEncode({ | |
| sentry_key: I.publicKey, | |
| sentry_version: th2, | |
| ...(G && { sentry_client: `${G.name}/${G.version}` }), | |
| }) | |
| } | |
| function Zx2(I, G = {}) { | |
| let Z = typeof G === 'string' ? G : G.tunnel, | |
| d = typeof G === 'string' || !G._metadata ? void 0 : G._metadata.sdk | |
| return Z ? Z : `${Ix2(I)}?${Gx2(I, d)}` | |
| } | |
| function dx2(I, G) { | |
| let Z = K01.makeDsn(I) | |
| if (!Z) return '' | |
| let d = `${vR1(Z)}embed/error-page/`, | |
| W = `dsn=${K01.dsnToString(Z)}` | |
| for (let w in G) { | |
| if (w === 'dsn') continue | |
| if (w === 'onClose') continue | |
| if (w === 'user') { | |
| let B = G.user | |
| if (!B) continue | |
| if (B.name) W += `&name=${encodeURIComponent(B.name)}` | |
| if (B.email) W += `&email=${encodeURIComponent(B.email)}` | |
| } else W += `&${encodeURIComponent(w)}=${encodeURIComponent(G[w])}` | |
| } | |
| return `${d}?${W}` | |
| } | |
| MR1.getEnvelopeEndpointWithUrlEncodedAuth = Zx2 | |
| MR1.getReportDialogEndpoint = dx2 | |
| }) | |
| var TV = _((LR1) => { | |
| Object.defineProperty(LR1, '__esModule', { value: !0 }) | |
| var ym = X0(), | |
| g01 = Q6(), | |
| Bx2 = Av(), | |
| Cx2 = tZ(), | |
| Vx2 = HB(), | |
| N01 = [] | |
| function Ax2(I) { | |
| let G = {} | |
| return ( | |
| I.forEach((Z) => { | |
| let { name: d } = Z, | |
| W = G[d] | |
| if (W && !W.isDefaultInstance && Z.isDefaultInstance) return | |
| G[d] = Z | |
| }), | |
| Object.keys(G).map((Z) => G[Z]) | |
| ) | |
| } | |
| function Xx2(I) { | |
| let G = I.defaultIntegrations || [], | |
| Z = I.integrations | |
| G.forEach((B) => { | |
| B.isDefaultInstance = !0 | |
| }) | |
| let d | |
| if (Array.isArray(Z)) d = [...G, ...Z] | |
| else if (typeof Z === 'function') d = ym.arrayify(Z(G)) | |
| else d = G | |
| let W = Ax2(d), | |
| w = Hx2(W, (B) => B.name === 'Debug') | |
| if (w !== -1) { | |
| let [B] = W.splice(w, 1) | |
| W.push(B) | |
| } | |
| return W | |
| } | |
| function Yx2(I, G) { | |
| let Z = {} | |
| return ( | |
| G.forEach((d) => { | |
| if (d) SR1(I, d, Z) | |
| }), | |
| Z | |
| ) | |
| } | |
| function _x2(I, G) { | |
| for (let Z of G) if (Z && Z.afterAllSetup) Z.afterAllSetup(I) | |
| } | |
| function SR1(I, G, Z) { | |
| if (Z[G.name]) { | |
| g01.DEBUG_BUILD && | |
| ym.logger.log(`Integration skipped because it was already installed: ${G.name}`) | |
| return | |
| } | |
| if (((Z[G.name] = G), N01.indexOf(G.name) === -1)) | |
| G.setupOnce(Bx2.addGlobalEventProcessor, Vx2.getCurrentHub), N01.push(G.name) | |
| if (G.setup && typeof G.setup === 'function') G.setup(I) | |
| if (I.on && typeof G.preprocessEvent === 'function') { | |
| let d = G.preprocessEvent.bind(G) | |
| I.on('preprocessEvent', (W, w) => d(W, w, I)) | |
| } | |
| if (I.addEventProcessor && typeof G.processEvent === 'function') { | |
| let d = G.processEvent.bind(G), | |
| W = Object.assign((w, B) => d(w, B, I), { id: G.name }) | |
| I.addEventProcessor(W) | |
| } | |
| g01.DEBUG_BUILD && ym.logger.log(`Integration installed: ${G.name}`) | |
| } | |
| function Dx2(I) { | |
| let G = Cx2.getClient() | |
| if (!G || !G.addIntegration) { | |
| g01.DEBUG_BUILD && | |
| ym.logger.warn(`Cannot add integration "${I.name}" because no SDK Client is available.`) | |
| return | |
| } | |
| G.addIntegration(I) | |
| } | |
| function Hx2(I, G) { | |
| for (let Z = 0; Z < I.length; Z++) if (G(I[Z]) === !0) return Z | |
| return -1 | |
| } | |
| function Fx2(I, G) { | |
| return Object.assign( | |
| function Z(...d) { | |
| return G(...d) | |
| }, | |
| { id: I }, | |
| ) | |
| } | |
| function Jx2(I) { | |
| return I | |
| } | |
| LR1.addIntegration = Dx2 | |
| LR1.afterSetupIntegrations = _x2 | |
| LR1.convertIntegrationFnToClass = Fx2 | |
| LR1.defineIntegration = Jx2 | |
| LR1.getIntegrationsToSetup = Xx2 | |
| LR1.installedIntegrations = N01 | |
| LR1.setupIntegration = SR1 | |
| LR1.setupIntegrations = Yx2 | |
| }) | |
| var zv = _(($R1) => { | |
| Object.defineProperty($R1, '__esModule', { value: !0 }) | |
| var Rx2 = X0() | |
| function Ex2(I, G, Z, d) { | |
| let W = Object.entries(Rx2.dropUndefinedKeys(d)).sort((w, B) => w[0].localeCompare(B[0])) | |
| return `${I}${G}${Z}${W}` | |
| } | |
| function vx2(I) { | |
| let G = 0 | |
| for (let Z = 0; Z < I.length; Z++) { | |
| let d = I.charCodeAt(Z) | |
| ;(G = (G << 5) - G + d), (G &= G) | |
| } | |
| return G >>> 0 | |
| } | |
| function Mx2(I) { | |
| let G = '' | |
| for (let Z of I) { | |
| let d = Object.entries(Z.tags), | |
| W = d.length > 0 ? `|#${d.map(([w, B]) => `${w}:${B}`).join(',')}` : '' | |
| G += `${Z.name}@${Z.unit}:${Z.metric}|${Z.metricType}${W}|T${Z.timestamp} | |
| ` | |
| } | |
| return G | |
| } | |
| function Sx2(I) { | |
| return I.replace(/[^\w]+/gi, '_') | |
| } | |
| function Lx2(I) { | |
| return I.replace(/[^\w\-.]+/gi, '_') | |
| } | |
| function $x2(I) { | |
| return I.replace(/[^\w\-./]+/gi, '') | |
| } | |
| var yx2 = [ | |
| [ | |
| ` | |
| `, | |
| '\\n', | |
| ], | |
| ['\r', '\\r'], | |
| ['\t', '\\t'], | |
| ['\\', '\\\\'], | |
| ['|', '\\u{7c}'], | |
| [',', '\\u{2c}'], | |
| ] | |
| function Px2(I) { | |
| for (let [G, Z] of yx2) if (I === G) return Z | |
| return I | |
| } | |
| function Ox2(I) { | |
| return [...I].reduce((G, Z) => G + Px2(Z), '') | |
| } | |
| function ux2(I) { | |
| let G = {} | |
| for (let Z in I) | |
| if (Object.prototype.hasOwnProperty.call(I, Z)) { | |
| let d = $x2(Z) | |
| G[d] = Ox2(String(I[Z])) | |
| } | |
| return G | |
| } | |
| $R1.getBucketKey = Ex2 | |
| $R1.sanitizeMetricKey = Lx2 | |
| $R1.sanitizeTags = ux2 | |
| $R1.sanitizeUnit = Sx2 | |
| $R1.serializeMetricBuckets = Mx2 | |
| $R1.simpleHash = vx2 | |
| }) | |
| var OR1 = _((PR1) => { | |
| Object.defineProperty(PR1, '__esModule', { value: !0 }) | |
| var yR1 = X0(), | |
| hx2 = zv() | |
| function xx2(I, G, Z, d) { | |
| let W = { sent_at: new Date().toISOString() } | |
| if (Z && Z.sdk) W.sdk = { name: Z.sdk.name, version: Z.sdk.version } | |
| if (!!d && G) W.dsn = yR1.dsnToString(G) | |
| let w = cx2(I) | |
| return yR1.createEnvelope(W, [w]) | |
| } | |
| function cx2(I) { | |
| let G = hx2.serializeMetricBuckets(I) | |
| return [{ type: 'statsd', length: G.length }, G] | |
| } | |
| PR1.createMetricEnvelope = xx2 | |
| }) | |
| var z01 = _((kR1) => { | |
| Object.defineProperty(kR1, '__esModule', { value: !0 }) | |
| var M5 = X0(), | |
| ix2 = $m(), | |
| JB = Q6(), | |
| uR1 = F01(), | |
| nx2 = tZ(), | |
| ax2 = HB(), | |
| Pm = TV(), | |
| rx2 = OR1(), | |
| TR1 = TN(), | |
| sx2 = TF(), | |
| ox2 = Am(), | |
| mR1 = "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 = M5.makeDsn(I.dsn) | |
| else JB.DEBUG_BUILD && M5.logger.warn('No DSN provided, client will not send events.') | |
| if (this._dsn) { | |
| let G = ix2.getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, I) | |
| this._transport = I.transport({ | |
| tunnel: this._options.tunnel, | |
| recordDroppedEvent: this.recordDroppedEvent.bind(this), | |
| ...I.transportOptions, | |
| url: G, | |
| }) | |
| } | |
| } | |
| captureException(I, G, Z) { | |
| if (M5.checkOrSetAlreadyCaught(I)) { | |
| JB.DEBUG_BUILD && M5.logger.log(mR1) | |
| return | |
| } | |
| let d = G && G.event_id | |
| return ( | |
| this._process( | |
| this.eventFromException(I, G) | |
| .then((W) => this._captureEvent(W, G, Z)) | |
| .then((W) => { | |
| d = W | |
| }), | |
| ), | |
| d | |
| ) | |
| } | |
| captureMessage(I, G, Z, d) { | |
| let W = Z && Z.event_id, | |
| w = M5.isParameterizedString(I) ? I : String(I), | |
| B = M5.isPrimitive(I) ? this.eventFromMessage(w, G, Z) : this.eventFromException(I, Z) | |
| return ( | |
| this._process( | |
| B.then((C) => this._captureEvent(C, Z, d)).then((C) => { | |
| W = C | |
| }), | |
| ), | |
| W | |
| ) | |
| } | |
| captureEvent(I, G, Z) { | |
| if (G && G.originalException && M5.checkOrSetAlreadyCaught(G.originalException)) { | |
| JB.DEBUG_BUILD && M5.logger.log(mR1) | |
| return | |
| } | |
| let d = G && G.event_id, | |
| w = (I.sdkProcessingMetadata || {}).capturedSpanScope | |
| return ( | |
| this._process( | |
| this._captureEvent(I, G, w || Z).then((B) => { | |
| d = B | |
| }), | |
| ), | |
| d | |
| ) | |
| } | |
| captureSession(I) { | |
| if (typeof I.release !== 'string') | |
| JB.DEBUG_BUILD && | |
| M5.logger.warn('Discarded session because of missing or non-string release') | |
| else this.sendSession(I), TR1.updateSession(I, { init: !1 }) | |
| } | |
| getDsn() { | |
| return this._dsn | |
| } | |
| getOptions() { | |
| return this._options | |
| } | |
| getSdkMetadata() { | |
| return this._options._metadata | |
| } | |
| getTransport() { | |
| return this._transport | |
| } | |
| flush(I) { | |
| let G = this._transport | |
| if (G) { | |
| if (this.metricsAggregator) this.metricsAggregator.flush() | |
| return this._isClientDoneProcessing(I).then((Z) => { | |
| return G.flush(I).then((d) => Z && d) | |
| }) | |
| } else return M5.resolvedSyncPromise(!0) | |
| } | |
| close(I) { | |
| return this.flush(I).then((G) => { | |
| if (((this.getOptions().enabled = !1), this.metricsAggregator)) | |
| this.metricsAggregator.close() | |
| return G | |
| }) | |
| } | |
| 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 (G) { | |
| return ( | |
| JB.DEBUG_BUILD && | |
| M5.logger.warn(`Cannot retrieve integration ${I.id} from the current Client`), | |
| null | |
| ) | |
| } | |
| } | |
| addIntegration(I) { | |
| let G = this._integrations[I.name] | |
| if ((Pm.setupIntegration(this, I, this._integrations), !G)) | |
| Pm.afterSetupIntegrations(this, [I]) | |
| } | |
| sendEvent(I, G = {}) { | |
| this.emit('beforeSendEvent', I, G) | |
| let Z = uR1.createEventEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel) | |
| for (let W of G.attachments || []) | |
| Z = M5.addItemToEnvelope( | |
| Z, | |
| M5.createAttachmentEnvelopeItem( | |
| W, | |
| this._options.transportOptions && this._options.transportOptions.textEncoder, | |
| ), | |
| ) | |
| let d = this._sendEnvelope(Z) | |
| if (d) d.then((W) => this.emit('afterSendEvent', I, W), null) | |
| } | |
| sendSession(I) { | |
| let G = uR1.createSessionEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel) | |
| this._sendEnvelope(G) | |
| } | |
| recordDroppedEvent(I, G, Z) { | |
| if (this._options.sendClientReports) { | |
| let d = typeof Z === 'number' ? Z : 1, | |
| W = `${I}:${G}` | |
| JB.DEBUG_BUILD && M5.logger.log(`Recording outcome: "${W}"${d > 1 ? ` (${d} times)` : ''}`), | |
| (this._outcomes[W] = (this._outcomes[W] || 0) + d) | |
| } | |
| } | |
| captureAggregateMetrics(I) { | |
| JB.DEBUG_BUILD && M5.logger.log(`Flushing aggregated metrics, number of metrics: ${I.length}`) | |
| let G = rx2.createMetricEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel) | |
| this._sendEnvelope(G) | |
| } | |
| on(I, G) { | |
| if (!this._hooks[I]) this._hooks[I] = [] | |
| this._hooks[I].push(G) | |
| } | |
| emit(I, ...G) { | |
| if (this._hooks[I]) this._hooks[I].forEach((Z) => Z(...G)) | |
| } | |
| _setupIntegrations() { | |
| let { integrations: I } = this._options | |
| ;(this._integrations = Pm.setupIntegrations(this, I)), | |
| Pm.afterSetupIntegrations(this, I), | |
| (this._integrationsInitialized = !0) | |
| } | |
| _updateSessionFromEvent(I, G) { | |
| let Z = !1, | |
| d = !1, | |
| W = G.exception && G.exception.values | |
| if (W) { | |
| d = !0 | |
| for (let C of W) { | |
| let V = C.mechanism | |
| if (V && V.handled === !1) { | |
| Z = !0 | |
| break | |
| } | |
| } | |
| } | |
| let w = I.status === 'ok' | |
| if ((w && I.errors === 0) || (w && Z)) | |
| TR1.updateSession(I, { | |
| ...(Z && { status: 'crashed' }), | |
| errors: I.errors || Number(d || Z), | |
| }), | |
| this.captureSession(I) | |
| } | |
| _isClientDoneProcessing(I) { | |
| return new M5.SyncPromise((G) => { | |
| let Z = 0, | |
| d = 1, | |
| W = setInterval(() => { | |
| if (this._numProcessing == 0) clearInterval(W), G(!0) | |
| else if (((Z += d), I && Z >= I)) clearInterval(W), G(!1) | |
| }, d) | |
| }) | |
| } | |
| _isEnabled() { | |
| return this.getOptions().enabled !== !1 && this._transport !== void 0 | |
| } | |
| _prepareEvent(I, G, Z, d = ax2.getIsolationScope()) { | |
| let W = this.getOptions(), | |
| w = Object.keys(this._integrations) | |
| if (!G.integrations && w.length > 0) G.integrations = w | |
| return ( | |
| this.emit('preprocessEvent', I, G), | |
| ox2.prepareEvent(W, I, G, Z, this, d).then((B) => { | |
| if (B === null) return B | |
| let C = { ...d.getPropagationContext(), ...(Z ? Z.getPropagationContext() : void 0) } | |
| if (!(B.contexts && B.contexts.trace) && C) { | |
| let { traceId: A, spanId: X, parentSpanId: Y, dsc: H } = C | |
| B.contexts = { trace: { trace_id: A, span_id: X, parent_span_id: Y }, ...B.contexts } | |
| let J = H ? H : sx2.getDynamicSamplingContextFromClient(A, this, Z) | |
| B.sdkProcessingMetadata = { dynamicSamplingContext: J, ...B.sdkProcessingMetadata } | |
| } | |
| return B | |
| }) | |
| ) | |
| } | |
| _captureEvent(I, G = {}, Z) { | |
| return this._processEvent(I, G, Z).then( | |
| (d) => { | |
| return d.event_id | |
| }, | |
| (d) => { | |
| if (JB.DEBUG_BUILD) { | |
| let W = d | |
| if (W.logLevel === 'log') M5.logger.log(W.message) | |
| else M5.logger.warn(W) | |
| } | |
| return | |
| }, | |
| ) | |
| } | |
| _processEvent(I, G, Z) { | |
| let d = this.getOptions(), | |
| { sampleRate: W } = d, | |
| w = jR1(I), | |
| B = lR1(I), | |
| C = I.type || 'error', | |
| V = `before send for type \`${C}\`` | |
| if (B && typeof W === 'number' && Math.random() > W) | |
| return ( | |
| this.recordDroppedEvent('sample_rate', 'error', I), | |
| M5.rejectedSyncPromise( | |
| new M5.SentryError( | |
| `Discarding event because it's not included in the random sample (sampling rate = ${W})`, | |
| 'log', | |
| ), | |
| ) | |
| ) | |
| let A = C === 'replay_event' ? 'replay' : C, | |
| Y = (I.sdkProcessingMetadata || {}).capturedSpanIsolationScope | |
| return this._prepareEvent(I, G, Z, Y) | |
| .then((H) => { | |
| if (H === null) | |
| throw ( | |
| (this.recordDroppedEvent('event_processor', A, I), | |
| new M5.SentryError('An event processor returned `null`, will not send event.', 'log')) | |
| ) | |
| if (G.data && G.data.__sentry__ === !0) return H | |
| let K = tx2(d, H, G) | |
| return ex2(K, V) | |
| }) | |
| .then((H) => { | |
| if (H === null) { | |
| if ((this.recordDroppedEvent('before_send', A, I), w)) { | |
| let z = 1 + (I.spans || []).length | |
| this.recordDroppedEvent('before_send', 'span', z) | |
| } | |
| throw new M5.SentryError(`${V} returned \`null\`, will not send event.`, 'log') | |
| } | |
| let J = Z && Z.getSession() | |
| if (!w && J) this._updateSessionFromEvent(J, H) | |
| if (w) { | |
| let g = | |
| (H.sdkProcessingMetadata && H.sdkProcessingMetadata.spanCountBeforeProcessing) || 0, | |
| z = H.spans ? H.spans.length : 0, | |
| f = g - z | |
| if (f > 0) this.recordDroppedEvent('before_send', 'span', f) | |
| } | |
| let K = H.transaction_info | |
| if (w && K && H.transaction !== I.transaction) | |
| H.transaction_info = { ...K, source: 'custom' } | |
| return this.sendEvent(H, G), H | |
| }) | |
| .then(null, (H) => { | |
| if (H instanceof M5.SentryError) throw H | |
| throw ( | |
| (this.captureException(H, { data: { __sentry__: !0 }, originalException: H }), | |
| new M5.SentryError(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. | |
| Reason: ${H}`)) | |
| ) | |
| }) | |
| } | |
| _process(I) { | |
| this._numProcessing++, | |
| I.then( | |
| (G) => { | |
| return this._numProcessing--, G | |
| }, | |
| (G) => { | |
| return this._numProcessing--, G | |
| }, | |
| ) | |
| } | |
| _sendEnvelope(I) { | |
| if ((this.emit('beforeEnvelope', I), this._isEnabled() && this._transport)) | |
| return this._transport.send(I).then(null, (G) => { | |
| JB.DEBUG_BUILD && M5.logger.error('Error while sending event:', G) | |
| }) | |
| else JB.DEBUG_BUILD && M5.logger.error('Transport disabled') | |
| } | |
| _clearOutcomes() { | |
| let I = this._outcomes | |
| return ( | |
| (this._outcomes = {}), | |
| Object.keys(I).map((G) => { | |
| let [Z, d] = G.split(':') | |
| return { reason: Z, category: d, quantity: I[G] } | |
| }) | |
| ) | |
| } | |
| } | |
| function ex2(I, G) { | |
| let Z = `${G} must return \`null\` or a valid event.` | |
| if (M5.isThenable(I)) | |
| return I.then( | |
| (d) => { | |
| if (!M5.isPlainObject(d) && d !== null) throw new M5.SentryError(Z) | |
| return d | |
| }, | |
| (d) => { | |
| throw new M5.SentryError(`${G} rejected with ${d}`) | |
| }, | |
| ) | |
| else if (!M5.isPlainObject(I) && I !== null) throw new M5.SentryError(Z) | |
| return I | |
| } | |
| function tx2(I, G, Z) { | |
| let { beforeSend: d, beforeSendTransaction: W } = I | |
| if (lR1(G) && d) return d(G, Z) | |
| if (jR1(G) && W) { | |
| if (G.spans) { | |
| let w = G.spans.length | |
| G.sdkProcessingMetadata = { ...G.sdkProcessingMetadata, spanCountBeforeProcessing: w } | |
| } | |
| return W(G, Z) | |
| } | |
| return G | |
| } | |
| function lR1(I) { | |
| return I.type === void 0 | |
| } | |
| function jR1(I) { | |
| return I.type === 'transaction' | |
| } | |
| function Ic2(I) { | |
| let G = nx2.getClient() | |
| if (!G || !G.addEventProcessor) return | |
| G.addEventProcessor(I) | |
| } | |
| kR1.BaseClient = bR1 | |
| kR1.addEventProcessor = Ic2 | |
| }) | |
| var q01 = _((hR1) => { | |
| Object.defineProperty(hR1, '__esModule', { value: !0 }) | |
| var Q01 = X0() | |
| function dc2(I, G, Z, d, W) { | |
| let w = { sent_at: new Date().toISOString() } | |
| if (Z && Z.sdk) w.sdk = { name: Z.sdk.name, version: Z.sdk.version } | |
| if (!!d && !!W) w.dsn = Q01.dsnToString(W) | |
| if (G) w.trace = Q01.dropUndefinedKeys(G) | |
| let B = Wc2(I) | |
| return Q01.createEnvelope(w, [B]) | |
| } | |
| function Wc2(I) { | |
| return [{ type: 'check_in' }, I] | |
| } | |
| hR1.createCheckInEnvelope = dc2 | |
| }) | |
| var Qv = _((xR1) => { | |
| Object.defineProperty(xR1, '__esModule', { value: !0 }) | |
| var Bc2 = 'c', | |
| Cc2 = 'g', | |
| Vc2 = 's', | |
| Ac2 = 'd', | |
| Xc2 = 5000, | |
| Yc2 = 1e4, | |
| _c2 = 1e4 | |
| xR1.COUNTER_METRIC_TYPE = Bc2 | |
| xR1.DEFAULT_BROWSER_FLUSH_INTERVAL = Xc2 | |
| xR1.DEFAULT_FLUSH_INTERVAL = Yc2 | |
| xR1.DISTRIBUTION_METRIC_TYPE = Ac2 | |
| xR1.GAUGE_METRIC_TYPE = Cc2 | |
| xR1.MAX_WEIGHT = _c2 | |
| xR1.SET_METRIC_TYPE = Vc2 | |
| }) | |
| var v01 = _((cR1) => { | |
| Object.defineProperty(cR1, '__esModule', { value: !0 }) | |
| var Om = Qv(), | |
| zc2 = zv() | |
| class U01 { | |
| constructor(I) { | |
| this._value = I | |
| } | |
| get weight() { | |
| return 1 | |
| } | |
| add(I) { | |
| this._value += I | |
| } | |
| toString() { | |
| return `${this._value}` | |
| } | |
| } | |
| class f01 { | |
| 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 R01 { | |
| constructor(I) { | |
| this._value = [I] | |
| } | |
| get weight() { | |
| return this._value.length | |
| } | |
| add(I) { | |
| this._value.push(I) | |
| } | |
| toString() { | |
| return this._value.join(':') | |
| } | |
| } | |
| class E01 { | |
| 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' ? zc2.simpleHash(I) : I)) | |
| .join(':') | |
| } | |
| } | |
| var Qc2 = { | |
| [Om.COUNTER_METRIC_TYPE]: U01, | |
| [Om.GAUGE_METRIC_TYPE]: f01, | |
| [Om.DISTRIBUTION_METRIC_TYPE]: R01, | |
| [Om.SET_METRIC_TYPE]: E01, | |
| } | |
| cR1.CounterMetric = U01 | |
| cR1.DistributionMetric = R01 | |
| cR1.GaugeMetric = f01 | |
| cR1.METRIC_MAP = Qc2 | |
| cR1.SetMetric = E01 | |
| }) | |
| var aR1 = _((nR1) => { | |
| Object.defineProperty(nR1, '__esModule', { value: !0 }) | |
| var pR1 = X0(), | |
| qv = Qv(), | |
| vc2 = v01(), | |
| Mc2 = Kv(), | |
| um = zv() | |
| class iR1 { | |
| constructor(I) { | |
| if ( | |
| ((this._client = I), | |
| (this._buckets = new Map()), | |
| (this._bucketsTotalWeight = 0), | |
| (this._interval = setInterval(() => this._flush(), qv.DEFAULT_FLUSH_INTERVAL)), | |
| this._interval.unref) | |
| ) | |
| this._interval.unref() | |
| ;(this._flushShift = Math.floor((Math.random() * qv.DEFAULT_FLUSH_INTERVAL) / 1000)), | |
| (this._forceFlush = !1) | |
| } | |
| add(I, G, Z, d = 'none', W = {}, w = pR1.timestampInSeconds()) { | |
| let B = Math.floor(w), | |
| C = um.sanitizeMetricKey(G), | |
| V = um.sanitizeTags(W), | |
| A = um.sanitizeUnit(d), | |
| X = um.getBucketKey(I, C, A, V), | |
| Y = this._buckets.get(X), | |
| H = Y && I === qv.SET_METRIC_TYPE ? Y.metric.weight : 0 | |
| if (Y) { | |
| if ((Y.metric.add(Z), Y.timestamp < B)) Y.timestamp = B | |
| } else | |
| (Y = { | |
| metric: new vc2.METRIC_MAP[I](Z), | |
| timestamp: B, | |
| metricType: I, | |
| name: C, | |
| unit: A, | |
| tags: V, | |
| }), | |
| this._buckets.set(X, Y) | |
| let J = typeof Z === 'string' ? Y.metric.weight - H : Z | |
| if ( | |
| (Mc2.updateMetricSummaryOnActiveSpan(I, C, J, A, W, X), | |
| (this._bucketsTotalWeight += Y.metric.weight), | |
| this._bucketsTotalWeight >= qv.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(pR1.timestampInSeconds()) - | |
| qv.DEFAULT_FLUSH_INTERVAL / 1000 - | |
| this._flushShift, | |
| G = new Map() | |
| for (let [Z, d] of this._buckets) | |
| if (d.timestamp <= I) G.set(Z, d), (this._bucketsTotalWeight -= d.metric.weight) | |
| for (let [Z] of G) this._buckets.delete(Z) | |
| this._captureMetrics(G) | |
| } | |
| _captureMetrics(I) { | |
| if (I.size > 0 && this._client.captureAggregateMetrics) { | |
| let G = Array.from(I).map(([, Z]) => Z) | |
| this._client.captureAggregateMetrics(G) | |
| } | |
| } | |
| } | |
| nR1.MetricsAggregator = iR1 | |
| }) | |
| var eR1 = _((oR1) => { | |
| Object.defineProperty(oR1, '__esModule', { value: !0 }) | |
| var mV = X0(), | |
| Lc2 = z01(), | |
| $c2 = q01(), | |
| Tm = Q6(), | |
| yc2 = tZ(), | |
| Pc2 = aR1(), | |
| Oc2 = J01(), | |
| uc2 = H01(), | |
| Tc2 = iI(), | |
| mc2 = mN() | |
| jN() | |
| var rR1 = TF() | |
| class sR1 extends Lc2.BaseClient { | |
| constructor(I) { | |
| uc2.addTracingExtensions() | |
| super(I) | |
| if (I._experiments && I._experiments.metricsAggregator) | |
| this.metricsAggregator = new Pc2.MetricsAggregator(this) | |
| } | |
| eventFromException(I, G) { | |
| return mV.resolvedSyncPromise( | |
| mV.eventFromUnknownInput(yc2.getClient(), this._options.stackParser, I, G), | |
| ) | |
| } | |
| eventFromMessage(I, G = 'info', Z) { | |
| return mV.resolvedSyncPromise( | |
| mV.eventFromMessage(this._options.stackParser, I, G, Z, this._options.attachStacktrace), | |
| ) | |
| } | |
| captureException(I, G, Z) { | |
| if (this._options.autoSessionTracking && this._sessionFlusher && Z) { | |
| let d = Z.getRequestSession() | |
| if (d && d.status === 'ok') d.status = 'errored' | |
| } | |
| return super.captureException(I, G, Z) | |
| } | |
| captureEvent(I, G, Z) { | |
| if (this._options.autoSessionTracking && this._sessionFlusher && Z) { | |
| if ( | |
| (I.type || 'exception') === 'exception' && | |
| I.exception && | |
| I.exception.values && | |
| I.exception.values.length > 0 | |
| ) { | |
| let w = Z.getRequestSession() | |
| if (w && w.status === 'ok') w.status = 'errored' | |
| } | |
| } | |
| return super.captureEvent(I, G, Z) | |
| } | |
| close(I) { | |
| if (this._sessionFlusher) this._sessionFlusher.close() | |
| return super.close(I) | |
| } | |
| initSessionFlusher() { | |
| let { release: I, environment: G } = this._options | |
| if (!I) | |
| Tm.DEBUG_BUILD && | |
| mV.logger.warn( | |
| 'Cannot initialise an instance of SessionFlusher if no release is provided!', | |
| ) | |
| else this._sessionFlusher = new Oc2.SessionFlusher(this, { release: I, environment: G }) | |
| } | |
| captureCheckIn(I, G, Z) { | |
| let d = 'checkInId' in I && I.checkInId ? I.checkInId : mV.uuid4() | |
| if (!this._isEnabled()) | |
| return Tm.DEBUG_BUILD && mV.logger.warn('SDK not enabled, will not capture checkin.'), d | |
| let W = this.getOptions(), | |
| { release: w, environment: B, tunnel: C } = W, | |
| V = { | |
| check_in_id: d, | |
| monitor_slug: I.monitorSlug, | |
| status: I.status, | |
| release: w, | |
| environment: B, | |
| } | |
| if ('duration' in I) V.duration = I.duration | |
| if (G) | |
| V.monitor_config = { | |
| schedule: G.schedule, | |
| checkin_margin: G.checkinMargin, | |
| max_runtime: G.maxRuntime, | |
| timezone: G.timezone, | |
| } | |
| let [A, X] = this._getTraceInfoFromScope(Z) | |
| if (X) V.contexts = { trace: X } | |
| let Y = $c2.createCheckInEnvelope(V, A, this.getSdkMetadata(), C, this.getDsn()) | |
| return ( | |
| Tm.DEBUG_BUILD && mV.logger.info('Sending checkin:', I.monitorSlug, I.status), | |
| this._sendEnvelope(Y), | |
| d | |
| ) | |
| } | |
| _captureRequestSession() { | |
| if (!this._sessionFlusher) | |
| Tm.DEBUG_BUILD && | |
| mV.logger.warn( | |
| 'Discarded request mode session because autoSessionTracking option was disabled', | |
| ) | |
| else this._sessionFlusher.incrementSessionStatusCount() | |
| } | |
| _prepareEvent(I, G, Z, d) { | |
| 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, G, Z, d) | |
| } | |
| _getTraceInfoFromScope(I) { | |
| if (!I) return [void 0, void 0] | |
| let G = I.getSpan() | |
| if (G) | |
| return [ | |
| mc2.getRootSpan(G) ? rR1.getDynamicSamplingContextFromSpan(G) : void 0, | |
| Tc2.spanToTraceContext(G), | |
| ] | |
| let { traceId: Z, spanId: d, parentSpanId: W, dsc: w } = I.getPropagationContext(), | |
| B = { trace_id: Z, span_id: d, parent_span_id: W } | |
| if (w) return [w, B] | |
| return [rR1.getDynamicSamplingContextFromClient(Z, this, I), B] | |
| } | |
| } | |
| oR1.ServerRuntimeClient = sR1 | |
| }) | |
| var ZE1 = _((GE1) => { | |
| Object.defineProperty(GE1, '__esModule', { value: !0 }) | |
| var tR1 = X0(), | |
| lc2 = Q6(), | |
| jc2 = tZ(), | |
| kc2 = HB() | |
| function hc2(I, G) { | |
| if (G.debug === !0) | |
| if (lc2.DEBUG_BUILD) tR1.logger.enable() | |
| else | |
| tR1.consoleSandbox(() => { | |
| console.warn( | |
| '[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.', | |
| ) | |
| }) | |
| jc2.getCurrentScope().update(G.initialScope) | |
| let d = new I(G) | |
| IE1(d), xc2(d) | |
| } | |
| function IE1(I) { | |
| let Z = kc2.getCurrentHub().getStackTop() | |
| ;(Z.client = I), Z.scope.setClient(I) | |
| } | |
| function xc2(I) { | |
| if (I.init) I.init() | |
| else if (I.setupIntegrations) I.setupIntegrations() | |
| } | |
| GE1.initAndBind = hc2 | |
| GE1.setCurrentClient = IE1 | |
| }) | |
| var CE1 = _((BE1) => { | |
| Object.defineProperty(BE1, '__esModule', { value: !0 }) | |
| var aI = X0(), | |
| dE1 = Q6(), | |
| wE1 = 30 | |
| function ic2(I, G, Z = aI.makePromiseBuffer(I.bufferSize || wE1)) { | |
| let d = {}, | |
| W = (B) => Z.drain(B) | |
| function w(B) { | |
| let C = [] | |
| if ( | |
| (aI.forEachEnvelopeItem(B, (Y, H) => { | |
| let J = aI.envelopeItemTypeToDataCategory(H) | |
| if (aI.isRateLimited(d, J)) { | |
| let K = WE1(Y, H) | |
| I.recordDroppedEvent('ratelimit_backoff', J, K) | |
| } else C.push(Y) | |
| }), | |
| C.length === 0) | |
| ) | |
| return aI.resolvedSyncPromise() | |
| let V = aI.createEnvelope(B[0], C), | |
| A = (Y) => { | |
| aI.forEachEnvelopeItem(V, (H, J) => { | |
| let K = WE1(H, J) | |
| I.recordDroppedEvent(Y, aI.envelopeItemTypeToDataCategory(J), K) | |
| }) | |
| }, | |
| X = () => | |
| G({ body: aI.serializeEnvelope(V, I.textEncoder) }).then( | |
| (Y) => { | |
| if (Y.statusCode !== void 0 && (Y.statusCode < 200 || Y.statusCode >= 300)) | |
| dE1.DEBUG_BUILD && | |
| aI.logger.warn(`Sentry responded with status code ${Y.statusCode} to sent event.`) | |
| return (d = aI.updateRateLimits(d, Y)), Y | |
| }, | |
| (Y) => { | |
| throw (A('network_error'), Y) | |
| }, | |
| ) | |
| return Z.add(X).then( | |
| (Y) => Y, | |
| (Y) => { | |
| if (Y instanceof aI.SentryError) | |
| return ( | |
| dE1.DEBUG_BUILD && aI.logger.error('Skipped sending event because buffer is full.'), | |
| A('queue_overflow'), | |
| aI.resolvedSyncPromise() | |
| ) | |
| else throw Y | |
| }, | |
| ) | |
| } | |
| return (w.__sentry__baseTransport__ = !0), { send: w, flush: W } | |
| } | |
| function WE1(I, G) { | |
| if (G !== 'event' && G !== 'transaction') return | |
| return Array.isArray(I) ? I[1] : void 0 | |
| } | |
| BE1.DEFAULT_TRANSPORT_BUFFER_SIZE = wE1 | |
| BE1.createTransport = ic2 | |
| }) | |
| var XE1 = _((AE1) => { | |
| Object.defineProperty(AE1, '__esModule', { value: !0 }) | |
| var S01 = X0(), | |
| rc2 = Q6(), | |
| VE1 = 100, | |
| L01 = 5000, | |
| sc2 = 3600000 | |
| function M01(I, G) { | |
| rc2.DEBUG_BUILD && S01.logger.info(`[Offline]: ${I}`, G) | |
| } | |
| function oc2(I) { | |
| return (G) => { | |
| let Z = I(G), | |
| d = G.createStore ? G.createStore(G) : void 0, | |
| W = L01, | |
| w | |
| function B(X, Y, H) { | |
| if (S01.envelopeContainsItemType(X, ['replay_event', 'replay_recording', 'client_report'])) | |
| return !1 | |
| if (G.shouldStore) return G.shouldStore(X, Y, H) | |
| return !0 | |
| } | |
| function C(X) { | |
| if (!d) return | |
| if (w) clearTimeout(w) | |
| if ( | |
| ((w = setTimeout(async () => { | |
| w = void 0 | |
| let Y = await d.pop() | |
| if (Y) | |
| M01('Attempting to send previously queued event'), | |
| A(Y).catch((H) => { | |
| M01('Failed to retry sending', H) | |
| }) | |
| }, X)), | |
| typeof w !== 'number' && w.unref) | |
| ) | |
| w.unref() | |
| } | |
| function V() { | |
| if (w) return | |
| C(W), (W = Math.min(W * 2, sc2)) | |
| } | |
| async function A(X) { | |
| try { | |
| let Y = await Z.send(X), | |
| H = VE1 | |
| if (Y) { | |
| if (Y.headers && Y.headers['retry-after']) | |
| H = S01.parseRetryAfterHeader(Y.headers['retry-after']) | |
| else if ((Y.statusCode || 0) >= 400) return Y | |
| } | |
| return C(H), (W = L01), Y | |
| } catch (Y) { | |
| if (d && (await B(X, Y, W))) | |
| return await d.insert(X), V(), M01('Error sending. Event queued', Y), {} | |
| else throw Y | |
| } | |
| } | |
| if (G.flushAtStartup) V() | |
| return { send: A, flush: (X) => Z.flush(X) } | |
| } | |
| } | |
| AE1.MIN_DELAY = VE1 | |
| AE1.START_DELAY = L01 | |
| AE1.makeOfflineTransport = oc2 | |
| }) | |
| var _E1 = _((YE1) => { | |
| Object.defineProperty(YE1, '__esModule', { value: !0 }) | |
| var $01 = X0(), | |
| Gp2 = $m() | |
| function y01(I, G) { | |
| let Z | |
| return ( | |
| $01.forEachEnvelopeItem(I, (d, W) => { | |
| if (G.includes(W)) Z = Array.isArray(d) ? d[1] : void 0 | |
| return !!Z | |
| }), | |
| Z | |
| ) | |
| } | |
| function Zp2(I, G) { | |
| return (Z) => { | |
| let d = I(Z) | |
| return { | |
| ...d, | |
| send: async (W) => { | |
| let w = y01(W, ['event', 'transaction', 'profile', 'replay_event']) | |
| if (w) w.release = G | |
| return d.send(W) | |
| }, | |
| } | |
| } | |
| } | |
| function dp2(I, G) { | |
| return $01.createEnvelope(G ? { ...I[0], dsn: G } : I[0], I[1]) | |
| } | |
| function Wp2(I, G) { | |
| return (Z) => { | |
| let d = I(Z), | |
| W = new Map() | |
| function w(V, A) { | |
| let X = A ? `${V}:${A}` : V, | |
| Y = W.get(X) | |
| if (!Y) { | |
| let H = $01.dsnFromString(V) | |
| if (!H) return | |
| let J = Gp2.getEnvelopeEndpointWithUrlEncodedAuth(H, Z.tunnel) | |
| ;(Y = A ? Zp2(I, A)({ ...Z, url: J }) : I({ ...Z, url: J })), W.set(X, Y) | |
| } | |
| return [V, Y] | |
| } | |
| async function B(V) { | |
| function A(H) { | |
| let J = H && H.length ? H : ['event'] | |
| return y01(V, J) | |
| } | |
| let X = G({ envelope: V, getEvent: A }) | |
| .map((H) => { | |
| if (typeof H === 'string') return w(H, void 0) | |
| else return w(H.dsn, H.release) | |
| }) | |
| .filter((H) => !!H) | |
| if (X.length === 0) X.push(['', d]) | |
| return (await Promise.all(X.map(([H, J]) => J.send(dp2(V, H)))))[0] | |
| } | |
| async function C(V) { | |
| let A = [await d.flush(V)] | |
| for (let [, X] of W) A.push(await X.flush(V)) | |
| return A.every((X) => X) | |
| } | |
| return { send: B, flush: C } | |
| } | |
| } | |
| YE1.eventFromEnvelope = y01 | |
| YE1.makeMultiplexedTransport = Wp2 | |
| }) | |
| var FE1 = _((HE1) => { | |
| Object.defineProperty(HE1, '__esModule', { value: !0 }) | |
| var DE1 = X0() | |
| function Cp2(I, G) { | |
| let Z = { sent_at: new Date().toISOString() } | |
| if (G) Z.dsn = DE1.dsnToString(G) | |
| let d = I.map(Vp2) | |
| return DE1.createEnvelope(Z, d) | |
| } | |
| function Vp2(I) { | |
| return [{ type: 'span' }, I] | |
| } | |
| HE1.createSpanEnvelope = Cp2 | |
| }) | |
| var gE1 = _((KE1) => { | |
| Object.defineProperty(KE1, '__esModule', { value: !0 }) | |
| function Xp2(I, G) { | |
| let Z = G && Dp2(G) ? G.getClient() : G, | |
| d = Z && Z.getDsn(), | |
| W = Z && Z.getOptions().tunnel | |
| return _p2(I, d) || Yp2(I, W) | |
| } | |
| function Yp2(I, G) { | |
| if (!G) return !1 | |
| return JE1(I) === JE1(G) | |
| } | |
| function _p2(I, G) { | |
| return G ? I.includes(G.host) : !1 | |
| } | |
| function JE1(I) { | |
| return I[I.length - 1] === '/' ? I.slice(0, -1) : I | |
| } | |
| function Dp2(I) { | |
| return I.getClient !== void 0 | |
| } | |
| KE1.isSentryRequestUrl = Xp2 | |
| }) | |
| var zE1 = _((NE1) => { | |
| Object.defineProperty(NE1, '__esModule', { value: !0 }) | |
| function Fp2(I, ...G) { | |
| let Z = new String(String.raw(I, ...G)) | |
| return ( | |
| (Z.__sentry_template_string__ = I.join('\x00').replace(/%/g, '%%').replace(/\0/g, '%s')), | |
| (Z.__sentry_template_values__ = G), | |
| Z | |
| ) | |
| } | |
| NE1.parameterize = Fp2 | |
| }) | |
| var UE1 = _((qE1) => { | |
| Object.defineProperty(qE1, '__esModule', { value: !0 }) | |
| var QE1 = Hm() | |
| function Kp2(I, G, Z = [G], d = 'npm') { | |
| let W = I._metadata || {} | |
| if (!W.sdk) | |
| W.sdk = { | |
| name: `sentry.javascript.${G}`, | |
| packages: Z.map((w) => ({ name: `${d}:@sentry/${w}`, version: QE1.SDK_VERSION })), | |
| version: QE1.SDK_VERSION, | |
| } | |
| I._metadata = W | |
| } | |
| qE1.applySdkMetadata = Kp2 | |
| }) | |
| var ME1 = _((vE1) => { | |
| Object.defineProperty(vE1, '__esModule', { value: !0 }) | |
| var P01 = X0(), | |
| RE1 = new Map(), | |
| fE1 = new Set() | |
| function Np2(I) { | |
| if (!P01.GLOBAL_OBJ._sentryModuleMetadata) return | |
| for (let G of Object.keys(P01.GLOBAL_OBJ._sentryModuleMetadata)) { | |
| let Z = P01.GLOBAL_OBJ._sentryModuleMetadata[G] | |
| if (fE1.has(G)) continue | |
| fE1.add(G) | |
| let d = I(G) | |
| for (let W of d.reverse()) | |
| if (W.filename) { | |
| RE1.set(W.filename, Z) | |
| break | |
| } | |
| } | |
| } | |
| function EE1(I, G) { | |
| return Np2(I), RE1.get(G) | |
| } | |
| function zp2(I, G) { | |
| try { | |
| G.exception.values.forEach((Z) => { | |
| if (!Z.stacktrace) return | |
| for (let d of Z.stacktrace.frames || []) { | |
| if (!d.filename) continue | |
| let W = EE1(I, d.filename) | |
| if (W) d.module_metadata = W | |
| } | |
| }) | |
| } catch (Z) {} | |
| } | |
| function Qp2(I) { | |
| try { | |
| I.exception.values.forEach((G) => { | |
| if (!G.stacktrace) return | |
| for (let Z of G.stacktrace.frames || []) delete Z.module_metadata | |
| }) | |
| } catch (G) {} | |
| } | |
| vE1.addMetadataToStackFrames = zp2 | |
| vE1.getMetadataForUrl = EE1 | |
| vE1.stripMetadataFromStackFrames = Qp2 | |
| }) | |
| var OE1 = _((PE1) => { | |
| Object.defineProperty(PE1, '__esModule', { value: !0 }) | |
| var Rp2 = X0(), | |
| LE1 = TV(), | |
| SE1 = ME1(), | |
| $E1 = 'ModuleMetadata', | |
| Ep2 = () => { | |
| return { | |
| name: $E1, | |
| setupOnce() {}, | |
| setup(I) { | |
| if (typeof I.on !== 'function') return | |
| I.on('beforeEnvelope', (G) => { | |
| Rp2.forEachEnvelopeItem(G, (Z, d) => { | |
| if (d === 'event') { | |
| let W = Array.isArray(Z) ? Z[1] : void 0 | |
| if (W) SE1.stripMetadataFromStackFrames(W), (Z[1] = W) | |
| } | |
| }) | |
| }) | |
| }, | |
| processEvent(I, G, Z) { | |
| let d = Z.getOptions().stackParser | |
| return SE1.addMetadataToStackFrames(d, I), I | |
| }, | |
| } | |
| }, | |
| yE1 = LE1.defineIntegration(Ep2), | |
| vp2 = LE1.convertIntegrationFnToClass($E1, yE1) | |
| PE1.ModuleMetadata = vp2 | |
| PE1.moduleMetadataIntegration = yE1 | |
| }) | |
| var jE1 = _((lE1) => { | |
| Object.defineProperty(lE1, '__esModule', { value: !0 }) | |
| var uE1 = X0(), | |
| TE1 = TV(), | |
| Lp2 = iI(), | |
| O01 = { | |
| include: { | |
| cookies: !0, | |
| data: !0, | |
| headers: !0, | |
| ip: !1, | |
| query_string: !0, | |
| url: !0, | |
| user: { id: !0, username: !0, email: !0 }, | |
| }, | |
| transactionNamingScheme: 'methodPath', | |
| }, | |
| mE1 = 'RequestData', | |
| $p2 = (I = {}) => { | |
| let G = uE1.addRequestDataToEvent, | |
| Z = { | |
| ...O01, | |
| ...I, | |
| include: { | |
| method: !0, | |
| ...O01.include, | |
| ...I.include, | |
| user: | |
| I.include && typeof I.include.user === 'boolean' | |
| ? I.include.user | |
| : { ...O01.include.user, ...(I.include || {}).user }, | |
| }, | |
| } | |
| return { | |
| name: mE1, | |
| setupOnce() {}, | |
| processEvent(d, W, w) { | |
| let { transactionNamingScheme: B } = Z, | |
| { sdkProcessingMetadata: C = {} } = d, | |
| V = C.request | |
| if (!V) return d | |
| let A = | |
| C.requestDataOptionsFromExpressHandler || | |
| C.requestDataOptionsFromGCPWrapper || | |
| Pp2(Z), | |
| X = G(d, V, A) | |
| if (d.type === 'transaction' || B === 'handler') return X | |
| let H = V._sentryTransaction | |
| if (H) { | |
| let J = Lp2.spanToJSON(H).description || '', | |
| K = Op2(w) === 'sentry.javascript.nextjs' ? J.startsWith('/api') : B !== 'path', | |
| [g] = uE1.extractPathForTransaction(V, { path: !0, method: K, customRoute: J }) | |
| X.transaction = g | |
| } | |
| return X | |
| }, | |
| } | |
| }, | |
| bE1 = TE1.defineIntegration($p2), | |
| yp2 = TE1.convertIntegrationFnToClass(mE1, bE1) | |
| function Pp2(I) { | |
| let { | |
| transactionNamingScheme: G, | |
| include: { ip: Z, user: d, ...W }, | |
| } = I, | |
| w = [] | |
| for (let [C, V] of Object.entries(W)) if (V) w.push(C) | |
| let B | |
| if (d === void 0) B = !0 | |
| else if (typeof d === 'boolean') B = d | |
| else { | |
| let C = [] | |
| for (let [V, A] of Object.entries(d)) if (A) C.push(V) | |
| B = C | |
| } | |
| return { include: { ip: Z, user: B, request: w.length !== 0 ? w : void 0, transaction: G } } | |
| } | |
| function Op2(I) { | |
| try { | |
| return I.getOptions()._metadata.sdk.name | |
| } catch (G) { | |
| return | |
| } | |
| } | |
| lE1.RequestData = yp2 | |
| lE1.requestDataIntegration = bE1 | |
| }) | |
| var u01 = _((cE1) => { | |
| Object.defineProperty(cE1, '__esModule', { value: !0 }) | |
| var A8 = X0(), | |
| jF = Q6(), | |
| kE1 = TV(), | |
| mp2 = [ | |
| /^Script error\.?$/, | |
| /^Javascript error: Script error\.? on line 0$/, | |
| /^ResizeObserver loop completed with undelivered notifications.$/, | |
| /^Cannot redefine property: googletag$/, | |
| ], | |
| bp2 = [ | |
| /^.*\/healthcheck$/, | |
| /^.*\/healthy$/, | |
| /^.*\/live$/, | |
| /^.*\/ready$/, | |
| /^.*\/heartbeat$/, | |
| /^.*\/health$/, | |
| /^.*\/healthz$/, | |
| ], | |
| hE1 = 'InboundFilters', | |
| lp2 = (I = {}) => { | |
| return { | |
| name: hE1, | |
| setupOnce() {}, | |
| processEvent(G, Z, d) { | |
| let W = d.getOptions(), | |
| w = kp2(I, W) | |
| return hp2(G, w) ? null : G | |
| }, | |
| } | |
| }, | |
| xE1 = kE1.defineIntegration(lp2), | |
| jp2 = kE1.convertIntegrationFnToClass(hE1, xE1) | |
| function kp2(I = {}, G = {}) { | |
| return { | |
| allowUrls: [...(I.allowUrls || []), ...(G.allowUrls || [])], | |
| denyUrls: [...(I.denyUrls || []), ...(G.denyUrls || [])], | |
| ignoreErrors: [ | |
| ...(I.ignoreErrors || []), | |
| ...(G.ignoreErrors || []), | |
| ...(I.disableErrorDefaults ? [] : mp2), | |
| ], | |
| ignoreTransactions: [ | |
| ...(I.ignoreTransactions || []), | |
| ...(G.ignoreTransactions || []), | |
| ...(I.disableTransactionDefaults ? [] : bp2), | |
| ], | |
| ignoreInternal: I.ignoreInternal !== void 0 ? I.ignoreInternal : !0, | |
| } | |
| } | |
| function hp2(I, G) { | |
| if (G.ignoreInternal && ap2(I)) | |
| return ( | |
| jF.DEBUG_BUILD && | |
| A8.logger.warn(`Event dropped due to being internal Sentry Error. | |
| Event: ${A8.getEventDescription(I)}`), | |
| !0 | |
| ) | |
| if (xp2(I, G.ignoreErrors)) | |
| return ( | |
| jF.DEBUG_BUILD && | |
| A8.logger.warn(`Event dropped due to being matched by \`ignoreErrors\` option. | |
| Event: ${A8.getEventDescription(I)}`), | |
| !0 | |
| ) | |
| if (cp2(I, G.ignoreTransactions)) | |
| return ( | |
| jF.DEBUG_BUILD && | |
| A8.logger.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. | |
| Event: ${A8.getEventDescription(I)}`), | |
| !0 | |
| ) | |
| if (pp2(I, G.denyUrls)) | |
| return ( | |
| jF.DEBUG_BUILD && | |
| A8.logger.warn(`Event dropped due to being matched by \`denyUrls\` option. | |
| Event: ${A8.getEventDescription(I)}. | |
| Url: ${mm(I)}`), | |
| !0 | |
| ) | |
| if (!ip2(I, G.allowUrls)) | |
| return ( | |
| jF.DEBUG_BUILD && | |
| A8.logger.warn(`Event dropped due to not being matched by \`allowUrls\` option. | |
| Event: ${A8.getEventDescription(I)}. | |
| Url: ${mm(I)}`), | |
| !0 | |
| ) | |
| return !1 | |
| } | |
| function xp2(I, G) { | |
| if (I.type || !G || !G.length) return !1 | |
| return np2(I).some((Z) => A8.stringMatchesSomePattern(Z, G)) | |
| } | |
| function cp2(I, G) { | |
| if (I.type !== 'transaction' || !G || !G.length) return !1 | |
| let Z = I.transaction | |
| return Z ? A8.stringMatchesSomePattern(Z, G) : !1 | |
| } | |
| function pp2(I, G) { | |
| if (!G || !G.length) return !1 | |
| let Z = mm(I) | |
| return !Z ? !1 : A8.stringMatchesSomePattern(Z, G) | |
| } | |
| function ip2(I, G) { | |
| if (!G || !G.length) return !0 | |
| let Z = mm(I) | |
| return !Z ? !0 : A8.stringMatchesSomePattern(Z, G) | |
| } | |
| function np2(I) { | |
| let G = [] | |
| if (I.message) G.push(I.message) | |
| let Z | |
| try { | |
| Z = I.exception.values[I.exception.values.length - 1] | |
| } catch (d) {} | |
| if (Z) { | |
| if (Z.value) { | |
| if ((G.push(Z.value), Z.type)) G.push(`${Z.type}: ${Z.value}`) | |
| } | |
| } | |
| if (jF.DEBUG_BUILD && G.length === 0) | |
| A8.logger.error(`Could not extract message for event ${A8.getEventDescription(I)}`) | |
| return G | |
| } | |
| function ap2(I) { | |
| try { | |
| return I.exception.values[0].type === 'SentryError' | |
| } catch (G) {} | |
| return !1 | |
| } | |
| function rp2(I = []) { | |
| for (let G = I.length - 1; G >= 0; G--) { | |
| let Z = I[G] | |
| if (Z && Z.filename !== '<anonymous>' && Z.filename !== '[native code]') | |
| return Z.filename || null | |
| } | |
| return null | |
| } | |
| function mm(I) { | |
| try { | |
| let G | |
| try { | |
| G = I.exception.values[0].stacktrace.frames | |
| } catch (Z) {} | |
| return G ? rp2(G) : null | |
| } catch (G) { | |
| return ( | |
| jF.DEBUG_BUILD && | |
| A8.logger.error(`Cannot extract url for event ${A8.getEventDescription(I)}`), | |
| null | |
| ) | |
| } | |
| } | |
| cE1.InboundFilters = jp2 | |
| cE1.inboundFiltersIntegration = xE1 | |
| }) | |
| var T01 = _((sE1) => { | |
| Object.defineProperty(sE1, '__esModule', { value: !0 }) | |
| var ep2 = X0(), | |
| tp2 = tZ(), | |
| nE1 = TV(), | |
| pE1, | |
| aE1 = 'FunctionToString', | |
| iE1 = new WeakMap(), | |
| Ii2 = () => { | |
| return { | |
| name: aE1, | |
| setupOnce() { | |
| pE1 = Function.prototype.toString | |
| try { | |
| Function.prototype.toString = function (...I) { | |
| let G = ep2.getOriginalFunction(this), | |
| Z = iE1.has(tp2.getClient()) && G !== void 0 ? G : this | |
| return pE1.apply(Z, I) | |
| } | |
| } catch (I) {} | |
| }, | |
| setup(I) { | |
| iE1.set(I, !0) | |
| }, | |
| } | |
| }, | |
| rE1 = nE1.defineIntegration(Ii2), | |
| Gi2 = nE1.convertIntegrationFnToClass(aE1, rE1) | |
| sE1.FunctionToString = Gi2 | |
| sE1.functionToStringIntegration = rE1 | |
| }) | |
| var m01 = _((Gv1) => { | |
| Object.defineProperty(Gv1, '__esModule', { value: !0 }) | |
| var oE1 = X0(), | |
| eE1 = TV(), | |
| Wi2 = 'cause', | |
| wi2 = 5, | |
| tE1 = 'LinkedErrors', | |
| Bi2 = (I = {}) => { | |
| let G = I.limit || wi2, | |
| Z = I.key || Wi2 | |
| return { | |
| name: tE1, | |
| setupOnce() {}, | |
| preprocessEvent(d, W, w) { | |
| let B = w.getOptions() | |
| oE1.applyAggregateErrorsToEvent( | |
| oE1.exceptionFromError, | |
| B.stackParser, | |
| B.maxValueLength, | |
| Z, | |
| G, | |
| d, | |
| W, | |
| ) | |
| }, | |
| } | |
| }, | |
| Iv1 = eE1.defineIntegration(Bi2), | |
| Ci2 = eE1.convertIntegrationFnToClass(tE1, Iv1) | |
| Gv1.LinkedErrors = Ci2 | |
| Gv1.linkedErrorsIntegration = Iv1 | |
| }) | |
| var dv1 = _((Zv1) => { | |
| Object.defineProperty(Zv1, '__esModule', { value: !0 }) | |
| var Xi2 = T01(), | |
| Yi2 = u01(), | |
| _i2 = m01() | |
| Zv1.FunctionToString = Xi2.FunctionToString | |
| Zv1.InboundFilters = Yi2.InboundFilters | |
| Zv1.LinkedErrors = _i2.LinkedErrors | |
| }) | |
| var Cv1 = _((Bv1) => { | |
| Object.defineProperty(Bv1, '__esModule', { value: !0 }) | |
| var Ji2 = X0(), | |
| Wv1 = Qv(), | |
| Ki2 = v01(), | |
| gi2 = Kv(), | |
| bm = zv() | |
| class wv1 { | |
| constructor(I) { | |
| ;(this._client = I), | |
| (this._buckets = new Map()), | |
| (this._interval = setInterval(() => this.flush(), Wv1.DEFAULT_BROWSER_FLUSH_INTERVAL)) | |
| } | |
| add(I, G, Z, d = 'none', W = {}, w = Ji2.timestampInSeconds()) { | |
| let B = Math.floor(w), | |
| C = bm.sanitizeMetricKey(G), | |
| V = bm.sanitizeTags(W), | |
| A = bm.sanitizeUnit(d), | |
| X = bm.getBucketKey(I, C, A, V), | |
| Y = this._buckets.get(X), | |
| H = Y && I === Wv1.SET_METRIC_TYPE ? Y.metric.weight : 0 | |
| if (Y) { | |
| if ((Y.metric.add(Z), Y.timestamp < B)) Y.timestamp = B | |
| } else | |
| (Y = { | |
| metric: new Ki2.METRIC_MAP[I](Z), | |
| timestamp: B, | |
| metricType: I, | |
| name: C, | |
| unit: A, | |
| tags: V, | |
| }), | |
| this._buckets.set(X, Y) | |
| let J = typeof Z === 'string' ? Y.metric.weight - H : Z | |
| gi2.updateMetricSummaryOnActiveSpan(I, C, J, A, W, X) | |
| } | |
| flush() { | |
| if (this._buckets.size === 0) return | |
| if (this._client.captureAggregateMetrics) { | |
| let I = Array.from(this._buckets).map(([, G]) => G) | |
| this._client.captureAggregateMetrics(I) | |
| } | |
| this._buckets.clear() | |
| } | |
| close() { | |
| clearInterval(this._interval), this.flush() | |
| } | |
| } | |
| Bv1.BrowserMetricsAggregator = wv1 | |
| }) | |
| var _v1 = _((Yv1) => { | |
| Object.defineProperty(Yv1, '__esModule', { value: !0 }) | |
| var Vv1 = TV(), | |
| zi2 = Cv1(), | |
| Av1 = 'MetricsAggregator', | |
| Qi2 = () => { | |
| return { | |
| name: Av1, | |
| setupOnce() {}, | |
| setup(I) { | |
| I.metricsAggregator = new zi2.BrowserMetricsAggregator(I) | |
| }, | |
| } | |
| }, | |
| Xv1 = Vv1.defineIntegration(Qi2), | |
| qi2 = Vv1.convertIntegrationFnToClass(Av1, Xv1) | |
| Yv1.MetricsAggregator = qi2 | |
| Yv1.metricsAggregatorIntegration = Xv1 | |
| }) | |
| var qv1 = _((Qv1) => { | |
| Object.defineProperty(Qv1, '__esModule', { value: !0 }) | |
| var Dv1 = X0(), | |
| Hv1 = Q6(), | |
| Fv1 = tZ(), | |
| Ri2 = iI(), | |
| lm = Qv(), | |
| Jv1 = _v1() | |
| function jm(I, G, Z, d = {}) { | |
| let W = Fv1.getClient(), | |
| w = Fv1.getCurrentScope() | |
| if (W) { | |
| if (!W.metricsAggregator) { | |
| Hv1.DEBUG_BUILD && | |
| Dv1.logger.warn( | |
| 'No metrics aggregator enabled. Please add the MetricsAggregator integration to use metrics APIs', | |
| ) | |
| return | |
| } | |
| let { unit: B, tags: C, timestamp: V } = d, | |
| { release: A, environment: X } = W.getOptions(), | |
| Y = w.getTransaction(), | |
| H = {} | |
| if (A) H.release = A | |
| if (X) H.environment = X | |
| if (Y) H.transaction = Ri2.spanToJSON(Y).description || '' | |
| Hv1.DEBUG_BUILD && Dv1.logger.log(`Adding value of ${Z} to ${I} metric ${G}`), | |
| W.metricsAggregator.add(I, G, Z, B, { ...H, ...C }, V) | |
| } | |
| } | |
| function Kv1(I, G = 1, Z) { | |
| jm(lm.COUNTER_METRIC_TYPE, I, G, Z) | |
| } | |
| function gv1(I, G, Z) { | |
| jm(lm.DISTRIBUTION_METRIC_TYPE, I, G, Z) | |
| } | |
| function Nv1(I, G, Z) { | |
| jm(lm.SET_METRIC_TYPE, I, G, Z) | |
| } | |
| function zv1(I, G, Z) { | |
| jm(lm.GAUGE_METRIC_TYPE, I, G, Z) | |
| } | |
| var Ei2 = { | |
| increment: Kv1, | |
| distribution: gv1, | |
| set: Nv1, | |
| gauge: zv1, | |
| MetricsAggregator: Jv1.MetricsAggregator, | |
| metricsAggregatorIntegration: Jv1.metricsAggregatorIntegration, | |
| } | |
| Qv1.distribution = gv1 | |
| Qv1.gauge = zv1 | |
| Qv1.increment = Kv1 | |
| Qv1.metrics = Ei2 | |
| Qv1.set = Nv1 | |
| }) | |
| var Y4 = _((j01) => { | |
| Object.defineProperty(j01, '__esModule', { value: !0 }) | |
| var Uv1 = H01(), | |
| fv1 = _01(), | |
| yi2 = fm(), | |
| Pi2 = vm(), | |
| Rv1 = Km(), | |
| km = jN(), | |
| kF = Um(), | |
| Ev1 = TF(), | |
| Oi2 = UR1(), | |
| ui2 = D01(), | |
| Uv = gv(), | |
| vv1 = F01(), | |
| O9 = tZ(), | |
| KB = HB(), | |
| b01 = TN(), | |
| Ti2 = J01(), | |
| l01 = Ym(), | |
| Mv1 = Av(), | |
| Sv1 = $m(), | |
| Lv1 = z01(), | |
| mi2 = eR1(), | |
| $v1 = ZE1(), | |
| bi2 = CE1(), | |
| li2 = XE1(), | |
| ji2 = _E1(), | |
| ki2 = Hm(), | |
| hm = TV(), | |
| yv1 = Xm(), | |
| hi2 = Am(), | |
| xi2 = q01(), | |
| ci2 = FE1(), | |
| pi2 = Nm(), | |
| ii2 = gE1(), | |
| ni2 = V01(), | |
| ai2 = zE1(), | |
| xm = iI(), | |
| ri2 = mN(), | |
| si2 = UE1(), | |
| oi2 = uN(), | |
| Pv1 = OE1(), | |
| Ov1 = jE1(), | |
| uv1 = u01(), | |
| Tv1 = T01(), | |
| mv1 = m01(), | |
| ei2 = dv1(), | |
| ti2 = qv1(), | |
| In2 = ei2 | |
| j01.addTracingExtensions = Uv1.addTracingExtensions | |
| j01.startIdleTransaction = Uv1.startIdleTransaction | |
| j01.IdleTransaction = fv1.IdleTransaction | |
| j01.TRACING_DEFAULTS = fv1.TRACING_DEFAULTS | |
| j01.Span = yi2.Span | |
| j01.Transaction = Pi2.Transaction | |
| j01.extractTraceparentData = Rv1.extractTraceparentData | |
| j01.getActiveTransaction = Rv1.getActiveTransaction | |
| Object.defineProperty(j01, 'SpanStatus', { enumerable: !0, get: () => km.SpanStatus }) | |
| j01.getSpanStatusFromHttpCode = km.getSpanStatusFromHttpCode | |
| j01.setHttpStatus = km.setHttpStatus | |
| j01.spanStatusfromHttpCode = km.spanStatusfromHttpCode | |
| j01.continueTrace = kF.continueTrace | |
| j01.getActiveSpan = kF.getActiveSpan | |
| j01.startActiveSpan = kF.startActiveSpan | |
| j01.startInactiveSpan = kF.startInactiveSpan | |
| j01.startSpan = kF.startSpan | |
| j01.startSpanManual = kF.startSpanManual | |
| j01.trace = kF.trace | |
| j01.getDynamicSamplingContextFromClient = Ev1.getDynamicSamplingContextFromClient | |
| j01.getDynamicSamplingContextFromSpan = Ev1.getDynamicSamplingContextFromSpan | |
| j01.setMeasurement = Oi2.setMeasurement | |
| j01.isValidSampleRate = ui2.isValidSampleRate | |
| j01.SEMANTIC_ATTRIBUTE_PROFILE_ID = Uv.SEMANTIC_ATTRIBUTE_PROFILE_ID | |
| j01.SEMANTIC_ATTRIBUTE_SENTRY_OP = Uv.SEMANTIC_ATTRIBUTE_SENTRY_OP | |
| j01.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = Uv.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN | |
| j01.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = Uv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE | |
| j01.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = Uv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE | |
| j01.createEventEnvelope = vv1.createEventEnvelope | |
| j01.createSessionEnvelope = vv1.createSessionEnvelope | |
| j01.addBreadcrumb = O9.addBreadcrumb | |
| j01.captureCheckIn = O9.captureCheckIn | |
| j01.captureEvent = O9.captureEvent | |
| j01.captureException = O9.captureException | |
| j01.captureMessage = O9.captureMessage | |
| j01.captureSession = O9.captureSession | |
| j01.close = O9.close | |
| j01.configureScope = O9.configureScope | |
| j01.endSession = O9.endSession | |
| j01.flush = O9.flush | |
| j01.getClient = O9.getClient | |
| j01.getCurrentScope = O9.getCurrentScope | |
| j01.isInitialized = O9.isInitialized | |
| j01.lastEventId = O9.lastEventId | |
| j01.setContext = O9.setContext | |
| j01.setExtra = O9.setExtra | |
| j01.setExtras = O9.setExtras | |
| j01.setTag = O9.setTag | |
| j01.setTags = O9.setTags | |
| j01.setUser = O9.setUser | |
| j01.startSession = O9.startSession | |
| j01.startTransaction = O9.startTransaction | |
| j01.withActiveSpan = O9.withActiveSpan | |
| j01.withIsolationScope = O9.withIsolationScope | |
| j01.withMonitor = O9.withMonitor | |
| j01.withScope = O9.withScope | |
| j01.Hub = KB.Hub | |
| j01.ensureHubOnCarrier = KB.ensureHubOnCarrier | |
| j01.getCurrentHub = KB.getCurrentHub | |
| j01.getHubFromCarrier = KB.getHubFromCarrier | |
| j01.getIsolationScope = KB.getIsolationScope | |
| j01.getMainCarrier = KB.getMainCarrier | |
| j01.makeMain = KB.makeMain | |
| j01.runWithAsyncContext = KB.runWithAsyncContext | |
| j01.setAsyncContextStrategy = KB.setAsyncContextStrategy | |
| j01.setHubOnCarrier = KB.setHubOnCarrier | |
| j01.closeSession = b01.closeSession | |
| j01.makeSession = b01.makeSession | |
| j01.updateSession = b01.updateSession | |
| j01.SessionFlusher = Ti2.SessionFlusher | |
| j01.Scope = l01.Scope | |
| j01.getGlobalScope = l01.getGlobalScope | |
| j01.setGlobalScope = l01.setGlobalScope | |
| j01.addGlobalEventProcessor = Mv1.addGlobalEventProcessor | |
| j01.notifyEventProcessors = Mv1.notifyEventProcessors | |
| j01.getEnvelopeEndpointWithUrlEncodedAuth = Sv1.getEnvelopeEndpointWithUrlEncodedAuth | |
| j01.getReportDialogEndpoint = Sv1.getReportDialogEndpoint | |
| j01.BaseClient = Lv1.BaseClient | |
| j01.addEventProcessor = Lv1.addEventProcessor | |
| j01.ServerRuntimeClient = mi2.ServerRuntimeClient | |
| j01.initAndBind = $v1.initAndBind | |
| j01.setCurrentClient = $v1.setCurrentClient | |
| j01.createTransport = bi2.createTransport | |
| j01.makeOfflineTransport = li2.makeOfflineTransport | |
| j01.makeMultiplexedTransport = ji2.makeMultiplexedTransport | |
| j01.SDK_VERSION = ki2.SDK_VERSION | |
| j01.addIntegration = hm.addIntegration | |
| j01.convertIntegrationFnToClass = hm.convertIntegrationFnToClass | |
| j01.defineIntegration = hm.defineIntegration | |
| j01.getIntegrationsToSetup = hm.getIntegrationsToSetup | |
| j01.applyScopeDataToEvent = yv1.applyScopeDataToEvent | |
| j01.mergeScopeData = yv1.mergeScopeData | |
| j01.prepareEvent = hi2.prepareEvent | |
| j01.createCheckInEnvelope = xi2.createCheckInEnvelope | |
| j01.createSpanEnvelope = ci2.createSpanEnvelope | |
| j01.hasTracingEnabled = pi2.hasTracingEnabled | |
| j01.isSentryRequestUrl = ii2.isSentryRequestUrl | |
| j01.handleCallbackErrors = ni2.handleCallbackErrors | |
| j01.parameterize = ai2.parameterize | |
| j01.spanIsSampled = xm.spanIsSampled | |
| j01.spanToJSON = xm.spanToJSON | |
| j01.spanToTraceContext = xm.spanToTraceContext | |
| j01.spanToTraceHeader = xm.spanToTraceHeader | |
| j01.getRootSpan = ri2.getRootSpan | |
| j01.applySdkMetadata = si2.applySdkMetadata | |
| j01.DEFAULT_ENVIRONMENT = oi2.DEFAULT_ENVIRONMENT | |
| j01.ModuleMetadata = Pv1.ModuleMetadata | |
| j01.moduleMetadataIntegration = Pv1.moduleMetadataIntegration | |
| j01.RequestData = Ov1.RequestData | |
| j01.requestDataIntegration = Ov1.requestDataIntegration | |
| j01.InboundFilters = uv1.InboundFilters | |
| j01.inboundFiltersIntegration = uv1.inboundFiltersIntegration | |
| j01.FunctionToString = Tv1.FunctionToString | |
| j01.functionToStringIntegration = Tv1.functionToStringIntegration | |
| j01.LinkedErrors = mv1.LinkedErrors | |
| j01.linkedErrorsIntegration = mv1.linkedErrorsIntegration | |
| j01.metrics = ti2.metrics | |
| j01.Integrations = In2 | |
| }) | |
| var rI = _((bv1) => { | |
| Object.defineProperty(bv1, '__esModule', { value: !0 }) | |
| var Xr2 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__ | |
| bv1.DEBUG_BUILD = Xr2 | |
| }) | |
| var YY = _((jv1) => { | |
| var { _optionalChain: lv1 } = X0() | |
| Object.defineProperty(jv1, '__esModule', { value: !0 }) | |
| function _r2(I) { | |
| let G = lv1([ | |
| I, | |
| 'call', | |
| (d) => d(), | |
| 'access', | |
| (d) => d.getClient, | |
| 'call', | |
| (d) => d(), | |
| 'optionalAccess', | |
| (d) => d.getOptions, | |
| 'call', | |
| (d) => d(), | |
| ]) | |
| return (lv1([G, 'optionalAccess', (d) => d.instrumenter]) || 'sentry') !== 'sentry' | |
| } | |
| jv1.shouldDisableAutoInstrumentation = _r2 | |
| }) | |
| var pv1 = _((cv1) => { | |
| var { _optionalChain: gB } = X0() | |
| Object.defineProperty(cv1, '__esModule', { value: !0 }) | |
| var k01 = Y4(), | |
| sI = X0(), | |
| cm = rI(), | |
| Hr2 = YY() | |
| class pm { | |
| static __initStatic() { | |
| this.id = 'Express' | |
| } | |
| constructor(I = {}) { | |
| ;(this.name = pm.id), | |
| (this._router = I.router || I.app), | |
| (this._methods = (Array.isArray(I.methods) ? I.methods : []).concat('use')) | |
| } | |
| setupOnce(I, G) { | |
| if (!this._router) { | |
| cm.DEBUG_BUILD && sI.logger.error('ExpressIntegration is missing an Express instance') | |
| return | |
| } | |
| if (Hr2.shouldDisableAutoInstrumentation(G)) { | |
| cm.DEBUG_BUILD && | |
| sI.logger.log('Express Integration is skipped because of instrumenter configuration.') | |
| return | |
| } | |
| Kr2(this._router, this._methods), gr2(this._router) | |
| } | |
| } | |
| pm.__initStatic() | |
| function kv1(I, G) { | |
| let Z = I.length | |
| switch (Z) { | |
| case 2: | |
| return function (d, W) { | |
| let w = W.__sentry_transaction | |
| if (w) { | |
| let B = w.startChild({ | |
| description: I.name, | |
| op: `middleware.express.${G}`, | |
| origin: 'auto.middleware.express', | |
| }) | |
| W.once('finish', () => { | |
| B.end() | |
| }) | |
| } | |
| return I.call(this, d, W) | |
| } | |
| case 3: | |
| return function (d, W, w) { | |
| let B = W.__sentry_transaction, | |
| C = gB([ | |
| B, | |
| 'optionalAccess', | |
| (V) => V.startChild, | |
| 'call', | |
| (V) => | |
| V({ | |
| description: I.name, | |
| op: `middleware.express.${G}`, | |
| origin: 'auto.middleware.express', | |
| }), | |
| ]) | |
| I.call(this, d, W, function (...V) { | |
| gB([C, 'optionalAccess', (A) => A.end, 'call', (A) => A()]), w.call(this, ...V) | |
| }) | |
| } | |
| case 4: | |
| return function (d, W, w, B) { | |
| let C = w.__sentry_transaction, | |
| V = gB([ | |
| C, | |
| 'optionalAccess', | |
| (A) => A.startChild, | |
| 'call', | |
| (A) => | |
| A({ | |
| description: I.name, | |
| op: `middleware.express.${G}`, | |
| origin: 'auto.middleware.express', | |
| }), | |
| ]) | |
| I.call(this, d, W, w, function (...A) { | |
| gB([V, 'optionalAccess', (X) => X.end, 'call', (X) => X()]), B.call(this, ...A) | |
| }) | |
| } | |
| default: | |
| throw new Error(`Express middleware takes 2-4 arguments. Got: ${Z}`) | |
| } | |
| } | |
| function Fr2(I, G) { | |
| return I.map((Z) => { | |
| if (typeof Z === 'function') return kv1(Z, G) | |
| if (Array.isArray(Z)) | |
| return Z.map((d) => { | |
| if (typeof d === 'function') return kv1(d, G) | |
| return d | |
| }) | |
| return Z | |
| }) | |
| } | |
| function Jr2(I, G) { | |
| let Z = I[G] | |
| return ( | |
| (I[G] = function (...d) { | |
| return Z.call(this, ...Fr2(d, G)) | |
| }), | |
| I | |
| ) | |
| } | |
| function Kr2(I, G = []) { | |
| G.forEach((Z) => Jr2(I, Z)) | |
| } | |
| function gr2(I) { | |
| let G = 'settings' in I | |
| if (G && I._router === void 0 && I.lazyrouter) I.lazyrouter() | |
| let Z = G ? I._router : I | |
| if (!Z) { | |
| cm.DEBUG_BUILD && | |
| sI.logger.debug( | |
| 'Cannot instrument router for URL Parameterization (did not find a valid router).', | |
| ), | |
| cm.DEBUG_BUILD && | |
| sI.logger.debug('Routing instrumentation is currently only supported in Express 4.') | |
| return | |
| } | |
| let d = Object.getPrototypeOf(Z), | |
| W = d.process_params | |
| d.process_params = function w(B, C, V, A, X) { | |
| if (!V._reconstructedRoute) V._reconstructedRoute = '' | |
| let { layerRoutePath: Y, isRegex: H, isArray: J, numExtraSegments: K } = Nr2(B) | |
| if (Y || H || J) V._hasParameters = !0 | |
| let g | |
| if (Y) g = Y | |
| else g = xv1(V.originalUrl, V._reconstructedRoute, B.path) || '' | |
| let z = g | |
| .split('/') | |
| .filter(($) => $.length > 0 && (H || J || !$.includes('*'))) | |
| .join('/') | |
| if (z && z.length > 0) V._reconstructedRoute += `/${z}${H ? '/' : ''}` | |
| let f = sI.getNumberOfUrlSegments(sI.stripUrlQueryAndFragment(V.originalUrl || '')) + K, | |
| S = sI.getNumberOfUrlSegments(V._reconstructedRoute) | |
| if (f === S) { | |
| if (!V._hasParameters) { | |
| if (V._reconstructedRoute !== V.originalUrl) | |
| V._reconstructedRoute = V.originalUrl | |
| ? sI.stripUrlQueryAndFragment(V.originalUrl) | |
| : V.originalUrl | |
| } | |
| let $ = A.__sentry_transaction, | |
| L = ($ && k01.spanToJSON($).data) || {} | |
| if ($ && L[k01.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] !== 'custom') { | |
| let T = V._reconstructedRoute || '/', | |
| [m, O] = sI.extractPathForTransaction(V, { path: !0, method: !0, customRoute: T }) | |
| $.updateName(m), $.setAttribute(k01.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, O) | |
| } | |
| } | |
| return W.call(this, B, C, V, A, X) | |
| } | |
| } | |
| var hv1 = (I, G, Z) => { | |
| if ( | |
| !I || | |
| !G || | |
| !Z || | |
| Object.keys(Z).length === 0 || | |
| !gB([Z, 'access', (A) => A[0], 'optionalAccess', (A) => A.offset]) | |
| ) | |
| return | |
| let d = Z.sort((A, X) => A.offset - X.offset), | |
| w = new RegExp(G, `${G.flags}d`).exec(I) | |
| if (!w || !w.indices) return | |
| let [, ...B] = w.indices | |
| if (B.length !== d.length) return | |
| let C = I, | |
| V = 0 | |
| return ( | |
| B.forEach((A, X) => { | |
| if (A) { | |
| let [Y, H] = A, | |
| J = C.substring(0, Y - V), | |
| K = `:${d[X].name}`, | |
| g = C.substring(H - V) | |
| ;(C = J + K + g), (V = V + (H - Y - K.length)) | |
| } | |
| }), | |
| C | |
| ) | |
| } | |
| function Nr2(I) { | |
| let G = gB([I, 'access', (B) => B.route, 'optionalAccess', (B) => B.path]), | |
| Z = sI.isRegExp(G), | |
| d = Array.isArray(G) | |
| if (!G) { | |
| let [B] = sI.GLOBAL_OBJ.process.versions.node.split('.').map(Number) | |
| if (B >= 16) G = hv1(I.path, I.regexp, I.keys) | |
| } | |
| if (!G) return { isRegex: Z, isArray: d, numExtraSegments: 0 } | |
| let W = d ? Math.max(zr2(G) - sI.getNumberOfUrlSegments(I.path || ''), 0) : 0 | |
| return { layerRoutePath: Qr2(d, G), isRegex: Z, isArray: d, numExtraSegments: W } | |
| } | |
| function zr2(I) { | |
| return I.reduce((G, Z) => { | |
| return G + sI.getNumberOfUrlSegments(Z.toString()) | |
| }, 0) | |
| } | |
| function Qr2(I, G) { | |
| if (I) return G.map((Z) => Z.toString()).join(',') | |
| return G && G.toString() | |
| } | |
| function xv1(I, G, Z) { | |
| let d = sI.stripUrlQueryAndFragment(I || ''), | |
| W = gB([ | |
| d, | |
| 'optionalAccess', | |
| (V) => V.split, | |
| 'call', | |
| (V) => V('/'), | |
| 'access', | |
| (V) => V.filter, | |
| 'call', | |
| (V) => V((A) => !!A), | |
| ]), | |
| w = 0, | |
| B = | |
| gB([ | |
| G, | |
| 'optionalAccess', | |
| (V) => V.split, | |
| 'call', | |
| (V) => V('/'), | |
| 'access', | |
| (V) => V.filter, | |
| 'call', | |
| (V) => V((A) => !!A), | |
| 'access', | |
| (V) => V.length, | |
| ]) || 0 | |
| return gB([ | |
| Z, | |
| 'optionalAccess', | |
| (V) => V.split, | |
| 'call', | |
| (V) => V('/'), | |
| 'access', | |
| (V) => V.filter, | |
| 'call', | |
| (V) => | |
| V((A) => { | |
| if (gB([W, 'optionalAccess', (X) => X[B + w]]) === A) return (w += 1), !0 | |
| return !1 | |
| }), | |
| 'access', | |
| (V) => V.join, | |
| 'call', | |
| (V) => V('/'), | |
| ]) | |
| } | |
| cv1.Express = pm | |
| cv1.extractOriginalRoute = hv1 | |
| cv1.preventDuplicateSegments = xv1 | |
| }) | |
| var nv1 = _((iv1) => { | |
| var { _optionalChain: nN } = X0() | |
| Object.defineProperty(iv1, '__esModule', { value: !0 }) | |
| var aN = X0(), | |
| h01 = rI(), | |
| Rr2 = YY() | |
| class im { | |
| static __initStatic() { | |
| this.id = 'Postgres' | |
| } | |
| constructor(I = {}) { | |
| ;(this.name = im.id), (this._usePgNative = !!I.usePgNative), (this._module = I.module) | |
| } | |
| loadDependency() { | |
| return (this._module = this._module || aN.loadModule('pg')) | |
| } | |
| setupOnce(I, G) { | |
| if (Rr2.shouldDisableAutoInstrumentation(G)) { | |
| h01.DEBUG_BUILD && | |
| aN.logger.log('Postgres Integration is skipped because of instrumenter configuration.') | |
| return | |
| } | |
| let Z = this.loadDependency() | |
| if (!Z) { | |
| h01.DEBUG_BUILD && | |
| aN.logger.error('Postgres Integration was unable to require `pg` package.') | |
| return | |
| } | |
| let d = this._usePgNative | |
| ? nN([Z, 'access', (W) => W.native, 'optionalAccess', (W) => W.Client]) | |
| : Z.Client | |
| if (!d) { | |
| h01.DEBUG_BUILD && | |
| aN.logger.error("Postgres Integration was unable to access 'pg-native' bindings.") | |
| return | |
| } | |
| aN.fill(d.prototype, 'query', function (W) { | |
| return function (w, B, C) { | |
| let A = G().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 (J) {} | |
| let Y = nN([ | |
| A, | |
| 'optionalAccess', | |
| (J) => J.startChild, | |
| 'call', | |
| (J) => | |
| J({ | |
| description: typeof w === 'string' ? w : w.text, | |
| op: 'db', | |
| origin: 'auto.db.postgres', | |
| data: X, | |
| }), | |
| ]) | |
| if (typeof C === 'function') | |
| return W.call(this, w, B, function (J, K) { | |
| nN([Y, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), C(J, K) | |
| }) | |
| if (typeof B === 'function') | |
| return W.call(this, w, function (J, K) { | |
| nN([Y, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), B(J, K) | |
| }) | |
| let H = typeof B !== 'undefined' ? W.call(this, w, B) : W.call(this, w) | |
| if (aN.isThenable(H)) | |
| return H.then((J) => { | |
| return nN([Y, 'optionalAccess', (K) => K.end, 'call', (K) => K()]), J | |
| }) | |
| return nN([Y, 'optionalAccess', (J) => J.end, 'call', (J) => J()]), H | |
| } | |
| }) | |
| } | |
| } | |
| im.__initStatic() | |
| iv1.Postgres = im | |
| }) | |
| var rv1 = _((av1) => { | |
| var { _optionalChain: vr2 } = X0() | |
| Object.defineProperty(av1, '__esModule', { value: !0 }) | |
| var fv = X0(), | |
| x01 = rI(), | |
| Mr2 = YY() | |
| class nm { | |
| static __initStatic() { | |
| this.id = 'Mysql' | |
| } | |
| constructor() { | |
| this.name = nm.id | |
| } | |
| loadDependency() { | |
| return (this._module = this._module || fv.loadModule('mysql/lib/Connection.js')) | |
| } | |
| setupOnce(I, G) { | |
| if (Mr2.shouldDisableAutoInstrumentation(G)) { | |
| x01.DEBUG_BUILD && | |
| fv.logger.log('Mysql Integration is skipped because of instrumenter configuration.') | |
| return | |
| } | |
| let Z = this.loadDependency() | |
| if (!Z) { | |
| x01.DEBUG_BUILD && | |
| fv.logger.error('Mysql Integration was unable to require `mysql` package.') | |
| return | |
| } | |
| let d = void 0 | |
| try { | |
| Z.prototype.connect = new Proxy(Z.prototype.connect, { | |
| apply(B, C, V) { | |
| if (!d) d = C.config | |
| return B.apply(C, V) | |
| }, | |
| }) | |
| } catch (B) { | |
| x01.DEBUG_BUILD && | |
| fv.logger.error('Mysql Integration was unable to instrument `mysql` config.') | |
| } | |
| function W() { | |
| if (!d) return {} | |
| return { 'server.address': d.host, 'server.port': d.port, 'db.user': d.user } | |
| } | |
| function w(B) { | |
| if (!B) return | |
| let C = W() | |
| Object.keys(C).forEach((V) => { | |
| B.setAttribute(V, C[V]) | |
| }), | |
| B.end() | |
| } | |
| fv.fill(Z, 'createQuery', function (B) { | |
| return function (C, V, A) { | |
| let Y = G().getScope().getSpan(), | |
| H = vr2([ | |
| Y, | |
| 'optionalAccess', | |
| (K) => K.startChild, | |
| 'call', | |
| (K) => | |
| K({ | |
| description: typeof C === 'string' ? C : C.sql, | |
| op: 'db', | |
| origin: 'auto.db.mysql', | |
| data: { 'db.system': 'mysql' }, | |
| }), | |
| ]) | |
| if (typeof A === 'function') | |
| return B.call(this, C, V, function (K, g, z) { | |
| w(H), A(K, g, z) | |
| }) | |
| if (typeof V === 'function') | |
| return B.call(this, C, function (K, g, z) { | |
| w(H), V(K, g, z) | |
| }) | |
| let J = B.call(this, C, V) | |
| return ( | |
| J.on('end', () => { | |
| w(H) | |
| }), | |
| J | |
| ) | |
| } | |
| }) | |
| } | |
| } | |
| nm.__initStatic() | |
| av1.Mysql = nm | |
| }) | |
| var ev1 = _((ov1) => { | |
| var { _optionalChain: _Y } = X0() | |
| Object.defineProperty(ov1, '__esModule', { value: !0 }) | |
| var Rv = X0(), | |
| sv1 = rI(), | |
| Lr2 = YY(), | |
| $r2 = [ | |
| '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', | |
| ], | |
| yr2 = { | |
| 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 Pr2(I) { | |
| return I && typeof I === 'object' && I.once && typeof I.once === 'function' | |
| } | |
| class am { | |
| static __initStatic() { | |
| this.id = 'Mongo' | |
| } | |
| constructor(I = {}) { | |
| ;(this.name = am.id), | |
| (this._operations = Array.isArray(I.operations) ? I.operations : $r2), | |
| (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, G) { | |
| if (Lr2.shouldDisableAutoInstrumentation(G)) { | |
| sv1.DEBUG_BUILD && | |
| Rv.logger.log('Mongo Integration is skipped because of instrumenter configuration.') | |
| return | |
| } | |
| let Z = this.loadDependency() | |
| if (!Z) { | |
| let d = this._useMongoose ? 'mongoose' : 'mongodb' | |
| sv1.DEBUG_BUILD && | |
| Rv.logger.error(`Mongo Integration was unable to require \`${d}\` package.`) | |
| return | |
| } | |
| this._instrumentOperations(Z.Collection, this._operations, G) | |
| } | |
| _instrumentOperations(I, G, Z) { | |
| G.forEach((d) => this._patchOperation(I, d, Z)) | |
| } | |
| _patchOperation(I, G, Z) { | |
| if (!(G in I.prototype)) return | |
| let d = this._getSpanContextFromOperationArguments.bind(this) | |
| Rv.fill(I.prototype, G, function (W) { | |
| return function (...w) { | |
| let B = w[w.length - 1], | |
| C = Z(), | |
| V = C.getScope(), | |
| A = C.getClient(), | |
| X = V.getSpan(), | |
| Y = _Y([ | |
| A, | |
| 'optionalAccess', | |
| (J) => J.getOptions, | |
| 'call', | |
| (J) => J(), | |
| 'access', | |
| (J) => J.sendDefaultPii, | |
| ]) | |
| if (typeof B !== 'function' || (G === 'mapReduce' && w.length === 2)) { | |
| let J = _Y([ | |
| X, | |
| 'optionalAccess', | |
| (g) => g.startChild, | |
| 'call', | |
| (g) => g(d(this, G, w, Y)), | |
| ]), | |
| K = W.call(this, ...w) | |
| if (Rv.isThenable(K)) | |
| return K.then((g) => { | |
| return _Y([J, 'optionalAccess', (z) => z.end, 'call', (z) => z()]), g | |
| }) | |
| else if (Pr2(K)) { | |
| let g = K | |
| try { | |
| g.once('close', () => { | |
| _Y([J, 'optionalAccess', (z) => z.end, 'call', (z) => z()]) | |
| }) | |
| } catch (z) { | |
| _Y([J, 'optionalAccess', (f) => f.end, 'call', (f) => f()]) | |
| } | |
| return g | |
| } else return _Y([J, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), K | |
| } | |
| let H = _Y([ | |
| X, | |
| 'optionalAccess', | |
| (J) => J.startChild, | |
| 'call', | |
| (J) => J(d(this, G, w.slice(0, -1))), | |
| ]) | |
| return W.call(this, ...w.slice(0, -1), function (J, K) { | |
| _Y([H, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), B(J, K) | |
| }) | |
| } | |
| }) | |
| } | |
| _getSpanContextFromOperationArguments(I, G, Z, d = !1) { | |
| let W = { | |
| 'db.system': 'mongodb', | |
| 'db.name': I.dbName, | |
| 'db.operation': G, | |
| 'db.mongodb.collection': I.collectionName, | |
| }, | |
| w = { op: 'db', origin: 'auto.db.mongo', description: G, data: W }, | |
| B = yr2[G], | |
| C = Array.isArray(this._describeOperations) | |
| ? this._describeOperations.includes(G) | |
| : this._describeOperations | |
| if (!B || !C || !d) return w | |
| try { | |
| if (G === 'mapReduce') { | |
| let [V, A] = Z | |
| ;(W[B[0]] = typeof V === 'string' ? V : V.name || '<anonymous>'), | |
| (W[B[1]] = typeof A === 'string' ? A : A.name || '<anonymous>') | |
| } else for (let V = 0; V < B.length; V++) W[`db.mongodb.${B[V]}`] = JSON.stringify(Z[V]) | |
| } catch (V) {} | |
| return w | |
| } | |
| } | |
| am.__initStatic() | |
| ov1.Mongo = am | |
| }) | |
| var GM1 = _((IM1) => { | |
| Object.defineProperty(IM1, '__esModule', { value: !0 }) | |
| var c01 = Y4(), | |
| tv1 = X0(), | |
| ur2 = rI(), | |
| Tr2 = YY() | |
| function mr2(I) { | |
| return !!I && !!I.$use | |
| } | |
| class rm { | |
| static __initStatic() { | |
| this.id = 'Prisma' | |
| } | |
| constructor(I = {}) { | |
| if (((this.name = rm.id), mr2(I.client) && !I.client._sentryInstrumented)) { | |
| tv1.addNonEnumerableProperty(I.client, '_sentryInstrumented', !0) | |
| let G = {} | |
| try { | |
| let Z = I.client._engineConfig | |
| if (Z) { | |
| let { activeProvider: d, clientVersion: W } = Z | |
| if (d) G['db.system'] = d | |
| if (W) G['db.prisma.version'] = W | |
| } | |
| } catch (Z) {} | |
| I.client.$use((Z, d) => { | |
| if (Tr2.shouldDisableAutoInstrumentation(c01.getCurrentHub)) return d(Z) | |
| let { action: W, model: w } = Z | |
| return c01.startSpan( | |
| { | |
| name: w ? `${w} ${W}` : W, | |
| onlyIfParent: !0, | |
| op: 'db.prisma', | |
| attributes: { [c01.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.prisma' }, | |
| data: { ...G, 'db.operation': W }, | |
| }, | |
| () => d(Z), | |
| ) | |
| }) | |
| } else | |
| ur2.DEBUG_BUILD && | |
| tv1.logger.warn( | |
| 'Unsupported Prisma client provided to PrismaIntegration. Provided client:', | |
| I.client, | |
| ) | |
| } | |
| setupOnce() {} | |
| } | |
| rm.__initStatic() | |
| IM1.Prisma = rm | |
| }) | |
| var WM1 = _((dM1) => { | |
| var { _optionalChain: rN } = X0() | |
| Object.defineProperty(dM1, '__esModule', { value: !0 }) | |
| var Ev = X0(), | |
| ZM1 = rI(), | |
| lr2 = YY() | |
| class sm { | |
| static __initStatic() { | |
| this.id = 'GraphQL' | |
| } | |
| constructor() { | |
| this.name = sm.id | |
| } | |
| loadDependency() { | |
| return (this._module = this._module || Ev.loadModule('graphql/execution/execute.js')) | |
| } | |
| setupOnce(I, G) { | |
| if (lr2.shouldDisableAutoInstrumentation(G)) { | |
| ZM1.DEBUG_BUILD && | |
| Ev.logger.log('GraphQL Integration is skipped because of instrumenter configuration.') | |
| return | |
| } | |
| let Z = this.loadDependency() | |
| if (!Z) { | |
| ZM1.DEBUG_BUILD && | |
| Ev.logger.error('GraphQL Integration was unable to require graphql/execution package.') | |
| return | |
| } | |
| Ev.fill(Z, 'execute', function (d) { | |
| return function (...W) { | |
| let w = G().getScope(), | |
| B = w.getSpan(), | |
| C = rN([ | |
| B, | |
| 'optionalAccess', | |
| (A) => A.startChild, | |
| 'call', | |
| (A) => | |
| A({ | |
| description: 'execute', | |
| op: 'graphql.execute', | |
| origin: 'auto.graphql.graphql', | |
| }), | |
| ]) | |
| rN([w, 'optionalAccess', (A) => A.setSpan, 'call', (A) => A(C)]) | |
| let V = d.call(this, ...W) | |
| if (Ev.isThenable(V)) | |
| return V.then((A) => { | |
| return ( | |
| rN([C, 'optionalAccess', (X) => X.end, 'call', (X) => X()]), | |
| rN([w, 'optionalAccess', (X) => X.setSpan, 'call', (X) => X(B)]), | |
| A | |
| ) | |
| }) | |
| return ( | |
| rN([C, 'optionalAccess', (A) => A.end, 'call', (A) => A()]), | |
| rN([w, 'optionalAccess', (A) => A.setSpan, 'call', (A) => A(B)]), | |
| V | |
| ) | |
| } | |
| }) | |
| } | |
| } | |
| sm.__initStatic() | |
| dM1.GraphQL = sm | |
| }) | |
| var CM1 = _((BM1) => { | |
| var { _optionalChain: p01 } = X0() | |
| Object.defineProperty(BM1, '__esModule', { value: !0 }) | |
| var R7 = X0(), | |
| om = rI(), | |
| kr2 = YY() | |
| class em { | |
| static __initStatic() { | |
| this.id = 'Apollo' | |
| } | |
| constructor(I = { useNestjs: !1 }) { | |
| ;(this.name = em.id), (this._useNest = !!I.useNestjs) | |
| } | |
| loadDependency() { | |
| if (this._useNest) this._module = this._module || R7.loadModule('@nestjs/graphql') | |
| else this._module = this._module || R7.loadModule('apollo-server-core') | |
| return this._module | |
| } | |
| setupOnce(I, G) { | |
| if (kr2.shouldDisableAutoInstrumentation(G)) { | |
| om.DEBUG_BUILD && | |
| R7.logger.log('Apollo Integration is skipped because of instrumenter configuration.') | |
| return | |
| } | |
| if (this._useNest) { | |
| let Z = this.loadDependency() | |
| if (!Z) { | |
| om.DEBUG_BUILD && | |
| R7.logger.error( | |
| 'Apollo-NestJS Integration was unable to require @nestjs/graphql package.', | |
| ) | |
| return | |
| } | |
| R7.fill(Z.GraphQLFactory.prototype, 'mergeWithSchema', function (d) { | |
| return function (...W) { | |
| return ( | |
| R7.fill(this.resolversExplorerService, 'explore', function (w) { | |
| return function () { | |
| let B = R7.arrayify(w.call(this)) | |
| return wM1(B, G) | |
| } | |
| }), | |
| d.call(this, ...W) | |
| ) | |
| } | |
| }) | |
| } else { | |
| let Z = this.loadDependency() | |
| if (!Z) { | |
| om.DEBUG_BUILD && | |
| R7.logger.error('Apollo Integration was unable to require apollo-server-core package.') | |
| return | |
| } | |
| R7.fill(Z.ApolloServerBase.prototype, 'constructSchema', function (d) { | |
| return function () { | |
| if (!this.config.resolvers) { | |
| if (om.DEBUG_BUILD) { | |
| if (this.config.schema) | |
| R7.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.', | |
| ), | |
| R7.logger.warn() | |
| else if (this.config.modules) | |
| R7.logger.warn( | |
| 'Apollo integration is not able to trace `ApolloServer` instances constructed via `modules` property.', | |
| ) | |
| R7.logger.error( | |
| 'Skipping tracing as no resolvers found on the `ApolloServer` instance.', | |
| ) | |
| } | |
| return d.call(this) | |
| } | |
| let W = R7.arrayify(this.config.resolvers) | |
| return (this.config.resolvers = wM1(W, G)), d.call(this) | |
| } | |
| }) | |
| } | |
| } | |
| } | |
| em.__initStatic() | |
| function wM1(I, G) { | |
| return I.map((Z) => { | |
| return ( | |
| Object.keys(Z).forEach((d) => { | |
| Object.keys(Z[d]).forEach((W) => { | |
| if (typeof Z[d][W] !== 'function') return | |
| hr2(Z, d, W, G) | |
| }) | |
| }), | |
| Z | |
| ) | |
| }) | |
| } | |
| function hr2(I, G, Z, d) { | |
| R7.fill(I[G], Z, function (W) { | |
| return function (...w) { | |
| let C = d().getScope().getSpan(), | |
| V = p01([ | |
| C, | |
| 'optionalAccess', | |
| (X) => X.startChild, | |
| 'call', | |
| (X) => | |
| X({ description: `${G}.${Z}`, op: 'graphql.resolve', origin: 'auto.graphql.apollo' }), | |
| ]), | |
| A = W.call(this, ...w) | |
| if (R7.isThenable(A)) | |
| return A.then((X) => { | |
| return p01([V, 'optionalAccess', (Y) => Y.end, 'call', (Y) => Y()]), X | |
| }) | |
| return p01([V, 'optionalAccess', (X) => X.end, 'call', (X) => X()]), A | |
| } | |
| }) | |
| } | |
| BM1.Apollo = em | |
| }) | |
| var AM1 = _((VM1, DY) => { | |
| Object.defineProperty(VM1, '__esModule', { value: !0 }) | |
| var hF = X0(), | |
| cr2 = [ | |
| () => { | |
| return new (hF.dynamicRequire(DY, './apollo').Apollo)() | |
| }, | |
| () => { | |
| return new (hF.dynamicRequire(DY, './apollo').Apollo)({ useNestjs: !0 }) | |
| }, | |
| () => { | |
| return new (hF.dynamicRequire(DY, './graphql').GraphQL)() | |
| }, | |
| () => { | |
| return new (hF.dynamicRequire(DY, './mongo').Mongo)() | |
| }, | |
| () => { | |
| return new (hF.dynamicRequire(DY, './mongo').Mongo)({ mongoose: !0 }) | |
| }, | |
| () => { | |
| return new (hF.dynamicRequire(DY, './mysql').Mysql)() | |
| }, | |
| () => { | |
| return new (hF.dynamicRequire(DY, './postgres').Postgres)() | |
| }, | |
| ] | |
| VM1.lazyLoadedNodePerformanceMonitoringIntegrations = cr2 | |
| }) | |
| var pG = _((XM1) => { | |
| Object.defineProperty(XM1, '__esModule', { value: !0 }) | |
| var ir2 = X0(), | |
| nr2 = ir2.GLOBAL_OBJ | |
| XM1.WINDOW = nr2 | |
| }) | |
| var n01 = _((HM1) => { | |
| Object.defineProperty(HM1, '__esModule', { value: !0 }) | |
| var YM1 = Y4(), | |
| _M1 = X0(), | |
| DM1 = rI(), | |
| i01 = pG() | |
| function rr2() { | |
| if (i01.WINDOW.document) | |
| i01.WINDOW.document.addEventListener('visibilitychange', () => { | |
| let I = YM1.getActiveTransaction() | |
| if (i01.WINDOW.document.hidden && I) { | |
| let { op: Z, status: d } = YM1.spanToJSON(I) | |
| if ( | |
| (DM1.DEBUG_BUILD && | |
| _M1.logger.log( | |
| `[Tracing] Transaction: cancelled -> since tab moved to the background, op: ${Z}`, | |
| ), | |
| !d) | |
| ) | |
| I.setStatus('cancelled') | |
| I.setTag('visibilitychange', 'document.hidden'), I.end() | |
| } | |
| }) | |
| else | |
| DM1.DEBUG_BUILD && | |
| _M1.logger.warn( | |
| '[Tracing] Could not set up background tab detection due to lack of global document', | |
| ) | |
| } | |
| HM1.registerBackgroundTabDetection = rr2 | |
| }) | |
| var sN = _((FM1) => { | |
| Object.defineProperty(FM1, '__esModule', { value: !0 }) | |
| var or2 = (I, G, Z) => { | |
| let d, W | |
| return (w) => { | |
| if (G.value >= 0) { | |
| if (w || Z) { | |
| if (((W = G.value - (d || 0)), W || d === void 0)) (d = G.value), (G.delta = W), I(G) | |
| } | |
| } | |
| } | |
| } | |
| FM1.bindReporter = or2 | |
| }) | |
| var KM1 = _((JM1) => { | |
| Object.defineProperty(JM1, '__esModule', { value: !0 }) | |
| var tr2 = () => { | |
| return `v3-${Date.now()}-${Math.floor(Math.random() * 8999999999999) + 1000000000000}` | |
| } | |
| JM1.generateUniqueID = tr2 | |
| }) | |
| var Mv = _((gM1) => { | |
| Object.defineProperty(gM1, '__esModule', { value: !0 }) | |
| var vv = pG(), | |
| Gs2 = () => { | |
| let I = vv.WINDOW.performance.timing, | |
| G = vv.WINDOW.performance.navigation.type, | |
| Z = { | |
| entryType: 'navigation', | |
| startTime: 0, | |
| type: G == 2 ? 'back_forward' : G === 1 ? 'reload' : 'navigate', | |
| } | |
| for (let d in I) | |
| if (d !== 'navigationStart' && d !== 'toJSON') Z[d] = Math.max(I[d] - I.navigationStart, 0) | |
| return Z | |
| }, | |
| Zs2 = () => { | |
| if (vv.WINDOW.__WEB_VITALS_POLYFILL__) | |
| return ( | |
| vv.WINDOW.performance && | |
| ((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) || Gs2()) | |
| ) | |
| else | |
| return ( | |
| vv.WINDOW.performance && | |
| performance.getEntriesByType && | |
| performance.getEntriesByType('navigation')[0] | |
| ) | |
| } | |
| gM1.getNavigationEntry = Zs2 | |
| }) | |
| var tm = _((NM1) => { | |
| Object.defineProperty(NM1, '__esModule', { value: !0 }) | |
| var Ws2 = Mv(), | |
| ws2 = () => { | |
| let I = Ws2.getNavigationEntry() | |
| return (I && I.activationStart) || 0 | |
| } | |
| NM1.getActivationStart = ws2 | |
| }) | |
| var oN = _((QM1) => { | |
| Object.defineProperty(QM1, '__esModule', { value: !0 }) | |
| var zM1 = pG(), | |
| Cs2 = KM1(), | |
| Vs2 = tm(), | |
| As2 = Mv(), | |
| Xs2 = (I, G) => { | |
| let Z = As2.getNavigationEntry(), | |
| d = 'navigate' | |
| if (Z) | |
| if ( | |
| (zM1.WINDOW.document && zM1.WINDOW.document.prerendering) || | |
| Vs2.getActivationStart() > 0 | |
| ) | |
| d = 'prerender' | |
| else d = Z.type.replace(/_/g, '-') | |
| return { | |
| name: I, | |
| value: typeof G === 'undefined' ? -1 : G, | |
| rating: 'good', | |
| delta: 0, | |
| entries: [], | |
| id: Cs2.generateUniqueID(), | |
| navigationType: d, | |
| } | |
| } | |
| QM1.initMetric = Xs2 | |
| }) | |
| var xF = _((qM1) => { | |
| Object.defineProperty(qM1, '__esModule', { value: !0 }) | |
| var _s2 = (I, G, Z) => { | |
| try { | |
| if (PerformanceObserver.supportedEntryTypes.includes(I)) { | |
| let d = new PerformanceObserver((W) => { | |
| G(W.getEntries()) | |
| }) | |
| return d.observe(Object.assign({ type: I, buffered: !0 }, Z || {})), d | |
| } | |
| } catch (d) {} | |
| return | |
| } | |
| qM1.observe = _s2 | |
| }) | |
| var eN = _((fM1) => { | |
| Object.defineProperty(fM1, '__esModule', { value: !0 }) | |
| var UM1 = pG(), | |
| Hs2 = (I, G) => { | |
| let Z = (d) => { | |
| if (d.type === 'pagehide' || UM1.WINDOW.document.visibilityState === 'hidden') { | |
| if ((I(d), G)) | |
| removeEventListener('visibilitychange', Z, !0), removeEventListener('pagehide', Z, !0) | |
| } | |
| } | |
| if (UM1.WINDOW.document) | |
| addEventListener('visibilitychange', Z, !0), addEventListener('pagehide', Z, !0) | |
| } | |
| fM1.onHidden = Hs2 | |
| }) | |
| var EM1 = _((RM1) => { | |
| Object.defineProperty(RM1, '__esModule', { value: !0 }) | |
| var Js2 = sN(), | |
| Ks2 = oN(), | |
| gs2 = xF(), | |
| Ns2 = eN(), | |
| zs2 = (I, G = {}) => { | |
| let Z = Ks2.initMetric('CLS', 0), | |
| d, | |
| W = 0, | |
| w = [], | |
| B = (V) => { | |
| V.forEach((A) => { | |
| if (!A.hadRecentInput) { | |
| let X = w[0], | |
| Y = w[w.length - 1] | |
| if ( | |
| W && | |
| w.length !== 0 && | |
| A.startTime - Y.startTime < 1000 && | |
| A.startTime - X.startTime < 5000 | |
| ) | |
| (W += A.value), w.push(A) | |
| else (W = A.value), (w = [A]) | |
| if (W > Z.value) { | |
| if (((Z.value = W), (Z.entries = w), d)) d() | |
| } | |
| } | |
| }) | |
| }, | |
| C = gs2.observe('layout-shift', B) | |
| if (C) { | |
| d = Js2.bindReporter(I, Z, G.reportAllChanges) | |
| let V = () => { | |
| B(C.takeRecords()), d(!0) | |
| } | |
| return Ns2.onHidden(V), V | |
| } | |
| return | |
| } | |
| RM1.onCLS = zs2 | |
| }) | |
| var Zb = _((vM1) => { | |
| Object.defineProperty(vM1, '__esModule', { value: !0 }) | |
| var Ib = pG(), | |
| qs2 = eN(), | |
| Gb = -1, | |
| Us2 = () => { | |
| if (Ib.WINDOW.document && Ib.WINDOW.document.visibilityState) | |
| Gb = | |
| Ib.WINDOW.document.visibilityState === 'hidden' && !Ib.WINDOW.document.prerendering | |
| ? 0 | |
| : 1 / 0 | |
| }, | |
| fs2 = () => { | |
| qs2.onHidden(({ timeStamp: I }) => { | |
| Gb = I | |
| }, !0) | |
| }, | |
| Rs2 = () => { | |
| if (Gb < 0) Us2(), fs2() | |
| return { | |
| get firstHiddenTime() { | |
| return Gb | |
| }, | |
| } | |
| } | |
| vM1.getVisibilityWatcher = Rs2 | |
| }) | |
| var SM1 = _((MM1) => { | |
| Object.defineProperty(MM1, '__esModule', { value: !0 }) | |
| var vs2 = sN(), | |
| Ms2 = Zb(), | |
| Ss2 = oN(), | |
| Ls2 = xF(), | |
| $s2 = eN(), | |
| ys2 = (I) => { | |
| let G = Ms2.getVisibilityWatcher(), | |
| Z = Ss2.initMetric('FID'), | |
| d, | |
| W = (C) => { | |
| if (C.startTime < G.firstHiddenTime) | |
| (Z.value = C.processingStart - C.startTime), Z.entries.push(C), d(!0) | |
| }, | |
| w = (C) => { | |
| C.forEach(W) | |
| }, | |
| B = Ls2.observe('first-input', w) | |
| if (((d = vs2.bindReporter(I, Z)), B)) | |
| $s2.onHidden(() => { | |
| w(B.takeRecords()), B.disconnect() | |
| }, !0) | |
| } | |
| MM1.onFID = ys2 | |
| }) | |
| var yM1 = _(($M1) => { | |
| Object.defineProperty($M1, '__esModule', { value: !0 }) | |
| var Os2 = xF(), | |
| LM1 = 0, | |
| a01 = 1 / 0, | |
| db = 0, | |
| us2 = (I) => { | |
| I.forEach((G) => { | |
| if (G.interactionId) | |
| (a01 = Math.min(a01, G.interactionId)), | |
| (db = Math.max(db, G.interactionId)), | |
| (LM1 = db ? (db - a01) / 7 + 1 : 0) | |
| }) | |
| }, | |
| r01, | |
| Ts2 = () => { | |
| return r01 ? LM1 : performance.interactionCount || 0 | |
| }, | |
| ms2 = () => { | |
| if ('interactionCount' in performance || r01) return | |
| r01 = Os2.observe('event', us2, { type: 'event', buffered: !0, durationThreshold: 0 }) | |
| } | |
| $M1.getInteractionCount = Ts2 | |
| $M1.initInteractionCountPolyfill = ms2 | |
| }) | |
| var bM1 = _((mM1) => { | |
| Object.defineProperty(mM1, '__esModule', { value: !0 }) | |
| var js2 = sN(), | |
| ks2 = oN(), | |
| hs2 = xF(), | |
| xs2 = eN(), | |
| uM1 = yM1(), | |
| TM1 = () => { | |
| return uM1.getInteractionCount() | |
| }, | |
| PM1 = 10, | |
| bV = [], | |
| s01 = {}, | |
| OM1 = (I) => { | |
| let G = bV[bV.length - 1], | |
| Z = s01[I.interactionId] | |
| if (Z || bV.length < PM1 || I.duration > G.latency) { | |
| if (Z) Z.entries.push(I), (Z.latency = Math.max(Z.latency, I.duration)) | |
| else { | |
| let d = { id: I.interactionId, latency: I.duration, entries: [I] } | |
| ;(s01[d.id] = d), bV.push(d) | |
| } | |
| bV.sort((d, W) => W.latency - d.latency), | |
| bV.splice(PM1).forEach((d) => { | |
| delete s01[d.id] | |
| }) | |
| } | |
| }, | |
| cs2 = () => { | |
| let I = Math.min(bV.length - 1, Math.floor(TM1() / 50)) | |
| return bV[I] | |
| }, | |
| ps2 = (I, G) => { | |
| ;(G = G || {}), uM1.initInteractionCountPolyfill() | |
| let Z = ks2.initMetric('INP'), | |
| d, | |
| W = (B) => { | |
| B.forEach((V) => { | |
| if (V.interactionId) OM1(V) | |
| if (V.entryType === 'first-input') { | |
| if ( | |
| !bV.some((X) => { | |
| return X.entries.some((Y) => { | |
| return V.duration === Y.duration && V.startTime === Y.startTime | |
| }) | |
| }) | |
| ) | |
| OM1(V) | |
| } | |
| }) | |
| let C = cs2() | |
| if (C && C.latency !== Z.value) (Z.value = C.latency), (Z.entries = C.entries), d() | |
| }, | |
| w = hs2.observe('event', W, { durationThreshold: G.durationThreshold || 40 }) | |
| if (((d = js2.bindReporter(I, Z, G.reportAllChanges)), w)) | |
| w.observe({ type: 'first-input', buffered: !0 }), | |
| xs2.onHidden(() => { | |
| if ((W(w.takeRecords()), Z.value < 0 && TM1() > 0)) (Z.value = 0), (Z.entries = []) | |
| d(!0) | |
| }) | |
| } | |
| mM1.onINP = ps2 | |
| }) | |
| var kM1 = _((jM1) => { | |
| Object.defineProperty(jM1, '__esModule', { value: !0 }) | |
| var ns2 = pG(), | |
| as2 = sN(), | |
| rs2 = tm(), | |
| ss2 = Zb(), | |
| os2 = oN(), | |
| es2 = xF(), | |
| ts2 = eN(), | |
| lM1 = {}, | |
| Io2 = (I) => { | |
| let G = ss2.getVisibilityWatcher(), | |
| Z = os2.initMetric('LCP'), | |
| d, | |
| W = (B) => { | |
| let C = B[B.length - 1] | |
| if (C) { | |
| let V = Math.max(C.startTime - rs2.getActivationStart(), 0) | |
| if (V < G.firstHiddenTime) (Z.value = V), (Z.entries = [C]), d() | |
| } | |
| }, | |
| w = es2.observe('largest-contentful-paint', W) | |
| if (w) { | |
| d = as2.bindReporter(I, Z) | |
| let B = () => { | |
| if (!lM1[Z.id]) W(w.takeRecords()), w.disconnect(), (lM1[Z.id] = !0), d(!0) | |
| } | |
| return ( | |
| ['keydown', 'click'].forEach((C) => { | |
| if (ns2.WINDOW.document) addEventListener(C, B, { once: !0, capture: !0 }) | |
| }), | |
| ts2.onHidden(B, !0), | |
| B | |
| ) | |
| } | |
| return | |
| } | |
| jM1.onLCP = Io2 | |
| }) | |
| var xM1 = _((hM1) => { | |
| Object.defineProperty(hM1, '__esModule', { value: !0 }) | |
| var o01 = pG(), | |
| Zo2 = sN(), | |
| do2 = tm(), | |
| Wo2 = Mv(), | |
| wo2 = oN(), | |
| e01 = (I) => { | |
| if (!o01.WINDOW.document) return | |
| if (o01.WINDOW.document.prerendering) addEventListener('prerenderingchange', () => e01(I), !0) | |
| else if (o01.WINDOW.document.readyState !== 'complete') | |
| addEventListener('load', () => e01(I), !0) | |
| else setTimeout(I, 0) | |
| }, | |
| Bo2 = (I, G) => { | |
| G = G || {} | |
| let Z = wo2.initMetric('TTFB'), | |
| d = Zo2.bindReporter(I, Z, G.reportAllChanges) | |
| e01(() => { | |
| let W = Wo2.getNavigationEntry() | |
| if (W) { | |
| if ( | |
| ((Z.value = Math.max(W.responseStart - do2.getActivationStart(), 0)), | |
| Z.value < 0 || Z.value > performance.now()) | |
| ) | |
| return | |
| ;(Z.entries = [W]), d(!0) | |
| } | |
| }) | |
| } | |
| hM1.onTTFB = Bo2 | |
| }) | |
| var Iz = _((eM1) => { | |
| Object.defineProperty(eM1, '__esModule', { value: !0 }) | |
| var cM1 = X0(), | |
| Vo2 = rI(), | |
| Ao2 = EM1(), | |
| Xo2 = SM1(), | |
| Yo2 = bM1(), | |
| _o2 = kM1(), | |
| Do2 = xF(), | |
| Ho2 = xM1(), | |
| Sv = {}, | |
| Wb = {}, | |
| pM1, | |
| iM1, | |
| nM1, | |
| aM1, | |
| rM1 | |
| function Fo2(I, G = !1) { | |
| return Lv('cls', I, Qo2, pM1, G) | |
| } | |
| function Jo2(I, G = !1) { | |
| return Lv('lcp', I, Uo2, nM1, G) | |
| } | |
| function Ko2(I) { | |
| return Lv('ttfb', I, fo2, aM1) | |
| } | |
| function go2(I) { | |
| return Lv('fid', I, qo2, iM1) | |
| } | |
| function No2(I) { | |
| return Lv('inp', I, Ro2, rM1) | |
| } | |
| function zo2(I, G) { | |
| if ((sM1(I, G), !Wb[I])) Eo2(I), (Wb[I] = !0) | |
| return oM1(I, G) | |
| } | |
| function tN(I, G) { | |
| let Z = Sv[I] | |
| if (!Z || !Z.length) return | |
| for (let d of Z) | |
| try { | |
| d(G) | |
| } catch (W) { | |
| Vo2.DEBUG_BUILD && | |
| cM1.logger.error( | |
| `Error while triggering instrumentation handler. | |
| Type: ${I} | |
| Name: ${cM1.getFunctionName(d)} | |
| Error:`, | |
| W, | |
| ) | |
| } | |
| } | |
| function Qo2() { | |
| return Ao2.onCLS( | |
| (I) => { | |
| tN('cls', { metric: I }), (pM1 = I) | |
| }, | |
| { reportAllChanges: !0 }, | |
| ) | |
| } | |
| function qo2() { | |
| return Xo2.onFID((I) => { | |
| tN('fid', { metric: I }), (iM1 = I) | |
| }) | |
| } | |
| function Uo2() { | |
| return _o2.onLCP((I) => { | |
| tN('lcp', { metric: I }), (nM1 = I) | |
| }) | |
| } | |
| function fo2() { | |
| return Ho2.onTTFB((I) => { | |
| tN('ttfb', { metric: I }), (aM1 = I) | |
| }) | |
| } | |
| function Ro2() { | |
| return Yo2.onINP((I) => { | |
| tN('inp', { metric: I }), (rM1 = I) | |
| }) | |
| } | |
| function Lv(I, G, Z, d, W = !1) { | |
| sM1(I, G) | |
| let w | |
| if (!Wb[I]) (w = Z()), (Wb[I] = !0) | |
| if (d) G({ metric: d }) | |
| return oM1(I, G, W ? w : void 0) | |
| } | |
| function Eo2(I) { | |
| let G = {} | |
| if (I === 'event') G.durationThreshold = 0 | |
| Do2.observe( | |
| I, | |
| (Z) => { | |
| tN(I, { entries: Z }) | |
| }, | |
| G, | |
| ) | |
| } | |
| function sM1(I, G) { | |
| ;(Sv[I] = Sv[I] || []), Sv[I].push(G) | |
| } | |
| function oM1(I, G, Z) { | |
| return () => { | |
| if (Z) Z() | |
| let d = Sv[I] | |
| if (!d) return | |
| let W = d.indexOf(G) | |
| if (W !== -1) d.splice(W, 1) | |
| } | |
| } | |
| eM1.addClsInstrumentationHandler = Fo2 | |
| eM1.addFidInstrumentationHandler = go2 | |
| eM1.addInpInstrumentationHandler = No2 | |
| eM1.addLcpInstrumentationHandler = Jo2 | |
| eM1.addPerformanceInstrumentationHandler = zo2 | |
| eM1.addTtfbInstrumentationHandler = Ko2 | |
| }) | |
| var IS1 = _((tM1) => { | |
| Object.defineProperty(tM1, '__esModule', { value: !0 }) | |
| function Po2(I) { | |
| return typeof I === 'number' && isFinite(I) | |
| } | |
| function Oo2(I, { startTimestamp: G, ...Z }) { | |
| if (G && I.startTimestamp > G) I.startTimestamp = G | |
| return I.startChild({ startTimestamp: G, ...Z }) | |
| } | |
| tM1._startChild = Oo2 | |
| tM1.isMeasurementValue = Po2 | |
| }) | |
| var G21 = _((wS1) => { | |
| Object.defineProperty(wS1, '__esModule', { value: !0 }) | |
| var lV = Y4(), | |
| Q9 = X0(), | |
| iG = rI(), | |
| cF = Iz(), | |
| jV = pG(), | |
| mo2 = Zb(), | |
| kV = IS1(), | |
| bo2 = Mv(), | |
| lo2 = 2147483647 | |
| function i6(I) { | |
| return I / 1000 | |
| } | |
| function I21() { | |
| return jV.WINDOW && jV.WINDOW.addEventListener && jV.WINDOW.performance | |
| } | |
| var GS1 = 0, | |
| j3 = {}, | |
| NB, | |
| $v | |
| function jo2() { | |
| let I = I21() | |
| if (I && Q9.browserPerformanceTimeOrigin) { | |
| if (I.mark) jV.WINDOW.performance.mark('sentry-tracing-init') | |
| let G = io2(), | |
| Z = co2(), | |
| d = po2(), | |
| W = no2() | |
| return () => { | |
| G(), Z(), d(), W() | |
| } | |
| } | |
| return () => { | |
| return | |
| } | |
| } | |
| function ko2() { | |
| cF.addPerformanceInstrumentationHandler('longtask', ({ entries: I }) => { | |
| for (let G of I) { | |
| let Z = lV.getActiveTransaction() | |
| if (!Z) return | |
| let d = i6(Q9.browserPerformanceTimeOrigin + G.startTime), | |
| W = i6(G.duration) | |
| Z.startChild({ | |
| description: 'Main UI thread blocked', | |
| op: 'ui.long-task', | |
| origin: 'auto.ui.browser.metrics', | |
| startTimestamp: d, | |
| endTimestamp: d + W, | |
| }) | |
| } | |
| }) | |
| } | |
| function ho2() { | |
| cF.addPerformanceInstrumentationHandler('event', ({ entries: I }) => { | |
| for (let G of I) { | |
| let Z = lV.getActiveTransaction() | |
| if (!Z) return | |
| if (G.name === 'click') { | |
| let d = i6(Q9.browserPerformanceTimeOrigin + G.startTime), | |
| W = i6(G.duration), | |
| w = { | |
| description: Q9.htmlTreeAsString(G.target), | |
| op: `ui.interaction.${G.name}`, | |
| origin: 'auto.ui.browser.metrics', | |
| startTimestamp: d, | |
| endTimestamp: d + W, | |
| }, | |
| B = Q9.getComponentName(G.target) | |
| if (B) w.attributes = { 'ui.component_name': B } | |
| Z.startChild(w) | |
| } | |
| } | |
| }) | |
| } | |
| function xo2(I, G) { | |
| if (I21() && Q9.browserPerformanceTimeOrigin) { | |
| let d = ao2(I, G) | |
| return () => { | |
| d() | |
| } | |
| } | |
| return () => { | |
| return | |
| } | |
| } | |
| function co2() { | |
| return cF.addClsInstrumentationHandler(({ metric: I }) => { | |
| let G = I.entries[I.entries.length - 1] | |
| if (!G) return | |
| iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding CLS'), | |
| (j3.cls = { value: I.value, unit: '' }), | |
| ($v = G) | |
| }, !0) | |
| } | |
| function po2() { | |
| return cF.addLcpInstrumentationHandler(({ metric: I }) => { | |
| let G = I.entries[I.entries.length - 1] | |
| if (!G) return | |
| iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding LCP'), | |
| (j3.lcp = { value: I.value, unit: 'millisecond' }), | |
| (NB = G) | |
| }, !0) | |
| } | |
| function io2() { | |
| return cF.addFidInstrumentationHandler(({ metric: I }) => { | |
| let G = I.entries[I.entries.length - 1] | |
| if (!G) return | |
| let Z = i6(Q9.browserPerformanceTimeOrigin), | |
| d = i6(G.startTime) | |
| iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding FID'), | |
| (j3.fid = { value: I.value, unit: 'millisecond' }), | |
| (j3['mark.fid'] = { value: Z + d, unit: 'second' }) | |
| }) | |
| } | |
| function no2() { | |
| return cF.addTtfbInstrumentationHandler(({ metric: I }) => { | |
| if (!I.entries[I.entries.length - 1]) return | |
| iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding TTFB'), | |
| (j3.ttfb = { value: I.value, unit: 'millisecond' }) | |
| }) | |
| } | |
| var ZS1 = { | |
| 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 ao2(I, G) { | |
| return cF.addInpInstrumentationHandler(({ metric: Z }) => { | |
| if (Z.value === void 0) return | |
| let d = Z.entries.find(($) => $.duration === Z.value && ZS1[$.name] !== void 0), | |
| W = lV.getClient() | |
| if (!d || !W) return | |
| let w = ZS1[d.name], | |
| B = W.getOptions(), | |
| C = i6(Q9.browserPerformanceTimeOrigin + d.startTime), | |
| V = i6(Z.value), | |
| A = d.interactionId !== void 0 ? I[d.interactionId] : void 0 | |
| if (A === void 0) return | |
| let { routeName: X, parentContext: Y, activeTransaction: H, user: J, replayId: K } = A, | |
| g = J !== void 0 ? J.email || J.id || J.ip_address : void 0, | |
| z = H !== void 0 ? H.getProfileId() : void 0, | |
| f = new lV.Span({ | |
| startTimestamp: C, | |
| endTimestamp: C + V, | |
| op: `ui.interaction.${w}`, | |
| name: Q9.htmlTreeAsString(d.target), | |
| attributes: { | |
| release: B.release, | |
| environment: B.environment, | |
| transaction: X, | |
| ...(g !== void 0 && g !== '' ? { user: g } : {}), | |
| ...(z !== void 0 ? { profile_id: z } : {}), | |
| ...(K !== void 0 ? { replay_id: K } : {}), | |
| }, | |
| exclusiveTime: Z.value, | |
| measurements: { inp: { value: Z.value, unit: 'millisecond' } }, | |
| }), | |
| S = Ge2(Y, B, G) | |
| if (!S) return | |
| if (Math.random() < S) { | |
| let $ = f ? lV.createSpanEnvelope([f], W.getDsn()) : void 0, | |
| L = W && W.getTransport() | |
| if (L && $) | |
| L.send($).then(null, (T) => { | |
| iG.DEBUG_BUILD && Q9.logger.error('Error while sending interaction:', T) | |
| }) | |
| return | |
| } | |
| }) | |
| } | |
| function ro2(I) { | |
| let G = I21() | |
| if (!G || !jV.WINDOW.performance.getEntries || !Q9.browserPerformanceTimeOrigin) return | |
| iG.DEBUG_BUILD && Q9.logger.log('[Tracing] Adding & adjusting spans using Performance API') | |
| let Z = i6(Q9.browserPerformanceTimeOrigin), | |
| d = G.getEntries(), | |
| { op: W, start_timestamp: w } = lV.spanToJSON(I) | |
| if ( | |
| (d.slice(GS1).forEach((B) => { | |
| let C = i6(B.startTime), | |
| V = i6(B.duration) | |
| if (I.op === 'navigation' && w && Z + C < w) return | |
| switch (B.entryType) { | |
| case 'navigation': { | |
| so2(I, B, Z) | |
| break | |
| } | |
| case 'mark': | |
| case 'paint': | |
| case 'measure': { | |
| dS1(I, B, C, V, Z) | |
| let A = mo2.getVisibilityWatcher(), | |
| X = B.startTime < A.firstHiddenTime | |
| if (B.name === 'first-paint' && X) | |
| iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding FP'), | |
| (j3.fp = { value: B.startTime, unit: 'millisecond' }) | |
| if (B.name === 'first-contentful-paint' && X) | |
| iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding FCP'), | |
| (j3.fcp = { value: B.startTime, unit: 'millisecond' }) | |
| break | |
| } | |
| case 'resource': { | |
| WS1(I, B, B.name, C, V, Z) | |
| break | |
| } | |
| } | |
| }), | |
| (GS1 = Math.max(d.length - 1, 0)), | |
| eo2(I), | |
| W === 'pageload') | |
| ) { | |
| Ie2(j3), | |
| ['fcp', 'fp', 'lcp'].forEach((C) => { | |
| if (!j3[C] || !w || Z >= w) return | |
| let V = j3[C].value, | |
| A = Z + i6(V), | |
| X = Math.abs((A - w) * 1000), | |
| Y = X - V | |
| iG.DEBUG_BUILD && | |
| Q9.logger.log(`[Measurements] Normalized ${C} from ${V} to ${X} (${Y})`), | |
| (j3[C].value = X) | |
| }) | |
| let B = j3['mark.fid'] | |
| if (B && j3.fid) | |
| kV._startChild(I, { | |
| description: 'first input delay', | |
| endTimestamp: B.value + i6(j3.fid.value), | |
| op: 'ui.action', | |
| origin: 'auto.ui.browser.metrics', | |
| startTimestamp: B.value, | |
| }), | |
| delete j3['mark.fid'] | |
| if (!('fcp' in j3)) delete j3.cls | |
| Object.keys(j3).forEach((C) => { | |
| lV.setMeasurement(C, j3[C].value, j3[C].unit) | |
| }), | |
| to2(I) | |
| } | |
| ;(NB = void 0), ($v = void 0), (j3 = {}) | |
| } | |
| function dS1(I, G, Z, d, W) { | |
| let w = W + Z, | |
| B = w + d | |
| return ( | |
| kV._startChild(I, { | |
| description: G.name, | |
| endTimestamp: B, | |
| op: G.entryType, | |
| origin: 'auto.resource.browser.metrics', | |
| startTimestamp: w, | |
| }), | |
| w | |
| ) | |
| } | |
| function so2(I, G, Z) { | |
| ;['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach((d) => { | |
| wb(I, G, d, Z) | |
| }), | |
| wb(I, G, 'secureConnection', Z, 'TLS/SSL', 'connectEnd'), | |
| wb(I, G, 'fetch', Z, 'cache', 'domainLookupStart'), | |
| wb(I, G, 'domainLookup', Z, 'DNS'), | |
| oo2(I, G, Z) | |
| } | |
| function wb(I, G, Z, d, W, w) { | |
| let B = w ? G[w] : G[`${Z}End`], | |
| C = G[`${Z}Start`] | |
| if (!C || !B) return | |
| kV._startChild(I, { | |
| op: 'browser', | |
| origin: 'auto.browser.browser.metrics', | |
| description: W || Z, | |
| startTimestamp: d + i6(C), | |
| endTimestamp: d + i6(B), | |
| }) | |
| } | |
| function oo2(I, G, Z) { | |
| if (G.responseEnd) | |
| kV._startChild(I, { | |
| op: 'browser', | |
| origin: 'auto.browser.browser.metrics', | |
| description: 'request', | |
| startTimestamp: Z + i6(G.requestStart), | |
| endTimestamp: Z + i6(G.responseEnd), | |
| }), | |
| kV._startChild(I, { | |
| op: 'browser', | |
| origin: 'auto.browser.browser.metrics', | |
| description: 'response', | |
| startTimestamp: Z + i6(G.responseStart), | |
| endTimestamp: Z + i6(G.responseEnd), | |
| }) | |
| } | |
| function WS1(I, G, Z, d, W, w) { | |
| if (G.initiatorType === 'xmlhttprequest' || G.initiatorType === 'fetch') return | |
| let B = Q9.parseUrl(Z), | |
| C = {} | |
| if ( | |
| (t01(C, G, 'transferSize', 'http.response_transfer_size'), | |
| t01(C, G, 'encodedBodySize', 'http.response_content_length'), | |
| t01(C, G, 'decodedBodySize', 'http.decoded_response_content_length'), | |
| 'renderBlockingStatus' in G) | |
| ) | |
| C['resource.render_blocking_status'] = G.renderBlockingStatus | |
| if (B.protocol) C['url.scheme'] = B.protocol.split(':').pop() | |
| if (B.host) C['server.address'] = B.host | |
| C['url.same_origin'] = Z.includes(jV.WINDOW.location.origin) | |
| let V = w + d, | |
| A = V + W | |
| kV._startChild(I, { | |
| description: Z.replace(jV.WINDOW.location.origin, ''), | |
| endTimestamp: A, | |
| op: G.initiatorType ? `resource.${G.initiatorType}` : 'resource.other', | |
| origin: 'auto.resource.browser.metrics', | |
| startTimestamp: V, | |
| data: C, | |
| }) | |
| } | |
| function eo2(I) { | |
| let G = jV.WINDOW.navigator | |
| if (!G) return | |
| let Z = G.connection | |
| if (Z) { | |
| if (Z.effectiveType) I.setTag('effectiveConnectionType', Z.effectiveType) | |
| if (Z.type) I.setTag('connectionType', Z.type) | |
| if (kV.isMeasurementValue(Z.rtt)) j3['connection.rtt'] = { value: Z.rtt, unit: 'millisecond' } | |
| } | |
| if (kV.isMeasurementValue(G.deviceMemory)) I.setTag('deviceMemory', `${G.deviceMemory} GB`) | |
| if (kV.isMeasurementValue(G.hardwareConcurrency)) | |
| I.setTag('hardwareConcurrency', String(G.hardwareConcurrency)) | |
| } | |
| function to2(I) { | |
| if (NB) { | |
| if ((iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding LCP Data'), NB.element)) | |
| I.setTag('lcp.element', Q9.htmlTreeAsString(NB.element)) | |
| if (NB.id) I.setTag('lcp.id', NB.id) | |
| if (NB.url) I.setTag('lcp.url', NB.url.trim().slice(0, 200)) | |
| I.setTag('lcp.size', NB.size) | |
| } | |
| if ($v && $v.sources) | |
| iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding CLS Data'), | |
| $v.sources.forEach((G, Z) => I.setTag(`cls.source.${Z + 1}`, Q9.htmlTreeAsString(G.node))) | |
| } | |
| function t01(I, G, Z, d) { | |
| let W = G[Z] | |
| if (W != null && W < lo2) I[d] = W | |
| } | |
| function Ie2(I) { | |
| let G = bo2.getNavigationEntry() | |
| if (!G) return | |
| let { responseStart: Z, requestStart: d } = G | |
| if (d <= Z) | |
| iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding TTFB Request Time'), | |
| (I['ttfb.requestTime'] = { value: Z - d, unit: 'millisecond' }) | |
| } | |
| function Ge2(I, G, Z) { | |
| if (!lV.hasTracingEnabled(G)) return !1 | |
| let d | |
| if (I !== void 0 && typeof G.tracesSampler === 'function') | |
| d = G.tracesSampler({ | |
| transactionContext: I, | |
| name: I.name, | |
| parentSampled: I.parentSampled, | |
| attributes: { ...I.data, ...I.attributes }, | |
| location: jV.WINDOW.location, | |
| }) | |
| else if (I !== void 0 && I.sampled !== void 0) d = I.sampled | |
| else if (typeof G.tracesSampleRate !== 'undefined') d = G.tracesSampleRate | |
| else d = 1 | |
| if (!lV.isValidSampleRate(d)) | |
| return ( | |
| iG.DEBUG_BUILD && | |
| Q9.logger.warn('[Tracing] Discarding interaction span because of invalid sample rate.'), | |
| !1 | |
| ) | |
| if (d === !0) return Z | |
| else if (d === !1) return 0 | |
| return d * Z | |
| } | |
| wS1._addMeasureSpans = dS1 | |
| wS1._addResourceSpans = WS1 | |
| wS1.addPerformanceEntries = ro2 | |
| wS1.startTrackingINP = xo2 | |
| wS1.startTrackingInteractions = ho2 | |
| wS1.startTrackingLongTasks = ko2 | |
| wS1.startTrackingWebVitals = jo2 | |
| }) | |
| var Z21 = _((CS1) => { | |
| Object.defineProperty(CS1, '__esModule', { value: !0 }) | |
| var zB = Y4(), | |
| pF = X0() | |
| function Ae2(I, G, Z, d, W = 'auto.http.browser') { | |
| if (!zB.hasTracingEnabled() || !I.fetchData) return | |
| let w = G(I.fetchData.url) | |
| if (I.endTimestamp && w) { | |
| let J = I.fetchData.__span | |
| if (!J) return | |
| let K = d[J] | |
| if (K) Ye2(K, I), delete d[J] | |
| return | |
| } | |
| let B = zB.getCurrentScope(), | |
| C = zB.getClient(), | |
| { method: V, url: A } = I.fetchData, | |
| X = Xe2(A), | |
| Y = X ? pF.parseUrl(X).host : void 0, | |
| H = w | |
| ? zB.startInactiveSpan({ | |
| name: `${V} ${A}`, | |
| onlyIfParent: !0, | |
| attributes: { | |
| url: A, | |
| type: 'fetch', | |
| 'http.method': V, | |
| 'http.url': X, | |
| 'server.address': Y, | |
| [zB.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: W, | |
| }, | |
| op: 'http.client', | |
| }) | |
| : void 0 | |
| if (H) (I.fetchData.__span = H.spanContext().spanId), (d[H.spanContext().spanId] = H) | |
| if (Z(I.fetchData.url) && C) { | |
| let J = I.args[0] | |
| I.args[1] = I.args[1] || {} | |
| let K = I.args[1] | |
| K.headers = BS1(J, C, B, K, H) | |
| } | |
| return H | |
| } | |
| function BS1(I, G, Z, d, W) { | |
| let w = W || Z.getSpan(), | |
| B = zB.getIsolationScope(), | |
| { | |
| traceId: C, | |
| spanId: V, | |
| sampled: A, | |
| dsc: X, | |
| } = { ...B.getPropagationContext(), ...Z.getPropagationContext() }, | |
| Y = w ? zB.spanToTraceHeader(w) : pF.generateSentryTraceHeader(C, V, A), | |
| H = pF.dynamicSamplingContextToSentryBaggageHeader( | |
| X || | |
| (w | |
| ? zB.getDynamicSamplingContextFromSpan(w) | |
| : zB.getDynamicSamplingContextFromClient(C, G, Z)), | |
| ), | |
| J = | |
| d.headers || | |
| (typeof Request !== 'undefined' && pF.isInstanceOf(I, Request) ? I.headers : void 0) | |
| if (!J) return { 'sentry-trace': Y, baggage: H } | |
| else if (typeof Headers !== 'undefined' && pF.isInstanceOf(J, Headers)) { | |
| let K = new Headers(J) | |
| if ((K.append('sentry-trace', Y), H)) K.append(pF.BAGGAGE_HEADER_NAME, H) | |
| return K | |
| } else if (Array.isArray(J)) { | |
| let K = [...J, ['sentry-trace', Y]] | |
| if (H) K.push([pF.BAGGAGE_HEADER_NAME, H]) | |
| return K | |
| } else { | |
| let K = 'baggage' in J ? J.baggage : void 0, | |
| g = [] | |
| if (Array.isArray(K)) g.push(...K) | |
| else if (K) g.push(K) | |
| if (H) g.push(H) | |
| return { ...J, 'sentry-trace': Y, baggage: g.length > 0 ? g.join(',') : void 0 } | |
| } | |
| } | |
| function Xe2(I) { | |
| try { | |
| return new URL(I).href | |
| } catch (G) { | |
| return | |
| } | |
| } | |
| function Ye2(I, G) { | |
| if (G.response) { | |
| zB.setHttpStatus(I, G.response.status) | |
| let Z = G.response && G.response.headers && G.response.headers.get('content-length') | |
| if (Z) { | |
| let d = parseInt(Z) | |
| if (d > 0) I.setAttribute('http.response_content_length', d) | |
| } | |
| } else if (G.error) I.setStatus('internal_error') | |
| I.end() | |
| } | |
| CS1.addTracingHeadersToFetchRequest = BS1 | |
| CS1.instrumentFetchRequest = Ae2 | |
| }) | |
| var Cb = _((DS1) => { | |
| Object.defineProperty(DS1, '__esModule', { value: !0 }) | |
| var zW = Y4(), | |
| QW = X0(), | |
| He2 = Z21(), | |
| Fe2 = Iz(), | |
| Je2 = pG(), | |
| Bb = ['localhost', /^\/(?!\/)/], | |
| d21 = { | |
| traceFetch: !0, | |
| traceXHR: !0, | |
| enableHTTPTimings: !0, | |
| tracingOrigins: Bb, | |
| tracePropagationTargets: Bb, | |
| } | |
| function Ke2(I) { | |
| let { | |
| traceFetch: G, | |
| traceXHR: Z, | |
| tracePropagationTargets: d, | |
| tracingOrigins: W, | |
| shouldCreateSpanForRequest: w, | |
| enableHTTPTimings: B, | |
| } = { traceFetch: d21.traceFetch, traceXHR: d21.traceXHR, ...I }, | |
| C = typeof w === 'function' ? w : (X) => !0, | |
| V = (X) => XS1(X, d || W), | |
| A = {} | |
| if (G) | |
| QW.addFetchInstrumentationHandler((X) => { | |
| let Y = He2.instrumentFetchRequest(X, C, V, A) | |
| if (Y) { | |
| let H = _S1(X.fetchData.url), | |
| J = H ? QW.parseUrl(H).host : void 0 | |
| Y.setAttributes({ 'http.url': H, 'server.address': J }) | |
| } | |
| if (B && Y) VS1(Y) | |
| }) | |
| if (Z) | |
| QW.addXhrInstrumentationHandler((X) => { | |
| let Y = YS1(X, C, V, A) | |
| if (B && Y) VS1(Y) | |
| }) | |
| } | |
| function ge2(I) { | |
| return ( | |
| I.entryType === 'resource' && | |
| 'initiatorType' in I && | |
| typeof I.nextHopProtocol === 'string' && | |
| (I.initiatorType === 'fetch' || I.initiatorType === 'xmlhttprequest') | |
| ) | |
| } | |
| function VS1(I) { | |
| let { url: G } = zW.spanToJSON(I).data || {} | |
| if (!G || typeof G !== 'string') return | |
| let Z = Fe2.addPerformanceInstrumentationHandler('resource', ({ entries: d }) => { | |
| d.forEach((W) => { | |
| if (ge2(W) && W.name.endsWith(G)) Ne2(W).forEach((B) => I.setAttribute(...B)), setTimeout(Z) | |
| }) | |
| }) | |
| } | |
| function AS1(I) { | |
| let G = 'unknown', | |
| Z = 'unknown', | |
| d = '' | |
| for (let W of I) { | |
| if (W === '/') { | |
| ;[G, Z] = I.split('/') | |
| break | |
| } | |
| if (!isNaN(Number(W))) { | |
| ;(G = d === 'h' ? 'http' : d), (Z = I.split(d)[1]) | |
| break | |
| } | |
| d += W | |
| } | |
| if (d === I) G = d | |
| return { name: G, version: Z } | |
| } | |
| function QB(I = 0) { | |
| return ((QW.browserPerformanceTimeOrigin || performance.timeOrigin) + I) / 1000 | |
| } | |
| function Ne2(I) { | |
| let { name: G, version: Z } = AS1(I.nextHopProtocol), | |
| d = [] | |
| if ( | |
| (d.push(['network.protocol.version', Z], ['network.protocol.name', G]), | |
| !QW.browserPerformanceTimeOrigin) | |
| ) | |
| return d | |
| return [ | |
| ...d, | |
| ['http.request.redirect_start', QB(I.redirectStart)], | |
| ['http.request.fetch_start', QB(I.fetchStart)], | |
| ['http.request.domain_lookup_start', QB(I.domainLookupStart)], | |
| ['http.request.domain_lookup_end', QB(I.domainLookupEnd)], | |
| ['http.request.connect_start', QB(I.connectStart)], | |
| ['http.request.secure_connection_start', QB(I.secureConnectionStart)], | |
| ['http.request.connection_end', QB(I.connectEnd)], | |
| ['http.request.request_start', QB(I.requestStart)], | |
| ['http.request.response_start', QB(I.responseStart)], | |
| ['http.request.response_end', QB(I.responseEnd)], | |
| ] | |
| } | |
| function XS1(I, G) { | |
| return QW.stringMatchesSomePattern(I, G || Bb) | |
| } | |
| function YS1(I, G, Z, d) { | |
| let W = I.xhr, | |
| w = W && W[QW.SENTRY_XHR_DATA_KEY] | |
| if (!zW.hasTracingEnabled() || !W || W.__sentry_own_request__ || !w) return | |
| let B = G(w.url) | |
| if (I.endTimestamp && B) { | |
| let J = W.__sentry_xhr_span_id__ | |
| if (!J) return | |
| let K = d[J] | |
| if (K && w.status_code !== void 0) zW.setHttpStatus(K, w.status_code), K.end(), delete d[J] | |
| return | |
| } | |
| let C = zW.getCurrentScope(), | |
| V = zW.getIsolationScope(), | |
| A = _S1(w.url), | |
| X = A ? QW.parseUrl(A).host : void 0, | |
| Y = B | |
| ? zW.startInactiveSpan({ | |
| name: `${w.method} ${w.url}`, | |
| onlyIfParent: !0, | |
| attributes: { | |
| type: 'xhr', | |
| 'http.method': w.method, | |
| 'http.url': A, | |
| url: w.url, | |
| 'server.address': X, | |
| [zW.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser', | |
| }, | |
| op: 'http.client', | |
| }) | |
| : void 0 | |
| if (Y) (W.__sentry_xhr_span_id__ = Y.spanContext().spanId), (d[W.__sentry_xhr_span_id__] = Y) | |
| let H = zW.getClient() | |
| if (W.setRequestHeader && Z(w.url) && H) { | |
| let { | |
| traceId: J, | |
| spanId: K, | |
| sampled: g, | |
| dsc: z, | |
| } = { ...V.getPropagationContext(), ...C.getPropagationContext() }, | |
| f = Y ? zW.spanToTraceHeader(Y) : QW.generateSentryTraceHeader(J, K, g), | |
| S = QW.dynamicSamplingContextToSentryBaggageHeader( | |
| z || | |
| (Y | |
| ? zW.getDynamicSamplingContextFromSpan(Y) | |
| : zW.getDynamicSamplingContextFromClient(J, H, C)), | |
| ) | |
| ze2(W, f, S) | |
| } | |
| return Y | |
| } | |
| function ze2(I, G, Z) { | |
| try { | |
| if ((I.setRequestHeader('sentry-trace', G), Z)) I.setRequestHeader(QW.BAGGAGE_HEADER_NAME, Z) | |
| } catch (d) {} | |
| } | |
| function _S1(I) { | |
| try { | |
| return new URL(I, Je2.WINDOW.location.origin).href | |
| } catch (G) { | |
| return | |
| } | |
| } | |
| DS1.DEFAULT_TRACE_PROPAGATION_TARGETS = Bb | |
| DS1.defaultRequestInstrumentationOptions = d21 | |
| DS1.extractNetworkProtocol = AS1 | |
| DS1.instrumentOutgoingRequests = Ke2 | |
| DS1.shouldAttachHeaders = XS1 | |
| DS1.xhrCallback = YS1 | |
| }) | |
| var JS1 = _((FS1) => { | |
| Object.defineProperty(FS1, '__esModule', { value: !0 }) | |
| var yv = X0(), | |
| HS1 = rI(), | |
| Pv = pG() | |
| function ve2(I, G = !0, Z = !0) { | |
| if (!Pv.WINDOW || !Pv.WINDOW.location) { | |
| HS1.DEBUG_BUILD && | |
| yv.logger.warn('Could not initialize routing instrumentation due to invalid location') | |
| return | |
| } | |
| let d = Pv.WINDOW.location.href, | |
| W | |
| if (G) | |
| W = I({ | |
| name: Pv.WINDOW.location.pathname, | |
| startTimestamp: yv.browserPerformanceTimeOrigin | |
| ? yv.browserPerformanceTimeOrigin / 1000 | |
| : void 0, | |
| op: 'pageload', | |
| origin: 'auto.pageload.browser', | |
| metadata: { source: 'url' }, | |
| }) | |
| if (Z) | |
| yv.addHistoryInstrumentationHandler(({ to: w, from: B }) => { | |
| if (B === void 0 && d && d.indexOf(w) !== -1) { | |
| d = void 0 | |
| return | |
| } | |
| if (B !== w) { | |
| if (((d = void 0), W)) | |
| HS1.DEBUG_BUILD && | |
| yv.logger.log(`[Tracing] Finishing current transaction with op: ${W.op}`), | |
| W.end() | |
| W = I({ | |
| name: Pv.WINDOW.location.pathname, | |
| op: 'navigation', | |
| origin: 'auto.navigation.browser', | |
| metadata: { source: 'url' }, | |
| }) | |
| } | |
| }) | |
| } | |
| FS1.instrumentRoutingWithDefaults = ve2 | |
| }) | |
| var US1 = _((qS1) => { | |
| Object.defineProperty(qS1, '__esModule', { value: !0 }) | |
| var qW = Y4(), | |
| hV = X0(), | |
| HY = rI(), | |
| Se2 = n01(), | |
| KS1 = Iz(), | |
| Ov = G21(), | |
| NS1 = Cb(), | |
| Le2 = JS1(), | |
| iF = pG(), | |
| zS1 = 'BrowserTracing', | |
| $e2 = { | |
| ...qW.TRACING_DEFAULTS, | |
| markBackgroundTransactions: !0, | |
| routingInstrumentation: Le2.instrumentRoutingWithDefaults, | |
| startTransactionOnLocationChange: !0, | |
| startTransactionOnPageLoad: !0, | |
| enableLongTask: !0, | |
| enableInp: !1, | |
| interactionsSampleRate: 1, | |
| _experiments: {}, | |
| ...NS1.defaultRequestInstrumentationOptions, | |
| }, | |
| gS1 = 10 | |
| class QS1 { | |
| constructor(I) { | |
| if ( | |
| ((this.name = zS1), | |
| (this._hasSetTracePropagationTargets = !1), | |
| qW.addTracingExtensions(), | |
| HY.DEBUG_BUILD) | |
| ) | |
| this._hasSetTracePropagationTargets = !!( | |
| I && | |
| (I.tracePropagationTargets || I.tracingOrigins) | |
| ) | |
| if (((this.options = { ...$e2, ...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 = Ov.startTrackingWebVitals()), | |
| (this._interactionIdToRouteNameMapping = {}), | |
| this.options.enableInp) | |
| ) | |
| Ov.startTrackingINP( | |
| this._interactionIdToRouteNameMapping, | |
| this.options.interactionsSampleRate, | |
| ) | |
| if (this.options.enableLongTask) Ov.startTrackingLongTasks() | |
| if (this.options._experiments.enableInteractions) Ov.startTrackingInteractions() | |
| this._latestRoute = { name: void 0, context: void 0 } | |
| } | |
| setupOnce(I, G) { | |
| this._getCurrentHub = G | |
| let d = G().getClient(), | |
| W = d && d.getOptions(), | |
| { | |
| routingInstrumentation: w, | |
| startTransactionOnLocationChange: B, | |
| startTransactionOnPageLoad: C, | |
| markBackgroundTransactions: V, | |
| traceFetch: A, | |
| traceXHR: X, | |
| shouldCreateSpanForRequest: Y, | |
| enableHTTPTimings: H, | |
| _experiments: J, | |
| } = this.options, | |
| K = W && W.tracePropagationTargets, | |
| g = K || this.options.tracePropagationTargets | |
| if (HY.DEBUG_BUILD && this._hasSetTracePropagationTargets && K) | |
| hV.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( | |
| (z) => { | |
| let f = this._createRouteTransaction(z) | |
| return ( | |
| this.options._experiments.onStartRouteTransaction && | |
| this.options._experiments.onStartRouteTransaction(f, z, G), | |
| f | |
| ) | |
| }, | |
| C, | |
| B, | |
| ), | |
| V) | |
| ) | |
| Se2.registerBackgroundTabDetection() | |
| if (J.enableInteractions) this._registerInteractionListener() | |
| if (this.options.enableInp) this._registerInpInteractionListener() | |
| NS1.instrumentOutgoingRequests({ | |
| traceFetch: A, | |
| traceXHR: X, | |
| tracePropagationTargets: g, | |
| shouldCreateSpanForRequest: Y, | |
| enableHTTPTimings: H, | |
| }) | |
| } | |
| _createRouteTransaction(I) { | |
| if (!this._getCurrentHub) { | |
| HY.DEBUG_BUILD && | |
| hV.logger.warn( | |
| `[Tracing] Did not create ${I.op} transaction because _getCurrentHub is invalid.`, | |
| ) | |
| return | |
| } | |
| let G = this._getCurrentHub(), | |
| { beforeNavigate: Z, idleTimeout: d, finalTimeout: W, heartbeatInterval: w } = this.options, | |
| B = I.op === 'pageload', | |
| C | |
| if (B) { | |
| let H = B ? W21('sentry-trace') : '', | |
| J = B ? W21('baggage') : void 0, | |
| { | |
| traceId: K, | |
| dsc: g, | |
| parentSpanId: z, | |
| sampled: f, | |
| } = hV.propagationContextFromHeaders(H, J) | |
| C = { | |
| traceId: K, | |
| parentSpanId: z, | |
| parentSampled: f, | |
| ...I, | |
| metadata: { ...I.metadata, dynamicSamplingContext: g }, | |
| trimEnd: !0, | |
| } | |
| } else C = { trimEnd: !0, ...I } | |
| let V = typeof Z === 'function' ? Z(C) : C, | |
| A = V === void 0 ? { ...C, sampled: !1 } : V | |
| if ( | |
| ((A.metadata = A.name !== C.name ? { ...A.metadata, source: 'custom' } : A.metadata), | |
| (this._latestRoute.name = A.name), | |
| (this._latestRoute.context = A), | |
| A.sampled === !1) | |
| ) | |
| HY.DEBUG_BUILD && | |
| hV.logger.log(`[Tracing] Will not send ${A.op} transaction because of beforeNavigate.`) | |
| HY.DEBUG_BUILD && hV.logger.log(`[Tracing] Starting ${A.op} transaction on scope`) | |
| let { location: X } = iF.WINDOW, | |
| Y = qW.startIdleTransaction(G, A, d, W, !0, { location: X }, w, B) | |
| if (B) { | |
| if (iF.WINDOW.document) { | |
| if ( | |
| (iF.WINDOW.document.addEventListener('readystatechange', () => { | |
| if (['interactive', 'complete'].includes(iF.WINDOW.document.readyState)) | |
| Y.sendAutoFinishSignal() | |
| }), | |
| ['interactive', 'complete'].includes(iF.WINDOW.document.readyState)) | |
| ) | |
| Y.sendAutoFinishSignal() | |
| } | |
| } | |
| return ( | |
| Y.registerBeforeFinishCallback((H) => { | |
| this._collectWebVitals(), Ov.addPerformanceEntries(H) | |
| }), | |
| Y | |
| ) | |
| } | |
| _registerInteractionListener() { | |
| let I, | |
| G = () => { | |
| let { idleTimeout: Z, finalTimeout: d, heartbeatInterval: W } = this.options, | |
| w = 'ui.action.click', | |
| B = qW.getActiveTransaction() | |
| if (B && B.op && ['navigation', 'pageload'].includes(B.op)) { | |
| HY.DEBUG_BUILD && | |
| hV.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) { | |
| HY.DEBUG_BUILD && | |
| hV.logger.warn( | |
| '[Tracing] Did not create ui.action.click transaction because _getCurrentHub is invalid.', | |
| ) | |
| return | |
| } | |
| if (!this._latestRoute.name) { | |
| HY.DEBUG_BUILD && | |
| hV.logger.warn( | |
| '[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing.', | |
| ) | |
| return | |
| } | |
| let C = this._getCurrentHub(), | |
| { location: V } = iF.WINDOW, | |
| A = { | |
| name: this._latestRoute.name, | |
| op: 'ui.action.click', | |
| trimEnd: !0, | |
| data: { | |
| [qW.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: this._latestRoute.context | |
| ? ye2(this._latestRoute.context) | |
| : 'url', | |
| }, | |
| } | |
| I = qW.startIdleTransaction(C, A, Z, d, !0, { location: V }, W) | |
| } | |
| ;['click'].forEach((Z) => { | |
| if (iF.WINDOW.document) addEventListener(Z, G, { once: !1, capture: !0 }) | |
| }) | |
| } | |
| _registerInpInteractionListener() { | |
| let I = ({ entries: G }) => { | |
| let Z = qW.getClient(), | |
| d = | |
| Z !== void 0 && Z.getIntegrationByName !== void 0 | |
| ? Z.getIntegrationByName('Replay') | |
| : void 0, | |
| W = d !== void 0 ? d.getReplayId() : void 0, | |
| w = qW.getActiveTransaction(), | |
| B = qW.getCurrentScope(), | |
| C = B !== void 0 ? B.getUser() : void 0 | |
| G.forEach((V) => { | |
| if (Pe2(V)) { | |
| let A = V.interactionId | |
| if (A === void 0) return | |
| let X = this._interactionIdToRouteNameMapping[A], | |
| Y = V.duration, | |
| H = V.startTime, | |
| J = Object.keys(this._interactionIdToRouteNameMapping), | |
| K = | |
| J.length > 0 | |
| ? J.reduce((g, z) => { | |
| return this._interactionIdToRouteNameMapping[g].duration < | |
| this._interactionIdToRouteNameMapping[z].duration | |
| ? g | |
| : z | |
| }) | |
| : void 0 | |
| if (V.entryType === 'first-input') { | |
| if ( | |
| J.map((z) => this._interactionIdToRouteNameMapping[z]).some((z) => { | |
| return z.duration === Y && z.startTime === H | |
| }) | |
| ) | |
| return | |
| } | |
| if (!A) return | |
| if (X) X.duration = Math.max(X.duration, Y) | |
| else if ( | |
| J.length < gS1 || | |
| K === void 0 || | |
| Y > this._interactionIdToRouteNameMapping[K].duration | |
| ) { | |
| let g = this._latestRoute.name, | |
| z = this._latestRoute.context | |
| if (g && z) { | |
| if (K && Object.keys(this._interactionIdToRouteNameMapping).length >= gS1) | |
| delete this._interactionIdToRouteNameMapping[K] | |
| this._interactionIdToRouteNameMapping[A] = { | |
| routeName: g, | |
| duration: Y, | |
| parentContext: z, | |
| user: C, | |
| activeTransaction: w, | |
| replayId: W, | |
| startTime: H, | |
| } | |
| } | |
| } | |
| } | |
| }) | |
| } | |
| KS1.addPerformanceInstrumentationHandler('event', I), | |
| KS1.addPerformanceInstrumentationHandler('first-input', I) | |
| } | |
| } | |
| function W21(I) { | |
| let G = hV.getDomElement(`meta[name=${I}]`) | |
| return G ? G.getAttribute('content') : void 0 | |
| } | |
| function ye2(I) { | |
| let G = I.attributes && I.attributes[qW.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
| Z = I.data && I.data[qW.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
| d = I.metadata && I.metadata.source | |
| return G || Z || d | |
| } | |
| function Pe2(I) { | |
| return 'duration' in I | |
| } | |
| qS1.BROWSER_TRACING_INTEGRATION_ID = zS1 | |
| qS1.BrowserTracing = QS1 | |
| qS1.getMetaContent = W21 | |
| }) | |
| var $S1 = _((LS1) => { | |
| Object.defineProperty(LS1, '__esModule', { value: !0 }) | |
| var B6 = Y4(), | |
| Id = X0(), | |
| FY = rI(), | |
| me2 = n01(), | |
| fS1 = Iz(), | |
| uv = G21(), | |
| ES1 = Cb(), | |
| nG = pG(), | |
| vS1 = 'BrowserTracing', | |
| be2 = { | |
| ...B6.TRACING_DEFAULTS, | |
| instrumentNavigation: !0, | |
| instrumentPageLoad: !0, | |
| markBackgroundSpan: !0, | |
| enableLongTask: !0, | |
| enableInp: !1, | |
| interactionsSampleRate: 1, | |
| _experiments: {}, | |
| ...ES1.defaultRequestInstrumentationOptions, | |
| }, | |
| le2 = (I = {}) => { | |
| let G = FY.DEBUG_BUILD ? !!(I.tracePropagationTargets || I.tracingOrigins) : !1 | |
| if ((B6.addTracingExtensions(), !I.tracePropagationTargets && I.tracingOrigins)) | |
| I.tracePropagationTargets = I.tracingOrigins | |
| let Z = { ...be2, ...I }, | |
| d = uv.startTrackingWebVitals(), | |
| W = {} | |
| if (Z.enableInp) uv.startTrackingINP(W, Z.interactionsSampleRate) | |
| if (Z.enableLongTask) uv.startTrackingLongTasks() | |
| if (Z._experiments.enableInteractions) uv.startTrackingInteractions() | |
| let w = { name: void 0, context: void 0 } | |
| function B(C) { | |
| let V = B6.getCurrentHub(), | |
| { beforeStartSpan: A, idleTimeout: X, finalTimeout: Y, heartbeatInterval: H } = Z, | |
| J = C.op === 'pageload', | |
| K | |
| if (J) { | |
| let S = J ? w21('sentry-trace') : '', | |
| $ = J ? w21('baggage') : void 0, | |
| { | |
| traceId: L, | |
| dsc: T, | |
| parentSpanId: m, | |
| sampled: O, | |
| } = Id.propagationContextFromHeaders(S, $) | |
| K = { | |
| traceId: L, | |
| parentSpanId: m, | |
| parentSampled: O, | |
| ...C, | |
| metadata: { ...C.metadata, dynamicSamplingContext: T }, | |
| trimEnd: !0, | |
| } | |
| } else K = { trimEnd: !0, ...C } | |
| let g = A ? A(K) : K | |
| if ( | |
| ((g.metadata = g.name !== K.name ? { ...g.metadata, source: 'custom' } : g.metadata), | |
| (w.name = g.name), | |
| (w.context = g), | |
| g.sampled === !1) | |
| ) | |
| FY.DEBUG_BUILD && | |
| Id.logger.log(`[Tracing] Will not send ${g.op} transaction because of beforeNavigate.`) | |
| FY.DEBUG_BUILD && Id.logger.log(`[Tracing] Starting ${g.op} transaction on scope`) | |
| let { location: z } = nG.WINDOW, | |
| f = B6.startIdleTransaction(V, g, X, Y, !0, { location: z }, H, J) | |
| if (J && nG.WINDOW.document) { | |
| if ( | |
| (nG.WINDOW.document.addEventListener('readystatechange', () => { | |
| if (['interactive', 'complete'].includes(nG.WINDOW.document.readyState)) | |
| f.sendAutoFinishSignal() | |
| }), | |
| ['interactive', 'complete'].includes(nG.WINDOW.document.readyState)) | |
| ) | |
| f.sendAutoFinishSignal() | |
| } | |
| return ( | |
| f.registerBeforeFinishCallback((S) => { | |
| d(), uv.addPerformanceEntries(S) | |
| }), | |
| f | |
| ) | |
| } | |
| return { | |
| name: vS1, | |
| setupOnce: () => {}, | |
| afterAllSetup(C) { | |
| let V = C.getOptions(), | |
| { | |
| markBackgroundSpan: A, | |
| traceFetch: X, | |
| traceXHR: Y, | |
| shouldCreateSpanForRequest: H, | |
| enableHTTPTimings: J, | |
| _experiments: K, | |
| } = Z, | |
| g = V && V.tracePropagationTargets, | |
| z = g || Z.tracePropagationTargets | |
| if (FY.DEBUG_BUILD && G && g) | |
| Id.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 f, | |
| S = nG.WINDOW.location && nG.WINDOW.location.href | |
| if (C.on) | |
| C.on('startNavigationSpan', ($) => { | |
| if (f) | |
| FY.DEBUG_BUILD && | |
| Id.logger.log( | |
| `[Tracing] Finishing current transaction with op: ${B6.spanToJSON(f).op}`, | |
| ), | |
| f.end() | |
| f = B({ op: 'navigation', ...$ }) | |
| }), | |
| C.on('startPageLoadSpan', ($) => { | |
| if (f) | |
| FY.DEBUG_BUILD && | |
| Id.logger.log( | |
| `[Tracing] Finishing current transaction with op: ${B6.spanToJSON(f).op}`, | |
| ), | |
| f.end() | |
| f = B({ op: 'pageload', ...$ }) | |
| }) | |
| if (Z.instrumentPageLoad && C.emit && nG.WINDOW.location) { | |
| let $ = { | |
| name: nG.WINDOW.location.pathname, | |
| startTimestamp: Id.browserPerformanceTimeOrigin | |
| ? Id.browserPerformanceTimeOrigin / 1000 | |
| : void 0, | |
| origin: 'auto.pageload.browser', | |
| attributes: { [B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' }, | |
| } | |
| MS1(C, $) | |
| } | |
| if (Z.instrumentNavigation && C.emit && nG.WINDOW.location) | |
| Id.addHistoryInstrumentationHandler(({ to: $, from: L }) => { | |
| if (L === void 0 && S && S.indexOf($) !== -1) { | |
| S = void 0 | |
| return | |
| } | |
| if (L !== $) { | |
| S = void 0 | |
| let T = { | |
| name: nG.WINDOW.location.pathname, | |
| origin: 'auto.navigation.browser', | |
| attributes: { [B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' }, | |
| } | |
| SS1(C, T) | |
| } | |
| }) | |
| if (A) me2.registerBackgroundTabDetection() | |
| if (K.enableInteractions) je2(Z, w) | |
| if (Z.enableInp) he2(W, w) | |
| ES1.instrumentOutgoingRequests({ | |
| traceFetch: X, | |
| traceXHR: Y, | |
| tracePropagationTargets: z, | |
| shouldCreateSpanForRequest: H, | |
| enableHTTPTimings: J, | |
| }) | |
| }, | |
| options: Z, | |
| } | |
| } | |
| function MS1(I, G) { | |
| if (!I.emit) return | |
| I.emit('startPageLoadSpan', G) | |
| let Z = B6.getActiveSpan() | |
| return (Z && B6.spanToJSON(Z).op) === 'pageload' ? Z : void 0 | |
| } | |
| function SS1(I, G) { | |
| if (!I.emit) return | |
| I.emit('startNavigationSpan', G) | |
| let Z = B6.getActiveSpan() | |
| return (Z && B6.spanToJSON(Z).op) === 'navigation' ? Z : void 0 | |
| } | |
| function w21(I) { | |
| let G = Id.getDomElement(`meta[name=${I}]`) | |
| return G ? G.getAttribute('content') : void 0 | |
| } | |
| function je2(I, G) { | |
| let Z, | |
| d = () => { | |
| let { idleTimeout: W, finalTimeout: w, heartbeatInterval: B } = I, | |
| C = 'ui.action.click', | |
| V = B6.getActiveTransaction() | |
| if (V && V.op && ['navigation', 'pageload'].includes(V.op)) { | |
| FY.DEBUG_BUILD && | |
| Id.logger.warn( | |
| '[Tracing] Did not create ui.action.click transaction because a pageload or navigation transaction is in progress.', | |
| ) | |
| return | |
| } | |
| if (Z) Z.setFinishReason('interactionInterrupted'), Z.end(), (Z = void 0) | |
| if (!G.name) { | |
| FY.DEBUG_BUILD && | |
| Id.logger.warn( | |
| '[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing.', | |
| ) | |
| return | |
| } | |
| let { location: A } = nG.WINDOW, | |
| X = { | |
| name: G.name, | |
| op: 'ui.action.click', | |
| trimEnd: !0, | |
| data: { [B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: G.context ? xe2(G.context) : 'url' }, | |
| } | |
| Z = B6.startIdleTransaction(B6.getCurrentHub(), X, W, w, !0, { location: A }, B) | |
| } | |
| ;['click'].forEach((W) => { | |
| if (nG.WINDOW.document) addEventListener(W, d, { once: !1, capture: !0 }) | |
| }) | |
| } | |
| function ke2(I) { | |
| return 'duration' in I | |
| } | |
| var RS1 = 10 | |
| function he2(I, G) { | |
| let Z = ({ entries: d }) => { | |
| let W = B6.getClient(), | |
| w = | |
| W !== void 0 && W.getIntegrationByName !== void 0 | |
| ? W.getIntegrationByName('Replay') | |
| : void 0, | |
| B = w !== void 0 ? w.getReplayId() : void 0, | |
| C = B6.getActiveTransaction(), | |
| V = B6.getCurrentScope(), | |
| A = V !== void 0 ? V.getUser() : void 0 | |
| d.forEach((X) => { | |
| if (ke2(X)) { | |
| let Y = X.interactionId | |
| if (Y === void 0) return | |
| let H = I[Y], | |
| J = X.duration, | |
| K = X.startTime, | |
| g = Object.keys(I), | |
| z = | |
| g.length > 0 | |
| ? g.reduce((f, S) => { | |
| return I[f].duration < I[S].duration ? f : S | |
| }) | |
| : void 0 | |
| if (X.entryType === 'first-input') { | |
| if ( | |
| g | |
| .map((S) => I[S]) | |
| .some((S) => { | |
| return S.duration === J && S.startTime === K | |
| }) | |
| ) | |
| return | |
| } | |
| if (!Y) return | |
| if (H) H.duration = Math.max(H.duration, J) | |
| else if (g.length < RS1 || z === void 0 || J > I[z].duration) { | |
| let { name: f, context: S } = G | |
| if (f && S) { | |
| if (z && Object.keys(I).length >= RS1) delete I[z] | |
| I[Y] = { | |
| routeName: f, | |
| duration: J, | |
| parentContext: S, | |
| user: A, | |
| activeTransaction: C, | |
| replayId: B, | |
| startTime: K, | |
| } | |
| } | |
| } | |
| } | |
| }) | |
| } | |
| fS1.addPerformanceInstrumentationHandler('event', Z), | |
| fS1.addPerformanceInstrumentationHandler('first-input', Z) | |
| } | |
| function xe2(I) { | |
| let G = I.attributes && I.attributes[B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
| Z = I.data && I.data[B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
| d = I.metadata && I.metadata.source | |
| return G || Z || d | |
| } | |
| LS1.BROWSER_TRACING_INTEGRATION_ID = vS1 | |
| LS1.browserTracingIntegration = le2 | |
| LS1.getMetaContent = w21 | |
| LS1.startBrowserTracingNavigationSpan = SS1 | |
| LS1.startBrowserTracingPageLoadSpan = MS1 | |
| }) | |
| var OS1 = _((PS1, Tv) => { | |
| Object.defineProperty(PS1, '__esModule', { value: !0 }) | |
| var yS1 = Y4(), | |
| Gz = X0() | |
| function re2() { | |
| let I = yS1.getMainCarrier() | |
| if (!I.__SENTRY__) return | |
| let G = { | |
| mongodb() { | |
| return new (Gz.dynamicRequire(Tv, './node/integrations/mongo').Mongo)() | |
| }, | |
| mongoose() { | |
| return new (Gz.dynamicRequire(Tv, './node/integrations/mongo').Mongo)() | |
| }, | |
| mysql() { | |
| return new (Gz.dynamicRequire(Tv, './node/integrations/mysql').Mysql)() | |
| }, | |
| pg() { | |
| return new (Gz.dynamicRequire(Tv, './node/integrations/postgres').Postgres)() | |
| }, | |
| }, | |
| Z = Object.keys(G) | |
| .filter((d) => !!Gz.loadModule(d)) | |
| .map((d) => { | |
| try { | |
| return G[d]() | |
| } catch (W) { | |
| return | |
| } | |
| }) | |
| .filter((d) => d) | |
| if (Z.length > 0) I.__SENTRY__.integrations = [...(I.__SENTRY__.integrations || []), ...Z] | |
| } | |
| function se2() { | |
| if ((yS1.addTracingExtensions(), Gz.isNodeEnv())) re2() | |
| } | |
| PS1.addExtensionMethods = se2 | |
| }) | |
| var C21 = _((lS1) => { | |
| Object.defineProperty(lS1, '__esModule', { value: !0 }) | |
| var xV = Y4(), | |
| uS1 = X0(), | |
| ee2 = pv1(), | |
| te2 = nv1(), | |
| It2 = rv1(), | |
| Gt2 = ev1(), | |
| Zt2 = GM1(), | |
| dt2 = WM1(), | |
| Wt2 = CM1(), | |
| wt2 = AM1(), | |
| TS1 = US1(), | |
| B21 = $S1(), | |
| mS1 = Cb(), | |
| Vb = Iz(), | |
| bS1 = Z21(), | |
| Bt2 = OS1() | |
| lS1.IdleTransaction = xV.IdleTransaction | |
| lS1.Span = xV.Span | |
| lS1.SpanStatus = xV.SpanStatus | |
| lS1.Transaction = xV.Transaction | |
| lS1.extractTraceparentData = xV.extractTraceparentData | |
| lS1.getActiveTransaction = xV.getActiveTransaction | |
| lS1.hasTracingEnabled = xV.hasTracingEnabled | |
| lS1.spanStatusfromHttpCode = xV.spanStatusfromHttpCode | |
| lS1.startIdleTransaction = xV.startIdleTransaction | |
| lS1.TRACEPARENT_REGEXP = uS1.TRACEPARENT_REGEXP | |
| lS1.stripUrlQueryAndFragment = uS1.stripUrlQueryAndFragment | |
| lS1.Express = ee2.Express | |
| lS1.Postgres = te2.Postgres | |
| lS1.Mysql = It2.Mysql | |
| lS1.Mongo = Gt2.Mongo | |
| lS1.Prisma = Zt2.Prisma | |
| lS1.GraphQL = dt2.GraphQL | |
| lS1.Apollo = Wt2.Apollo | |
| lS1.lazyLoadedNodePerformanceMonitoringIntegrations = | |
| wt2.lazyLoadedNodePerformanceMonitoringIntegrations | |
| lS1.BROWSER_TRACING_INTEGRATION_ID = TS1.BROWSER_TRACING_INTEGRATION_ID | |
| lS1.BrowserTracing = TS1.BrowserTracing | |
| lS1.browserTracingIntegration = B21.browserTracingIntegration | |
| lS1.startBrowserTracingNavigationSpan = B21.startBrowserTracingNavigationSpan | |
| lS1.startBrowserTracingPageLoadSpan = B21.startBrowserTracingPageLoadSpan | |
| lS1.defaultRequestInstrumentationOptions = mS1.defaultRequestInstrumentationOptions | |
| lS1.instrumentOutgoingRequests = mS1.instrumentOutgoingRequests | |
| lS1.addClsInstrumentationHandler = Vb.addClsInstrumentationHandler | |
| lS1.addFidInstrumentationHandler = Vb.addFidInstrumentationHandler | |
| lS1.addLcpInstrumentationHandler = Vb.addLcpInstrumentationHandler | |
| lS1.addPerformanceInstrumentationHandler = Vb.addPerformanceInstrumentationHandler | |
| lS1.addTracingHeadersToFetchRequest = bS1.addTracingHeadersToFetchRequest | |
| lS1.instrumentFetchRequest = bS1.instrumentFetchRequest | |
| lS1.addExtensionMethods = Bt2.addExtensionMethods | |
| }) | |
| var kS1 = _((jS1) => { | |
| Object.defineProperty(jS1, '__esModule', { value: !0 }) | |
| var jt2 = C21(), | |
| kt2 = X0() | |
| function ht2() { | |
| let I = jt2.lazyLoadedNodePerformanceMonitoringIntegrations | |
| .map((G) => { | |
| try { | |
| return G() | |
| } catch (Z) { | |
| return | |
| } | |
| }) | |
| .filter((G) => !!G) | |
| if (I.length === 0) | |
| kt2.logger.warn('Performance monitoring integrations could not be automatically loaded.') | |
| return I.filter((G) => !!G.loadDependency()) | |
| } | |
| jS1.autoDiscoverNodePerformanceMonitoringIntegrations = ht2 | |
| }) | |
| var V21 = _((cS1) => { | |
| Object.defineProperty(cS1, '__esModule', { value: !0 }) | |
| var ct2 = A1('os'), | |
| pt2 = A1('util'), | |
| hS1 = Y4() | |
| class xS1 extends hS1.ServerRuntimeClient { | |
| constructor(I) { | |
| hS1.applySdkMetadata(I, 'node'), | |
| (I.transportOptions = { textEncoder: new pt2.TextEncoder(), ...I.transportOptions }) | |
| let G = { | |
| ...I, | |
| platform: 'node', | |
| runtime: { name: 'node', version: global.process.version }, | |
| serverName: I.serverName || global.process.env.SENTRY_NAME || ct2.hostname(), | |
| } | |
| super(G) | |
| } | |
| } | |
| cS1.NodeClient = xS1 | |
| }) | |
| var rS1 = _((aS1) => { | |
| var { _nullishCoalesce: pS1 } = X0() | |
| Object.defineProperty(aS1, '__esModule', { value: !0 }) | |
| var iS1 = A1('http') | |
| A1('https') | |
| var qB = Symbol('AgentBaseInternalState') | |
| class nS1 extends iS1.Agent { | |
| constructor(I) { | |
| super(I) | |
| this[qB] = {} | |
| } | |
| isSecureEndpoint(I) { | |
| if (I) { | |
| if (typeof I.secureEndpoint === 'boolean') return I.secureEndpoint | |
| if (typeof I.protocol === 'string') return I.protocol === 'https:' | |
| } | |
| let { stack: G } = new Error() | |
| if (typeof G !== 'string') return !1 | |
| return G.split( | |
| ` | |
| `, | |
| ).some((Z) => Z.indexOf('(https.js:') !== -1 || Z.indexOf('node:https:') !== -1) | |
| } | |
| createSocket(I, G, Z) { | |
| let d = { ...G, secureEndpoint: this.isSecureEndpoint(G) } | |
| Promise.resolve() | |
| .then(() => this.connect(I, d)) | |
| .then((W) => { | |
| if (W instanceof iS1.Agent) return W.addRequest(I, d) | |
| ;(this[qB].currentSocket = W), super.createSocket(I, G, Z) | |
| }, Z) | |
| } | |
| createConnection() { | |
| let I = this[qB].currentSocket | |
| if (((this[qB].currentSocket = void 0), !I)) | |
| throw new Error('No socket was returned in the `connect()` function') | |
| return I | |
| } | |
| get defaultPort() { | |
| return pS1(this[qB].defaultPort, () => (this.protocol === 'https:' ? 443 : 80)) | |
| } | |
| set defaultPort(I) { | |
| if (this[qB]) this[qB].defaultPort = I | |
| } | |
| get protocol() { | |
| return pS1(this[qB].protocol, () => (this.isSecureEndpoint() ? 'https:' : 'http:')) | |
| } | |
| set protocol(I) { | |
| if (this[qB]) this[qB].protocol = I | |
| } | |
| } | |
| aS1.Agent = nS1 | |
| }) | |
| var oS1 = _((sS1) => { | |
| Object.defineProperty(sS1, '__esModule', { value: !0 }) | |
| var at2 = X0() | |
| function Ab(...I) { | |
| at2.logger.log('[https-proxy-agent:parse-proxy-response]', ...I) | |
| } | |
| function rt2(I) { | |
| return new Promise((G, Z) => { | |
| let d = 0, | |
| W = [] | |
| function w() { | |
| let X = I.read() | |
| if (X) A(X) | |
| else I.once('readable', w) | |
| } | |
| function B() { | |
| I.removeListener('end', C), I.removeListener('error', V), I.removeListener('readable', w) | |
| } | |
| function C() { | |
| B(), Ab('onend'), Z(new Error('Proxy connection ended before receiving CONNECT response')) | |
| } | |
| function V(X) { | |
| B(), Ab('onerror %o', X), Z(X) | |
| } | |
| function A(X) { | |
| W.push(X), (d += X.length) | |
| let Y = Buffer.concat(W, d), | |
| H = Y.indexOf(`\r | |
| \r | |
| `) | |
| if (H === -1) { | |
| Ab('have not received end of HTTP headers yet...'), w() | |
| return | |
| } | |
| let J = Y.slice(0, H).toString('ascii').split(`\r | |
| `), | |
| K = J.shift() | |
| if (!K) return I.destroy(), Z(new Error('No header received from proxy CONNECT response')) | |
| let g = K.split(' '), | |
| z = +g[1], | |
| f = g.slice(2).join(' '), | |
| S = {} | |
| for (let $ of J) { | |
| if (!$) continue | |
| let L = $.indexOf(':') | |
| if (L === -1) | |
| return I.destroy(), Z(new Error(`Invalid header from proxy CONNECT response: "${$}"`)) | |
| let T = $.slice(0, L).toLowerCase(), | |
| m = $.slice(L + 1).trimStart(), | |
| O = S[T] | |
| if (typeof O === 'string') S[T] = [O, m] | |
| else if (Array.isArray(O)) O.push(m) | |
| else S[T] = m | |
| } | |
| Ab('got proxy server response: %o %o', K, S), | |
| B(), | |
| G({ connect: { statusCode: z, statusText: f, headers: S }, buffered: Y }) | |
| } | |
| I.on('error', V), I.on('end', C), w() | |
| }) | |
| } | |
| sS1.parseProxyResponse = rt2 | |
| }) | |
| var GL1 = _((IL1) => { | |
| var { _nullishCoalesce: ot2, _optionalChain: et2 } = X0() | |
| Object.defineProperty(IL1, '__esModule', { value: !0 }) | |
| var mv = A1('net'), | |
| eS1 = A1('tls'), | |
| tt2 = A1('url'), | |
| I14 = X0(), | |
| G14 = rS1(), | |
| Z14 = oS1() | |
| function bv(...I) { | |
| I14.logger.log('[https-proxy-agent]', ...I) | |
| } | |
| class A21 extends G14.Agent { | |
| static __initStatic() { | |
| this.protocols = ['http', 'https'] | |
| } | |
| constructor(I, G) { | |
| super(G) | |
| ;(this.options = {}), | |
| (this.proxy = typeof I === 'string' ? new tt2.URL(I) : I), | |
| (this.proxyHeaders = ot2(et2([G, 'optionalAccess', (W) => W.headers]), () => ({}))), | |
| bv('Creating new HttpsProxyAgent instance: %o', this.proxy.href) | |
| let Z = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, ''), | |
| d = this.proxy.port | |
| ? parseInt(this.proxy.port, 10) | |
| : this.proxy.protocol === 'https:' | |
| ? 443 | |
| : 80 | |
| this.connectOpts = { | |
| ALPNProtocols: ['http/1.1'], | |
| ...(G ? tS1(G, 'headers') : null), | |
| host: Z, | |
| port: d, | |
| } | |
| } | |
| async connect(I, G) { | |
| let { proxy: Z } = this | |
| if (!G.host) throw new TypeError('No "host" provided') | |
| let d | |
| if (Z.protocol === 'https:') { | |
| bv('Creating `tls.Socket`: %o', this.connectOpts) | |
| let Y = this.connectOpts.servername || this.connectOpts.host | |
| d = eS1.connect({ ...this.connectOpts, servername: Y && mv.isIP(Y) ? void 0 : Y }) | |
| } else bv('Creating `net.Socket`: %o', this.connectOpts), (d = mv.connect(this.connectOpts)) | |
| let W = | |
| typeof this.proxyHeaders === 'function' ? this.proxyHeaders() : { ...this.proxyHeaders }, | |
| w = mv.isIPv6(G.host) ? `[${G.host}]` : G.host, | |
| B = `CONNECT ${w}:${G.port} HTTP/1.1\r | |
| ` | |
| if (Z.username || Z.password) { | |
| let Y = `${decodeURIComponent(Z.username)}:${decodeURIComponent(Z.password)}` | |
| W['Proxy-Authorization'] = `Basic ${Buffer.from(Y).toString('base64')}` | |
| } | |
| if (((W.Host = `${w}:${G.port}`), !W['Proxy-Connection'])) | |
| W['Proxy-Connection'] = this.keepAlive ? 'Keep-Alive' : 'close' | |
| for (let Y of Object.keys(W)) | |
| B += `${Y}: ${W[Y]}\r | |
| ` | |
| let C = Z14.parseProxyResponse(d) | |
| d.write(`${B}\r | |
| `) | |
| let { connect: V, buffered: A } = await C | |
| if ((I.emit('proxyConnect', V), this.emit('proxyConnect', V, I), V.statusCode === 200)) { | |
| if ((I.once('socket', d14), G.secureEndpoint)) { | |
| bv('Upgrading socket connection to TLS') | |
| let Y = G.servername || G.host | |
| return eS1.connect({ | |
| ...tS1(G, 'host', 'path', 'port'), | |
| socket: d, | |
| servername: mv.isIP(Y) ? void 0 : Y, | |
| }) | |
| } | |
| return d | |
| } | |
| d.destroy() | |
| let X = new mv.Socket({ writable: !1 }) | |
| return ( | |
| (X.readable = !0), | |
| I.once('socket', (Y) => { | |
| bv('Replaying proxy buffer for failed request'), Y.push(A), Y.push(null) | |
| }), | |
| X | |
| ) | |
| } | |
| } | |
| A21.__initStatic() | |
| function d14(I) { | |
| I.resume() | |
| } | |
| function tS1(I, ...G) { | |
| let Z = {}, | |
| d | |
| for (d in I) if (!G.includes(d)) Z[d] = I[d] | |
| return Z | |
| } | |
| IL1.HttpsProxyAgent = A21 | |
| }) | |
| var Y21 = _((WL1) => { | |
| var { _nullishCoalesce: X21 } = X0() | |
| Object.defineProperty(WL1, '__esModule', { value: !0 }) | |
| var w14 = A1('http'), | |
| B14 = A1('https'), | |
| C14 = A1('stream'), | |
| dL1 = A1('url'), | |
| V14 = A1('zlib'), | |
| ZL1 = Y4(), | |
| A14 = X0(), | |
| X14 = GL1(), | |
| Y14 = 32768 | |
| function _14(I) { | |
| return new C14.Readable({ | |
| read() { | |
| this.push(I), this.push(null) | |
| }, | |
| }) | |
| } | |
| function D14(I) { | |
| let G | |
| try { | |
| G = new dL1.URL(I.url) | |
| } catch (V) { | |
| return ( | |
| A14.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.', | |
| ) | |
| }), | |
| ZL1.createTransport(I, () => Promise.resolve({})) | |
| ) | |
| } | |
| let Z = G.protocol === 'https:', | |
| d = H14(G, I.proxy || (Z ? process.env.https_proxy : void 0) || process.env.http_proxy), | |
| W = Z ? B14 : w14, | |
| w = I.keepAlive === void 0 ? !1 : I.keepAlive, | |
| B = d | |
| ? new X14.HttpsProxyAgent(d) | |
| : new W.Agent({ keepAlive: w, maxSockets: 30, timeout: 2000 }), | |
| C = F14( | |
| I, | |
| X21(I.httpModule, () => W), | |
| B, | |
| ) | |
| return ZL1.createTransport(I, C) | |
| } | |
| function H14(I, G) { | |
| let { no_proxy: Z } = process.env | |
| if (Z && Z.split(',').some((W) => I.host.endsWith(W) || I.hostname.endsWith(W))) return | |
| else return G | |
| } | |
| function F14(I, G, Z) { | |
| let { hostname: d, pathname: W, port: w, protocol: B, search: C } = new dL1.URL(I.url) | |
| return function V(A) { | |
| return new Promise((X, Y) => { | |
| let H = _14(A.body), | |
| J = { ...I.headers } | |
| if (A.body.length > Y14) (J['content-encoding'] = 'gzip'), (H = H.pipe(V14.createGzip())) | |
| let K = G.request( | |
| { | |
| method: 'POST', | |
| agent: Z, | |
| headers: J, | |
| hostname: d, | |
| path: `${W}${C}`, | |
| port: w, | |
| protocol: B, | |
| ca: I.caCerts, | |
| }, | |
| (g) => { | |
| g.on('data', () => {}), g.on('end', () => {}), g.setEncoding('utf8') | |
| let z = X21(g.headers['retry-after'], () => null), | |
| f = X21(g.headers['x-sentry-rate-limits'], () => null) | |
| X({ | |
| statusCode: g.statusCode, | |
| headers: { 'retry-after': z, 'x-sentry-rate-limits': Array.isArray(f) ? f[0] : f }, | |
| }) | |
| }, | |
| ) | |
| K.on('error', Y), H.pipe(K) | |
| }) | |
| } | |
| } | |
| WL1.makeNodeTransport = D14 | |
| }) | |
| var nF = _((wL1) => { | |
| Object.defineProperty(wL1, '__esModule', { value: !0 }) | |
| var K14 = X0(), | |
| g14 = K14.parseSemver(process.versions.node) | |
| wL1.NODE_VERSION = g14 | |
| }) | |
| var AL1 = _((VL1) => { | |
| var { _optionalChain: z14 } = X0() | |
| Object.defineProperty(VL1, '__esModule', { value: !0 }) | |
| var BL1 = A1('domain'), | |
| aF = Y4() | |
| function CL1() { | |
| return BL1.active | |
| } | |
| function Q14() { | |
| let I = CL1() | |
| if (!I) return | |
| return aF.ensureHubOnCarrier(I), aF.getHubFromCarrier(I) | |
| } | |
| function q14(I) { | |
| let G = {} | |
| return aF.ensureHubOnCarrier(G, I), aF.getHubFromCarrier(G) | |
| } | |
| function U14(I, G) { | |
| let Z = CL1() | |
| if (Z && z14([G, 'optionalAccess', (B) => B.reuseExisting])) return I() | |
| let d = BL1.create(), | |
| W = Z ? aF.getHubFromCarrier(Z) : void 0, | |
| w = q14(W) | |
| return ( | |
| aF.setHubOnCarrier(d, w), | |
| d.bind(() => { | |
| return I() | |
| })() | |
| ) | |
| } | |
| function f14() { | |
| aF.setAsyncContextStrategy({ getCurrentHub: Q14, runWithAsyncContext: U14 }) | |
| } | |
| VL1.setDomainAsyncContextStrategy = f14 | |
| }) | |
| var YL1 = _((XL1) => { | |
| var { _optionalChain: E14 } = X0() | |
| Object.defineProperty(XL1, '__esModule', { value: !0 }) | |
| var _21 = Y4(), | |
| v14 = A1('async_hooks'), | |
| Xb | |
| function M14() { | |
| if (!Xb) Xb = new v14.AsyncLocalStorage() | |
| function I() { | |
| return Xb.getStore() | |
| } | |
| function G(d) { | |
| let W = {} | |
| return _21.ensureHubOnCarrier(W, d), _21.getHubFromCarrier(W) | |
| } | |
| function Z(d, W) { | |
| let w = I() | |
| if (w && E14([W, 'optionalAccess', (C) => C.reuseExisting])) return d() | |
| let B = G(w) | |
| return Xb.run(B, () => { | |
| return d() | |
| }) | |
| } | |
| _21.setAsyncContextStrategy({ getCurrentHub: I, runWithAsyncContext: Z }) | |
| } | |
| XL1.setHooksAsyncContextStrategy = M14 | |
| }) | |
| var DL1 = _((_L1) => { | |
| Object.defineProperty(_L1, '__esModule', { value: !0 }) | |
| var L14 = nF(), | |
| $14 = AL1(), | |
| y14 = YL1() | |
| function P14() { | |
| if (L14.NODE_VERSION.major >= 14) y14.setHooksAsyncContextStrategy() | |
| else $14.setDomainAsyncContextStrategy() | |
| } | |
| _L1.setNodeAsyncContextStrategy = P14 | |
| }) | |
| var _b = _((KL1) => { | |
| Object.defineProperty(KL1, '__esModule', { value: !0 }) | |
| var u14 = A1('util'), | |
| Yb = Y4(), | |
| HL1 = X0(), | |
| FL1 = 'Console', | |
| T14 = () => { | |
| return { | |
| name: FL1, | |
| setupOnce() {}, | |
| setup(I) { | |
| HL1.addConsoleInstrumentationHandler(({ args: G, level: Z }) => { | |
| if (Yb.getClient() !== I) return | |
| Yb.addBreadcrumb( | |
| { | |
| category: 'console', | |
| level: HL1.severityLevelFromString(Z), | |
| message: u14.format.apply(void 0, G), | |
| }, | |
| { input: [...G], level: Z }, | |
| ) | |
| }) | |
| }, | |
| } | |
| }, | |
| JL1 = Yb.defineIntegration(T14), | |
| m14 = Yb.convertIntegrationFnToClass(FL1, JL1) | |
| KL1.Console = m14 | |
| KL1.consoleIntegration = JL1 | |
| }) | |
| var Db = _((vL1) => { | |
| var { _optionalChain: rF } = X0() | |
| Object.defineProperty(vL1, '__esModule', { value: !0 }) | |
| var j14 = A1('child_process'), | |
| NL1 = A1('fs'), | |
| Gd = A1('os'), | |
| k14 = A1('path'), | |
| zL1 = A1('util'), | |
| QL1 = Y4(), | |
| qL1 = zL1.promisify(NL1.readFile), | |
| UL1 = zL1.promisify(NL1.readdir), | |
| fL1 = 'Context', | |
| h14 = (I = {}) => { | |
| let G, | |
| Z = { app: !0, os: !0, device: !0, culture: !0, cloudResource: !0, ...I } | |
| async function d(w) { | |
| if (G === void 0) G = W() | |
| let B = c14(await G) | |
| return ( | |
| (w.contexts = { | |
| ...w.contexts, | |
| app: { | |
| ...B.app, | |
| ...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.app]), | |
| }, | |
| os: { ...B.os, ...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.os]) }, | |
| device: { | |
| ...B.device, | |
| ...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.device]), | |
| }, | |
| culture: { | |
| ...B.culture, | |
| ...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.culture]), | |
| }, | |
| cloud_resource: { | |
| ...B.cloud_resource, | |
| ...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.cloud_resource]), | |
| }, | |
| }), | |
| w | |
| ) | |
| } | |
| async function W() { | |
| let w = {} | |
| if (Z.os) w.os = await p14() | |
| if (Z.app) w.app = n14() | |
| if (Z.device) w.device = EL1(Z.device) | |
| if (Z.culture) { | |
| let B = i14() | |
| if (B) w.culture = B | |
| } | |
| if (Z.cloudResource) w.cloud_resource = t14() | |
| return w | |
| } | |
| return { | |
| name: fL1, | |
| setupOnce() {}, | |
| processEvent(w) { | |
| return d(w) | |
| }, | |
| } | |
| }, | |
| RL1 = QL1.defineIntegration(h14), | |
| x14 = QL1.convertIntegrationFnToClass(fL1, RL1) | |
| function c14(I) { | |
| if (rF([I, 'optionalAccess', (G) => G.app, 'optionalAccess', (G) => G.app_memory])) | |
| I.app.app_memory = process.memoryUsage().rss | |
| if (rF([I, 'optionalAccess', (G) => G.device, 'optionalAccess', (G) => G.free_memory])) | |
| I.device.free_memory = Gd.freemem() | |
| return I | |
| } | |
| async function p14() { | |
| let I = Gd.platform() | |
| switch (I) { | |
| case 'darwin': | |
| return o14() | |
| case 'linux': | |
| return e14() | |
| default: | |
| return { name: a14[I] || I, version: Gd.release() } | |
| } | |
| } | |
| function i14() { | |
| try { | |
| if (typeof process.versions.icu !== 'string') return | |
| let I = new Date(900000000) | |
| if (new Intl.DateTimeFormat('es', { month: 'long' }).format(I) === 'enero') { | |
| let Z = Intl.DateTimeFormat().resolvedOptions() | |
| return { locale: Z.locale, timezone: Z.timeZone } | |
| } | |
| } catch (I) {} | |
| return | |
| } | |
| function n14() { | |
| let I = process.memoryUsage().rss | |
| return { | |
| app_start_time: new Date(Date.now() - process.uptime() * 1000).toISOString(), | |
| app_memory: I, | |
| } | |
| } | |
| function EL1(I) { | |
| let G = {}, | |
| Z | |
| try { | |
| Z = Gd.uptime && Gd.uptime() | |
| } catch (d) {} | |
| if (typeof Z === 'number') G.boot_time = new Date(Date.now() - Z * 1000).toISOString() | |
| if (((G.arch = Gd.arch()), I === !0 || I.memory)) | |
| (G.memory_size = Gd.totalmem()), (G.free_memory = Gd.freemem()) | |
| if (I === !0 || I.cpu) { | |
| let d = Gd.cpus() | |
| if (d && d.length) { | |
| let W = d[0] | |
| ;(G.processor_count = d.length), | |
| (G.cpu_description = W.model), | |
| (G.processor_frequency = W.speed) | |
| } | |
| } | |
| return G | |
| } | |
| var a14 = { | |
| aix: 'IBM AIX', | |
| freebsd: 'FreeBSD', | |
| openbsd: 'OpenBSD', | |
| sunos: 'SunOS', | |
| win32: 'Windows', | |
| }, | |
| r14 = [ | |
| { 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'] }, | |
| ], | |
| s14 = { | |
| alpine: (I) => I, | |
| arch: (I) => UB(/distrib_release=(.*)/, I), | |
| centos: (I) => UB(/release ([^ ]+)/, I), | |
| debian: (I) => I, | |
| fedora: (I) => UB(/release (..)/, I), | |
| mint: (I) => UB(/distrib_release=(.*)/, I), | |
| red: (I) => UB(/release ([^ ]+)/, I), | |
| suse: (I) => UB(/VERSION = (.*)\n/, I), | |
| ubuntu: (I) => UB(/distrib_release=(.*)/, I), | |
| } | |
| function UB(I, G) { | |
| let Z = I.exec(G) | |
| return Z ? Z[1] : void 0 | |
| } | |
| async function o14() { | |
| let I = { | |
| kernel_version: Gd.release(), | |
| name: 'Mac OS X', | |
| version: `10.${Number(Gd.release().split('.')[0]) - 4}`, | |
| } | |
| try { | |
| let G = await new Promise((Z, d) => { | |
| j14.execFile('/usr/bin/sw_vers', (W, w) => { | |
| if (W) { | |
| d(W) | |
| return | |
| } | |
| Z(w) | |
| }) | |
| }) | |
| ;(I.name = UB(/^ProductName:\s+(.*)$/m, G)), | |
| (I.version = UB(/^ProductVersion:\s+(.*)$/m, G)), | |
| (I.build = UB(/^BuildVersion:\s+(.*)$/m, G)) | |
| } catch (G) {} | |
| return I | |
| } | |
| function gL1(I) { | |
| return I.split(' ')[0].toLowerCase() | |
| } | |
| async function e14() { | |
| let I = { kernel_version: Gd.release(), name: 'Linux' } | |
| try { | |
| let G = await UL1('/etc'), | |
| Z = r14.find((C) => G.includes(C.name)) | |
| if (!Z) return I | |
| let d = k14.join('/etc', Z.name), | |
| W = (await qL1(d, { encoding: 'utf-8' })).toLowerCase(), | |
| { distros: w } = Z | |
| I.name = w.find((C) => W.indexOf(gL1(C)) >= 0) || w[0] | |
| let B = gL1(I.name) | |
| I.version = s14[B](W) | |
| } catch (G) {} | |
| return I | |
| } | |
| function t14() { | |
| 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 | |
| } | |
| vL1.Context = x14 | |
| vL1.getDeviceContext = EL1 | |
| vL1.nodeContextIntegration = RL1 | |
| vL1.readDirAsync = UL1 | |
| vL1.readFileAsync = qL1 | |
| }) | |
| var Fb = _((yL1) => { | |
| var { _optionalChain: D21 } = X0() | |
| Object.defineProperty(yL1, '__esModule', { value: !0 }) | |
| var w04 = A1('fs'), | |
| ML1 = Y4(), | |
| SL1 = X0(), | |
| Hb = new SL1.LRUMap(100), | |
| B04 = 7, | |
| LL1 = 'ContextLines' | |
| function C04(I) { | |
| return new Promise((G, Z) => { | |
| w04.readFile(I, 'utf8', (d, W) => { | |
| if (d) Z(d) | |
| else G(W) | |
| }) | |
| }) | |
| } | |
| var V04 = (I = {}) => { | |
| let G = I.frameContextLines !== void 0 ? I.frameContextLines : B04 | |
| return { | |
| name: LL1, | |
| setupOnce() {}, | |
| processEvent(Z) { | |
| return X04(Z, G) | |
| }, | |
| } | |
| }, | |
| $L1 = ML1.defineIntegration(V04), | |
| A04 = ML1.convertIntegrationFnToClass(LL1, $L1) | |
| async function X04(I, G) { | |
| let Z = {}, | |
| d = [] | |
| if (G > 0 && D21([I, 'access', (W) => W.exception, 'optionalAccess', (W) => W.values])) | |
| for (let W of I.exception.values) { | |
| if (!D21([W, 'access', (w) => w.stacktrace, 'optionalAccess', (w) => w.frames])) continue | |
| for (let w = W.stacktrace.frames.length - 1; w >= 0; w--) { | |
| let B = W.stacktrace.frames[w] | |
| if (B.filename && !Z[B.filename] && !Hb.get(B.filename)) | |
| d.push(_04(B.filename)), (Z[B.filename] = 1) | |
| } | |
| } | |
| if (d.length > 0) await Promise.all(d) | |
| if (G > 0 && D21([I, 'access', (W) => W.exception, 'optionalAccess', (W) => W.values])) { | |
| for (let W of I.exception.values) | |
| if (W.stacktrace && W.stacktrace.frames) await Y04(W.stacktrace.frames, G) | |
| } | |
| return I | |
| } | |
| function Y04(I, G) { | |
| for (let Z of I) | |
| if (Z.filename && Z.context_line === void 0) { | |
| let d = Hb.get(Z.filename) | |
| if (d) | |
| try { | |
| SL1.addContextToFrame(d, Z, G) | |
| } catch (W) {} | |
| } | |
| } | |
| async function _04(I) { | |
| let G = Hb.get(I) | |
| if (G === null) return null | |
| if (G !== void 0) return G | |
| let Z = null | |
| try { | |
| Z = (await C04(I)).split(` | |
| `) | |
| } catch (d) {} | |
| return Hb.set(I, Z), Z | |
| } | |
| yL1.ContextLines = A04 | |
| yL1.contextLinesIntegration = $L1 | |
| }) | |
| var lv = _((PL1) => { | |
| Object.defineProperty(PL1, '__esModule', { value: !0 }) | |
| var F04 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__ | |
| PL1.DEBUG_BUILD = F04 | |
| }) | |
| var mL1 = _((TL1) => { | |
| var { _optionalChain: fB } = X0() | |
| Object.defineProperty(TL1, '__esModule', { value: !0 }) | |
| var H21 = A1('url'), | |
| K04 = nF() | |
| function g04(I) { | |
| let { protocol: G, hostname: Z, port: d } = uL1(I), | |
| W = I.path ? I.path : '/' | |
| return `${G}//${Z}${d}${W}` | |
| } | |
| function OL1(I) { | |
| let { protocol: G, hostname: Z, port: d } = uL1(I), | |
| W = I.pathname || '/', | |
| w = I.auth ? N04(I.auth) : '' | |
| return `${G}//${w}${Z}${d}${W}` | |
| } | |
| function N04(I) { | |
| let [G, Z] = I.split(':') | |
| return `${G ? '[Filtered]' : ''}:${Z ? '[Filtered]' : ''}@` | |
| } | |
| function z04(I, G, Z) { | |
| if (!I) return I | |
| let [d, W] = I.split(' ') | |
| if (G.host && !G.protocol) | |
| (G.protocol = fB([Z, 'optionalAccess', (w) => w.agent, 'optionalAccess', (w) => w.protocol])), | |
| (W = OL1(G)) | |
| if (fB([W, 'optionalAccess', (w) => w.startsWith, 'call', (w) => w('///')])) W = W.slice(2) | |
| return `${d} ${W}` | |
| } | |
| function F21(I) { | |
| let G = { | |
| 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 !== '') G.port = Number(I.port) | |
| if (I.username || I.password) G.auth = `${I.username}:${I.password}` | |
| return G | |
| } | |
| function Q04(I, G) { | |
| let Z, d | |
| if (typeof G[G.length - 1] === 'function') Z = G.pop() | |
| if (typeof G[0] === 'string') d = F21(new H21.URL(G[0])) | |
| else if (G[0] instanceof H21.URL) d = F21(G[0]) | |
| else { | |
| d = G[0] | |
| try { | |
| let W = new H21.URL(d.path || '', `${d.protocol || 'http:'}//${d.hostname}`) | |
| d = { pathname: W.pathname, search: W.search, hash: W.hash, ...d } | |
| } catch (W) {} | |
| } | |
| if (G.length === 2) d = { ...d, ...G[1] } | |
| if (d.protocol === void 0) | |
| if (K04.NODE_VERSION.major > 8) | |
| d.protocol = | |
| fB([ | |
| fB([I, 'optionalAccess', (W) => W.globalAgent]), | |
| 'optionalAccess', | |
| (W) => W.protocol, | |
| ]) || | |
| fB([d.agent, 'optionalAccess', (W) => W.protocol]) || | |
| fB([d._defaultAgent, 'optionalAccess', (W) => W.protocol]) | |
| else | |
| d.protocol = | |
| fB([d.agent, 'optionalAccess', (W) => W.protocol]) || | |
| fB([d._defaultAgent, 'optionalAccess', (W) => W.protocol]) || | |
| fB([fB([I, 'optionalAccess', (W) => W.globalAgent]), 'optionalAccess', (W) => W.protocol]) | |
| if (Z) return [d, Z] | |
| else return [d] | |
| } | |
| function uL1(I) { | |
| let G = I.protocol || '', | |
| Z = I.hostname || I.host || '', | |
| d = !I.port || I.port === 80 || I.port === 443 || /^(.*):(\d+)$/.test(Z) ? '' : `:${I.port}` | |
| return { protocol: G, hostname: Z, port: d } | |
| } | |
| TL1.cleanSpanDescription = z04 | |
| TL1.extractRawUrl = g04 | |
| TL1.extractUrl = OL1 | |
| TL1.normalizeRequestArgs = Q04 | |
| TL1.urlToOptions = F21 | |
| }) | |
| var Jb = _((kL1) => { | |
| var { _optionalChain: Zz } = X0() | |
| Object.defineProperty(kL1, '__esModule', { value: !0 }) | |
| var E7 = Y4(), | |
| aG = X0(), | |
| J21 = lv(), | |
| v04 = nF(), | |
| jv = mL1(), | |
| M04 = (I = {}) => { | |
| let { breadcrumbs: G, tracing: Z, shouldCreateSpanForRequest: d } = I, | |
| W = { | |
| breadcrumbs: G, | |
| tracing: | |
| Z === !1 | |
| ? !1 | |
| : aG.dropUndefinedKeys({ | |
| enableIfHasTracingEnabled: Z === !0 ? void 0 : !0, | |
| shouldCreateSpanForRequest: d, | |
| }), | |
| } | |
| return new sF(W) | |
| }, | |
| S04 = E7.defineIntegration(M04) | |
| class sF { | |
| static __initStatic() { | |
| this.id = 'Http' | |
| } | |
| __init() { | |
| this.name = sF.id | |
| } | |
| constructor(I = {}) { | |
| sF.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, G) { | |
| let Z = Zz([ | |
| G, | |
| 'call', | |
| (V) => V(), | |
| 'access', | |
| (V) => V.getClient, | |
| 'call', | |
| (V) => V(), | |
| 'optionalAccess', | |
| (V) => V.getOptions, | |
| 'call', | |
| (V) => V(), | |
| ]), | |
| d = lL1(this._tracing, Z) | |
| if (!this._breadcrumbs && !d) return | |
| if (Z && Z.instrumenter !== 'sentry') { | |
| J21.DEBUG_BUILD && | |
| aG.logger.log('HTTP Integration is skipped because of instrumenter configuration.') | |
| return | |
| } | |
| let W = jL1(d, this._tracing, Z), | |
| w = | |
| Zz([Z, 'optionalAccess', (V) => V.tracePropagationTargets]) || | |
| Zz([ | |
| this, | |
| 'access', | |
| (V) => V._tracing, | |
| 'optionalAccess', | |
| (V) => V.tracePropagationTargets, | |
| ]), | |
| B = A1('http'), | |
| C = bL1(B, this._breadcrumbs, W, w) | |
| if ((aG.fill(B, 'get', C), aG.fill(B, 'request', C), v04.NODE_VERSION.major > 8)) { | |
| let V = A1('https'), | |
| A = bL1(V, this._breadcrumbs, W, w) | |
| aG.fill(V, 'get', A), aG.fill(V, 'request', A) | |
| } | |
| } | |
| } | |
| sF.__initStatic() | |
| function bL1(I, G, Z, d) { | |
| let W = new aG.LRUMap(100), | |
| w = new aG.LRUMap(100), | |
| B = (A) => { | |
| if (Z === void 0) return !0 | |
| let X = W.get(A) | |
| if (X !== void 0) return X | |
| let Y = Z(A) | |
| return W.set(A, Y), Y | |
| }, | |
| C = (A) => { | |
| if (d === void 0) return !0 | |
| let X = w.get(A) | |
| if (X !== void 0) return X | |
| let Y = aG.stringMatchesSomePattern(A, d) | |
| return w.set(A, Y), Y | |
| } | |
| function V(A, X, Y, H) { | |
| if (!E7.getCurrentHub().getIntegration(sF)) return | |
| E7.addBreadcrumb( | |
| { category: 'http', data: { status_code: H && H.statusCode, ...X }, type: 'http' }, | |
| { event: A, request: Y, response: H }, | |
| ) | |
| } | |
| return function A(X) { | |
| return function Y(...H) { | |
| let J = jv.normalizeRequestArgs(I, H), | |
| K = J[0], | |
| g = jv.extractRawUrl(K), | |
| z = jv.extractUrl(K), | |
| f = E7.getClient() | |
| if (E7.isSentryRequestUrl(z, f)) return X.apply(I, J) | |
| let S = E7.getCurrentScope(), | |
| $ = E7.getIsolationScope(), | |
| L = E7.getActiveSpan(), | |
| T = $04(z, K), | |
| m = B(g) | |
| ? Zz([ | |
| L, | |
| 'optionalAccess', | |
| (O) => O.startChild, | |
| 'call', | |
| (O) => | |
| O({ | |
| op: 'http.client', | |
| origin: 'auto.http.node.http', | |
| description: `${T['http.method']} ${T.url}`, | |
| data: T, | |
| }), | |
| ]) | |
| : void 0 | |
| if (f && C(g)) { | |
| let { | |
| traceId: O, | |
| spanId: w1, | |
| sampled: b, | |
| dsc: x1, | |
| } = { ...$.getPropagationContext(), ...S.getPropagationContext() }, | |
| r1 = m ? E7.spanToTraceHeader(m) : aG.generateSentryTraceHeader(O, w1, b), | |
| $1 = aG.dynamicSamplingContextToSentryBaggageHeader( | |
| x1 || | |
| (m | |
| ? E7.getDynamicSamplingContextFromSpan(m) | |
| : E7.getDynamicSamplingContextFromClient(O, f, S)), | |
| ) | |
| L04(K, z, r1, $1) | |
| } else | |
| J21.DEBUG_BUILD && | |
| aG.logger.log( | |
| `[Tracing] Not adding sentry-trace header to outgoing request (${z}) due to mismatching tracePropagationTargets option.`, | |
| ) | |
| return X.apply(I, J) | |
| .once('response', function (O) { | |
| let w1 = this | |
| if (G) V('response', T, w1, O) | |
| if (m) { | |
| if (O.statusCode) E7.setHttpStatus(m, O.statusCode) | |
| m.updateName( | |
| jv.cleanSpanDescription(E7.spanToJSON(m).description || '', K, w1) || '', | |
| ), | |
| m.end() | |
| } | |
| }) | |
| .once('error', function () { | |
| let O = this | |
| if (G) V('error', T, O) | |
| if (m) | |
| E7.setHttpStatus(m, 500), | |
| m.updateName( | |
| jv.cleanSpanDescription(E7.spanToJSON(m).description || '', K, O) || '', | |
| ), | |
| m.end() | |
| }) | |
| } | |
| } | |
| } | |
| function L04(I, G, Z, d) { | |
| if ((I.headers || {})['sentry-trace']) return | |
| J21.DEBUG_BUILD && | |
| aG.logger.log(`[Tracing] Adding sentry-trace header ${Z} to outgoing request to "${G}": `), | |
| (I.headers = { | |
| ...I.headers, | |
| 'sentry-trace': Z, | |
| ...(d && d.length > 0 && { baggage: y04(I, d) }), | |
| }) | |
| } | |
| function $04(I, G) { | |
| let Z = G.method || 'GET', | |
| d = { url: I, 'http.method': Z } | |
| if (G.hash) d['http.fragment'] = G.hash.substring(1) | |
| if (G.search) d['http.query'] = G.search.substring(1) | |
| return d | |
| } | |
| function y04(I, G) { | |
| if (!I.headers || !I.headers.baggage) return G | |
| else if (!G) return I.headers.baggage | |
| else if (Array.isArray(I.headers.baggage)) return [...I.headers.baggage, G] | |
| return [I.headers.baggage, G] | |
| } | |
| function lL1(I, G) { | |
| return I === void 0 ? !1 : I.enableIfHasTracingEnabled ? E7.hasTracingEnabled(G) : !0 | |
| } | |
| function jL1(I, G, Z) { | |
| return I | |
| ? Zz([G, 'optionalAccess', (W) => W.shouldCreateSpanForRequest]) || | |
| Zz([Z, 'optionalAccess', (W) => W.shouldCreateSpanForRequest]) | |
| : () => !1 | |
| } | |
| kL1.Http = sF | |
| kL1._getShouldCreateSpanForRequest = jL1 | |
| kL1._shouldCreateSpans = lL1 | |
| kL1.httpIntegration = S04 | |
| }) | |
| var cL1 = _((xL1) => { | |
| Object.defineProperty(xL1, '__esModule', { value: !0 }) | |
| function m04(I, G, Z) { | |
| let d = 0, | |
| W = 5, | |
| w = 0 | |
| return ( | |
| setInterval(() => { | |
| if (w === 0) { | |
| if (d > I) { | |
| if (((W *= 2), Z(W), W > 86400)) W = 86400 | |
| w = W | |
| } | |
| } else if (((w -= 1), w === 0)) G() | |
| d = 0 | |
| }, 1000).unref(), | |
| () => { | |
| d += 1 | |
| } | |
| ) | |
| } | |
| function K21(I) { | |
| return I !== void 0 && (I.length === 0 || I === '?' || I === '<anonymous>') | |
| } | |
| function b04(I, G) { | |
| return I === G || (K21(I) && K21(G)) | |
| } | |
| function hL1(I) { | |
| if (I === void 0) return | |
| return I.slice(-10).reduce((G, Z) => `${G},${Z.function},${Z.lineno},${Z.colno}`, '') | |
| } | |
| function l04(I, G) { | |
| if (G === void 0) return | |
| return hL1(I(G, 1)) | |
| } | |
| xL1.createRateLimiter = m04 | |
| xL1.functionNamesMatch = b04 | |
| xL1.hashFrames = hL1 | |
| xL1.hashFromStack = l04 | |
| xL1.isAnonymous = K21 | |
| }) | |
| var rL1 = _((aL1) => { | |
| var { _optionalChain: k3 } = X0() | |
| Object.defineProperty(aL1, '__esModule', { value: !0 }) | |
| var g21 = Y4(), | |
| Kb = X0(), | |
| p04 = nF(), | |
| gb = cL1() | |
| function N21(I) { | |
| let G = [], | |
| Z = !1 | |
| function d(B) { | |
| if (((G = []), Z)) return | |
| ;(Z = !0), I(B) | |
| } | |
| G.push(d) | |
| function W(B) { | |
| G.push(B) | |
| } | |
| function w(B) { | |
| let C = G.pop() || d | |
| try { | |
| C(B) | |
| } catch (V) { | |
| d(B) | |
| } | |
| } | |
| return { add: W, next: w } | |
| } | |
| class pL1 { | |
| constructor() { | |
| let { Session: I } = A1('inspector') | |
| this._session = new I() | |
| } | |
| configureAndConnect(I, G) { | |
| this._session.connect(), | |
| this._session.on('Debugger.paused', (Z) => { | |
| I(Z, () => { | |
| this._session.post('Debugger.resume') | |
| }) | |
| }), | |
| this._session.post('Debugger.enable'), | |
| this._session.post('Debugger.setPauseOnExceptions', { state: G ? 'all' : 'uncaught' }) | |
| } | |
| setPauseOnExceptions(I) { | |
| this._session.post('Debugger.setPauseOnExceptions', { state: I ? 'all' : 'uncaught' }) | |
| } | |
| getLocalVariables(I, G) { | |
| this._getProperties(I, (Z) => { | |
| let { add: d, next: W } = N21(G) | |
| for (let w of Z) | |
| if ( | |
| k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.objectId]) && | |
| k3([w, 'optionalAccess', (B) => B.value, 'access', (B) => B.className]) === 'Array' | |
| ) { | |
| let B = w.value.objectId | |
| d((C) => this._unrollArray(B, w.name, C, W)) | |
| } else if ( | |
| k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.objectId]) && | |
| k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.className]) === | |
| 'Object' | |
| ) { | |
| let B = w.value.objectId | |
| d((C) => this._unrollObject(B, w.name, C, W)) | |
| } else if ( | |
| k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.value]) != null || | |
| k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.description]) != | |
| null | |
| ) | |
| d((B) => this._unrollOther(w, B, W)) | |
| W({}) | |
| }) | |
| } | |
| _getProperties(I, G) { | |
| this._session.post('Runtime.getProperties', { objectId: I, ownProperties: !0 }, (Z, d) => { | |
| if (Z) G([]) | |
| else G(d.result) | |
| }) | |
| } | |
| _unrollArray(I, G, Z, d) { | |
| this._getProperties(I, (W) => { | |
| ;(Z[G] = W.filter((w) => w.name !== 'length' && !isNaN(parseInt(w.name, 10))) | |
| .sort((w, B) => parseInt(w.name, 10) - parseInt(B.name, 10)) | |
| .map((w) => k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.value]))), | |
| d(Z) | |
| }) | |
| } | |
| _unrollObject(I, G, Z, d) { | |
| this._getProperties(I, (W) => { | |
| ;(Z[G] = W.map((w) => [ | |
| w.name, | |
| k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.value]), | |
| ]).reduce((w, [B, C]) => { | |
| return (w[B] = C), w | |
| }, {})), | |
| d(Z) | |
| }) | |
| } | |
| _unrollOther(I, G, Z) { | |
| if (k3([I, 'optionalAccess', (d) => d.value, 'optionalAccess', (d) => d.value]) != null) | |
| G[I.name] = I.value.value | |
| else if ( | |
| k3([I, 'optionalAccess', (d) => d.value, 'optionalAccess', (d) => d.description]) != null && | |
| k3([I, 'optionalAccess', (d) => d.value, 'optionalAccess', (d) => d.type]) !== 'function' | |
| ) | |
| G[I.name] = `<${I.value.description}>` | |
| Z(G) | |
| } | |
| } | |
| function i04() { | |
| try { | |
| return new pL1() | |
| } catch (I) { | |
| return | |
| } | |
| } | |
| var iL1 = 'LocalVariables', | |
| n04 = (I = {}, G = i04()) => { | |
| let Z = new Kb.LRUMap(20), | |
| d, | |
| W = !1 | |
| function w(V, { params: { reason: A, data: X, callFrames: Y } }, H) { | |
| if (A !== 'exception' && A !== 'promiseRejection') { | |
| H() | |
| return | |
| } | |
| k3([d, 'optionalCall', (z) => z()]) | |
| let J = gb.hashFromStack(V, k3([X, 'optionalAccess', (z) => z.description])) | |
| if (J == null) { | |
| H() | |
| return | |
| } | |
| let { add: K, next: g } = N21((z) => { | |
| Z.set(J, z), H() | |
| }) | |
| for (let z = 0; z < Math.min(Y.length, 5); z++) { | |
| let { scopeChain: f, functionName: S, this: $ } = Y[z], | |
| L = f.find((m) => m.type === 'local'), | |
| T = $.className === 'global' || !$.className ? S : `${$.className}.${S}` | |
| if (k3([L, 'optionalAccess', (m) => m.object, 'access', (m) => m.objectId]) === void 0) | |
| K((m) => { | |
| ;(m[z] = { function: T }), g(m) | |
| }) | |
| else { | |
| let m = L.object.objectId | |
| K((O) => | |
| k3([ | |
| G, | |
| 'optionalAccess', | |
| (w1) => w1.getLocalVariables, | |
| 'call', | |
| (w1) => | |
| w1(m, (b) => { | |
| ;(O[z] = { function: T, vars: b }), g(O) | |
| }), | |
| ]), | |
| ) | |
| } | |
| } | |
| g([]) | |
| } | |
| function B(V) { | |
| let A = gb.hashFrames( | |
| k3([V, 'optionalAccess', (H) => H.stacktrace, 'optionalAccess', (H) => H.frames]), | |
| ) | |
| if (A === void 0) return | |
| let X = Z.remove(A) | |
| if (X === void 0) return | |
| let Y = ( | |
| k3([V, 'access', (H) => H.stacktrace, 'optionalAccess', (H) => H.frames]) || [] | |
| ).filter((H) => H.function !== 'new Promise') | |
| for (let H = 0; H < Y.length; H++) { | |
| let J = Y.length - H - 1 | |
| if (!Y[J] || !X[H]) break | |
| if ( | |
| X[H].vars === void 0 || | |
| Y[J].in_app === !1 || | |
| !gb.functionNamesMatch(Y[J].function, X[H].function) | |
| ) | |
| continue | |
| Y[J].vars = X[H].vars | |
| } | |
| } | |
| function C(V) { | |
| for (let A of k3([ | |
| V, | |
| 'optionalAccess', | |
| (X) => X.exception, | |
| 'optionalAccess', | |
| (X) => X.values, | |
| ]) || []) | |
| B(A) | |
| return V | |
| } | |
| return { | |
| name: iL1, | |
| setupOnce() { | |
| let V = g21.getClient(), | |
| A = k3([V, 'optionalAccess', (X) => X.getOptions, 'call', (X) => X()]) | |
| if (G && k3([A, 'optionalAccess', (X) => X.includeLocalVariables])) { | |
| if (p04.NODE_VERSION.major < 18) { | |
| Kb.logger.log('The `LocalVariables` integration is only supported on Node >= v18.') | |
| return | |
| } | |
| let Y = I.captureAllExceptions !== !1 | |
| if ((G.configureAndConnect((H, J) => w(A.stackParser, H, J), Y), Y)) { | |
| let H = I.maxExceptionsPerSecond || 50 | |
| d = gb.createRateLimiter( | |
| H, | |
| () => { | |
| Kb.logger.log('Local variables rate-limit lifted.'), | |
| k3([G, 'optionalAccess', (J) => J.setPauseOnExceptions, 'call', (J) => J(!0)]) | |
| }, | |
| (J) => { | |
| Kb.logger.log( | |
| `Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${J} seconds.`, | |
| ), | |
| k3([G, 'optionalAccess', (K) => K.setPauseOnExceptions, 'call', (K) => K(!1)]) | |
| }, | |
| ) | |
| } | |
| W = !0 | |
| } | |
| }, | |
| processEvent(V) { | |
| if (W) return C(V) | |
| return V | |
| }, | |
| _getCachedFramesCount() { | |
| return Z.size | |
| }, | |
| _getFirstCachedFrame() { | |
| return Z.values()[0] | |
| }, | |
| } | |
| }, | |
| nL1 = g21.defineIntegration(n04), | |
| a04 = g21.convertIntegrationFnToClass(iL1, nL1) | |
| aL1.LocalVariablesSync = a04 | |
| aL1.createCallbackList = N21 | |
| aL1.localVariablesSyncIntegration = nL1 | |
| }) | |
| var Nb = _((oL1) => { | |
| Object.defineProperty(oL1, '__esModule', { value: !0 }) | |
| var sL1 = rL1(), | |
| e04 = sL1.LocalVariablesSync, | |
| t04 = sL1.localVariablesSyncIntegration | |
| oL1.LocalVariables = e04 | |
| oL1.localVariablesIntegration = t04 | |
| }) | |
| var zb = _((d$1) => { | |
| Object.defineProperty(d$1, '__esModule', { value: !0 }) | |
| var eL1 = A1('fs'), | |
| tL1 = A1('path'), | |
| I$1 = Y4(), | |
| z21, | |
| G$1 = 'Modules' | |
| function Z24() { | |
| try { | |
| return A1.cache ? Object.keys(A1.cache) : [] | |
| } catch (I) { | |
| return [] | |
| } | |
| } | |
| function d24() { | |
| let I = (A1.main && A1.main.paths) || [], | |
| G = Z24(), | |
| Z = {}, | |
| d = {} | |
| return ( | |
| G.forEach((W) => { | |
| let w = W, | |
| B = () => { | |
| let C = w | |
| if (((w = tL1.dirname(C)), !w || C === w || d[C])) return | |
| if (I.indexOf(w) < 0) return B() | |
| let V = tL1.join(C, 'package.json') | |
| if (((d[C] = !0), !eL1.existsSync(V))) return B() | |
| try { | |
| let A = JSON.parse(eL1.readFileSync(V, 'utf8')) | |
| Z[A.name] = A.version | |
| } catch (A) {} | |
| } | |
| B() | |
| }), | |
| Z | |
| ) | |
| } | |
| function W24() { | |
| if (!z21) z21 = d24() | |
| return z21 | |
| } | |
| var w24 = () => { | |
| return { | |
| name: G$1, | |
| setupOnce() {}, | |
| processEvent(I) { | |
| return (I.modules = { ...I.modules, ...W24() }), I | |
| }, | |
| } | |
| }, | |
| Z$1 = I$1.defineIntegration(w24), | |
| B24 = I$1.convertIntegrationFnToClass(G$1, Z$1) | |
| d$1.Modules = B24 | |
| d$1.modulesIntegration = Z$1 | |
| }) | |
| var q21 = _((W$1) => { | |
| Object.defineProperty(W$1, '__esModule', { value: !0 }) | |
| var A24 = Y4(), | |
| Qb = X0(), | |
| Q21 = lv(), | |
| X24 = 2000 | |
| function Y24(I) { | |
| Qb.consoleSandbox(() => { | |
| console.error(I) | |
| }) | |
| let G = A24.getClient() | |
| if (G === void 0) | |
| Q21.DEBUG_BUILD && | |
| Qb.logger.warn('No NodeClient was defined, we are exiting the process now.'), | |
| global.process.exit(1) | |
| let Z = G.getOptions(), | |
| d = (Z && Z.shutdownTimeout && Z.shutdownTimeout > 0 && Z.shutdownTimeout) || X24 | |
| G.close(d).then( | |
| (W) => { | |
| if (!W) | |
| Q21.DEBUG_BUILD && | |
| Qb.logger.warn( | |
| 'We reached the timeout for emptying the request buffer, still exiting now!', | |
| ) | |
| global.process.exit(1) | |
| }, | |
| (W) => { | |
| Q21.DEBUG_BUILD && Qb.logger.error(W) | |
| }, | |
| ) | |
| } | |
| W$1.logAndExitProcess = Y24 | |
| }) | |
| var Ub = _((A$1) => { | |
| Object.defineProperty(A$1, '__esModule', { value: !0 }) | |
| var qb = Y4(), | |
| D24 = X0(), | |
| H24 = lv(), | |
| w$1 = q21(), | |
| B$1 = 'OnUncaughtException', | |
| F24 = (I = {}) => { | |
| let G = { exitEvenIfOtherHandlersAreRegistered: !0, ...I } | |
| return { | |
| name: B$1, | |
| setupOnce() {}, | |
| setup(Z) { | |
| global.process.on('uncaughtException', V$1(Z, G)) | |
| }, | |
| } | |
| }, | |
| C$1 = qb.defineIntegration(F24), | |
| J24 = qb.convertIntegrationFnToClass(B$1, C$1) | |
| function V$1(I, G) { | |
| let d = !1, | |
| W = !1, | |
| w = !1, | |
| B, | |
| C = I.getOptions() | |
| return Object.assign( | |
| (V) => { | |
| let A = w$1.logAndExitProcess | |
| if (G.onFatalError) A = G.onFatalError | |
| else if (C.onFatalError) A = C.onFatalError | |
| let Y = | |
| global.process.listeners('uncaughtException').reduce((J, K) => { | |
| if ( | |
| K.name === 'domainUncaughtExceptionClear' || | |
| (K.tag && K.tag === 'sentry_tracingErrorCallback') || | |
| K._errorHandler | |
| ) | |
| return J | |
| else return J + 1 | |
| }, 0) === 0, | |
| H = G.exitEvenIfOtherHandlersAreRegistered || Y | |
| if (!d) { | |
| if (((B = V), (d = !0), qb.getClient() === I)) | |
| qb.captureException(V, { | |
| originalException: V, | |
| captureContext: { level: 'fatal' }, | |
| mechanism: { handled: !1, type: 'onuncaughtexception' }, | |
| }) | |
| if (!w && H) (w = !0), A(V) | |
| } else if (H) { | |
| if (w) | |
| H24.DEBUG_BUILD && | |
| D24.logger.warn( | |
| 'uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown', | |
| ), | |
| w$1.logAndExitProcess(V) | |
| else if (!W) | |
| (W = !0), | |
| setTimeout(() => { | |
| if (!w) (w = !0), A(B, V) | |
| }, 2000) | |
| } | |
| }, | |
| { _errorHandler: !0 }, | |
| ) | |
| } | |
| A$1.OnUncaughtException = J24 | |
| A$1.makeErrorHandler = V$1 | |
| A$1.onUncaughtExceptionIntegration = C$1 | |
| }) | |
| var Rb = _((H$1) => { | |
| Object.defineProperty(H$1, '__esModule', { value: !0 }) | |
| var fb = Y4(), | |
| X$1 = X0(), | |
| z24 = q21(), | |
| Y$1 = 'OnUnhandledRejection', | |
| Q24 = (I = {}) => { | |
| let G = I.mode || 'warn' | |
| return { | |
| name: Y$1, | |
| setupOnce() {}, | |
| setup(Z) { | |
| global.process.on('unhandledRejection', D$1(Z, { mode: G })) | |
| }, | |
| } | |
| }, | |
| _$1 = fb.defineIntegration(Q24), | |
| q24 = fb.convertIntegrationFnToClass(Y$1, _$1) | |
| function D$1(I, G) { | |
| return function Z(d, W) { | |
| if (fb.getClient() !== I) return | |
| fb.captureException(d, { | |
| originalException: W, | |
| captureContext: { extra: { unhandledPromiseRejection: !0 } }, | |
| mechanism: { handled: !1, type: 'onunhandledrejection' }, | |
| }), | |
| U24(d, G) | |
| } | |
| } | |
| function U24(I, G) { | |
| let Z = | |
| '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 (G.mode === 'warn') | |
| X$1.consoleSandbox(() => { | |
| console.warn(Z), console.error(I && I.stack ? I.stack : I) | |
| }) | |
| else if (G.mode === 'strict') | |
| X$1.consoleSandbox(() => { | |
| console.warn(Z) | |
| }), | |
| z24.logAndExitProcess(I) | |
| } | |
| H$1.OnUnhandledRejection = q24 | |
| H$1.makeUnhandledPromiseHandler = D$1 | |
| H$1.onUnhandledRejectionIntegration = _$1 | |
| }) | |
| var Eb = _((N$1) => { | |
| Object.defineProperty(N$1, '__esModule', { value: !0 }) | |
| var v24 = A1('http'), | |
| M24 = A1('url'), | |
| F$1 = Y4(), | |
| dz = X0(), | |
| J$1 = 'Spotlight', | |
| S24 = (I = {}) => { | |
| let G = { sidecarUrl: I.sidecarUrl || 'http://localhost:8969/stream' } | |
| return { | |
| name: J$1, | |
| setupOnce() {}, | |
| setup(Z) { | |
| if (typeof process === 'object' && process.env) | |
| dz.logger.warn( | |
| "[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?", | |
| ) | |
| $24(Z, G) | |
| }, | |
| } | |
| }, | |
| K$1 = F$1.defineIntegration(S24), | |
| L24 = F$1.convertIntegrationFnToClass(J$1, K$1) | |
| function $24(I, G) { | |
| let Z = y24(G.sidecarUrl) | |
| if (!Z) return | |
| let d = 0 | |
| if (typeof I.on !== 'function') { | |
| dz.logger.warn( | |
| '[Spotlight] Cannot connect to spotlight due to missing method on SDK client (`client.on`)', | |
| ) | |
| return | |
| } | |
| I.on('beforeEnvelope', (W) => { | |
| if (d > 3) { | |
| dz.logger.warn( | |
| '[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests', | |
| ) | |
| return | |
| } | |
| let w = dz.serializeEnvelope(W), | |
| C = g$1()( | |
| { | |
| method: 'POST', | |
| path: Z.pathname, | |
| hostname: Z.hostname, | |
| port: Z.port, | |
| headers: { 'Content-Type': 'application/x-sentry-envelope' }, | |
| }, | |
| (V) => { | |
| V.on('data', () => {}), V.on('end', () => {}), V.setEncoding('utf8') | |
| }, | |
| ) | |
| C.on('error', () => { | |
| d++, dz.logger.warn('[Spotlight] Failed to send envelope to Spotlight Sidecar') | |
| }), | |
| C.write(w), | |
| C.end() | |
| }) | |
| } | |
| function y24(I) { | |
| try { | |
| return new M24.URL(`${I}`) | |
| } catch (G) { | |
| dz.logger.warn(`[Spotlight] Invalid sidecar URL: ${I}`) | |
| return | |
| } | |
| } | |
| function g$1() { | |
| let { request: I } = v24 | |
| if (P24(I)) return I.__sentry_original__ | |
| return I | |
| } | |
| function P24(I) { | |
| return '__sentry_original__' in I | |
| } | |
| N$1.Spotlight = L24 | |
| N$1.getNativeHttpRequest = g$1 | |
| N$1.spotlightIntegration = K$1 | |
| }) | |
| var Mb = _((z$1) => { | |
| var { _optionalChain: vb } = X0() | |
| Object.defineProperty(z$1, '__esModule', { value: !0 }) | |
| var q6 = Y4(), | |
| oF = X0(), | |
| m24 = nF() | |
| z$1.ChannelName = void 0 | |
| ;(function (I) { | |
| I.RequestCreate = 'undici:request:create' | |
| let Z = 'undici:request:headers' | |
| I.RequestEnd = Z | |
| let d = 'undici:request:error' | |
| I.RequestError = d | |
| })(z$1.ChannelName || (z$1.ChannelName = {})) | |
| var b24 = (I) => { | |
| return new oI(I) | |
| }, | |
| l24 = q6.defineIntegration(b24) | |
| class oI { | |
| static __initStatic() { | |
| this.id = 'Undici' | |
| } | |
| __init() { | |
| this.name = oI.id | |
| } | |
| __init2() { | |
| this._createSpanUrlMap = new oF.LRUMap(100) | |
| } | |
| __init3() { | |
| this._headersUrlMap = new oF.LRUMap(100) | |
| } | |
| constructor(I = {}) { | |
| oI.prototype.__init.call(this), | |
| oI.prototype.__init2.call(this), | |
| oI.prototype.__init3.call(this), | |
| oI.prototype.__init4.call(this), | |
| oI.prototype.__init5.call(this), | |
| oI.prototype.__init6.call(this), | |
| (this._options = { | |
| breadcrumbs: I.breadcrumbs === void 0 ? !0 : I.breadcrumbs, | |
| tracing: I.tracing, | |
| shouldCreateSpanForRequest: I.shouldCreateSpanForRequest, | |
| }) | |
| } | |
| setupOnce(I) { | |
| if (m24.NODE_VERSION.major < 16) return | |
| let G | |
| try { | |
| G = A1('diagnostics_channel') | |
| } catch (Z) {} | |
| if (!G || !G.subscribe) return | |
| G.subscribe(z$1.ChannelName.RequestCreate, this._onRequestCreate), | |
| G.subscribe(z$1.ChannelName.RequestEnd, this._onRequestEnd), | |
| G.subscribe(z$1.ChannelName.RequestError, this._onRequestError) | |
| } | |
| _shouldCreateSpan(I) { | |
| if ( | |
| this._options.tracing === !1 || | |
| (this._options.tracing === void 0 && !q6.hasTracingEnabled()) | |
| ) | |
| return !1 | |
| if (this._options.shouldCreateSpanForRequest === void 0) return !0 | |
| let G = this._createSpanUrlMap.get(I) | |
| if (G !== void 0) return G | |
| let Z = this._options.shouldCreateSpanForRequest(I) | |
| return this._createSpanUrlMap.set(I, Z), Z | |
| } | |
| __init4() { | |
| this._onRequestCreate = (I) => { | |
| if ( | |
| !vb([ | |
| q6.getClient, | |
| 'call', | |
| (X) => X(), | |
| 'optionalAccess', | |
| (X) => X.getIntegration, | |
| 'call', | |
| (X) => X(oI), | |
| ]) | |
| ) | |
| return | |
| let { request: G } = I, | |
| Z = G.origin ? G.origin.toString() + G.path : G.path, | |
| d = q6.getClient() | |
| if (!d) return | |
| if (q6.isSentryRequestUrl(Z, d) || G.__sentry_span__ !== void 0) return | |
| let W = d.getOptions(), | |
| w = q6.getCurrentScope(), | |
| B = q6.getIsolationScope(), | |
| C = q6.getActiveSpan(), | |
| V = this._shouldCreateSpan(Z) ? k24(C, G, Z) : void 0 | |
| if (V) G.__sentry_span__ = V | |
| if ( | |
| ((X) => { | |
| if (W.tracePropagationTargets === void 0) return !0 | |
| let Y = this._headersUrlMap.get(X) | |
| if (Y !== void 0) return Y | |
| let H = oF.stringMatchesSomePattern(X, W.tracePropagationTargets) | |
| return this._headersUrlMap.set(X, H), H | |
| })(Z) | |
| ) { | |
| let { | |
| traceId: X, | |
| spanId: Y, | |
| sampled: H, | |
| dsc: J, | |
| } = { ...B.getPropagationContext(), ...w.getPropagationContext() }, | |
| K = V ? q6.spanToTraceHeader(V) : oF.generateSentryTraceHeader(X, Y, H), | |
| g = oF.dynamicSamplingContextToSentryBaggageHeader( | |
| J || | |
| (V | |
| ? q6.getDynamicSamplingContextFromSpan(V) | |
| : q6.getDynamicSamplingContextFromClient(X, d, w)), | |
| ) | |
| j24(G, K, g) | |
| } | |
| } | |
| } | |
| __init5() { | |
| this._onRequestEnd = (I) => { | |
| if ( | |
| !vb([ | |
| q6.getClient, | |
| 'call', | |
| (w) => w(), | |
| 'optionalAccess', | |
| (w) => w.getIntegration, | |
| 'call', | |
| (w) => w(oI), | |
| ]) | |
| ) | |
| return | |
| let { request: G, response: Z } = I, | |
| d = G.origin ? G.origin.toString() + G.path : G.path | |
| if (q6.isSentryRequestUrl(d, q6.getClient())) return | |
| let W = G.__sentry_span__ | |
| if (W) q6.setHttpStatus(W, Z.statusCode), W.end() | |
| if (this._options.breadcrumbs) | |
| q6.addBreadcrumb( | |
| { | |
| category: 'http', | |
| data: { method: G.method, status_code: Z.statusCode, url: d }, | |
| type: 'http', | |
| }, | |
| { event: 'response', request: G, response: Z }, | |
| ) | |
| } | |
| } | |
| __init6() { | |
| this._onRequestError = (I) => { | |
| if ( | |
| !vb([ | |
| q6.getClient, | |
| 'call', | |
| (W) => W(), | |
| 'optionalAccess', | |
| (W) => W.getIntegration, | |
| 'call', | |
| (W) => W(oI), | |
| ]) | |
| ) | |
| return | |
| let { request: G } = I, | |
| Z = G.origin ? G.origin.toString() + G.path : G.path | |
| if (q6.isSentryRequestUrl(Z, q6.getClient())) return | |
| let d = G.__sentry_span__ | |
| if (d) d.setStatus('internal_error'), d.end() | |
| if (this._options.breadcrumbs) | |
| q6.addBreadcrumb( | |
| { category: 'http', data: { method: G.method, url: Z }, level: 'error', type: 'http' }, | |
| { event: 'error', request: G }, | |
| ) | |
| } | |
| } | |
| } | |
| oI.__initStatic() | |
| function j24(I, G, Z) { | |
| let d | |
| if (Array.isArray(I.headers)) d = I.headers.some((W) => W === 'sentry-trace') | |
| else | |
| d = I.headers | |
| .split( | |
| `\r | |
| `, | |
| ) | |
| .some((w) => w.startsWith('sentry-trace:')) | |
| if (d) return | |
| if ((I.addHeader('sentry-trace', G), Z)) I.addHeader('baggage', Z) | |
| } | |
| function k24(I, G, Z) { | |
| let d = oF.parseUrl(Z), | |
| W = G.method || 'GET', | |
| w = { 'http.method': W } | |
| if (d.search) w['http.query'] = d.search | |
| if (d.hash) w['http.fragment'] = d.hash | |
| return vb([ | |
| I, | |
| 'optionalAccess', | |
| (B) => B.startChild, | |
| 'call', | |
| (B) => | |
| B({ | |
| op: 'http.client', | |
| origin: 'auto.http.node.undici', | |
| description: `${W} ${oF.getSanitizedUrlString(d)}`, | |
| data: w, | |
| }), | |
| ]) | |
| } | |
| z$1.Undici = oI | |
| z$1.nativeNodeFetchintegration = l24 | |
| }) | |
| var U21 = _((U$1) => { | |
| Object.defineProperty(U$1, '__esModule', { value: !0 }) | |
| var Q$1 = A1('path'), | |
| c24 = X0() | |
| function q$1(I) { | |
| return I.replace(/^[A-Z]:/, '').replace(/\\/g, '/') | |
| } | |
| function p24( | |
| I = process.argv[1] ? c24.dirname(process.argv[1]) : process.cwd(), | |
| G = Q$1.sep === '\\', | |
| ) { | |
| let Z = G ? q$1(I) : I | |
| return (d) => { | |
| if (!d) return | |
| let W = G ? q$1(d) : d, | |
| { dir: w, base: B, ext: C } = Q$1.posix.parse(W) | |
| if (C === '.js' || C === '.mjs' || C === '.cjs') B = B.slice(0, C.length * -1) | |
| if (!w) w = '.' | |
| let V = w.lastIndexOf('/node_modules') | |
| if (V > -1) return `${w.slice(V + 14).replace(/\//g, '.')}:${B}` | |
| if (w.startsWith(Z)) { | |
| let A = w.slice(Z.length + 1).replace(/\//g, '.') | |
| if (A) A += ':' | |
| return (A += B), A | |
| } | |
| return B | |
| } | |
| } | |
| U$1.createGetModuleFromFilename = p24 | |
| }) | |
| var f21 = _((M$1) => { | |
| var { _optionalChain: n24 } = X0() | |
| Object.defineProperty(M$1, '__esModule', { value: !0 }) | |
| var Zd = Y4(), | |
| eF = X0(), | |
| a24 = DL1(), | |
| r24 = V21(), | |
| s24 = _b(), | |
| o24 = Db(), | |
| e24 = Fb(), | |
| t24 = Jb(), | |
| I44 = Nb(), | |
| G44 = zb(), | |
| Z44 = Ub(), | |
| d44 = Rb(), | |
| W44 = Eb(), | |
| w44 = Mb(), | |
| B44 = U21(), | |
| C44 = Y21(), | |
| f$1 = [ | |
| Zd.inboundFiltersIntegration(), | |
| Zd.functionToStringIntegration(), | |
| Zd.linkedErrorsIntegration(), | |
| Zd.requestDataIntegration(), | |
| s24.consoleIntegration(), | |
| t24.httpIntegration(), | |
| w44.nativeNodeFetchintegration(), | |
| Z44.onUncaughtExceptionIntegration(), | |
| d44.onUnhandledRejectionIntegration(), | |
| e24.contextLinesIntegration(), | |
| I44.localVariablesIntegration(), | |
| o24.nodeContextIntegration(), | |
| G44.modulesIntegration(), | |
| ] | |
| function R$1(I) { | |
| let G = Zd.getMainCarrier(), | |
| Z = n24([G, 'access', (d) => d.__SENTRY__, 'optionalAccess', (d) => d.integrations]) || [] | |
| return [...f$1, ...Z] | |
| } | |
| function V44(I = {}) { | |
| if ((a24.setNodeAsyncContextStrategy(), I.defaultIntegrations === void 0)) | |
| I.defaultIntegrations = R$1() | |
| if (I.dsn === void 0 && process.env.SENTRY_DSN) I.dsn = process.env.SENTRY_DSN | |
| let G = process.env.SENTRY_TRACES_SAMPLE_RATE | |
| if (I.tracesSampleRate === void 0 && G) { | |
| let d = parseFloat(G) | |
| if (isFinite(d)) I.tracesSampleRate = d | |
| } | |
| if (I.release === void 0) { | |
| let d = E$1() | |
| if (d !== void 0) I.release = d | |
| 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 Z = { | |
| ...I, | |
| stackParser: eF.stackParserFromStackParserOptions(I.stackParser || v$1), | |
| integrations: Zd.getIntegrationsToSetup(I), | |
| transport: I.transport || C44.makeNodeTransport, | |
| } | |
| if ((Zd.initAndBind(I.clientClass || r24.NodeClient, Z), I.autoSessionTracking)) X44() | |
| if ((Y44(), I.spotlight)) { | |
| let d = Zd.getClient() | |
| if (d && d.addIntegration) { | |
| let W = d.getOptions().integrations | |
| for (let w of W) d.addIntegration(w) | |
| d.addIntegration( | |
| W44.spotlightIntegration({ | |
| sidecarUrl: typeof I.spotlight === 'string' ? I.spotlight : void 0, | |
| }), | |
| ) | |
| } | |
| } | |
| } | |
| function A44(I) { | |
| if (I === void 0) return !1 | |
| let G = I && I.getOptions() | |
| if (G && G.autoSessionTracking !== void 0) return G.autoSessionTracking | |
| return !1 | |
| } | |
| function E$1(I) { | |
| if (process.env.SENTRY_RELEASE) return process.env.SENTRY_RELEASE | |
| if (eF.GLOBAL_OBJ.SENTRY_RELEASE && eF.GLOBAL_OBJ.SENTRY_RELEASE.id) | |
| return eF.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 v$1 = eF.createStackParser(eF.nodeStackLineParser(B44.createGetModuleFromFilename())) | |
| function X44() { | |
| Zd.startSession(), | |
| process.on('beforeExit', () => { | |
| let I = Zd.getIsolationScope().getSession() | |
| if (I && !['exited', 'crashed'].includes(I.status)) Zd.endSession() | |
| }) | |
| } | |
| function Y44() { | |
| let I = (process.env.SENTRY_USE_ENVIRONMENT || '').toLowerCase() | |
| if (!['false', 'n', 'no', 'off', '0'].includes(I)) { | |
| let G = process.env.SENTRY_TRACE, | |
| Z = process.env.SENTRY_BAGGAGE, | |
| d = eF.propagationContextFromHeaders(G, Z) | |
| Zd.getCurrentScope().setPropagationContext(d) | |
| } | |
| } | |
| M$1.defaultIntegrations = f$1 | |
| M$1.defaultStackParser = v$1 | |
| M$1.getDefaultIntegrations = R$1 | |
| M$1.getSentryRelease = E$1 | |
| M$1.init = V44 | |
| M$1.isAutoSessionTrackingEnabled = A44 | |
| }) | |
| var L$1 = _((S$1) => { | |
| Object.defineProperty(S$1, '__esModule', { value: !0 }) | |
| var Sb = A1('fs'), | |
| R21 = A1('path') | |
| function g44(I) { | |
| let G = R21.resolve(I) | |
| if (!Sb.existsSync(G)) | |
| throw new Error(`Cannot read contents of ${G}. Directory does not exist.`) | |
| if (!Sb.statSync(G).isDirectory()) | |
| throw new Error(`Cannot read contents of ${G}, because it is not a directory.`) | |
| let Z = (d) => { | |
| return Sb.readdirSync(d).reduce((W, w) => { | |
| let B = R21.join(d, w) | |
| if (Sb.statSync(B).isDirectory()) return W.concat(Z(B)) | |
| return W.push(B), W | |
| }, []) | |
| } | |
| return Z(G).map((d) => R21.relative(G, d)) | |
| } | |
| S$1.deepReadDirSync = g44 | |
| }) | |
| var $$1 = _((z44) => { | |
| /*! @sentry/node 7.120.0 (611282e) | https://github.com/getsentry/sentry-javascript */ z44.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 $b = _((u$1, T$1) => { | |
| var { _optionalChain: q44, _optionalChainDelete: y$1 } = X0() | |
| Object.defineProperty(u$1, '__esModule', { value: !0 }) | |
| var U44 = A1('url'), | |
| cV = Y4(), | |
| Lb = X0(), | |
| E21 = nF(), | |
| f44 = $$1(), | |
| R44 = 50, | |
| E44 = 5000 | |
| function v21(I, ...G) { | |
| Lb.logger.log(`[ANR] ${I}`, ...G) | |
| } | |
| function v44() { | |
| return Lb.GLOBAL_OBJ | |
| } | |
| function M44() { | |
| let I = cV.getGlobalScope().getScopeData() | |
| return ( | |
| cV.mergeScopeData(I, cV.getIsolationScope().getScopeData()), | |
| cV.mergeScopeData(I, cV.getCurrentScope().getScopeData()), | |
| (I.attachments = []), | |
| (I.eventProcessors = []), | |
| I | |
| ) | |
| } | |
| function S44() { | |
| return Lb.dynamicRequire(T$1, 'worker_threads') | |
| } | |
| async function L44(I) { | |
| let G = { message: 'ANR' }, | |
| Z = {} | |
| for (let d of I.getEventProcessors()) { | |
| if (G === null) break | |
| G = await d(G, Z) | |
| } | |
| return q44([G, 'optionalAccess', (d) => d.contexts]) || {} | |
| } | |
| var P$1 = 'Anr', | |
| $44 = (I = {}) => { | |
| if ( | |
| E21.NODE_VERSION.major < 16 || | |
| (E21.NODE_VERSION.major === 16 && E21.NODE_VERSION.minor < 17) | |
| ) | |
| throw new Error('ANR detection requires Node 16.17.0 or later') | |
| let G, | |
| Z, | |
| d = v44() | |
| return ( | |
| (d.__SENTRY_GET_SCOPES__ = M44), | |
| { | |
| name: P$1, | |
| setupOnce() {}, | |
| startWorker: () => { | |
| if (G) return | |
| if (Z) G = P44(Z, I) | |
| }, | |
| stopWorker: () => { | |
| if (G) | |
| G.then((W) => { | |
| W(), (G = void 0) | |
| }) | |
| }, | |
| setup(W) { | |
| ;(Z = W), setImmediate(() => this.startWorker()) | |
| }, | |
| } | |
| ) | |
| }, | |
| O$1 = cV.defineIntegration($44), | |
| y44 = cV.convertIntegrationFnToClass(P$1, O$1) | |
| async function P44(I, G) { | |
| let Z = I.getDsn() | |
| if (!Z) return () => {} | |
| let d = await L44(I) | |
| y$1([d, 'access', (X) => X.app, 'optionalAccess', (X) => delete X.app_memory]), | |
| y$1([d, 'access', (X) => X.device, 'optionalAccess', (X) => delete X.free_memory]) | |
| let W = I.getOptions(), | |
| w = I.getSdkMetadata() || {} | |
| if (w.sdk) w.sdk.integrations = W.integrations.map((X) => X.name) | |
| let B = { | |
| debug: Lb.logger.isEnabled(), | |
| dsn: Z, | |
| environment: W.environment || 'production', | |
| release: W.release, | |
| dist: W.dist, | |
| sdkMetadata: w, | |
| appRootPath: G.appRootPath, | |
| pollInterval: G.pollInterval || R44, | |
| anrThreshold: G.anrThreshold || E44, | |
| captureStackTrace: !!G.captureStackTrace, | |
| staticTags: G.staticTags || {}, | |
| contexts: d, | |
| } | |
| if (B.captureStackTrace) { | |
| let X = A1('inspector') | |
| if (!X.url()) X.open(0) | |
| } | |
| let { Worker: C } = S44(), | |
| V = new C(new U44.URL(`data:application/javascript;base64,${f44.base64WorkerScript}`), { | |
| workerData: B, | |
| }) | |
| process.on('exit', () => { | |
| V.terminate() | |
| }) | |
| let A = setInterval(() => { | |
| try { | |
| let X = cV.getCurrentScope().getSession(), | |
| Y = X ? { ...X, toJSON: void 0 } : void 0 | |
| V.postMessage({ session: Y }) | |
| } catch (X) {} | |
| }, B.pollInterval) | |
| return ( | |
| A.unref(), | |
| V.on('message', (X) => { | |
| if (X === 'session-ended') | |
| v21('ANR event sent from ANR worker. Clearing session in this thread.'), | |
| cV.getCurrentScope().setSession(void 0) | |
| }), | |
| V.once('error', (X) => { | |
| clearInterval(A), v21('ANR worker error', X) | |
| }), | |
| V.once('exit', (X) => { | |
| clearInterval(A), v21('ANR worker exit', X) | |
| }), | |
| V.unref(), | |
| () => { | |
| V.terminate(), clearInterval(A) | |
| } | |
| ) | |
| } | |
| u$1.Anr = y44 | |
| u$1.anrIntegration = O$1 | |
| }) | |
| var b$1 = _((m$1) => { | |
| Object.defineProperty(m$1, '__esModule', { value: !0 }) | |
| var T44 = Y4(), | |
| m44 = $b() | |
| function b44(I) { | |
| let G = T44.getClient() | |
| return new m44.Anr(I).setup(G), Promise.resolve() | |
| } | |
| m$1.enableAnrDetection = b44 | |
| }) | |
| var M21 = _((k$1) => { | |
| var { _optionalChain: l$1 } = X0() | |
| Object.defineProperty(k$1, '__esModule', { value: !0 }) | |
| var wz = Y4(), | |
| j$1 = X0() | |
| function j44(I = {}) { | |
| return function ({ path: G, type: Z, next: d, rawInput: W }) { | |
| let w = l$1([ | |
| wz.getClient, | |
| 'call', | |
| (A) => A(), | |
| 'optionalAccess', | |
| (A) => A.getOptions, | |
| 'call', | |
| (A) => A(), | |
| ]), | |
| B = wz.getCurrentScope().getTransaction() | |
| if (B) { | |
| B.updateName(`trpc/${G}`), | |
| B.setAttribute(wz.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'route'), | |
| (B.op = 'rpc.server') | |
| let A = { procedure_type: Z } | |
| if ( | |
| I.attachRpcInput !== void 0 | |
| ? I.attachRpcInput | |
| : l$1([w, 'optionalAccess', (X) => X.sendDefaultPii]) | |
| ) | |
| A.input = j$1.normalize(W) | |
| B.setContext('trpc', A) | |
| } | |
| function C(A) { | |
| if (!A.ok) | |
| wz.captureException(A.error, { | |
| mechanism: { handled: !1, data: { function: 'trpcMiddleware' } }, | |
| }) | |
| } | |
| let V | |
| try { | |
| V = d() | |
| } catch (A) { | |
| throw ( | |
| (wz.captureException(A, { | |
| mechanism: { handled: !1, data: { function: 'trpcMiddleware' } }, | |
| }), | |
| A) | |
| ) | |
| } | |
| if (j$1.isThenable(V)) | |
| Promise.resolve(V).then( | |
| (A) => { | |
| C(A) | |
| }, | |
| (A) => { | |
| wz.captureException(A, { | |
| mechanism: { handled: !1, data: { function: 'trpcMiddleware' } }, | |
| }) | |
| }, | |
| ) | |
| else C(V) | |
| return V | |
| } | |
| } | |
| k$1.trpcMiddleware = j44 | |
| }) | |
| var c$1 = _((x$1) => { | |
| Object.defineProperty(x$1, '__esModule', { value: !0 }) | |
| var h$1 = X0() | |
| function h44(I, G) { | |
| return h$1.extractRequestData(I, { include: G }) | |
| } | |
| function x44(I, G, Z = {}) { | |
| return h$1.addRequestDataToEvent(I, G, { include: Z }) | |
| } | |
| x$1.extractRequestData = h44 | |
| x$1.parseRequest = x44 | |
| }) | |
| var n$1 = _((i$1) => { | |
| var { _optionalChain: yb } = X0() | |
| Object.defineProperty(i$1, '__esModule', { value: !0 }) | |
| var X8 = Y4(), | |
| Bz = X0(), | |
| i44 = lv(), | |
| Pb = f21(), | |
| n44 = M21(), | |
| p$1 = c$1() | |
| function a44() { | |
| return function I(G, Z, d) { | |
| let W = yb([ | |
| X8.getClient, | |
| 'call', | |
| (X) => X(), | |
| 'optionalAccess', | |
| (X) => X.getOptions, | |
| 'call', | |
| (X) => X(), | |
| ]) | |
| if ( | |
| !W || | |
| W.instrumenter !== 'sentry' || | |
| yb([ | |
| G, | |
| 'access', | |
| (X) => X.method, | |
| 'optionalAccess', | |
| (X) => X.toUpperCase, | |
| 'call', | |
| (X) => X(), | |
| ]) === 'OPTIONS' || | |
| yb([ | |
| G, | |
| 'access', | |
| (X) => X.method, | |
| 'optionalAccess', | |
| (X) => X.toUpperCase, | |
| 'call', | |
| (X) => X(), | |
| ]) === 'HEAD' | |
| ) | |
| return d() | |
| let w = | |
| G.headers && Bz.isString(G.headers['sentry-trace']) ? G.headers['sentry-trace'] : void 0, | |
| B = yb([G, 'access', (X) => X.headers, 'optionalAccess', (X) => X.baggage]) | |
| if (!X8.hasTracingEnabled(W)) return d() | |
| let [C, V] = Bz.extractPathForTransaction(G, { path: !0, method: !0 }), | |
| A = X8.continueTrace({ sentryTrace: w, baggage: B }, (X) => | |
| X8.startTransaction( | |
| { | |
| name: C, | |
| op: 'http.server', | |
| origin: 'auto.http.node.tracingHandler', | |
| ...X, | |
| data: { [X8.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: V }, | |
| metadata: { ...X.metadata, request: G }, | |
| }, | |
| { request: Bz.extractRequestData(G) }, | |
| ), | |
| ) | |
| X8.getCurrentScope().setSpan(A), | |
| (Z.__sentry_transaction = A), | |
| Z.once('finish', () => { | |
| setImmediate(() => { | |
| Bz.addRequestDataToTransaction(A, G), X8.setHttpStatus(A, Z.statusCode), A.end() | |
| }) | |
| }), | |
| d() | |
| } | |
| } | |
| function r44(I = {}) { | |
| let G | |
| if ('include' in I) G = { include: I.include } | |
| else { | |
| let { ip: Z, request: d, transaction: W, user: w } = I | |
| if (Z || d || W || w) | |
| G = { include: Bz.dropUndefinedKeys({ ip: Z, request: d, transaction: W, user: w }) } | |
| } | |
| return G | |
| } | |
| function s44(I) { | |
| let G = r44(I), | |
| Z = X8.getClient() | |
| if (Z && Pb.isAutoSessionTrackingEnabled(Z)) { | |
| Z.initSessionFlusher() | |
| let d = X8.getCurrentScope() | |
| if (d.getSession()) d.setSession() | |
| } | |
| return function d(W, w, B) { | |
| if (I && I.flushTimeout && I.flushTimeout > 0) { | |
| let C = w.end | |
| w.end = function (V, A, X) { | |
| X8.flush(I.flushTimeout) | |
| .then(() => { | |
| C.call(this, V, A, X) | |
| }) | |
| .then(null, (Y) => { | |
| i44.DEBUG_BUILD && Bz.logger.error(Y), C.call(this, V, A, X) | |
| }) | |
| } | |
| } | |
| X8.runWithAsyncContext(() => { | |
| let C = X8.getCurrentScope() | |
| C.setSDKProcessingMetadata({ request: W, requestDataOptionsFromExpressHandler: G }) | |
| let V = X8.getClient() | |
| if (Pb.isAutoSessionTrackingEnabled(V)) C.setRequestSession({ status: 'ok' }) | |
| w.once('finish', () => { | |
| let A = X8.getClient() | |
| if (Pb.isAutoSessionTrackingEnabled(A)) | |
| setImmediate(() => { | |
| if (A && A._captureRequestSession) A._captureRequestSession() | |
| }) | |
| }), | |
| B() | |
| }) | |
| } | |
| } | |
| function o44(I) { | |
| let G = I.status || I.statusCode || I.status_code || (I.output && I.output.statusCode) | |
| return G ? parseInt(G, 10) : 500 | |
| } | |
| function e44(I) { | |
| return o44(I) >= 500 | |
| } | |
| function t44(I) { | |
| return function G(Z, d, W, w) { | |
| if (((I && I.shouldHandleError) || e44)(Z)) { | |
| X8.withScope((C) => { | |
| C.setSDKProcessingMetadata({ request: d }) | |
| let V = W.__sentry_transaction | |
| if (V && !X8.getActiveSpan()) C.setSpan(V) | |
| let A = X8.getClient() | |
| if (A && Pb.isAutoSessionTrackingEnabled(A)) { | |
| if (A._sessionFlusher !== void 0) { | |
| let H = C.getRequestSession() | |
| if (H && H.status !== void 0) H.status = 'crashed' | |
| } | |
| } | |
| let X = X8.captureException(Z, { mechanism: { type: 'middleware', handled: !1 } }) | |
| ;(W.sentry = X), w(Z) | |
| }) | |
| return | |
| } | |
| w(Z) | |
| } | |
| } | |
| var I54 = n44.trpcMiddleware | |
| i$1.extractRequestData = p$1.extractRequestData | |
| i$1.parseRequest = p$1.parseRequest | |
| i$1.errorHandler = t44 | |
| i$1.requestHandler = s44 | |
| i$1.tracingHandler = a44 | |
| i$1.trpcMiddleware = I54 | |
| }) | |
| var S21 = _((Iy1) => { | |
| Object.defineProperty(Iy1, '__esModule', { value: !0 }) | |
| var eI = Y4(), | |
| r$1 = X0() | |
| function a$1(I) { | |
| return I && I.statusCode !== void 0 | |
| } | |
| function C54(I) { | |
| return I && I.error !== void 0 | |
| } | |
| function V54(I) { | |
| eI.captureException(I, { | |
| mechanism: { type: 'hapi', handled: !1, data: { function: 'hapiErrorPlugin' } }, | |
| }) | |
| } | |
| var s$1 = { | |
| name: 'SentryHapiErrorPlugin', | |
| version: eI.SDK_VERSION, | |
| register: async function (I) { | |
| I.events.on('request', (Z, d) => { | |
| let W = eI.getActiveTransaction() | |
| if (C54(d)) V54(d.error) | |
| if (W) W.setStatus('internal_error'), W.end() | |
| }) | |
| }, | |
| }, | |
| o$1 = { | |
| name: 'SentryHapiTracingPlugin', | |
| version: eI.SDK_VERSION, | |
| register: async function (I) { | |
| let G = I | |
| G.ext('onPreHandler', (Z, d) => { | |
| let W = eI.continueTrace( | |
| { | |
| sentryTrace: Z.headers['sentry-trace'] || void 0, | |
| baggage: Z.headers.baggage || void 0, | |
| }, | |
| (w) => { | |
| return eI.startTransaction({ | |
| ...w, | |
| op: 'hapi.request', | |
| name: Z.route.path, | |
| description: `${Z.route.method} ${Z.path}`, | |
| }) | |
| }, | |
| ) | |
| return eI.getCurrentScope().setSpan(W), d.continue | |
| }), | |
| G.ext('onPreResponse', (Z, d) => { | |
| let W = eI.getActiveTransaction() | |
| if (Z.response && a$1(Z.response) && W) { | |
| let w = Z.response | |
| w.header('sentry-trace', eI.spanToTraceHeader(W)) | |
| let B = r$1.dynamicSamplingContextToSentryBaggageHeader( | |
| eI.getDynamicSamplingContextFromSpan(W), | |
| ) | |
| if (B) w.header('baggage', B) | |
| } | |
| return d.continue | |
| }), | |
| G.ext('onPostHandler', (Z, d) => { | |
| let W = eI.getActiveTransaction() | |
| if (W) { | |
| if (Z.response && a$1(Z.response)) eI.setHttpStatus(W, Z.response.statusCode) | |
| W.end() | |
| } | |
| return d.continue | |
| }) | |
| }, | |
| }, | |
| e$1 = 'Hapi', | |
| A54 = (I = {}) => { | |
| let G = I.server | |
| return { | |
| name: e$1, | |
| setupOnce() { | |
| if (!G) return | |
| r$1.fill(G, 'start', (Z) => { | |
| return async function () { | |
| return await this.register(o$1), await this.register(s$1), Z.apply(this) | |
| } | |
| }) | |
| }, | |
| } | |
| }, | |
| t$1 = eI.defineIntegration(A54), | |
| X54 = eI.convertIntegrationFnToClass(e$1, t$1) | |
| Iy1.Hapi = X54 | |
| Iy1.hapiErrorPlugin = s$1 | |
| Iy1.hapiIntegration = t$1 | |
| Iy1.hapiTracingPlugin = o$1 | |
| }) | |
| var Zy1 = _((Gy1) => { | |
| Object.defineProperty(Gy1, '__esModule', { value: !0 }) | |
| var F54 = _b(), | |
| J54 = Jb(), | |
| K54 = Ub(), | |
| g54 = Rb(), | |
| N54 = zb(), | |
| z54 = Fb(), | |
| Q54 = Db(), | |
| q54 = Y4(), | |
| U54 = Nb(), | |
| f54 = Mb(), | |
| R54 = Eb(), | |
| E54 = $b(), | |
| v54 = S21() | |
| Gy1.Console = F54.Console | |
| Gy1.Http = J54.Http | |
| Gy1.OnUncaughtException = K54.OnUncaughtException | |
| Gy1.OnUnhandledRejection = g54.OnUnhandledRejection | |
| Gy1.Modules = N54.Modules | |
| Gy1.ContextLines = z54.ContextLines | |
| Gy1.Context = Q54.Context | |
| Gy1.RequestData = q54.RequestData | |
| Gy1.LocalVariables = U54.LocalVariables | |
| Gy1.Undici = f54.Undici | |
| Gy1.Spotlight = R54.Spotlight | |
| Gy1.Anr = E54.Anr | |
| Gy1.Hapi = v54.Hapi | |
| }) | |
| var Wy1 = _((dy1) => { | |
| Object.defineProperty(dy1, '__esModule', { value: !0 }) | |
| var tF = C21() | |
| dy1.Apollo = tF.Apollo | |
| dy1.Express = tF.Express | |
| dy1.GraphQL = tF.GraphQL | |
| dy1.Mongo = tF.Mongo | |
| dy1.Mysql = tF.Mysql | |
| dy1.Postgres = tF.Postgres | |
| dy1.Prisma = tF.Prisma | |
| }) | |
| var Vy1 = _((Cy1) => { | |
| Object.defineProperty(Cy1, '__esModule', { value: !0 }) | |
| var IJ = Y4(), | |
| GJ = X0(), | |
| wy1 = 'CaptureConsole', | |
| a54 = (I = {}) => { | |
| let G = I.levels || GJ.CONSOLE_LEVELS | |
| return { | |
| name: wy1, | |
| setupOnce() {}, | |
| setup(Z) { | |
| if (!('console' in GJ.GLOBAL_OBJ)) return | |
| GJ.addConsoleInstrumentationHandler(({ args: d, level: W }) => { | |
| if (IJ.getClient() !== Z || !G.includes(W)) return | |
| s54(d, W) | |
| }) | |
| }, | |
| } | |
| }, | |
| By1 = IJ.defineIntegration(a54), | |
| r54 = IJ.convertIntegrationFnToClass(wy1, By1) | |
| function s54(I, G) { | |
| let Z = { level: GJ.severityLevelFromString(G), extra: { arguments: I } } | |
| IJ.withScope((d) => { | |
| if ( | |
| (d.addEventProcessor((B) => { | |
| return ( | |
| (B.logger = 'console'), GJ.addExceptionMechanism(B, { handled: !1, type: 'console' }), B | |
| ) | |
| }), | |
| G === 'assert' && I[0] === !1) | |
| ) { | |
| let B = `Assertion failed: ${GJ.safeJoin(I.slice(1), ' ') || 'console.assert'}` | |
| d.setExtra('arguments', I.slice(1)), IJ.captureMessage(B, Z) | |
| return | |
| } | |
| let W = I.find((B) => B instanceof Error) | |
| if (G === 'error' && W) { | |
| IJ.captureException(W, Z) | |
| return | |
| } | |
| let w = GJ.safeJoin(I, ' ') | |
| IJ.captureMessage(w, Z) | |
| }) | |
| } | |
| Cy1.CaptureConsole = r54 | |
| Cy1.captureConsoleIntegration = By1 | |
| }) | |
| var Dy1 = _((_y1) => { | |
| Object.defineProperty(_y1, '__esModule', { value: !0 }) | |
| var Ay1 = Y4(), | |
| t54 = X0(), | |
| Xy1 = 'Debug', | |
| I94 = (I = {}) => { | |
| let G = { debugger: !1, stringify: !1, ...I } | |
| return { | |
| name: Xy1, | |
| setupOnce() {}, | |
| setup(Z) { | |
| if (!Z.on) return | |
| Z.on('beforeSendEvent', (d, W) => { | |
| if (G.debugger) debugger | |
| t54.consoleSandbox(() => { | |
| if (G.stringify) { | |
| if ((console.log(JSON.stringify(d, null, 2)), W && Object.keys(W).length)) | |
| console.log(JSON.stringify(W, null, 2)) | |
| } else if ((console.log(d), W && Object.keys(W).length)) console.log(W) | |
| }) | |
| }) | |
| }, | |
| } | |
| }, | |
| Yy1 = Ay1.defineIntegration(I94), | |
| G94 = Ay1.convertIntegrationFnToClass(Xy1, Yy1) | |
| _y1.Debug = G94 | |
| _y1.debugIntegration = Yy1 | |
| }) | |
| var kv = _((Hy1) => { | |
| Object.defineProperty(Hy1, '__esModule', { value: !0 }) | |
| var W94 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__ | |
| Hy1.DEBUG_BUILD = W94 | |
| }) | |
| var fy1 = _((Uy1) => { | |
| Object.defineProperty(Uy1, '__esModule', { value: !0 }) | |
| var Ky1 = Y4(), | |
| B94 = X0(), | |
| C94 = kv(), | |
| gy1 = 'Dedupe', | |
| V94 = () => { | |
| let I | |
| return { | |
| name: gy1, | |
| setupOnce() {}, | |
| processEvent(G) { | |
| if (G.type) return G | |
| try { | |
| if (zy1(G, I)) | |
| return ( | |
| C94.DEBUG_BUILD && | |
| B94.logger.warn( | |
| 'Event dropped due to being a duplicate of previously captured event.', | |
| ), | |
| null | |
| ) | |
| } catch (Z) {} | |
| return (I = G) | |
| }, | |
| } | |
| }, | |
| Ny1 = Ky1.defineIntegration(V94), | |
| A94 = Ky1.convertIntegrationFnToClass(gy1, Ny1) | |
| function zy1(I, G) { | |
| if (!G) return !1 | |
| if (X94(I, G)) return !0 | |
| if (Y94(I, G)) return !0 | |
| return !1 | |
| } | |
| function X94(I, G) { | |
| let Z = I.message, | |
| d = G.message | |
| if (!Z && !d) return !1 | |
| if ((Z && !d) || (!Z && d)) return !1 | |
| if (Z !== d) return !1 | |
| if (!qy1(I, G)) return !1 | |
| if (!Qy1(I, G)) return !1 | |
| return !0 | |
| } | |
| function Y94(I, G) { | |
| let Z = Fy1(G), | |
| d = Fy1(I) | |
| if (!Z || !d) return !1 | |
| if (Z.type !== d.type || Z.value !== d.value) return !1 | |
| if (!qy1(I, G)) return !1 | |
| if (!Qy1(I, G)) return !1 | |
| return !0 | |
| } | |
| function Qy1(I, G) { | |
| let Z = Jy1(I), | |
| d = Jy1(G) | |
| if (!Z && !d) return !0 | |
| if ((Z && !d) || (!Z && d)) return !1 | |
| if (((Z = Z), (d = d), d.length !== Z.length)) return !1 | |
| for (let W = 0; W < d.length; W++) { | |
| let w = d[W], | |
| B = Z[W] | |
| if ( | |
| w.filename !== B.filename || | |
| w.lineno !== B.lineno || | |
| w.colno !== B.colno || | |
| w.function !== B.function | |
| ) | |
| return !1 | |
| } | |
| return !0 | |
| } | |
| function qy1(I, G) { | |
| let Z = I.fingerprint, | |
| d = G.fingerprint | |
| if (!Z && !d) return !0 | |
| if ((Z && !d) || (!Z && d)) return !1 | |
| ;(Z = Z), (d = d) | |
| try { | |
| return Z.join('') === d.join('') | |
| } catch (W) { | |
| return !1 | |
| } | |
| } | |
| function Fy1(I) { | |
| return I.exception && I.exception.values && I.exception.values[0] | |
| } | |
| function Jy1(I) { | |
| let G = I.exception | |
| if (G) | |
| try { | |
| return G.values[0].stacktrace.frames | |
| } catch (Z) { | |
| return | |
| } | |
| return | |
| } | |
| Uy1.Dedupe = A94 | |
| Uy1._shouldDropEvent = zy1 | |
| Uy1.dedupeIntegration = Ny1 | |
| }) | |
| var Sy1 = _((My1) => { | |
| Object.defineProperty(My1, '__esModule', { value: !0 }) | |
| var Ry1 = Y4(), | |
| JY = X0(), | |
| F94 = kv(), | |
| Ey1 = 'ExtraErrorData', | |
| J94 = (I = {}) => { | |
| let G = I.depth || 3, | |
| Z = I.captureErrorCause || !1 | |
| return { | |
| name: Ey1, | |
| setupOnce() {}, | |
| processEvent(d, W) { | |
| return g94(d, W, G, Z) | |
| }, | |
| } | |
| }, | |
| vy1 = Ry1.defineIntegration(J94), | |
| K94 = Ry1.convertIntegrationFnToClass(Ey1, vy1) | |
| function g94(I, G = {}, Z, d) { | |
| if (!G.originalException || !JY.isError(G.originalException)) return I | |
| let W = G.originalException.name || G.originalException.constructor.name, | |
| w = N94(G.originalException, d) | |
| if (w) { | |
| let B = { ...I.contexts }, | |
| C = JY.normalize(w, Z) | |
| if (JY.isPlainObject(C)) | |
| JY.addNonEnumerableProperty(C, '__sentry_skip_normalization__', !0), (B[W] = C) | |
| return { ...I, contexts: B } | |
| } | |
| return I | |
| } | |
| function N94(I, G) { | |
| try { | |
| let Z = [ | |
| 'name', | |
| 'message', | |
| 'stack', | |
| 'line', | |
| 'column', | |
| 'fileName', | |
| 'lineNumber', | |
| 'columnNumber', | |
| 'toJSON', | |
| ], | |
| d = {} | |
| for (let W of Object.keys(I)) { | |
| if (Z.indexOf(W) !== -1) continue | |
| let w = I[W] | |
| d[W] = JY.isError(w) ? w.toString() : w | |
| } | |
| if (G && I.cause !== void 0) d.cause = JY.isError(I.cause) ? I.cause.toString() : I.cause | |
| if (typeof I.toJSON === 'function') { | |
| let W = I.toJSON() | |
| for (let w of Object.keys(W)) { | |
| let B = W[w] | |
| d[w] = JY.isError(B) ? B.toString() : B | |
| } | |
| } | |
| return d | |
| } catch (Z) { | |
| F94.DEBUG_BUILD && JY.logger.error('Unable to extract extra data from the Error object:', Z) | |
| } | |
| return null | |
| } | |
| My1.ExtraErrorData = K94 | |
| My1.extraErrorDataIntegration = vy1 | |
| }) | |
| var $y1 = _((Ly1, L21) => { | |
| /*! | |
| 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 Ly1 === 'object' && typeof L21 !== 'undefined') L21.exports = I() | |
| else if (typeof define === 'function' && define.amd) define([], I) | |
| else { | |
| var G | |
| if (typeof window !== 'undefined') G = window | |
| else if (typeof global !== 'undefined') G = global | |
| else if (typeof self !== 'undefined') G = self | |
| else G = this | |
| G.localforage = I() | |
| } | |
| })(function () { | |
| var I, G, Z | |
| return (function d(W, w, B) { | |
| function C(X, Y) { | |
| if (!w[X]) { | |
| if (!W[X]) { | |
| var H = A1 | |
| if (!Y && H) return H(X, !0) | |
| if (V) return V(X, !0) | |
| var J = new Error("Cannot find module '" + X + "'") | |
| throw ((J.code = 'MODULE_NOT_FOUND'), J) | |
| } | |
| var K = (w[X] = { exports: {} }) | |
| W[X][0].call( | |
| K.exports, | |
| function (g) { | |
| var z = W[X][1][g] | |
| return C(z ? z : g) | |
| }, | |
| K, | |
| K.exports, | |
| d, | |
| W, | |
| w, | |
| B, | |
| ) | |
| } | |
| return w[X].exports | |
| } | |
| var V = A1 | |
| for (var A = 0; A < B.length; A++) C(B[A]) | |
| return C | |
| })( | |
| { | |
| 1: [ | |
| function (d, W, w) { | |
| ;(function (B) { | |
| var C = B.MutationObserver || B.WebKitMutationObserver, | |
| V | |
| if (C) { | |
| var A = 0, | |
| X = new C(g), | |
| Y = B.document.createTextNode('') | |
| X.observe(Y, { characterData: !0 }), | |
| (V = function () { | |
| Y.data = A = ++A % 2 | |
| }) | |
| } else if (!B.setImmediate && typeof B.MessageChannel !== 'undefined') { | |
| var H = new B.MessageChannel() | |
| ;(H.port1.onmessage = g), | |
| (V = function () { | |
| H.port2.postMessage(0) | |
| }) | |
| } else if ( | |
| 'document' in B && | |
| 'onreadystatechange' in B.document.createElement('script') | |
| ) | |
| V = function () { | |
| var f = B.document.createElement('script') | |
| ;(f.onreadystatechange = function () { | |
| g(), (f.onreadystatechange = null), f.parentNode.removeChild(f), (f = null) | |
| }), | |
| B.document.documentElement.appendChild(f) | |
| } | |
| else | |
| V = function () { | |
| setTimeout(g, 0) | |
| } | |
| var J, | |
| K = [] | |
| function g() { | |
| J = !0 | |
| var f, | |
| S, | |
| $ = K.length | |
| while ($) { | |
| ;(S = K), (K = []), (f = -1) | |
| while (++f < $) S[f]() | |
| $ = K.length | |
| } | |
| J = !1 | |
| } | |
| W.exports = z | |
| function z(f) { | |
| if (K.push(f) === 1 && !J) V() | |
| } | |
| }).call( | |
| this, | |
| typeof global !== 'undefined' | |
| ? global | |
| : typeof self !== 'undefined' | |
| ? self | |
| : typeof window !== 'undefined' | |
| ? window | |
| : {}, | |
| ) | |
| }, | |
| {}, | |
| ], | |
| 2: [ | |
| function (d, W, w) { | |
| var B = d(1) | |
| function C() {} | |
| var V = {}, | |
| A = ['REJECTED'], | |
| X = ['FULFILLED'], | |
| Y = ['PENDING'] | |
| W.exports = H | |
| function H(m) { | |
| if (typeof m !== 'function') throw new TypeError('resolver must be a function') | |
| if (((this.state = Y), (this.queue = []), (this.outcome = void 0), m !== C)) | |
| z(this, m) | |
| } | |
| ;(H.prototype.catch = function (m) { | |
| return this.then(null, m) | |
| }), | |
| (H.prototype.then = function (m, O) { | |
| if ( | |
| (typeof m !== 'function' && this.state === X) || | |
| (typeof O !== 'function' && this.state === A) | |
| ) | |
| return this | |
| var w1 = new this.constructor(C) | |
| if (this.state !== Y) { | |
| var b = this.state === X ? m : O | |
| K(w1, b, this.outcome) | |
| } else this.queue.push(new J(w1, m, O)) | |
| return w1 | |
| }) | |
| function J(m, O, w1) { | |
| if (((this.promise = m), typeof O === 'function')) | |
| (this.onFulfilled = O), (this.callFulfilled = this.otherCallFulfilled) | |
| if (typeof w1 === 'function') | |
| (this.onRejected = w1), (this.callRejected = this.otherCallRejected) | |
| } | |
| ;(J.prototype.callFulfilled = function (m) { | |
| V.resolve(this.promise, m) | |
| }), | |
| (J.prototype.otherCallFulfilled = function (m) { | |
| K(this.promise, this.onFulfilled, m) | |
| }), | |
| (J.prototype.callRejected = function (m) { | |
| V.reject(this.promise, m) | |
| }), | |
| (J.prototype.otherCallRejected = function (m) { | |
| K(this.promise, this.onRejected, m) | |
| }) | |
| function K(m, O, w1) { | |
| B(function () { | |
| var b | |
| try { | |
| b = O(w1) | |
| } catch (x1) { | |
| return V.reject(m, x1) | |
| } | |
| if (b === m) V.reject(m, new TypeError('Cannot resolve promise with itself')) | |
| else V.resolve(m, b) | |
| }) | |
| } | |
| ;(V.resolve = function (m, O) { | |
| var w1 = f(g, O) | |
| if (w1.status === 'error') return V.reject(m, w1.value) | |
| var b = w1.value | |
| if (b) z(m, b) | |
| else { | |
| ;(m.state = X), (m.outcome = O) | |
| var x1 = -1, | |
| r1 = m.queue.length | |
| while (++x1 < r1) m.queue[x1].callFulfilled(O) | |
| } | |
| return m | |
| }), | |
| (V.reject = function (m, O) { | |
| ;(m.state = A), (m.outcome = O) | |
| var w1 = -1, | |
| b = m.queue.length | |
| while (++w1 < b) m.queue[w1].callRejected(O) | |
| return m | |
| }) | |
| function g(m) { | |
| var O = m && m.then | |
| if ( | |
| m && | |
| (typeof m === 'object' || typeof m === 'function') && | |
| typeof O === 'function' | |
| ) | |
| return function w1() { | |
| O.apply(m, arguments) | |
| } | |
| } | |
| function z(m, O) { | |
| var w1 = !1 | |
| function b(F1) { | |
| if (w1) return | |
| ;(w1 = !0), V.reject(m, F1) | |
| } | |
| function x1(F1) { | |
| if (w1) return | |
| ;(w1 = !0), V.resolve(m, F1) | |
| } | |
| function r1() { | |
| O(x1, b) | |
| } | |
| var $1 = f(r1) | |
| if ($1.status === 'error') b($1.value) | |
| } | |
| function f(m, O) { | |
| var w1 = {} | |
| try { | |
| ;(w1.value = m(O)), (w1.status = 'success') | |
| } catch (b) { | |
| ;(w1.status = 'error'), (w1.value = b) | |
| } | |
| return w1 | |
| } | |
| H.resolve = S | |
| function S(m) { | |
| if (m instanceof this) return m | |
| return V.resolve(new this(C), m) | |
| } | |
| H.reject = $ | |
| function $(m) { | |
| var O = new this(C) | |
| return V.reject(O, m) | |
| } | |
| H.all = L | |
| function L(m) { | |
| var O = this | |
| if (Object.prototype.toString.call(m) !== '[object Array]') | |
| return this.reject(new TypeError('must be an array')) | |
| var w1 = m.length, | |
| b = !1 | |
| if (!w1) return this.resolve([]) | |
| var x1 = new Array(w1), | |
| r1 = 0, | |
| $1 = -1, | |
| F1 = new this(C) | |
| while (++$1 < w1) n(m[$1], $1) | |
| return F1 | |
| function n(C1, u1) { | |
| O.resolve(C1).then(T1, function (e1) { | |
| if (!b) (b = !0), V.reject(F1, e1) | |
| }) | |
| function T1(e1) { | |
| if (((x1[u1] = e1), ++r1 === w1 && !b)) (b = !0), V.resolve(F1, x1) | |
| } | |
| } | |
| } | |
| H.race = T | |
| function T(m) { | |
| var O = this | |
| if (Object.prototype.toString.call(m) !== '[object Array]') | |
| return this.reject(new TypeError('must be an array')) | |
| var w1 = m.length, | |
| b = !1 | |
| if (!w1) return this.resolve([]) | |
| var x1 = -1, | |
| r1 = new this(C) | |
| while (++x1 < w1) $1(m[x1]) | |
| return r1 | |
| function $1(F1) { | |
| O.resolve(F1).then( | |
| function (n) { | |
| if (!b) (b = !0), V.resolve(r1, n) | |
| }, | |
| function (n) { | |
| if (!b) (b = !0), V.reject(r1, n) | |
| }, | |
| ) | |
| } | |
| } | |
| }, | |
| { 1: 1 }, | |
| ], | |
| 3: [ | |
| function (d, W, w) { | |
| ;(function (B) { | |
| if (typeof B.Promise !== 'function') B.Promise = d(2) | |
| }).call( | |
| this, | |
| typeof global !== 'undefined' | |
| ? global | |
| : typeof self !== 'undefined' | |
| ? self | |
| : typeof window !== 'undefined' | |
| ? window | |
| : {}, | |
| ) | |
| }, | |
| { 2: 2 }, | |
| ], | |
| 4: [ | |
| function (d, W, w) { | |
| var B = | |
| typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' | |
| ? function (j) { | |
| return typeof j | |
| } | |
| : function (j) { | |
| return j && | |
| typeof Symbol === 'function' && | |
| j.constructor === Symbol && | |
| j !== Symbol.prototype | |
| ? 'symbol' | |
| : typeof j | |
| } | |
| function C(j, D1) { | |
| if (!(j instanceof D1)) throw new TypeError('Cannot call a class as a function') | |
| } | |
| function V() { | |
| 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 (j) { | |
| return | |
| } | |
| } | |
| var A = V() | |
| function X() { | |
| try { | |
| if (!A || !A.open) return !1 | |
| var j = | |
| typeof openDatabase !== 'undefined' && | |
| /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && | |
| !/Chrome/.test(navigator.userAgent) && | |
| !/BlackBerry/.test(navigator.platform), | |
| D1 = | |
| typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1 | |
| return ( | |
| (!j || D1) && | |
| typeof indexedDB !== 'undefined' && | |
| typeof IDBKeyRange !== 'undefined' | |
| ) | |
| } catch (I1) { | |
| return !1 | |
| } | |
| } | |
| function Y(j, D1) { | |
| ;(j = j || []), (D1 = D1 || {}) | |
| try { | |
| return new Blob(j, D1) | |
| } catch (v1) { | |
| if (v1.name !== 'TypeError') throw v1 | |
| var I1 = | |
| typeof BlobBuilder !== 'undefined' | |
| ? BlobBuilder | |
| : typeof MSBlobBuilder !== 'undefined' | |
| ? MSBlobBuilder | |
| : typeof MozBlobBuilder !== 'undefined' | |
| ? MozBlobBuilder | |
| : WebKitBlobBuilder, | |
| E1 = new I1() | |
| for (var y1 = 0; y1 < j.length; y1 += 1) E1.append(j[y1]) | |
| return E1.getBlob(D1.type) | |
| } | |
| } | |
| if (typeof Promise === 'undefined') d(3) | |
| var H = Promise | |
| function J(j, D1) { | |
| if (D1) | |
| j.then( | |
| function (I1) { | |
| D1(null, I1) | |
| }, | |
| function (I1) { | |
| D1(I1) | |
| }, | |
| ) | |
| } | |
| function K(j, D1, I1) { | |
| if (typeof D1 === 'function') j.then(D1) | |
| if (typeof I1 === 'function') j.catch(I1) | |
| } | |
| function g(j) { | |
| if (typeof j !== 'string') | |
| console.warn(j + ' used as a key, but it is not a string.'), (j = String(j)) | |
| return j | |
| } | |
| function z() { | |
| if (arguments.length && typeof arguments[arguments.length - 1] === 'function') | |
| return arguments[arguments.length - 1] | |
| } | |
| var f = 'local-forage-detect-blob-support', | |
| S = void 0, | |
| $ = {}, | |
| L = Object.prototype.toString, | |
| T = 'readonly', | |
| m = 'readwrite' | |
| function O(j) { | |
| var D1 = j.length, | |
| I1 = new ArrayBuffer(D1), | |
| E1 = new Uint8Array(I1) | |
| for (var y1 = 0; y1 < D1; y1++) E1[y1] = j.charCodeAt(y1) | |
| return I1 | |
| } | |
| function w1(j) { | |
| return new H(function (D1) { | |
| var I1 = j.transaction(f, m), | |
| E1 = Y(['']) | |
| I1.objectStore(f).put(E1, 'key'), | |
| (I1.onabort = function (y1) { | |
| y1.preventDefault(), y1.stopPropagation(), D1(!1) | |
| }), | |
| (I1.oncomplete = function () { | |
| var y1 = navigator.userAgent.match(/Chrome\/(\d+)/), | |
| v1 = navigator.userAgent.match(/Edge\//) | |
| D1(v1 || !y1 || parseInt(y1[1], 10) >= 43) | |
| }) | |
| }).catch(function () { | |
| return !1 | |
| }) | |
| } | |
| function b(j) { | |
| if (typeof S === 'boolean') return H.resolve(S) | |
| return w1(j).then(function (D1) { | |
| return (S = D1), S | |
| }) | |
| } | |
| function x1(j) { | |
| var D1 = $[j.name], | |
| I1 = {} | |
| if ( | |
| ((I1.promise = new H(function (E1, y1) { | |
| ;(I1.resolve = E1), (I1.reject = y1) | |
| })), | |
| D1.deferredOperations.push(I1), | |
| !D1.dbReady) | |
| ) | |
| D1.dbReady = I1.promise | |
| else | |
| D1.dbReady = D1.dbReady.then(function () { | |
| return I1.promise | |
| }) | |
| } | |
| function r1(j) { | |
| var D1 = $[j.name], | |
| I1 = D1.deferredOperations.pop() | |
| if (I1) return I1.resolve(), I1.promise | |
| } | |
| function $1(j, D1) { | |
| var I1 = $[j.name], | |
| E1 = I1.deferredOperations.pop() | |
| if (E1) return E1.reject(D1), E1.promise | |
| } | |
| function F1(j, D1) { | |
| return new H(function (I1, E1) { | |
| if ((($[j.name] = $[j.name] || e()), j.db)) | |
| if (D1) x1(j), j.db.close() | |
| else return I1(j.db) | |
| var y1 = [j.name] | |
| if (D1) y1.push(j.version) | |
| var v1 = A.open.apply(A, y1) | |
| if (D1) | |
| v1.onupgradeneeded = function (d0) { | |
| var Q0 = v1.result | |
| try { | |
| if ((Q0.createObjectStore(j.storeName), d0.oldVersion <= 1)) | |
| Q0.createObjectStore(f) | |
| } catch (N0) { | |
| if (N0.name === 'ConstraintError') | |
| console.warn( | |
| 'The database "' + | |
| j.name + | |
| '" has been upgraded from version ' + | |
| d0.oldVersion + | |
| ' to version ' + | |
| d0.newVersion + | |
| ', but the storage "' + | |
| j.storeName + | |
| '" already exists.', | |
| ) | |
| else throw N0 | |
| } | |
| } | |
| ;(v1.onerror = function (d0) { | |
| d0.preventDefault(), E1(v1.error) | |
| }), | |
| (v1.onsuccess = function () { | |
| var d0 = v1.result | |
| ;(d0.onversionchange = function (Q0) { | |
| Q0.target.close() | |
| }), | |
| I1(d0), | |
| r1(j) | |
| }) | |
| }) | |
| } | |
| function n(j) { | |
| return F1(j, !1) | |
| } | |
| function C1(j) { | |
| return F1(j, !0) | |
| } | |
| function u1(j, D1) { | |
| if (!j.db) return !0 | |
| var I1 = !j.db.objectStoreNames.contains(j.storeName), | |
| E1 = j.version < j.db.version, | |
| y1 = j.version > j.db.version | |
| if (E1) { | |
| if (j.version !== D1) | |
| console.warn( | |
| 'The database "' + | |
| j.name + | |
| `" can't be downgraded from version ` + | |
| j.db.version + | |
| ' to version ' + | |
| j.version + | |
| '.', | |
| ) | |
| j.version = j.db.version | |
| } | |
| if (y1 || I1) { | |
| if (I1) { | |
| var v1 = j.db.version + 1 | |
| if (v1 > j.version) j.version = v1 | |
| } | |
| return !0 | |
| } | |
| return !1 | |
| } | |
| function T1(j) { | |
| return new H(function (D1, I1) { | |
| var E1 = new FileReader() | |
| ;(E1.onerror = I1), | |
| (E1.onloadend = function (y1) { | |
| var v1 = btoa(y1.target.result || '') | |
| D1({ __local_forage_encoded_blob: !0, data: v1, type: j.type }) | |
| }), | |
| E1.readAsBinaryString(j) | |
| }) | |
| } | |
| function e1(j) { | |
| var D1 = O(atob(j.data)) | |
| return Y([D1], { type: j.type }) | |
| } | |
| function Y0(j) { | |
| return j && j.__local_forage_encoded_blob | |
| } | |
| function v0(j) { | |
| var D1 = this, | |
| I1 = D1._initReady().then(function () { | |
| var E1 = $[D1._dbInfo.name] | |
| if (E1 && E1.dbReady) return E1.dbReady | |
| }) | |
| return K(I1, j, j), I1 | |
| } | |
| function V0(j) { | |
| x1(j) | |
| var D1 = $[j.name], | |
| I1 = D1.forages | |
| for (var E1 = 0; E1 < I1.length; E1++) { | |
| var y1 = I1[E1] | |
| if (y1._dbInfo.db) y1._dbInfo.db.close(), (y1._dbInfo.db = null) | |
| } | |
| return ( | |
| (j.db = null), | |
| n(j) | |
| .then(function (v1) { | |
| if (((j.db = v1), u1(j))) return C1(j) | |
| return v1 | |
| }) | |
| .then(function (v1) { | |
| j.db = D1.db = v1 | |
| for (var d0 = 0; d0 < I1.length; d0++) I1[d0]._dbInfo.db = v1 | |
| }) | |
| .catch(function (v1) { | |
| throw ($1(j, v1), v1) | |
| }) | |
| ) | |
| } | |
| function r0(j, D1, I1, E1) { | |
| if (E1 === void 0) E1 = 1 | |
| try { | |
| var y1 = j.db.transaction(j.storeName, D1) | |
| I1(null, y1) | |
| } catch (v1) { | |
| if ( | |
| E1 > 0 && | |
| (!j.db || v1.name === 'InvalidStateError' || v1.name === 'NotFoundError') | |
| ) | |
| return H.resolve() | |
| .then(function () { | |
| if ( | |
| !j.db || | |
| (v1.name === 'NotFoundError' && | |
| !j.db.objectStoreNames.contains(j.storeName) && | |
| j.version <= j.db.version) | |
| ) { | |
| if (j.db) j.version = j.db.version + 1 | |
| return C1(j) | |
| } | |
| }) | |
| .then(function () { | |
| return V0(j).then(function () { | |
| r0(j, D1, I1, E1 - 1) | |
| }) | |
| }) | |
| .catch(I1) | |
| I1(v1) | |
| } | |
| } | |
| function e() { | |
| return { forages: [], db: null, dbReady: null, deferredOperations: [] } | |
| } | |
| function Z0(j) { | |
| var D1 = this, | |
| I1 = { db: null } | |
| if (j) for (var E1 in j) I1[E1] = j[E1] | |
| var y1 = $[I1.name] | |
| if (!y1) (y1 = e()), ($[I1.name] = y1) | |
| if ((y1.forages.push(D1), !D1._initReady)) (D1._initReady = D1.ready), (D1.ready = v0) | |
| var v1 = [] | |
| function d0() { | |
| return H.resolve() | |
| } | |
| for (var Q0 = 0; Q0 < y1.forages.length; Q0++) { | |
| var N0 = y1.forages[Q0] | |
| if (N0 !== D1) v1.push(N0._initReady().catch(d0)) | |
| } | |
| var u0 = y1.forages.slice(0) | |
| return H.all(v1) | |
| .then(function () { | |
| return (I1.db = y1.db), n(I1) | |
| }) | |
| .then(function (x0) { | |
| if (((I1.db = x0), u1(I1, D1._defaultConfig.version))) return C1(I1) | |
| return x0 | |
| }) | |
| .then(function (x0) { | |
| ;(I1.db = y1.db = x0), (D1._dbInfo = I1) | |
| for (var J2 = 0; J2 < u0.length; J2++) { | |
| var K4 = u0[J2] | |
| if (K4 !== D1) (K4._dbInfo.db = I1.db), (K4._dbInfo.version = I1.version) | |
| } | |
| }) | |
| } | |
| function K1(j, D1) { | |
| var I1 = this | |
| j = g(j) | |
| var E1 = new H(function (y1, v1) { | |
| I1.ready() | |
| .then(function () { | |
| r0(I1._dbInfo, T, function (d0, Q0) { | |
| if (d0) return v1(d0) | |
| try { | |
| var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
| u0 = N0.get(j) | |
| ;(u0.onsuccess = function () { | |
| var x0 = u0.result | |
| if (x0 === void 0) x0 = null | |
| if (Y0(x0)) x0 = e1(x0) | |
| y1(x0) | |
| }), | |
| (u0.onerror = function () { | |
| v1(u0.error) | |
| }) | |
| } catch (x0) { | |
| v1(x0) | |
| } | |
| }) | |
| }) | |
| .catch(v1) | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function k1(j, D1) { | |
| var I1 = this, | |
| E1 = new H(function (y1, v1) { | |
| I1.ready() | |
| .then(function () { | |
| r0(I1._dbInfo, T, function (d0, Q0) { | |
| if (d0) return v1(d0) | |
| try { | |
| var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
| u0 = N0.openCursor(), | |
| x0 = 1 | |
| ;(u0.onsuccess = function () { | |
| var J2 = u0.result | |
| if (J2) { | |
| var K4 = J2.value | |
| if (Y0(K4)) K4 = e1(K4) | |
| var a4 = j(K4, J2.key, x0++) | |
| if (a4 !== void 0) y1(a4) | |
| else J2.continue() | |
| } else y1() | |
| }), | |
| (u0.onerror = function () { | |
| v1(u0.error) | |
| }) | |
| } catch (J2) { | |
| v1(J2) | |
| } | |
| }) | |
| }) | |
| .catch(v1) | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function n1(j, D1, I1) { | |
| var E1 = this | |
| j = g(j) | |
| var y1 = new H(function (v1, d0) { | |
| var Q0 | |
| E1.ready() | |
| .then(function () { | |
| if (((Q0 = E1._dbInfo), L.call(D1) === '[object Blob]')) | |
| return b(Q0.db).then(function (N0) { | |
| if (N0) return D1 | |
| return T1(D1) | |
| }) | |
| return D1 | |
| }) | |
| .then(function (N0) { | |
| r0(E1._dbInfo, m, function (u0, x0) { | |
| if (u0) return d0(u0) | |
| try { | |
| var J2 = x0.objectStore(E1._dbInfo.storeName) | |
| if (N0 === null) N0 = void 0 | |
| var K4 = J2.put(N0, j) | |
| ;(x0.oncomplete = function () { | |
| if (N0 === void 0) N0 = null | |
| v1(N0) | |
| }), | |
| (x0.onabort = x0.onerror = | |
| function () { | |
| var a4 = K4.error ? K4.error : K4.transaction.error | |
| d0(a4) | |
| }) | |
| } catch (a4) { | |
| d0(a4) | |
| } | |
| }) | |
| }) | |
| .catch(d0) | |
| }) | |
| return J(y1, I1), y1 | |
| } | |
| function S0(j, D1) { | |
| var I1 = this | |
| j = g(j) | |
| var E1 = new H(function (y1, v1) { | |
| I1.ready() | |
| .then(function () { | |
| r0(I1._dbInfo, m, function (d0, Q0) { | |
| if (d0) return v1(d0) | |
| try { | |
| var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
| u0 = N0.delete(j) | |
| ;(Q0.oncomplete = function () { | |
| y1() | |
| }), | |
| (Q0.onerror = function () { | |
| v1(u0.error) | |
| }), | |
| (Q0.onabort = function () { | |
| var x0 = u0.error ? u0.error : u0.transaction.error | |
| v1(x0) | |
| }) | |
| } catch (x0) { | |
| v1(x0) | |
| } | |
| }) | |
| }) | |
| .catch(v1) | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function h(j) { | |
| var D1 = this, | |
| I1 = new H(function (E1, y1) { | |
| D1.ready() | |
| .then(function () { | |
| r0(D1._dbInfo, m, function (v1, d0) { | |
| if (v1) return y1(v1) | |
| try { | |
| var Q0 = d0.objectStore(D1._dbInfo.storeName), | |
| N0 = Q0.clear() | |
| ;(d0.oncomplete = function () { | |
| E1() | |
| }), | |
| (d0.onabort = d0.onerror = | |
| function () { | |
| var u0 = N0.error ? N0.error : N0.transaction.error | |
| y1(u0) | |
| }) | |
| } catch (u0) { | |
| y1(u0) | |
| } | |
| }) | |
| }) | |
| .catch(y1) | |
| }) | |
| return J(I1, j), I1 | |
| } | |
| function r(j) { | |
| var D1 = this, | |
| I1 = new H(function (E1, y1) { | |
| D1.ready() | |
| .then(function () { | |
| r0(D1._dbInfo, T, function (v1, d0) { | |
| if (v1) return y1(v1) | |
| try { | |
| var Q0 = d0.objectStore(D1._dbInfo.storeName), | |
| N0 = Q0.count() | |
| ;(N0.onsuccess = function () { | |
| E1(N0.result) | |
| }), | |
| (N0.onerror = function () { | |
| y1(N0.error) | |
| }) | |
| } catch (u0) { | |
| y1(u0) | |
| } | |
| }) | |
| }) | |
| .catch(y1) | |
| }) | |
| return J(I1, j), I1 | |
| } | |
| function d1(j, D1) { | |
| var I1 = this, | |
| E1 = new H(function (y1, v1) { | |
| if (j < 0) { | |
| y1(null) | |
| return | |
| } | |
| I1.ready() | |
| .then(function () { | |
| r0(I1._dbInfo, T, function (d0, Q0) { | |
| if (d0) return v1(d0) | |
| try { | |
| var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
| u0 = !1, | |
| x0 = N0.openKeyCursor() | |
| ;(x0.onsuccess = function () { | |
| var J2 = x0.result | |
| if (!J2) { | |
| y1(null) | |
| return | |
| } | |
| if (j === 0) y1(J2.key) | |
| else if (!u0) (u0 = !0), J2.advance(j) | |
| else y1(J2.key) | |
| }), | |
| (x0.onerror = function () { | |
| v1(x0.error) | |
| }) | |
| } catch (J2) { | |
| v1(J2) | |
| } | |
| }) | |
| }) | |
| .catch(v1) | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function U1(j) { | |
| var D1 = this, | |
| I1 = new H(function (E1, y1) { | |
| D1.ready() | |
| .then(function () { | |
| r0(D1._dbInfo, T, function (v1, d0) { | |
| if (v1) return y1(v1) | |
| try { | |
| var Q0 = d0.objectStore(D1._dbInfo.storeName), | |
| N0 = Q0.openKeyCursor(), | |
| u0 = [] | |
| ;(N0.onsuccess = function () { | |
| var x0 = N0.result | |
| if (!x0) { | |
| E1(u0) | |
| return | |
| } | |
| u0.push(x0.key), x0.continue() | |
| }), | |
| (N0.onerror = function () { | |
| y1(N0.error) | |
| }) | |
| } catch (x0) { | |
| y1(x0) | |
| } | |
| }) | |
| }) | |
| .catch(y1) | |
| }) | |
| return J(I1, j), I1 | |
| } | |
| function Q1(j, D1) { | |
| D1 = z.apply(this, arguments) | |
| var I1 = this.config() | |
| if (((j = (typeof j !== 'function' && j) || {}), !j.name)) | |
| (j.name = j.name || I1.name), (j.storeName = j.storeName || I1.storeName) | |
| var E1 = this, | |
| y1 | |
| if (!j.name) y1 = H.reject('Invalid arguments') | |
| else { | |
| var v1 = j.name === I1.name && E1._dbInfo.db, | |
| d0 = v1 | |
| ? H.resolve(E1._dbInfo.db) | |
| : n(j).then(function (Q0) { | |
| var N0 = $[j.name], | |
| u0 = N0.forages | |
| N0.db = Q0 | |
| for (var x0 = 0; x0 < u0.length; x0++) u0[x0]._dbInfo.db = Q0 | |
| return Q0 | |
| }) | |
| if (!j.storeName) | |
| y1 = d0.then(function (Q0) { | |
| x1(j) | |
| var N0 = $[j.name], | |
| u0 = N0.forages | |
| Q0.close() | |
| for (var x0 = 0; x0 < u0.length; x0++) { | |
| var J2 = u0[x0] | |
| J2._dbInfo.db = null | |
| } | |
| var K4 = new H(function (a4, r4) { | |
| var w9 = A.deleteDatabase(j.name) | |
| ;(w9.onerror = function () { | |
| var l9 = w9.result | |
| if (l9) l9.close() | |
| r4(w9.error) | |
| }), | |
| (w9.onblocked = function () { | |
| console.warn( | |
| 'dropInstance blocked for database "' + | |
| j.name + | |
| '" until all open connections are closed', | |
| ) | |
| }), | |
| (w9.onsuccess = function () { | |
| var l9 = w9.result | |
| if (l9) l9.close() | |
| a4(l9) | |
| }) | |
| }) | |
| return K4.then(function (a4) { | |
| N0.db = a4 | |
| for (var r4 = 0; r4 < u0.length; r4++) { | |
| var w9 = u0[r4] | |
| r1(w9._dbInfo) | |
| } | |
| }).catch(function (a4) { | |
| throw (($1(j, a4) || H.resolve()).catch(function () {}), a4) | |
| }) | |
| }) | |
| else | |
| y1 = d0.then(function (Q0) { | |
| if (!Q0.objectStoreNames.contains(j.storeName)) return | |
| var N0 = Q0.version + 1 | |
| x1(j) | |
| var u0 = $[j.name], | |
| x0 = u0.forages | |
| Q0.close() | |
| for (var J2 = 0; J2 < x0.length; J2++) { | |
| var K4 = x0[J2] | |
| ;(K4._dbInfo.db = null), (K4._dbInfo.version = N0) | |
| } | |
| var a4 = new H(function (r4, w9) { | |
| var l9 = A.open(j.name, N0) | |
| ;(l9.onerror = function (Z8) { | |
| var SG = l9.result | |
| SG.close(), w9(Z8) | |
| }), | |
| (l9.onupgradeneeded = function () { | |
| var Z8 = l9.result | |
| Z8.deleteObjectStore(j.storeName) | |
| }), | |
| (l9.onsuccess = function () { | |
| var Z8 = l9.result | |
| Z8.close(), r4(Z8) | |
| }) | |
| }) | |
| return a4 | |
| .then(function (r4) { | |
| u0.db = r4 | |
| for (var w9 = 0; w9 < x0.length; w9++) { | |
| var l9 = x0[w9] | |
| ;(l9._dbInfo.db = r4), r1(l9._dbInfo) | |
| } | |
| }) | |
| .catch(function (r4) { | |
| throw (($1(j, r4) || H.resolve()).catch(function () {}), r4) | |
| }) | |
| }) | |
| } | |
| return J(y1, D1), y1 | |
| } | |
| var J1 = { | |
| _driver: 'asyncStorage', | |
| _initStorage: Z0, | |
| _support: X(), | |
| iterate: k1, | |
| getItem: K1, | |
| setItem: n1, | |
| removeItem: S0, | |
| clear: h, | |
| length: r, | |
| key: d1, | |
| keys: U1, | |
| dropInstance: Q1, | |
| } | |
| function m1() { | |
| return typeof openDatabase === 'function' | |
| } | |
| var N1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', | |
| R1 = '~~local_forage_type~', | |
| j1 = /^~~local_forage_type~([^~]+)~/, | |
| c = '__lfsc__:', | |
| B1 = c.length, | |
| o1 = 'arbf', | |
| z1 = 'blob', | |
| E0 = 'si08', | |
| g0 = 'ui08', | |
| k0 = 'uic8', | |
| n0 = 'si16', | |
| s0 = 'si32', | |
| T2 = 'ur16', | |
| N9 = 'ui32', | |
| h0 = 'fl32', | |
| w2 = 'fl64', | |
| V2 = B1 + o1.length, | |
| A4 = Object.prototype.toString | |
| function X4(j) { | |
| var D1 = j.length * 0.75, | |
| I1 = j.length, | |
| E1, | |
| y1 = 0, | |
| v1, | |
| d0, | |
| Q0, | |
| N0 | |
| if (j[j.length - 1] === '=') { | |
| if ((D1--, j[j.length - 2] === '=')) D1-- | |
| } | |
| var u0 = new ArrayBuffer(D1), | |
| x0 = new Uint8Array(u0) | |
| for (E1 = 0; E1 < I1; E1 += 4) | |
| (v1 = N1.indexOf(j[E1])), | |
| (d0 = N1.indexOf(j[E1 + 1])), | |
| (Q0 = N1.indexOf(j[E1 + 2])), | |
| (N0 = N1.indexOf(j[E1 + 3])), | |
| (x0[y1++] = (v1 << 2) | (d0 >> 4)), | |
| (x0[y1++] = ((d0 & 15) << 4) | (Q0 >> 2)), | |
| (x0[y1++] = ((Q0 & 3) << 6) | (N0 & 63)) | |
| return u0 | |
| } | |
| function H5(j) { | |
| var D1 = new Uint8Array(j), | |
| I1 = '', | |
| E1 | |
| for (E1 = 0; E1 < D1.length; E1 += 3) | |
| (I1 += N1[D1[E1] >> 2]), | |
| (I1 += N1[((D1[E1] & 3) << 4) | (D1[E1 + 1] >> 4)]), | |
| (I1 += N1[((D1[E1 + 1] & 15) << 2) | (D1[E1 + 2] >> 6)]), | |
| (I1 += N1[D1[E1 + 2] & 63]) | |
| if (D1.length % 3 === 2) I1 = I1.substring(0, I1.length - 1) + '=' | |
| else if (D1.length % 3 === 1) I1 = I1.substring(0, I1.length - 2) + '==' | |
| return I1 | |
| } | |
| function F5(j, D1) { | |
| var I1 = '' | |
| if (j) I1 = A4.call(j) | |
| if ( | |
| j && | |
| (I1 === '[object ArrayBuffer]' || | |
| (j.buffer && A4.call(j.buffer) === '[object ArrayBuffer]')) | |
| ) { | |
| var E1, | |
| y1 = c | |
| if (j instanceof ArrayBuffer) (E1 = j), (y1 += o1) | |
| else if (((E1 = j.buffer), I1 === '[object Int8Array]')) y1 += E0 | |
| else if (I1 === '[object Uint8Array]') y1 += g0 | |
| else if (I1 === '[object Uint8ClampedArray]') y1 += k0 | |
| else if (I1 === '[object Int16Array]') y1 += n0 | |
| else if (I1 === '[object Uint16Array]') y1 += T2 | |
| else if (I1 === '[object Int32Array]') y1 += s0 | |
| else if (I1 === '[object Uint32Array]') y1 += N9 | |
| else if (I1 === '[object Float32Array]') y1 += h0 | |
| else if (I1 === '[object Float64Array]') y1 += w2 | |
| else D1(new Error('Failed to get type for BinaryArray')) | |
| D1(y1 + H5(E1)) | |
| } else if (I1 === '[object Blob]') { | |
| var v1 = new FileReader() | |
| ;(v1.onload = function () { | |
| var d0 = R1 + j.type + '~' + H5(this.result) | |
| D1(c + z1 + d0) | |
| }), | |
| v1.readAsArrayBuffer(j) | |
| } else | |
| try { | |
| D1(JSON.stringify(j)) | |
| } catch (d0) { | |
| console.error("Couldn't convert value into a JSON string: ", j), D1(null, d0) | |
| } | |
| } | |
| function wW(j) { | |
| if (j.substring(0, B1) !== c) return JSON.parse(j) | |
| var D1 = j.substring(V2), | |
| I1 = j.substring(B1, V2), | |
| E1 | |
| if (I1 === z1 && j1.test(D1)) { | |
| var y1 = D1.match(j1) | |
| ;(E1 = y1[1]), (D1 = D1.substring(y1[0].length)) | |
| } | |
| var v1 = X4(D1) | |
| switch (I1) { | |
| case o1: | |
| return v1 | |
| case z1: | |
| return Y([v1], { type: E1 }) | |
| case E0: | |
| return new Int8Array(v1) | |
| case g0: | |
| return new Uint8Array(v1) | |
| case k0: | |
| return new Uint8ClampedArray(v1) | |
| case n0: | |
| return new Int16Array(v1) | |
| case T2: | |
| return new Uint16Array(v1) | |
| case s0: | |
| return new Int32Array(v1) | |
| case N9: | |
| return new Uint32Array(v1) | |
| case h0: | |
| return new Float32Array(v1) | |
| case w2: | |
| return new Float64Array(v1) | |
| default: | |
| throw new Error('Unkown type: ' + I1) | |
| } | |
| } | |
| var b6 = { serialize: F5, deserialize: wW, stringToBuffer: X4, bufferToString: H5 } | |
| function ZV(j, D1, I1, E1) { | |
| j.executeSql( | |
| 'CREATE TABLE IF NOT EXISTS ' + | |
| D1.storeName + | |
| ' (id INTEGER PRIMARY KEY, key unique, value)', | |
| [], | |
| I1, | |
| E1, | |
| ) | |
| } | |
| function dV(j) { | |
| var D1 = this, | |
| I1 = { db: null } | |
| if (j) for (var E1 in j) I1[E1] = typeof j[E1] !== 'string' ? j[E1].toString() : j[E1] | |
| var y1 = new H(function (v1, d0) { | |
| try { | |
| I1.db = openDatabase(I1.name, String(I1.version), I1.description, I1.size) | |
| } catch (Q0) { | |
| return d0(Q0) | |
| } | |
| I1.db.transaction(function (Q0) { | |
| ZV( | |
| Q0, | |
| I1, | |
| function () { | |
| ;(D1._dbInfo = I1), v1() | |
| }, | |
| function (N0, u0) { | |
| d0(u0) | |
| }, | |
| ) | |
| }, d0) | |
| }) | |
| return (I1.serializer = b6), y1 | |
| } | |
| function H3(j, D1, I1, E1, y1, v1) { | |
| j.executeSql( | |
| I1, | |
| E1, | |
| y1, | |
| function (d0, Q0) { | |
| if (Q0.code === Q0.SYNTAX_ERR) | |
| d0.executeSql( | |
| "SELECT name FROM sqlite_master WHERE type='table' AND name = ?", | |
| [D1.storeName], | |
| function (N0, u0) { | |
| if (!u0.rows.length) | |
| ZV( | |
| N0, | |
| D1, | |
| function () { | |
| N0.executeSql(I1, E1, y1, v1) | |
| }, | |
| v1, | |
| ) | |
| else v1(N0, Q0) | |
| }, | |
| v1, | |
| ) | |
| else v1(d0, Q0) | |
| }, | |
| v1, | |
| ) | |
| } | |
| function qG(j, D1) { | |
| var I1 = this | |
| j = g(j) | |
| var E1 = new H(function (y1, v1) { | |
| I1.ready() | |
| .then(function () { | |
| var d0 = I1._dbInfo | |
| d0.db.transaction(function (Q0) { | |
| H3( | |
| Q0, | |
| d0, | |
| 'SELECT * FROM ' + d0.storeName + ' WHERE key = ? LIMIT 1', | |
| [j], | |
| function (N0, u0) { | |
| var x0 = u0.rows.length ? u0.rows.item(0).value : null | |
| if (x0) x0 = d0.serializer.deserialize(x0) | |
| y1(x0) | |
| }, | |
| function (N0, u0) { | |
| v1(u0) | |
| }, | |
| ) | |
| }) | |
| }) | |
| .catch(v1) | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function BW(j, D1) { | |
| var I1 = this, | |
| E1 = new H(function (y1, v1) { | |
| I1.ready() | |
| .then(function () { | |
| var d0 = I1._dbInfo | |
| d0.db.transaction(function (Q0) { | |
| H3( | |
| Q0, | |
| d0, | |
| 'SELECT * FROM ' + d0.storeName, | |
| [], | |
| function (N0, u0) { | |
| var x0 = u0.rows, | |
| J2 = x0.length | |
| for (var K4 = 0; K4 < J2; K4++) { | |
| var a4 = x0.item(K4), | |
| r4 = a4.value | |
| if (r4) r4 = d0.serializer.deserialize(r4) | |
| if (((r4 = j(r4, a4.key, K4 + 1)), r4 !== void 0)) { | |
| y1(r4) | |
| return | |
| } | |
| } | |
| y1() | |
| }, | |
| function (N0, u0) { | |
| v1(u0) | |
| }, | |
| ) | |
| }) | |
| }) | |
| .catch(v1) | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function F3(j, D1, I1, E1) { | |
| var y1 = this | |
| j = g(j) | |
| var v1 = new H(function (d0, Q0) { | |
| y1.ready() | |
| .then(function () { | |
| if (D1 === void 0) D1 = null | |
| var N0 = D1, | |
| u0 = y1._dbInfo | |
| u0.serializer.serialize(D1, function (x0, J2) { | |
| if (J2) Q0(J2) | |
| else | |
| u0.db.transaction( | |
| function (K4) { | |
| H3( | |
| K4, | |
| u0, | |
| 'INSERT OR REPLACE INTO ' + | |
| u0.storeName + | |
| ' (key, value) VALUES (?, ?)', | |
| [j, x0], | |
| function () { | |
| d0(N0) | |
| }, | |
| function (a4, r4) { | |
| Q0(r4) | |
| }, | |
| ) | |
| }, | |
| function (K4) { | |
| if (K4.code === K4.QUOTA_ERR) { | |
| if (E1 > 0) { | |
| d0(F3.apply(y1, [j, N0, I1, E1 - 1])) | |
| return | |
| } | |
| Q0(K4) | |
| } | |
| }, | |
| ) | |
| }) | |
| }) | |
| .catch(Q0) | |
| }) | |
| return J(v1, I1), v1 | |
| } | |
| function UG(j, D1, I1) { | |
| return F3.apply(this, [j, D1, I1, 1]) | |
| } | |
| function fG(j, D1) { | |
| var I1 = this | |
| j = g(j) | |
| var E1 = new H(function (y1, v1) { | |
| I1.ready() | |
| .then(function () { | |
| var d0 = I1._dbInfo | |
| d0.db.transaction(function (Q0) { | |
| H3( | |
| Q0, | |
| d0, | |
| 'DELETE FROM ' + d0.storeName + ' WHERE key = ?', | |
| [j], | |
| function () { | |
| y1() | |
| }, | |
| function (N0, u0) { | |
| v1(u0) | |
| }, | |
| ) | |
| }) | |
| }) | |
| .catch(v1) | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function MZ(j) { | |
| var D1 = this, | |
| I1 = new H(function (E1, y1) { | |
| D1.ready() | |
| .then(function () { | |
| var v1 = D1._dbInfo | |
| v1.db.transaction(function (d0) { | |
| H3( | |
| d0, | |
| v1, | |
| 'DELETE FROM ' + v1.storeName, | |
| [], | |
| function () { | |
| E1() | |
| }, | |
| function (Q0, N0) { | |
| y1(N0) | |
| }, | |
| ) | |
| }) | |
| }) | |
| .catch(y1) | |
| }) | |
| return J(I1, j), I1 | |
| } | |
| function SZ(j) { | |
| var D1 = this, | |
| I1 = new H(function (E1, y1) { | |
| D1.ready() | |
| .then(function () { | |
| var v1 = D1._dbInfo | |
| v1.db.transaction(function (d0) { | |
| H3( | |
| d0, | |
| v1, | |
| 'SELECT COUNT(key) as c FROM ' + v1.storeName, | |
| [], | |
| function (Q0, N0) { | |
| var u0 = N0.rows.item(0).c | |
| E1(u0) | |
| }, | |
| function (Q0, N0) { | |
| y1(N0) | |
| }, | |
| ) | |
| }) | |
| }) | |
| .catch(y1) | |
| }) | |
| return J(I1, j), I1 | |
| } | |
| function H7(j, D1) { | |
| var I1 = this, | |
| E1 = new H(function (y1, v1) { | |
| I1.ready() | |
| .then(function () { | |
| var d0 = I1._dbInfo | |
| d0.db.transaction(function (Q0) { | |
| H3( | |
| Q0, | |
| d0, | |
| 'SELECT key FROM ' + d0.storeName + ' WHERE id = ? LIMIT 1', | |
| [j + 1], | |
| function (N0, u0) { | |
| var x0 = u0.rows.length ? u0.rows.item(0).key : null | |
| y1(x0) | |
| }, | |
| function (N0, u0) { | |
| v1(u0) | |
| }, | |
| ) | |
| }) | |
| }) | |
| .catch(v1) | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function LI(j) { | |
| var D1 = this, | |
| I1 = new H(function (E1, y1) { | |
| D1.ready() | |
| .then(function () { | |
| var v1 = D1._dbInfo | |
| v1.db.transaction(function (d0) { | |
| H3( | |
| d0, | |
| v1, | |
| 'SELECT key FROM ' + v1.storeName, | |
| [], | |
| function (Q0, N0) { | |
| var u0 = [] | |
| for (var x0 = 0; x0 < N0.rows.length; x0++) | |
| u0.push(N0.rows.item(x0).key) | |
| E1(u0) | |
| }, | |
| function (Q0, N0) { | |
| y1(N0) | |
| }, | |
| ) | |
| }) | |
| }) | |
| .catch(y1) | |
| }) | |
| return J(I1, j), I1 | |
| } | |
| function e7(j) { | |
| return new H(function (D1, I1) { | |
| j.transaction( | |
| function (E1) { | |
| E1.executeSql( | |
| "SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'", | |
| [], | |
| function (y1, v1) { | |
| var d0 = [] | |
| for (var Q0 = 0; Q0 < v1.rows.length; Q0++) d0.push(v1.rows.item(Q0).name) | |
| D1({ db: j, storeNames: d0 }) | |
| }, | |
| function (y1, v1) { | |
| I1(v1) | |
| }, | |
| ) | |
| }, | |
| function (E1) { | |
| I1(E1) | |
| }, | |
| ) | |
| }) | |
| } | |
| function RG(j, D1) { | |
| D1 = z.apply(this, arguments) | |
| var I1 = this.config() | |
| if (((j = (typeof j !== 'function' && j) || {}), !j.name)) | |
| (j.name = j.name || I1.name), (j.storeName = j.storeName || I1.storeName) | |
| var E1 = this, | |
| y1 | |
| if (!j.name) y1 = H.reject('Invalid arguments') | |
| else | |
| y1 = new H(function (v1) { | |
| var d0 | |
| if (j.name === I1.name) d0 = E1._dbInfo.db | |
| else d0 = openDatabase(j.name, '', '', 0) | |
| if (!j.storeName) v1(e7(d0)) | |
| else v1({ db: d0, storeNames: [j.storeName] }) | |
| }).then(function (v1) { | |
| return new H(function (d0, Q0) { | |
| v1.db.transaction( | |
| function (N0) { | |
| function u0(a4) { | |
| return new H(function (r4, w9) { | |
| N0.executeSql( | |
| 'DROP TABLE IF EXISTS ' + a4, | |
| [], | |
| function () { | |
| r4() | |
| }, | |
| function (l9, Z8) { | |
| w9(Z8) | |
| }, | |
| ) | |
| }) | |
| } | |
| var x0 = [] | |
| for (var J2 = 0, K4 = v1.storeNames.length; J2 < K4; J2++) | |
| x0.push(u0(v1.storeNames[J2])) | |
| H.all(x0) | |
| .then(function () { | |
| d0() | |
| }) | |
| .catch(function (a4) { | |
| Q0(a4) | |
| }) | |
| }, | |
| function (N0) { | |
| Q0(N0) | |
| }, | |
| ) | |
| }) | |
| }) | |
| return J(y1, D1), y1 | |
| } | |
| var F7 = { | |
| _driver: 'webSQLStorage', | |
| _initStorage: dV, | |
| _support: m1(), | |
| iterate: BW, | |
| getItem: qG, | |
| setItem: UG, | |
| removeItem: fG, | |
| clear: MZ, | |
| length: SZ, | |
| key: H7, | |
| keys: LI, | |
| dropInstance: RG, | |
| } | |
| function WV() { | |
| try { | |
| return ( | |
| typeof localStorage !== 'undefined' && | |
| 'setItem' in localStorage && | |
| !!localStorage.setItem | |
| ) | |
| } catch (j) { | |
| return !1 | |
| } | |
| } | |
| function EG(j, D1) { | |
| var I1 = j.name + '/' | |
| if (j.storeName !== D1.storeName) I1 += j.storeName + '/' | |
| return I1 | |
| } | |
| function wV() { | |
| var j = '_localforage_support_test' | |
| try { | |
| return localStorage.setItem(j, !0), localStorage.removeItem(j), !1 | |
| } catch (D1) { | |
| return !0 | |
| } | |
| } | |
| function jw() { | |
| return !wV() || localStorage.length > 0 | |
| } | |
| function kw(j) { | |
| var D1 = this, | |
| I1 = {} | |
| if (j) for (var E1 in j) I1[E1] = j[E1] | |
| if (((I1.keyPrefix = EG(j, D1._defaultConfig)), !jw())) return H.reject() | |
| return (D1._dbInfo = I1), (I1.serializer = b6), H.resolve() | |
| } | |
| function $8(j) { | |
| var D1 = this, | |
| I1 = D1.ready().then(function () { | |
| var E1 = D1._dbInfo.keyPrefix | |
| for (var y1 = localStorage.length - 1; y1 >= 0; y1--) { | |
| var v1 = localStorage.key(y1) | |
| if (v1.indexOf(E1) === 0) localStorage.removeItem(v1) | |
| } | |
| }) | |
| return J(I1, j), I1 | |
| } | |
| function LZ(j, D1) { | |
| var I1 = this | |
| j = g(j) | |
| var E1 = I1.ready().then(function () { | |
| var y1 = I1._dbInfo, | |
| v1 = localStorage.getItem(y1.keyPrefix + j) | |
| if (v1) v1 = y1.serializer.deserialize(v1) | |
| return v1 | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function BV(j, D1) { | |
| var I1 = this, | |
| E1 = I1.ready().then(function () { | |
| var y1 = I1._dbInfo, | |
| v1 = y1.keyPrefix, | |
| d0 = v1.length, | |
| Q0 = localStorage.length, | |
| N0 = 1 | |
| for (var u0 = 0; u0 < Q0; u0++) { | |
| var x0 = localStorage.key(u0) | |
| if (x0.indexOf(v1) !== 0) continue | |
| var J2 = localStorage.getItem(x0) | |
| if (J2) J2 = y1.serializer.deserialize(J2) | |
| if (((J2 = j(J2, x0.substring(d0), N0++)), J2 !== void 0)) return J2 | |
| } | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function hw(j, D1) { | |
| var I1 = this, | |
| E1 = I1.ready().then(function () { | |
| var y1 = I1._dbInfo, | |
| v1 | |
| try { | |
| v1 = localStorage.key(j) | |
| } catch (d0) { | |
| v1 = null | |
| } | |
| if (v1) v1 = v1.substring(y1.keyPrefix.length) | |
| return v1 | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function vG(j) { | |
| var D1 = this, | |
| I1 = D1.ready().then(function () { | |
| var E1 = D1._dbInfo, | |
| y1 = localStorage.length, | |
| v1 = [] | |
| for (var d0 = 0; d0 < y1; d0++) { | |
| var Q0 = localStorage.key(d0) | |
| if (Q0.indexOf(E1.keyPrefix) === 0) v1.push(Q0.substring(E1.keyPrefix.length)) | |
| } | |
| return v1 | |
| }) | |
| return J(I1, j), I1 | |
| } | |
| function CV(j) { | |
| var D1 = this, | |
| I1 = D1.keys().then(function (E1) { | |
| return E1.length | |
| }) | |
| return J(I1, j), I1 | |
| } | |
| function xw(j, D1) { | |
| var I1 = this | |
| j = g(j) | |
| var E1 = I1.ready().then(function () { | |
| var y1 = I1._dbInfo | |
| localStorage.removeItem(y1.keyPrefix + j) | |
| }) | |
| return J(E1, D1), E1 | |
| } | |
| function MG(j, D1, I1) { | |
| var E1 = this | |
| j = g(j) | |
| var y1 = E1.ready().then(function () { | |
| if (D1 === void 0) D1 = null | |
| var v1 = D1 | |
| return new H(function (d0, Q0) { | |
| var N0 = E1._dbInfo | |
| N0.serializer.serialize(D1, function (u0, x0) { | |
| if (x0) Q0(x0) | |
| else | |
| try { | |
| localStorage.setItem(N0.keyPrefix + j, u0), d0(v1) | |
| } catch (J2) { | |
| if ( | |
| J2.name === 'QuotaExceededError' || | |
| J2.name === 'NS_ERROR_DOM_QUOTA_REACHED' | |
| ) | |
| Q0(J2) | |
| Q0(J2) | |
| } | |
| }) | |
| }) | |
| }) | |
| return J(y1, I1), y1 | |
| } | |
| function J7(j, D1) { | |
| if ( | |
| ((D1 = z.apply(this, arguments)), | |
| (j = (typeof j !== 'function' && j) || {}), | |
| !j.name) | |
| ) { | |
| var I1 = this.config() | |
| ;(j.name = j.name || I1.name), (j.storeName = j.storeName || I1.storeName) | |
| } | |
| var E1 = this, | |
| y1 | |
| if (!j.name) y1 = H.reject('Invalid arguments') | |
| else | |
| y1 = new H(function (v1) { | |
| if (!j.storeName) v1(j.name + '/') | |
| else v1(EG(j, E1._defaultConfig)) | |
| }).then(function (v1) { | |
| for (var d0 = localStorage.length - 1; d0 >= 0; d0--) { | |
| var Q0 = localStorage.key(d0) | |
| if (Q0.indexOf(v1) === 0) localStorage.removeItem(Q0) | |
| } | |
| }) | |
| return J(y1, D1), y1 | |
| } | |
| var cw = { | |
| _driver: 'localStorageWrapper', | |
| _initStorage: kw, | |
| _support: WV(), | |
| iterate: BV, | |
| getItem: LZ, | |
| setItem: MG, | |
| removeItem: xw, | |
| clear: $8, | |
| length: CV, | |
| key: hw, | |
| keys: vG, | |
| dropInstance: J7, | |
| }, | |
| G1 = function j(D1, I1) { | |
| return ( | |
| D1 === I1 || | |
| (typeof D1 === 'number' && typeof I1 === 'number' && isNaN(D1) && isNaN(I1)) | |
| ) | |
| }, | |
| o = function j(D1, I1) { | |
| var E1 = D1.length, | |
| y1 = 0 | |
| while (y1 < E1) { | |
| if (G1(D1[y1], I1)) return !0 | |
| y1++ | |
| } | |
| return !1 | |
| }, | |
| L1 = | |
| Array.isArray || | |
| function (j) { | |
| return Object.prototype.toString.call(j) === '[object Array]' | |
| }, | |
| i1 = {}, | |
| b1 = {}, | |
| t1 = { INDEXEDDB: J1, WEBSQL: F7, LOCALSTORAGE: cw }, | |
| R0 = [t1.INDEXEDDB._driver, t1.WEBSQL._driver, t1.LOCALSTORAGE._driver], | |
| B0 = ['dropInstance'], | |
| J0 = [ | |
| 'clear', | |
| 'getItem', | |
| 'iterate', | |
| 'key', | |
| 'keys', | |
| 'length', | |
| 'removeItem', | |
| 'setItem', | |
| ].concat(B0), | |
| w0 = { | |
| description: '', | |
| driver: R0.slice(), | |
| name: 'localforage', | |
| size: 4980736, | |
| storeName: 'keyvaluepairs', | |
| version: 1, | |
| } | |
| function F0(j, D1) { | |
| j[D1] = function () { | |
| var I1 = arguments | |
| return j.ready().then(function () { | |
| return j[D1].apply(j, I1) | |
| }) | |
| } | |
| } | |
| function c2() { | |
| for (var j = 1; j < arguments.length; j++) { | |
| var D1 = arguments[j] | |
| if (D1) { | |
| for (var I1 in D1) | |
| if (D1.hasOwnProperty(I1)) | |
| if (L1(D1[I1])) arguments[0][I1] = D1[I1].slice() | |
| else arguments[0][I1] = D1[I1] | |
| } | |
| } | |
| return arguments[0] | |
| } | |
| var L2 = (function () { | |
| function j(D1) { | |
| C(this, j) | |
| for (var I1 in t1) | |
| if (t1.hasOwnProperty(I1)) { | |
| var E1 = t1[I1], | |
| y1 = E1._driver | |
| if (((this[I1] = y1), !i1[y1])) this.defineDriver(E1) | |
| } | |
| ;(this._defaultConfig = c2({}, w0)), | |
| (this._config = c2({}, this._defaultConfig, D1)), | |
| (this._driverSet = null), | |
| (this._initDriver = null), | |
| (this._ready = !1), | |
| (this._dbInfo = null), | |
| this._wrapLibraryMethodsWithReady(), | |
| this.setDriver(this._config.driver).catch(function () {}) | |
| } | |
| return ( | |
| (j.prototype.config = function D1(I1) { | |
| if ((typeof I1 === 'undefined' ? 'undefined' : B(I1)) === 'object') { | |
| if (this._ready) | |
| return new Error("Can't call config() after localforage has been used.") | |
| for (var E1 in I1) { | |
| if (E1 === 'storeName') I1[E1] = I1[E1].replace(/\W/g, '_') | |
| if (E1 === 'version' && typeof I1[E1] !== 'number') | |
| return new Error('Database version must be a number.') | |
| this._config[E1] = I1[E1] | |
| } | |
| 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 | |
| }), | |
| (j.prototype.defineDriver = function D1(I1, E1, y1) { | |
| var v1 = new H(function (d0, Q0) { | |
| try { | |
| var N0 = I1._driver, | |
| u0 = new Error( | |
| 'Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver', | |
| ) | |
| if (!I1._driver) { | |
| Q0(u0) | |
| return | |
| } | |
| var x0 = J0.concat('_initStorage') | |
| for (var J2 = 0, K4 = x0.length; J2 < K4; J2++) { | |
| var a4 = x0[J2], | |
| r4 = !o(B0, a4) | |
| if ((r4 || I1[a4]) && typeof I1[a4] !== 'function') { | |
| Q0(u0) | |
| return | |
| } | |
| } | |
| var w9 = function Z8() { | |
| var SG = function kg(LG) { | |
| return function () { | |
| var m4 = new Error( | |
| 'Method ' + LG + ' is not implemented by the current driver', | |
| ), | |
| VV = H.reject(m4) | |
| return J(VV, arguments[arguments.length - 1]), VV | |
| } | |
| } | |
| for (var CW = 0, hX = B0.length; CW < hX; CW++) { | |
| var $Z = B0[CW] | |
| if (!I1[$Z]) I1[$Z] = SG($Z) | |
| } | |
| } | |
| w9() | |
| var l9 = function Z8(SG) { | |
| if (i1[N0]) console.info('Redefining LocalForage driver: ' + N0) | |
| ;(i1[N0] = I1), (b1[N0] = SG), d0() | |
| } | |
| if ('_support' in I1) | |
| if (I1._support && typeof I1._support === 'function') | |
| I1._support().then(l9, Q0) | |
| else l9(!!I1._support) | |
| else l9(!0) | |
| } catch (Z8) { | |
| Q0(Z8) | |
| } | |
| }) | |
| return K(v1, E1, y1), v1 | |
| }), | |
| (j.prototype.driver = function D1() { | |
| return this._driver || null | |
| }), | |
| (j.prototype.getDriver = function D1(I1, E1, y1) { | |
| var v1 = i1[I1] ? H.resolve(i1[I1]) : H.reject(new Error('Driver not found.')) | |
| return K(v1, E1, y1), v1 | |
| }), | |
| (j.prototype.getSerializer = function D1(I1) { | |
| var E1 = H.resolve(b6) | |
| return K(E1, I1), E1 | |
| }), | |
| (j.prototype.ready = function D1(I1) { | |
| var E1 = this, | |
| y1 = E1._driverSet.then(function () { | |
| if (E1._ready === null) E1._ready = E1._initDriver() | |
| return E1._ready | |
| }) | |
| return K(y1, I1, I1), y1 | |
| }), | |
| (j.prototype.setDriver = function D1(I1, E1, y1) { | |
| var v1 = this | |
| if (!L1(I1)) I1 = [I1] | |
| var d0 = this._getSupportedDrivers(I1) | |
| function Q0() { | |
| v1._config.driver = v1.driver() | |
| } | |
| function N0(J2) { | |
| return ( | |
| v1._extend(J2), Q0(), (v1._ready = v1._initStorage(v1._config)), v1._ready | |
| ) | |
| } | |
| function u0(J2) { | |
| return function () { | |
| var K4 = 0 | |
| function a4() { | |
| while (K4 < J2.length) { | |
| var r4 = J2[K4] | |
| return ( | |
| K4++, | |
| (v1._dbInfo = null), | |
| (v1._ready = null), | |
| v1.getDriver(r4).then(N0).catch(a4) | |
| ) | |
| } | |
| Q0() | |
| var w9 = new Error('No available storage method found.') | |
| return (v1._driverSet = H.reject(w9)), v1._driverSet | |
| } | |
| return a4() | |
| } | |
| } | |
| var x0 = | |
| this._driverSet !== null | |
| ? this._driverSet.catch(function () { | |
| return H.resolve() | |
| }) | |
| : H.resolve() | |
| return ( | |
| (this._driverSet = x0 | |
| .then(function () { | |
| var J2 = d0[0] | |
| return ( | |
| (v1._dbInfo = null), | |
| (v1._ready = null), | |
| v1.getDriver(J2).then(function (K4) { | |
| ;(v1._driver = K4._driver), | |
| Q0(), | |
| v1._wrapLibraryMethodsWithReady(), | |
| (v1._initDriver = u0(d0)) | |
| }) | |
| ) | |
| }) | |
| .catch(function () { | |
| Q0() | |
| var J2 = new Error('No available storage method found.') | |
| return (v1._driverSet = H.reject(J2)), v1._driverSet | |
| })), | |
| K(this._driverSet, E1, y1), | |
| this._driverSet | |
| ) | |
| }), | |
| (j.prototype.supports = function D1(I1) { | |
| return !!b1[I1] | |
| }), | |
| (j.prototype._extend = function D1(I1) { | |
| c2(this, I1) | |
| }), | |
| (j.prototype._getSupportedDrivers = function D1(I1) { | |
| var E1 = [] | |
| for (var y1 = 0, v1 = I1.length; y1 < v1; y1++) { | |
| var d0 = I1[y1] | |
| if (this.supports(d0)) E1.push(d0) | |
| } | |
| return E1 | |
| }), | |
| (j.prototype._wrapLibraryMethodsWithReady = function D1() { | |
| for (var I1 = 0, E1 = J0.length; I1 < E1; I1++) F0(this, J0[I1]) | |
| }), | |
| (j.prototype.createInstance = function D1(I1) { | |
| return new j(I1) | |
| }), | |
| j | |
| ) | |
| })(), | |
| q2 = new L2() | |
| W.exports = q2 | |
| }, | |
| { 3: 3 }, | |
| ], | |
| }, | |
| {}, | |
| [4], | |
| )(4) | |
| }) | |
| }) | |
| var Py1 = _((yy1) => { | |
| Object.defineProperty(yy1, '__esModule', { value: !0 }) | |
| var RB = X0(), | |
| q94 = $y1(), | |
| ZJ = kv(), | |
| KY = RB.GLOBAL_OBJ | |
| class hv { | |
| static __initStatic() { | |
| this.id = 'Offline' | |
| } | |
| constructor(I = {}) { | |
| ;(this.name = hv.id), | |
| (this.maxStoredEvents = I.maxStoredEvents || 30), | |
| (this.offlineEventStore = q94.createInstance({ name: 'sentry/offlineEventStore' })) | |
| } | |
| setupOnce(I, G) { | |
| if (((this.hub = G()), 'addEventListener' in KY)) | |
| KY.addEventListener('online', () => { | |
| this._sendEvents().catch(() => { | |
| ZJ.DEBUG_BUILD && RB.logger.warn('could not send cached events') | |
| }) | |
| }) | |
| let Z = (d) => { | |
| if (this.hub && this.hub.getIntegration(hv)) { | |
| if ('navigator' in KY && 'onLine' in KY.navigator && !KY.navigator.onLine) | |
| return ( | |
| ZJ.DEBUG_BUILD && | |
| RB.logger.log('Event dropped due to being a offline - caching instead'), | |
| this._cacheEvent(d) | |
| .then((W) => this._enforceMaxEvents()) | |
| .catch((W) => { | |
| ZJ.DEBUG_BUILD && RB.logger.warn('could not cache event while offline') | |
| }), | |
| null | |
| ) | |
| } | |
| return d | |
| } | |
| if ( | |
| ((Z.id = this.name), | |
| I(Z), | |
| 'navigator' in KY && 'onLine' in KY.navigator && KY.navigator.onLine) | |
| ) | |
| this._sendEvents().catch(() => { | |
| ZJ.DEBUG_BUILD && RB.logger.warn('could not send cached events') | |
| }) | |
| } | |
| async _cacheEvent(I) { | |
| return this.offlineEventStore.setItem(RB.uuid4(), RB.normalize(I)) | |
| } | |
| async _enforceMaxEvents() { | |
| let I = [] | |
| return this.offlineEventStore | |
| .iterate((G, Z, d) => { | |
| I.push({ cacheKey: Z, event: G }) | |
| }) | |
| .then(() => | |
| this._purgeEvents( | |
| I.sort((G, Z) => (Z.event.timestamp || 0) - (G.event.timestamp || 0)) | |
| .slice(this.maxStoredEvents < I.length ? this.maxStoredEvents : I.length) | |
| .map((G) => G.cacheKey), | |
| ), | |
| ) | |
| .catch((G) => { | |
| ZJ.DEBUG_BUILD && RB.logger.warn('could not enforce max events') | |
| }) | |
| } | |
| async _purgeEvent(I) { | |
| return this.offlineEventStore.removeItem(I) | |
| } | |
| async _purgeEvents(I) { | |
| return Promise.all(I.map((G) => this._purgeEvent(G))).then() | |
| } | |
| async _sendEvents() { | |
| return this.offlineEventStore.iterate((I, G, Z) => { | |
| if (this.hub) | |
| this.hub.captureEvent(I), | |
| this._purgeEvent(G).catch((d) => { | |
| ZJ.DEBUG_BUILD && RB.logger.warn('could not purge event from cache') | |
| }) | |
| else ZJ.DEBUG_BUILD && RB.logger.warn('no hub found - could not send cached event') | |
| }) | |
| } | |
| } | |
| hv.__initStatic() | |
| yy1.Offline = hv | |
| }) | |
| var ly1 = _((by1) => { | |
| Object.defineProperty(by1, '__esModule', { value: !0 }) | |
| var xv = Y4(), | |
| uy1 = X0(), | |
| f94 = uy1.GLOBAL_OBJ, | |
| Ty1 = 'ReportingObserver', | |
| Oy1 = new WeakMap(), | |
| R94 = (I = {}) => { | |
| let G = I.types || ['crash', 'deprecation', 'intervention'] | |
| function Z(d) { | |
| if (!Oy1.has(xv.getClient())) return | |
| for (let W of d) | |
| xv.withScope((w) => { | |
| w.setExtra('url', W.url) | |
| let B = `ReportingObserver [${W.type}]`, | |
| C = 'No details available' | |
| if (W.body) { | |
| let V = {} | |
| for (let A in W.body) V[A] = W.body[A] | |
| if ((w.setExtra('body', V), W.type === 'crash')) { | |
| let A = W.body | |
| C = [A.crashId || '', A.reason || ''].join(' ').trim() || C | |
| } else C = W.body.message || C | |
| } | |
| xv.captureMessage(`${B}: ${C}`) | |
| }) | |
| } | |
| return { | |
| name: Ty1, | |
| setupOnce() { | |
| if (!uy1.supportsReportingObserver()) return | |
| new f94.ReportingObserver(Z, { buffered: !0, types: G }).observe() | |
| }, | |
| setup(d) { | |
| Oy1.set(d, !0) | |
| }, | |
| } | |
| }, | |
| my1 = xv.defineIntegration(R94), | |
| E94 = xv.convertIntegrationFnToClass(Ty1, my1) | |
| by1.ReportingObserver = E94 | |
| by1.reportingObserverIntegration = my1 | |
| }) | |
| var py1 = _((cy1) => { | |
| Object.defineProperty(cy1, '__esModule', { value: !0 }) | |
| var ky1 = Y4(), | |
| jy1 = X0(), | |
| hy1 = 'RewriteFrames', | |
| S94 = (I = {}) => { | |
| let G = I.root, | |
| Z = I.prefix || 'app:///', | |
| d = | |
| I.iteratee || | |
| ((B) => { | |
| if (!B.filename) return B | |
| let C = | |
| /^[a-zA-Z]:\\/.test(B.filename) || | |
| (B.filename.includes('\\') && !B.filename.includes('/')), | |
| V = /^\//.test(B.filename) | |
| if (C || V) { | |
| let A = C ? B.filename.replace(/^[a-zA-Z]:/, '').replace(/\\/g, '/') : B.filename, | |
| X = G ? jy1.relative(G, A) : jy1.basename(A) | |
| B.filename = `${Z}${X}` | |
| } | |
| return B | |
| }) | |
| function W(B) { | |
| try { | |
| return { | |
| ...B, | |
| exception: { | |
| ...B.exception, | |
| values: B.exception.values.map((C) => ({ | |
| ...C, | |
| ...(C.stacktrace && { stacktrace: w(C.stacktrace) }), | |
| })), | |
| }, | |
| } | |
| } catch (C) { | |
| return B | |
| } | |
| } | |
| function w(B) { | |
| return { ...B, frames: B && B.frames && B.frames.map((C) => d(C)) } | |
| } | |
| return { | |
| name: hy1, | |
| setupOnce() {}, | |
| processEvent(B) { | |
| let C = B | |
| if (B.exception && Array.isArray(B.exception.values)) C = W(C) | |
| return C | |
| }, | |
| } | |
| }, | |
| xy1 = ky1.defineIntegration(S94), | |
| L94 = ky1.convertIntegrationFnToClass(hy1, xy1) | |
| cy1.RewriteFrames = L94 | |
| cy1.rewriteFramesIntegration = xy1 | |
| }) | |
| var sy1 = _((ry1) => { | |
| Object.defineProperty(ry1, '__esModule', { value: !0 }) | |
| var iy1 = Y4(), | |
| ny1 = 'SessionTiming', | |
| P94 = () => { | |
| let I = Date.now() | |
| return { | |
| name: ny1, | |
| setupOnce() {}, | |
| processEvent(G) { | |
| let Z = Date.now() | |
| return { | |
| ...G, | |
| extra: { | |
| ...G.extra, | |
| ['session:start']: I, | |
| ['session:duration']: Z - I, | |
| ['session:end']: Z, | |
| }, | |
| } | |
| }, | |
| } | |
| }, | |
| ay1 = iy1.defineIntegration(P94), | |
| O94 = iy1.convertIntegrationFnToClass(ny1, ay1) | |
| ry1.SessionTiming = O94 | |
| ry1.sessionTimingIntegration = ay1 | |
| }) | |
| var ty1 = _((ey1) => { | |
| Object.defineProperty(ey1, '__esModule', { value: !0 }) | |
| var m94 = Y4(), | |
| oy1 = 'Transaction', | |
| b94 = () => { | |
| return { | |
| name: oy1, | |
| setupOnce() {}, | |
| processEvent(I) { | |
| let G = j94(I) | |
| for (let Z = G.length - 1; Z >= 0; Z--) { | |
| let d = G[Z] | |
| if (d.in_app === !0) { | |
| I.transaction = k94(d) | |
| break | |
| } | |
| } | |
| return I | |
| }, | |
| } | |
| }, | |
| l94 = m94.convertIntegrationFnToClass(oy1, b94) | |
| function j94(I) { | |
| let G = I.exception && I.exception.values && I.exception.values[0] | |
| return (G && G.stacktrace && G.stacktrace.frames) || [] | |
| } | |
| function k94(I) { | |
| return I.module || I.function ? `${I.module || '?'}/${I.function || '?'}` : '<unknown>' | |
| } | |
| ey1.Transaction = l94 | |
| }) | |
| var CP1 = _((BP1) => { | |
| Object.defineProperty(BP1, '__esModule', { value: !0 }) | |
| var pV = Y4(), | |
| EB = X0(), | |
| Ob = kv(), | |
| IP1 = 'HttpClient', | |
| x94 = (I = {}) => { | |
| let G = { failedRequestStatusCodes: [[500, 599]], failedRequestTargets: [/.*/], ...I } | |
| return { | |
| name: IP1, | |
| setupOnce() {}, | |
| setup(Z) { | |
| e94(Z, G), t94(Z, G) | |
| }, | |
| } | |
| }, | |
| GP1 = pV.defineIntegration(x94), | |
| c94 = pV.convertIntegrationFnToClass(IP1, GP1) | |
| function p94(I, G, Z, d) { | |
| if (dP1(I, Z.status, Z.url)) { | |
| let W = I34(G, d), | |
| w, | |
| B, | |
| C, | |
| V | |
| if (wP1()) | |
| [{ headers: w, cookies: C }, { headers: B, cookies: V }] = [ | |
| { cookieHeader: 'Cookie', obj: W }, | |
| { cookieHeader: 'Set-Cookie', obj: Z }, | |
| ].map(({ cookieHeader: X, obj: Y }) => { | |
| let H = a94(Y.headers), | |
| J | |
| try { | |
| let K = H[X] || H[X.toLowerCase()] || void 0 | |
| if (K) J = ZP1(K) | |
| } catch (K) { | |
| Ob.DEBUG_BUILD && EB.logger.log(`Could not extract cookies from header ${X}`) | |
| } | |
| return { headers: H, cookies: J } | |
| }) | |
| let A = WP1({ | |
| url: W.url, | |
| method: W.method, | |
| status: Z.status, | |
| requestHeaders: w, | |
| responseHeaders: B, | |
| requestCookies: C, | |
| responseCookies: V, | |
| }) | |
| pV.captureEvent(A) | |
| } | |
| } | |
| function i94(I, G, Z, d) { | |
| if (dP1(I, G.status, G.responseURL)) { | |
| let W, w, B | |
| if (wP1()) { | |
| try { | |
| let V = G.getResponseHeader('Set-Cookie') || G.getResponseHeader('set-cookie') || void 0 | |
| if (V) w = ZP1(V) | |
| } catch (V) { | |
| Ob.DEBUG_BUILD && EB.logger.log('Could not extract cookies from response headers') | |
| } | |
| try { | |
| B = r94(G) | |
| } catch (V) { | |
| Ob.DEBUG_BUILD && EB.logger.log('Could not extract headers from response') | |
| } | |
| W = d | |
| } | |
| let C = WP1({ | |
| url: G.responseURL, | |
| method: Z, | |
| status: G.status, | |
| requestHeaders: W, | |
| responseHeaders: B, | |
| responseCookies: w, | |
| }) | |
| pV.captureEvent(C) | |
| } | |
| } | |
| function n94(I) { | |
| if (I) { | |
| let G = I['Content-Length'] || I['content-length'] | |
| if (G) return parseInt(G, 10) | |
| } | |
| return | |
| } | |
| function ZP1(I) { | |
| return I.split('; ').reduce((G, Z) => { | |
| let [d, W] = Z.split('=') | |
| return (G[d] = W), G | |
| }, {}) | |
| } | |
| function a94(I) { | |
| let G = {} | |
| return ( | |
| I.forEach((Z, d) => { | |
| G[d] = Z | |
| }), | |
| G | |
| ) | |
| } | |
| function r94(I) { | |
| let G = I.getAllResponseHeaders() | |
| if (!G) return {} | |
| return G.split( | |
| `\r | |
| `, | |
| ).reduce((Z, d) => { | |
| let [W, w] = d.split(': ') | |
| return (Z[W] = w), Z | |
| }, {}) | |
| } | |
| function s94(I, G) { | |
| return I.some((Z) => { | |
| if (typeof Z === 'string') return G.includes(Z) | |
| return Z.test(G) | |
| }) | |
| } | |
| function o94(I, G) { | |
| return I.some((Z) => { | |
| if (typeof Z === 'number') return Z === G | |
| return G >= Z[0] && G <= Z[1] | |
| }) | |
| } | |
| function e94(I, G) { | |
| if (!EB.supportsNativeFetch()) return | |
| EB.addFetchInstrumentationHandler((Z) => { | |
| if (pV.getClient() !== I) return | |
| let { response: d, args: W } = Z, | |
| [w, B] = W | |
| if (!d) return | |
| p94(G, w, d, B) | |
| }) | |
| } | |
| function t94(I, G) { | |
| if (!('XMLHttpRequest' in EB.GLOBAL_OBJ)) return | |
| EB.addXhrInstrumentationHandler((Z) => { | |
| if (pV.getClient() !== I) return | |
| let d = Z.xhr, | |
| W = d[EB.SENTRY_XHR_DATA_KEY] | |
| if (!W) return | |
| let { method: w, request_headers: B } = W | |
| try { | |
| i94(G, d, w, B) | |
| } catch (C) { | |
| Ob.DEBUG_BUILD && | |
| EB.logger.warn('Error while extracting response event form XHR response', C) | |
| } | |
| }) | |
| } | |
| function dP1(I, G, Z) { | |
| return ( | |
| o94(I.failedRequestStatusCodes, G) && | |
| s94(I.failedRequestTargets, Z) && | |
| !pV.isSentryRequestUrl(Z, pV.getClient()) | |
| ) | |
| } | |
| function WP1(I) { | |
| let G = `HTTP Client Error with status code: ${I.status}`, | |
| Z = { | |
| message: G, | |
| exception: { values: [{ type: 'Error', value: G }] }, | |
| 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: n94(I.responseHeaders), | |
| }, | |
| }, | |
| } | |
| return EB.addExceptionMechanism(Z, { type: 'http.client', handled: !1 }), Z | |
| } | |
| function I34(I, G) { | |
| if (!G && I instanceof Request) return I | |
| if (I instanceof Request && I.bodyUsed) return I | |
| return new Request(I, G) | |
| } | |
| function wP1() { | |
| let I = pV.getClient() | |
| return I ? Boolean(I.getOptions().sendDefaultPii) : !1 | |
| } | |
| BP1.HttpClient = c94 | |
| BP1.httpClientIntegration = GP1 | |
| }) | |
| var DP1 = _((_P1) => { | |
| Object.defineProperty(_P1, '__esModule', { value: !0 }) | |
| var VP1 = Y4(), | |
| y21 = X0(), | |
| $21 = y21.GLOBAL_OBJ, | |
| d34 = 7, | |
| AP1 = 'ContextLines', | |
| W34 = (I = {}) => { | |
| let G = I.frameContextLines != null ? I.frameContextLines : d34 | |
| return { | |
| name: AP1, | |
| setupOnce() {}, | |
| processEvent(Z) { | |
| return B34(Z, G) | |
| }, | |
| } | |
| }, | |
| XP1 = VP1.defineIntegration(W34), | |
| w34 = VP1.convertIntegrationFnToClass(AP1, XP1) | |
| function B34(I, G) { | |
| let Z = $21.document, | |
| d = $21.location && y21.stripUrlQueryAndFragment($21.location.href) | |
| if (!Z || !d) return I | |
| let W = I.exception && I.exception.values | |
| if (!W || !W.length) return I | |
| let w = Z.documentElement.innerHTML | |
| if (!w) return I | |
| let B = [ | |
| '<!DOCTYPE html>', | |
| '<html>', | |
| ...w.split(` | |
| `), | |
| '</html>', | |
| ] | |
| return ( | |
| W.forEach((C) => { | |
| let V = C.stacktrace | |
| if (V && V.frames) V.frames = V.frames.map((A) => YP1(A, B, d, G)) | |
| }), | |
| I | |
| ) | |
| } | |
| function YP1(I, G, Z, d) { | |
| if (I.filename !== Z || !I.lineno || !G.length) return I | |
| return y21.addContextToFrame(G, I, d), I | |
| } | |
| _P1.ContextLines = w34 | |
| _P1.applySourceContextToFrame = YP1 | |
| _P1.contextLinesIntegration = XP1 | |
| }) | |
| var fP1 = _((UP1) => { | |
| Object.defineProperty(UP1, '__esModule', { value: !0 }) | |
| var HP1 = Vy1(), | |
| FP1 = Dy1(), | |
| JP1 = fy1(), | |
| KP1 = Sy1(), | |
| X34 = Py1(), | |
| gP1 = ly1(), | |
| NP1 = py1(), | |
| zP1 = sy1(), | |
| Y34 = ty1(), | |
| QP1 = CP1(), | |
| qP1 = DP1() | |
| UP1.CaptureConsole = HP1.CaptureConsole | |
| UP1.captureConsoleIntegration = HP1.captureConsoleIntegration | |
| UP1.Debug = FP1.Debug | |
| UP1.debugIntegration = FP1.debugIntegration | |
| UP1.Dedupe = JP1.Dedupe | |
| UP1.dedupeIntegration = JP1.dedupeIntegration | |
| UP1.ExtraErrorData = KP1.ExtraErrorData | |
| UP1.extraErrorDataIntegration = KP1.extraErrorDataIntegration | |
| UP1.Offline = X34.Offline | |
| UP1.ReportingObserver = gP1.ReportingObserver | |
| UP1.reportingObserverIntegration = gP1.reportingObserverIntegration | |
| UP1.RewriteFrames = NP1.RewriteFrames | |
| UP1.rewriteFramesIntegration = NP1.rewriteFramesIntegration | |
| UP1.SessionTiming = zP1.SessionTiming | |
| UP1.sessionTimingIntegration = zP1.sessionTimingIntegration | |
| UP1.Transaction = Y34.Transaction | |
| UP1.HttpClient = QP1.HttpClient | |
| UP1.httpClientIntegration = QP1.httpClientIntegration | |
| UP1.ContextLines = qP1.ContextLines | |
| UP1.contextLinesIntegration = qP1.contextLinesIntegration | |
| }) | |
| var ub = _((RP1) => { | |
| Object.defineProperty(RP1, '__esModule', { value: !0 }) | |
| var y34 = [ | |
| ['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 P34(I) { | |
| return y34.reduce((G, [Z, d]) => G.replace(new RegExp(Z, 'gi'), d), I) | |
| } | |
| RP1.replaceCronNames = P34 | |
| }) | |
| var LP1 = _((SP1) => { | |
| Object.defineProperty(SP1, '__esModule', { value: !0 }) | |
| var EP1 = Y4(), | |
| vP1 = ub(), | |
| MP1 = 'Automatic instrumentation of CronJob only supports crontab string' | |
| function u34(I, G) { | |
| let Z = !1 | |
| return new Proxy(I, { | |
| construct(d, W) { | |
| let [w, B, C, V, A, ...X] = W | |
| if (typeof w !== 'string') throw new Error(MP1) | |
| if (Z) throw new Error(`A job named '${G}' has already been scheduled`) | |
| Z = !0 | |
| let Y = vP1.replaceCronNames(w) | |
| function H(J, K) { | |
| return EP1.withMonitor( | |
| G, | |
| () => { | |
| return B(J, K) | |
| }, | |
| { schedule: { type: 'crontab', value: Y }, timezone: A || void 0 }, | |
| ) | |
| } | |
| return new d(w, H, C, V, A, ...X) | |
| }, | |
| get(d, W) { | |
| if (W === 'from') | |
| return (w) => { | |
| let { cronTime: B, onTick: C, timeZone: V } = w | |
| if (typeof B !== 'string') throw new Error(MP1) | |
| if (Z) throw new Error(`A job named '${G}' has already been scheduled`) | |
| Z = !0 | |
| let A = vP1.replaceCronNames(B) | |
| return ( | |
| (w.onTick = (X, Y) => { | |
| return EP1.withMonitor( | |
| G, | |
| () => { | |
| return C(X, Y) | |
| }, | |
| { schedule: { type: 'crontab', value: A }, timezone: V || void 0 }, | |
| ) | |
| }), | |
| d.from(w) | |
| ) | |
| } | |
| else return d[W] | |
| }, | |
| }) | |
| } | |
| SP1.instrumentCron = u34 | |
| }) | |
| var PP1 = _((yP1) => { | |
| var { _optionalChain: $P1 } = X0() | |
| Object.defineProperty(yP1, '__esModule', { value: !0 }) | |
| var m34 = Y4(), | |
| b34 = ub() | |
| function l34(I) { | |
| return new Proxy(I, { | |
| get(G, Z) { | |
| if (Z === 'schedule' && G.schedule) | |
| return new Proxy(G.schedule, { | |
| apply(d, W, w) { | |
| let [B, , C] = w | |
| if (!$P1([C, 'optionalAccess', (V) => V.name])) | |
| throw new Error( | |
| 'Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.', | |
| ) | |
| return m34.withMonitor( | |
| C.name, | |
| () => { | |
| return d.apply(W, w) | |
| }, | |
| { | |
| schedule: { type: 'crontab', value: b34.replaceCronNames(B) }, | |
| timezone: $P1([C, 'optionalAccess', (V) => V.timezone]), | |
| }, | |
| ) | |
| }, | |
| }) | |
| else return G[Z] | |
| }, | |
| }) | |
| } | |
| yP1.instrumentNodeCron = l34 | |
| }) | |
| var uP1 = _((OP1) => { | |
| Object.defineProperty(OP1, '__esModule', { value: !0 }) | |
| var k34 = Y4(), | |
| h34 = ub() | |
| function x34(I) { | |
| return new Proxy(I, { | |
| get(G, Z) { | |
| if (Z === 'scheduleJob') | |
| return new Proxy(G.scheduleJob, { | |
| apply(d, W, w) { | |
| let [B, C] = w | |
| if (typeof B !== 'string' || typeof C !== '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 V = B, | |
| A = C | |
| return k34.withMonitor( | |
| V, | |
| () => { | |
| return d.apply(W, w) | |
| }, | |
| { schedule: { type: 'crontab', value: h34.replaceCronNames(A) } }, | |
| ) | |
| }, | |
| }) | |
| return G[Z] | |
| }, | |
| }) | |
| } | |
| OP1.instrumentNodeSchedule = x34 | |
| }) | |
| var kP1 = _((jP1) => { | |
| Object.defineProperty(jP1, '__esModule', { value: !0 }) | |
| var z2 = Y4(), | |
| p34 = kS1(), | |
| i34 = V21(), | |
| n34 = Y21(), | |
| cv = f21(), | |
| P21 = X0(), | |
| a34 = L$1(), | |
| TP1 = U21(), | |
| r34 = b$1(), | |
| s34 = n$1(), | |
| o34 = Zy1(), | |
| e34 = Wy1(), | |
| gY = fP1(), | |
| t34 = _b(), | |
| I64 = Ub(), | |
| G64 = Rb(), | |
| Z64 = zb(), | |
| d64 = Fb(), | |
| W64 = Db(), | |
| w64 = Nb(), | |
| B64 = Eb(), | |
| C64 = $b(), | |
| mP1 = S21(), | |
| bP1 = Mb(), | |
| lP1 = Jb(), | |
| V64 = M21(), | |
| A64 = LP1(), | |
| X64 = PP1(), | |
| Y64 = uP1(), | |
| _64 = TP1.createGetModuleFromFilename(), | |
| D64 = { ...z2.Integrations, ...o34, ...e34 }, | |
| H64 = { | |
| instrumentCron: A64.instrumentCron, | |
| instrumentNodeCron: X64.instrumentNodeCron, | |
| instrumentNodeSchedule: Y64.instrumentNodeSchedule, | |
| } | |
| jP1.Hub = z2.Hub | |
| jP1.SDK_VERSION = z2.SDK_VERSION | |
| jP1.SEMANTIC_ATTRIBUTE_SENTRY_OP = z2.SEMANTIC_ATTRIBUTE_SENTRY_OP | |
| jP1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = z2.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN | |
| jP1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = z2.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE | |
| jP1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = z2.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE | |
| jP1.Scope = z2.Scope | |
| jP1.addBreadcrumb = z2.addBreadcrumb | |
| jP1.addEventProcessor = z2.addEventProcessor | |
| jP1.addGlobalEventProcessor = z2.addGlobalEventProcessor | |
| jP1.addIntegration = z2.addIntegration | |
| jP1.captureCheckIn = z2.captureCheckIn | |
| jP1.captureEvent = z2.captureEvent | |
| jP1.captureException = z2.captureException | |
| jP1.captureMessage = z2.captureMessage | |
| jP1.captureSession = z2.captureSession | |
| jP1.close = z2.close | |
| jP1.configureScope = z2.configureScope | |
| jP1.continueTrace = z2.continueTrace | |
| jP1.createTransport = z2.createTransport | |
| jP1.endSession = z2.endSession | |
| jP1.extractTraceparentData = z2.extractTraceparentData | |
| jP1.flush = z2.flush | |
| jP1.functionToStringIntegration = z2.functionToStringIntegration | |
| jP1.getActiveSpan = z2.getActiveSpan | |
| jP1.getActiveTransaction = z2.getActiveTransaction | |
| jP1.getClient = z2.getClient | |
| jP1.getCurrentHub = z2.getCurrentHub | |
| jP1.getCurrentScope = z2.getCurrentScope | |
| jP1.getGlobalScope = z2.getGlobalScope | |
| jP1.getHubFromCarrier = z2.getHubFromCarrier | |
| jP1.getIsolationScope = z2.getIsolationScope | |
| jP1.getSpanStatusFromHttpCode = z2.getSpanStatusFromHttpCode | |
| jP1.inboundFiltersIntegration = z2.inboundFiltersIntegration | |
| jP1.isInitialized = z2.isInitialized | |
| jP1.lastEventId = z2.lastEventId | |
| jP1.linkedErrorsIntegration = z2.linkedErrorsIntegration | |
| jP1.makeMain = z2.makeMain | |
| jP1.metrics = z2.metrics | |
| jP1.parameterize = z2.parameterize | |
| jP1.requestDataIntegration = z2.requestDataIntegration | |
| jP1.runWithAsyncContext = z2.runWithAsyncContext | |
| jP1.setContext = z2.setContext | |
| jP1.setCurrentClient = z2.setCurrentClient | |
| jP1.setExtra = z2.setExtra | |
| jP1.setExtras = z2.setExtras | |
| jP1.setHttpStatus = z2.setHttpStatus | |
| jP1.setMeasurement = z2.setMeasurement | |
| jP1.setTag = z2.setTag | |
| jP1.setTags = z2.setTags | |
| jP1.setUser = z2.setUser | |
| jP1.spanStatusfromHttpCode = z2.spanStatusfromHttpCode | |
| jP1.startActiveSpan = z2.startActiveSpan | |
| jP1.startInactiveSpan = z2.startInactiveSpan | |
| jP1.startSession = z2.startSession | |
| jP1.startSpan = z2.startSpan | |
| jP1.startSpanManual = z2.startSpanManual | |
| jP1.startTransaction = z2.startTransaction | |
| jP1.trace = z2.trace | |
| jP1.withActiveSpan = z2.withActiveSpan | |
| jP1.withIsolationScope = z2.withIsolationScope | |
| jP1.withMonitor = z2.withMonitor | |
| jP1.withScope = z2.withScope | |
| jP1.autoDiscoverNodePerformanceMonitoringIntegrations = | |
| p34.autoDiscoverNodePerformanceMonitoringIntegrations | |
| jP1.NodeClient = i34.NodeClient | |
| jP1.makeNodeTransport = n34.makeNodeTransport | |
| jP1.defaultIntegrations = cv.defaultIntegrations | |
| jP1.defaultStackParser = cv.defaultStackParser | |
| jP1.getDefaultIntegrations = cv.getDefaultIntegrations | |
| jP1.getSentryRelease = cv.getSentryRelease | |
| jP1.init = cv.init | |
| jP1.DEFAULT_USER_INCLUDES = P21.DEFAULT_USER_INCLUDES | |
| jP1.addRequestDataToEvent = P21.addRequestDataToEvent | |
| jP1.extractRequestData = P21.extractRequestData | |
| jP1.deepReadDirSync = a34.deepReadDirSync | |
| jP1.createGetModuleFromFilename = TP1.createGetModuleFromFilename | |
| jP1.enableAnrDetection = r34.enableAnrDetection | |
| jP1.Handlers = s34 | |
| jP1.captureConsoleIntegration = gY.captureConsoleIntegration | |
| jP1.debugIntegration = gY.debugIntegration | |
| jP1.dedupeIntegration = gY.dedupeIntegration | |
| jP1.extraErrorDataIntegration = gY.extraErrorDataIntegration | |
| jP1.httpClientIntegration = gY.httpClientIntegration | |
| jP1.reportingObserverIntegration = gY.reportingObserverIntegration | |
| jP1.rewriteFramesIntegration = gY.rewriteFramesIntegration | |
| jP1.sessionTimingIntegration = gY.sessionTimingIntegration | |
| jP1.consoleIntegration = t34.consoleIntegration | |
| jP1.onUncaughtExceptionIntegration = I64.onUncaughtExceptionIntegration | |
| jP1.onUnhandledRejectionIntegration = G64.onUnhandledRejectionIntegration | |
| jP1.modulesIntegration = Z64.modulesIntegration | |
| jP1.contextLinesIntegration = d64.contextLinesIntegration | |
| jP1.nodeContextIntegration = W64.nodeContextIntegration | |
| jP1.localVariablesIntegration = w64.localVariablesIntegration | |
| jP1.spotlightIntegration = B64.spotlightIntegration | |
| jP1.anrIntegration = C64.anrIntegration | |
| jP1.hapiErrorPlugin = mP1.hapiErrorPlugin | |
| jP1.hapiIntegration = mP1.hapiIntegration | |
| jP1.Undici = bP1.Undici | |
| jP1.nativeNodeFetchintegration = bP1.nativeNodeFetchintegration | |
| jP1.Http = lP1.Http | |
| jP1.httpIntegration = lP1.httpIntegration | |
| jP1.trpcMiddleware = V64.trpcMiddleware | |
| jP1.Integrations = D64 | |
| jP1.cron = H64 | |
| jP1.getModuleFromFilename = _64 | |
| }) | |
| var HT1 = _((RM9, DT1) => { | |
| DT1.exports = function I(G) { | |
| return G.map(function (Z) { | |
| if (Z && typeof Z === 'object') return Z.op.replace(/(.)/g, '\\$1') | |
| if (/["\s]/.test(Z) && !/'/.test(Z)) return "'" + Z.replace(/(['\\])/g, '\\$1') + "'" | |
| if (/["'\s]/.test(Z)) return '"' + Z.replace(/(["\\$`!])/g, '\\$1') + '"' | |
| return String(Z).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g, '$1\\$2') | |
| }).join(' ') | |
| } | |
| }) | |
| var QT1 = _((EM9, zT1) => { | |
| var NT1 = | |
| '(?:' + | |
| [ | |
| '\\|\\|', | |
| '\\&\\&', | |
| ';;', | |
| '\\|\\&', | |
| '\\<\\(', | |
| '\\<\\<\\<', | |
| '>>', | |
| '>\\&', | |
| '<\\&', | |
| '[&;()|<>]', | |
| ].join('|') + | |
| ')', | |
| FT1 = new RegExp('^' + NT1 + '$'), | |
| JT1 = '|&;()<> \\t', | |
| Sw4 = '"((\\\\"|[^"])*?)"', | |
| Lw4 = "'((\\\\'|[^'])*?)'", | |
| $w4 = /^#$/, | |
| KT1 = "'", | |
| gT1 = '"', | |
| c21 = '$', | |
| BJ = '', | |
| yw4 = 4294967296 | |
| for (p21 = 0; p21 < 4; p21++) BJ += (yw4 * Math.random()).toString(16) | |
| var p21, | |
| Pw4 = new RegExp('^' + BJ) | |
| function Ow4(I, G) { | |
| var Z = G.lastIndex, | |
| d = [], | |
| W | |
| while ((W = G.exec(I))) if ((d.push(W), G.lastIndex === W.index)) G.lastIndex += 1 | |
| return (G.lastIndex = Z), d | |
| } | |
| function uw4(I, G, Z) { | |
| var d = typeof I === 'function' ? I(Z) : I[Z] | |
| if (typeof d === 'undefined' && Z != '') d = '' | |
| else if (typeof d === 'undefined') d = '$' | |
| if (typeof d === 'object') return G + BJ + JSON.stringify(d) + BJ | |
| return G + d | |
| } | |
| function Tw4(I, G, Z) { | |
| if (!Z) Z = {} | |
| var d = Z.escape || '\\', | |
| W = '(\\' + d + `['"` + JT1 + `]|[^\\s'"` + JT1 + '])+', | |
| w = new RegExp(['(' + NT1 + ')', '(' + W + '|' + Sw4 + '|' + Lw4 + ')+'].join('|'), 'g'), | |
| B = Ow4(I, w) | |
| if (B.length === 0) return [] | |
| if (!G) G = {} | |
| var C = !1 | |
| return B.map(function (V) { | |
| var A = V[0] | |
| if (!A || C) return | |
| if (FT1.test(A)) return { op: A } | |
| var X = !1, | |
| Y = !1, | |
| H = '', | |
| J = !1, | |
| K | |
| function g() { | |
| K += 1 | |
| var S, | |
| $, | |
| L = A.charAt(K) | |
| if (L === '{') { | |
| if (((K += 1), A.charAt(K) === '}')) | |
| throw new Error('Bad substitution: ' + A.slice(K - 2, K + 1)) | |
| if (((S = A.indexOf('}', K)), S < 0)) throw new Error('Bad substitution: ' + A.slice(K)) | |
| ;($ = A.slice(K, S)), (K = S) | |
| } else if (/[*@#?$!_-]/.test(L)) ($ = L), (K += 1) | |
| else { | |
| var T = A.slice(K) | |
| if (((S = T.match(/[^\w\d_]/)), !S)) ($ = T), (K = A.length) | |
| else ($ = T.slice(0, S.index)), (K += S.index - 1) | |
| } | |
| return uw4(G, '', $) | |
| } | |
| for (K = 0; K < A.length; K++) { | |
| var z = A.charAt(K) | |
| if (((J = J || (!X && (z === '*' || z === '?'))), Y)) (H += z), (Y = !1) | |
| else if (X) | |
| if (z === X) X = !1 | |
| else if (X == KT1) H += z | |
| else if (z === d) | |
| if (((K += 1), (z = A.charAt(K)), z === gT1 || z === d || z === c21)) H += z | |
| else H += d + z | |
| else if (z === c21) H += g() | |
| else H += z | |
| else if (z === gT1 || z === KT1) X = z | |
| else if (FT1.test(z)) return { op: A } | |
| else if ($w4.test(z)) { | |
| C = !0 | |
| var f = { comment: I.slice(V.index + K + 1) } | |
| if (H.length) return [H, f] | |
| return [f] | |
| } else if (z === d) Y = !0 | |
| else if (z === c21) H += g() | |
| else H += z | |
| } | |
| if (J) return { op: 'glob', pattern: H } | |
| return H | |
| }).reduce(function (V, A) { | |
| return typeof A === 'undefined' ? V : V.concat(A) | |
| }, []) | |
| } | |
| zT1.exports = function I(G, Z, d) { | |
| var W = Tw4(G, Z, d) | |
| if (typeof Z !== 'function') return W | |
| return W.reduce(function (w, B) { | |
| if (typeof B === 'object') return w.concat(B) | |
| var C = B.split(RegExp('(' + BJ + '.*?' + BJ + ')', 'g')) | |
| if (C.length === 1) return w.concat(C[0]) | |
| return w.concat( | |
| C.filter(Boolean).map(function (V) { | |
| if (Pw4.test(V)) return JSON.parse(V.split(BJ)[1]) | |
| return V | |
| }), | |
| ) | |
| }, []) | |
| } | |
| }) | |
| var i21 = _((mw4) => { | |
| mw4.quote = HT1() | |
| mw4.parse = QT1() | |
| }) | |
| var M1 = _((AB4) => { | |
| var sv = Symbol.for('react.element'), | |
| aw4 = Symbol.for('react.portal'), | |
| rw4 = Symbol.for('react.fragment'), | |
| sw4 = Symbol.for('react.strict_mode'), | |
| ow4 = Symbol.for('react.profiler'), | |
| ew4 = Symbol.for('react.provider'), | |
| tw4 = Symbol.for('react.context'), | |
| IB4 = Symbol.for('react.forward_ref'), | |
| GB4 = Symbol.for('react.suspense'), | |
| ZB4 = Symbol.for('react.memo'), | |
| dB4 = Symbol.for('react.lazy'), | |
| MT1 = Symbol.iterator | |
| function WB4(I) { | |
| if (I === null || typeof I !== 'object') return null | |
| return (I = (MT1 && I[MT1]) || I['@@iterator']), typeof I === 'function' ? I : null | |
| } | |
| var $T1 = { | |
| isMounted: function () { | |
| return !1 | |
| }, | |
| enqueueForceUpdate: function () {}, | |
| enqueueReplaceState: function () {}, | |
| enqueueSetState: function () {}, | |
| }, | |
| yT1 = Object.assign, | |
| PT1 = {} | |
| function Oz(I, G, Z) { | |
| ;(this.props = I), (this.context = G), (this.refs = PT1), (this.updater = Z || $T1) | |
| } | |
| Oz.prototype.isReactComponent = {} | |
| Oz.prototype.setState = function (I, G) { | |
| 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, G, 'setState') | |
| } | |
| Oz.prototype.forceUpdate = function (I) { | |
| this.updater.enqueueForceUpdate(this, I, 'forceUpdate') | |
| } | |
| function OT1() {} | |
| OT1.prototype = Oz.prototype | |
| function G41(I, G, Z) { | |
| ;(this.props = I), (this.context = G), (this.refs = PT1), (this.updater = Z || $T1) | |
| } | |
| var Z41 = (G41.prototype = new OT1()) | |
| Z41.constructor = G41 | |
| yT1(Z41, Oz.prototype) | |
| Z41.isPureReactComponent = !0 | |
| var ST1 = Array.isArray, | |
| uT1 = Object.prototype.hasOwnProperty, | |
| d41 = { current: null }, | |
| TT1 = { key: !0, ref: !0, __self: !0, __source: !0 } | |
| function mT1(I, G, Z) { | |
| var d, | |
| W = {}, | |
| w = null, | |
| B = null | |
| if (G != null) | |
| for (d in (G.ref !== void 0 && (B = G.ref), G.key !== void 0 && (w = '' + G.key), G)) | |
| uT1.call(G, d) && !TT1.hasOwnProperty(d) && (W[d] = G[d]) | |
| var C = arguments.length - 2 | |
| if (C === 1) W.children = Z | |
| else if (1 < C) { | |
| for (var V = Array(C), A = 0; A < C; A++) V[A] = arguments[A + 2] | |
| W.children = V | |
| } | |
| if (I && I.defaultProps) for (d in ((C = I.defaultProps), C)) W[d] === void 0 && (W[d] = C[d]) | |
| return { $$typeof: sv, type: I, key: w, ref: B, props: W, _owner: d41.current } | |
| } | |
| function wB4(I, G) { | |
| return { $$typeof: sv, type: I.type, key: G, ref: I.ref, props: I.props, _owner: I._owner } | |
| } | |
| function W41(I) { | |
| return typeof I === 'object' && I !== null && I.$$typeof === sv | |
| } | |
| function BB4(I) { | |
| var G = { '=': '=0', ':': '=2' } | |
| return ( | |
| '$' + | |
| I.replace(/[=:]/g, function (Z) { | |
| return G[Z] | |
| }) | |
| ) | |
| } | |
| var LT1 = /\/+/g | |
| function I41(I, G) { | |
| return typeof I === 'object' && I !== null && I.key != null ? BB4('' + I.key) : G.toString(36) | |
| } | |
| function fl(I, G, Z, d, W) { | |
| var w = typeof I | |
| if (w === 'undefined' || w === 'boolean') I = null | |
| var B = !1 | |
| if (I === null) B = !0 | |
| else | |
| switch (w) { | |
| case 'string': | |
| case 'number': | |
| B = !0 | |
| break | |
| case 'object': | |
| switch (I.$$typeof) { | |
| case sv: | |
| case aw4: | |
| B = !0 | |
| } | |
| } | |
| if (B) | |
| return ( | |
| (B = I), | |
| (W = W(B)), | |
| (I = d === '' ? '.' + I41(B, 0) : d), | |
| ST1(W) | |
| ? ((Z = ''), | |
| I != null && (Z = I.replace(LT1, '$&/') + '/'), | |
| fl(W, G, Z, '', function (A) { | |
| return A | |
| })) | |
| : W != null && | |
| (W41(W) && | |
| (W = wB4( | |
| W, | |
| Z + | |
| (!W.key || (B && B.key === W.key) ? '' : ('' + W.key).replace(LT1, '$&/') + '/') + | |
| I, | |
| )), | |
| G.push(W)), | |
| 1 | |
| ) | |
| if (((B = 0), (d = d === '' ? '.' : d + ':'), ST1(I))) | |
| for (var C = 0; C < I.length; C++) { | |
| w = I[C] | |
| var V = d + I41(w, C) | |
| B += fl(w, G, Z, V, W) | |
| } | |
| else if (((V = WB4(I)), typeof V === 'function')) | |
| for (I = V.call(I), C = 0; !(w = I.next()).done; ) | |
| (w = w.value), (V = d + I41(w, C++)), (B += fl(w, G, Z, V, W)) | |
| else if (w === 'object') | |
| throw ( | |
| ((G = String(I)), | |
| Error( | |
| 'Objects are not valid as a React child (found: ' + | |
| (G === '[object Object]' ? 'object with keys {' + Object.keys(I).join(', ') + '}' : G) + | |
| '). If you meant to render a collection of children, use an array instead.', | |
| )) | |
| ) | |
| return B | |
| } | |
| function Ul(I, G, Z) { | |
| if (I == null) return I | |
| var d = [], | |
| W = 0 | |
| return ( | |
| fl(I, d, '', '', function (w) { | |
| return G.call(Z, w, W++) | |
| }), | |
| d | |
| ) | |
| } | |
| function CB4(I) { | |
| if (I._status === -1) { | |
| var G = I._result | |
| ;(G = G()), | |
| G.then( | |
| function (Z) { | |
| if (I._status === 0 || I._status === -1) (I._status = 1), (I._result = Z) | |
| }, | |
| function (Z) { | |
| if (I._status === 0 || I._status === -1) (I._status = 2), (I._result = Z) | |
| }, | |
| ), | |
| I._status === -1 && ((I._status = 0), (I._result = G)) | |
| } | |
| if (I._status === 1) return I._result.default | |
| throw I._result | |
| } | |
| var WI = { current: null }, | |
| Rl = { transition: null }, | |
| VB4 = { ReactCurrentDispatcher: WI, ReactCurrentBatchConfig: Rl, ReactCurrentOwner: d41 } | |
| function bT1() { | |
| throw Error('act(...) is not supported in production builds of React.') | |
| } | |
| AB4.Children = { | |
| map: Ul, | |
| forEach: function (I, G, Z) { | |
| Ul( | |
| I, | |
| function () { | |
| G.apply(this, arguments) | |
| }, | |
| Z, | |
| ) | |
| }, | |
| count: function (I) { | |
| var G = 0 | |
| return ( | |
| Ul(I, function () { | |
| G++ | |
| }), | |
| G | |
| ) | |
| }, | |
| toArray: function (I) { | |
| return ( | |
| Ul(I, function (G) { | |
| return G | |
| }) || [] | |
| ) | |
| }, | |
| only: function (I) { | |
| if (!W41(I)) | |
| throw Error('React.Children.only expected to receive a single React element child.') | |
| return I | |
| }, | |
| } | |
| AB4.Component = Oz | |
| AB4.Fragment = rw4 | |
| AB4.Profiler = ow4 | |
| AB4.PureComponent = G41 | |
| AB4.StrictMode = sw4 | |
| AB4.Suspense = GB4 | |
| AB4.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = VB4 | |
| AB4.act = bT1 | |
| AB4.cloneElement = function (I, G, Z) { | |
| if (I === null || I === void 0) | |
| throw Error( | |
| 'React.cloneElement(...): The argument must be a React element, but you passed ' + I + '.', | |
| ) | |
| var d = yT1({}, I.props), | |
| W = I.key, | |
| w = I.ref, | |
| B = I._owner | |
| if (G != null) { | |
| if ( | |
| (G.ref !== void 0 && ((w = G.ref), (B = d41.current)), | |
| G.key !== void 0 && (W = '' + G.key), | |
| I.type && I.type.defaultProps) | |
| ) | |
| var C = I.type.defaultProps | |
| for (V in G) | |
| uT1.call(G, V) && | |
| !TT1.hasOwnProperty(V) && | |
| (d[V] = G[V] === void 0 && C !== void 0 ? C[V] : G[V]) | |
| } | |
| var V = arguments.length - 2 | |
| if (V === 1) d.children = Z | |
| else if (1 < V) { | |
| C = Array(V) | |
| for (var A = 0; A < V; A++) C[A] = arguments[A + 2] | |
| d.children = C | |
| } | |
| return { $$typeof: sv, type: I.type, key: W, ref: w, props: d, _owner: B } | |
| } | |
| AB4.createContext = function (I) { | |
| return ( | |
| (I = { | |
| $$typeof: tw4, | |
| _currentValue: I, | |
| _currentValue2: I, | |
| _threadCount: 0, | |
| Provider: null, | |
| Consumer: null, | |
| _defaultValue: null, | |
| _globalName: null, | |
| }), | |
| (I.Provider = { $$typeof: ew4, _context: I }), | |
| (I.Consumer = I) | |
| ) | |
| } | |
| AB4.createElement = mT1 | |
| AB4.createFactory = function (I) { | |
| var G = mT1.bind(null, I) | |
| return (G.type = I), G | |
| } | |
| AB4.createRef = function () { | |
| return { current: null } | |
| } | |
| AB4.forwardRef = function (I) { | |
| return { $$typeof: IB4, render: I } | |
| } | |
| AB4.isValidElement = W41 | |
| AB4.lazy = function (I) { | |
| return { $$typeof: dB4, _payload: { _status: -1, _result: I }, _init: CB4 } | |
| } | |
| AB4.memo = function (I, G) { | |
| return { $$typeof: ZB4, type: I, compare: G === void 0 ? null : G } | |
| } | |
| AB4.startTransition = function (I) { | |
| var G = Rl.transition | |
| Rl.transition = {} | |
| try { | |
| I() | |
| } finally { | |
| Rl.transition = G | |
| } | |
| } | |
| AB4.unstable_act = bT1 | |
| AB4.useCallback = function (I, G) { | |
| return WI.current.useCallback(I, G) | |
| } | |
| AB4.useContext = function (I) { | |
| return WI.current.useContext(I) | |
| } | |
| AB4.useDebugValue = function () {} | |
| AB4.useDeferredValue = function (I) { | |
| return WI.current.useDeferredValue(I) | |
| } | |
| AB4.useEffect = function (I, G) { | |
| return WI.current.useEffect(I, G) | |
| } | |
| AB4.useId = function () { | |
| return WI.current.useId() | |
| } | |
| AB4.useImperativeHandle = function (I, G, Z) { | |
| return WI.current.useImperativeHandle(I, G, Z) | |
| } | |
| AB4.useInsertionEffect = function (I, G) { | |
| return WI.current.useInsertionEffect(I, G) | |
| } | |
| AB4.useLayoutEffect = function (I, G) { | |
| return WI.current.useLayoutEffect(I, G) | |
| } | |
| AB4.useMemo = function (I, G) { | |
| return WI.current.useMemo(I, G) | |
| } | |
| AB4.useReducer = function (I, G, Z) { | |
| return WI.current.useReducer(I, G, Z) | |
| } | |
| AB4.useRef = function (I) { | |
| return WI.current.useRef(I) | |
| } | |
| AB4.useState = function (I) { | |
| return WI.current.useState(I) | |
| } | |
| AB4.useSyncExternalStore = function (I, G, Z) { | |
| return WI.current.useSyncExternalStore(I, G, Z) | |
| } | |
| AB4.useTransition = function () { | |
| return WI.current.useTransition() | |
| } | |
| AB4.version = '18.3.1' | |
| }) | |
| var v7 = _((sT1) => { | |
| Object.defineProperty(sT1, '__esModule', { value: !0 }) | |
| sT1.Log = sT1.LogLevel = void 0 | |
| var CC4 = ' DEBUG ', | |
| VC4 = ' INFO ', | |
| AC4 = ' WARN ', | |
| XC4 = ' ERROR ' | |
| function Ml(I) { | |
| return I.unshift('[Statsig]'), I | |
| } | |
| sT1.LogLevel = { None: 0, Error: 1, Warn: 2, Info: 3, Debug: 4 } | |
| class CJ { | |
| static info(...I) { | |
| if (CJ.level >= sT1.LogLevel.Info) console.info(VC4, ...Ml(I)) | |
| } | |
| static debug(...I) { | |
| if (CJ.level >= sT1.LogLevel.Debug) console.debug(CC4, ...Ml(I)) | |
| } | |
| static warn(...I) { | |
| if (CJ.level >= sT1.LogLevel.Warn) console.warn(AC4, ...Ml(I)) | |
| } | |
| static error(...I) { | |
| if (CJ.level >= sT1.LogLevel.Error) console.error(XC4, ...Ml(I)) | |
| } | |
| } | |
| sT1.Log = CJ | |
| CJ.level = sT1.LogLevel.Warn | |
| }) | |
| var VJ = _((Gm1) => { | |
| var A41, X41, Y41 | |
| Object.defineProperty(Gm1, '__esModule', { value: !0 }) | |
| Gm1._getInstance = Gm1._getStatsigGlobalFlag = Gm1._getStatsigGlobal = void 0 | |
| var YC4 = v7(), | |
| _C4 = () => { | |
| return __STATSIG__ ? __STATSIG__ : Sl | |
| } | |
| Gm1._getStatsigGlobal = _C4 | |
| var DC4 = (I) => { | |
| return Gm1._getStatsigGlobal()[I] | |
| } | |
| Gm1._getStatsigGlobalFlag = DC4 | |
| var HC4 = (I) => { | |
| let G = Gm1._getStatsigGlobal() | |
| if (!I) { | |
| if (G.instances && Object.keys(G.instances).length > 1) | |
| YC4.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 G.firstInstance | |
| } | |
| return G.instances && G.instances[I] | |
| } | |
| Gm1._getInstance = HC4 | |
| var bz = '__STATSIG__', | |
| eT1 = typeof window !== 'undefined' ? window : {}, | |
| tT1 = typeof global !== 'undefined' ? global : {}, | |
| Im1 = typeof globalThis !== 'undefined' ? globalThis : {}, | |
| Sl = | |
| (Y41 = | |
| (X41 = (A41 = eT1[bz]) !== null && A41 !== void 0 ? A41 : tT1[bz]) !== null && | |
| X41 !== void 0 | |
| ? X41 | |
| : Im1[bz]) !== null && Y41 !== void 0 | |
| ? Y41 | |
| : { instance: Gm1._getInstance } | |
| eT1[bz] = Sl | |
| tT1[bz] = Sl | |
| Im1[bz] = Sl | |
| }) | |
| var $l = _((Zm1) => { | |
| Object.defineProperty(Zm1, '__esModule', { value: !0 }) | |
| Zm1.Diagnostics = void 0 | |
| var Ll = new Map(), | |
| H41 = 'start', | |
| F41 = 'end', | |
| JC4 = 'statsig::diagnostics' | |
| Zm1.Diagnostics = { | |
| _getMarkers: (I) => { | |
| return Ll.get(I) | |
| }, | |
| _markInitOverallStart: (I) => { | |
| jz(I, lz({}, H41, 'overall')) | |
| }, | |
| _markInitOverallEnd: (I, G, Z) => { | |
| jz( | |
| I, | |
| lz( | |
| { | |
| success: G, | |
| error: G ? void 0 : { name: 'InitializeError', message: 'Failed to initialize' }, | |
| evaluationDetails: Z, | |
| }, | |
| F41, | |
| 'overall', | |
| ), | |
| ) | |
| }, | |
| _markInitNetworkReqStart: (I, G) => { | |
| jz(I, lz(G, H41, 'initialize', 'network_request')) | |
| }, | |
| _markInitNetworkReqEnd: (I, G) => { | |
| jz(I, lz(G, F41, 'initialize', 'network_request')) | |
| }, | |
| _markInitProcessStart: (I) => { | |
| jz(I, lz({}, H41, 'initialize', 'process')) | |
| }, | |
| _markInitProcessEnd: (I, G) => { | |
| jz(I, lz(G, F41, 'initialize', 'process')) | |
| }, | |
| _clearMarkers: (I) => { | |
| Ll.delete(I) | |
| }, | |
| _formatError(I) { | |
| if (!(I && typeof I === 'object')) return | |
| return { code: J41(I, 'code'), name: J41(I, 'name'), message: J41(I, 'message') } | |
| }, | |
| _getDiagnosticsData(I, G, Z, d) { | |
| var W | |
| return { | |
| success: (I === null || I === void 0 ? void 0 : I.ok) === !0, | |
| statusCode: I === null || I === void 0 ? void 0 : I.status, | |
| sdkRegion: | |
| (W = I === null || I === void 0 ? void 0 : I.headers) === null || W === void 0 | |
| ? void 0 | |
| : W.get('x-statsig-region'), | |
| isDelta: Z.includes('"is_delta":true') === !0 ? !0 : void 0, | |
| attempt: G, | |
| error: Zm1.Diagnostics._formatError(d), | |
| } | |
| }, | |
| _enqueueDiagnosticsEvent(I, G, Z, d) { | |
| let W = Zm1.Diagnostics._getMarkers(Z) | |
| if (W == null || W.length <= 0) return -1 | |
| let w = W[W.length - 1].timestamp - W[0].timestamp | |
| Zm1.Diagnostics._clearMarkers(Z) | |
| let B = KC4(I, { context: 'initialize', markers: W.slice(), statsigOptions: d }) | |
| return G.enqueue(B), w | |
| }, | |
| } | |
| function lz(I, G, Z, d) { | |
| return Object.assign({ key: Z, action: G, step: d, timestamp: Date.now() }, I) | |
| } | |
| function KC4(I, G) { | |
| return { eventName: JC4, user: I, value: null, metadata: G, time: Date.now() } | |
| } | |
| function jz(I, G) { | |
| var Z | |
| let d = (Z = Ll.get(I)) !== null && Z !== void 0 ? Z : [] | |
| d.push(G), Ll.set(I, d) | |
| } | |
| function J41(I, G) { | |
| if (G in I) return I[G] | |
| return | |
| } | |
| }) | |
| var yl = _((dm1) => { | |
| Object.defineProperty(dm1, '__esModule', { value: !0 }) | |
| dm1._isTypeMatch = dm1._typeOf = void 0 | |
| function gC4(I) { | |
| return Array.isArray(I) ? 'array' : typeof I | |
| } | |
| dm1._typeOf = gC4 | |
| function NC4(I, G) { | |
| let Z = (d) => (Array.isArray(d) ? 'array' : typeof d) | |
| return Z(I) === Z(G) | |
| } | |
| dm1._isTypeMatch = NC4 | |
| }) | |
| var kz = _((wm1) => { | |
| Object.defineProperty(wm1, '__esModule', { value: !0 }) | |
| wm1._getSortedObject = wm1._DJB2Object = wm1._DJB2 = void 0 | |
| var QC4 = yl(), | |
| qC4 = (I) => { | |
| let G = 0 | |
| for (let Z = 0; Z < I.length; Z++) { | |
| let d = I.charCodeAt(Z) | |
| ;(G = (G << 5) - G + d), (G = G & G) | |
| } | |
| return String(G >>> 0) | |
| } | |
| wm1._DJB2 = qC4 | |
| var UC4 = (I, G) => { | |
| return wm1._DJB2(JSON.stringify(wm1._getSortedObject(I, G))) | |
| } | |
| wm1._DJB2Object = UC4 | |
| var fC4 = (I, G) => { | |
| if (I == null) return null | |
| let Z = Object.keys(I).sort(), | |
| d = {} | |
| return ( | |
| Z.forEach((W) => { | |
| let w = I[W] | |
| if (G === 0 || QC4._typeOf(w) !== 'object') { | |
| d[W] = w | |
| return | |
| } | |
| d[W] = wm1._getSortedObject(w, G != null ? G - 1 : G) | |
| }), | |
| d | |
| ) | |
| } | |
| wm1._getSortedObject = fC4 | |
| }) | |
| var IM = _((Am1) => { | |
| Object.defineProperty(Am1, '__esModule', { value: !0 }) | |
| Am1._getStorageKey = Am1._getUserStorageKey = void 0 | |
| var Cm1 = kz() | |
| function Vm1(I, G, Z) { | |
| var d | |
| if (Z) return Z(I, G) | |
| let W = G && G.customIDs ? G.customIDs : {}, | |
| w = [ | |
| `uid:${(d = G === null || G === void 0 ? void 0 : G.userID) !== null && d !== void 0 ? d : ''}`, | |
| `cids:${Object.keys(W) | |
| .sort((B, C) => B.localeCompare(C)) | |
| .map((B) => `${B}-${W[B]}`) | |
| .join(',')}`, | |
| `k:${I}`, | |
| ] | |
| return Cm1._DJB2(w.join('|')) | |
| } | |
| Am1._getUserStorageKey = Vm1 | |
| function EC4(I, G, Z) { | |
| if (G) return Vm1(I, G, Z) | |
| return Cm1._DJB2(`k:${I}`) | |
| } | |
| Am1._getStorageKey = EC4 | |
| }) | |
| var GM = _((Ym1) => { | |
| Object.defineProperty(Ym1, '__esModule', { value: !0 }) | |
| Ym1.NetworkParam = Ym1.NetworkDefault = Ym1.Endpoint = void 0 | |
| Ym1.Endpoint = { | |
| _initialize: 'initialize', | |
| _rgstr: 'rgstr', | |
| _download_config_specs: 'download_config_specs', | |
| } | |
| Ym1.NetworkDefault = { | |
| [Ym1.Endpoint._rgstr]: 'https://prodregistryv2.org/v1', | |
| [Ym1.Endpoint._initialize]: 'https://featureassets.org/v1', | |
| [Ym1.Endpoint._download_config_specs]: 'https://api.statsigcdn.com/v1', | |
| } | |
| Ym1.NetworkParam = { | |
| EventCount: 'ec', | |
| SdkKey: 'k', | |
| SdkType: 'st', | |
| SdkVersion: 'sv', | |
| Time: 't', | |
| SessionID: 'sid', | |
| StatsigEncoded: 'se', | |
| IsGzipped: 'gz', | |
| } | |
| }) | |
| var AJ = _((Dm1) => { | |
| Object.defineProperty(Dm1, '__esModule', { value: !0 }) | |
| Dm1._getCurrentPageUrlSafe = | |
| Dm1._addDocumentEventListenerSafe = | |
| Dm1._addWindowEventListenerSafe = | |
| Dm1._isServerEnv = | |
| Dm1._getDocumentSafe = | |
| Dm1._getWindowSafe = | |
| void 0 | |
| var SC4 = () => { | |
| return typeof window !== 'undefined' ? window : null | |
| } | |
| Dm1._getWindowSafe = SC4 | |
| var LC4 = () => { | |
| var I | |
| let G = Dm1._getWindowSafe() | |
| return (I = G === null || G === void 0 ? void 0 : G.document) !== null && I !== void 0 | |
| ? I | |
| : null | |
| } | |
| Dm1._getDocumentSafe = LC4 | |
| var $C4 = () => { | |
| if (Dm1._getDocumentSafe() !== null) return !1 | |
| let I = | |
| typeof process !== 'undefined' && process.versions != null && process.versions.node != null | |
| return typeof EdgeRuntime === 'string' || I | |
| } | |
| Dm1._isServerEnv = $C4 | |
| var yC4 = (I, G) => { | |
| let Z = Dm1._getWindowSafe() | |
| if (typeof (Z === null || Z === void 0 ? void 0 : Z.addEventListener) === 'function') | |
| Z.addEventListener(I, G) | |
| } | |
| Dm1._addWindowEventListenerSafe = yC4 | |
| var PC4 = (I, G) => { | |
| let Z = Dm1._getDocumentSafe() | |
| if (typeof (Z === null || Z === void 0 ? void 0 : Z.addEventListener) === 'function') | |
| Z.addEventListener(I, G) | |
| } | |
| Dm1._addDocumentEventListenerSafe = PC4 | |
| var OC4 = () => { | |
| var I | |
| try { | |
| return (I = Dm1._getWindowSafe()) === null || I === void 0 | |
| ? void 0 | |
| : I.location.href.split(/[?#]/)[0] | |
| } catch (G) { | |
| return | |
| } | |
| } | |
| Dm1._getCurrentPageUrlSafe = OC4 | |
| }) | |
| var N41 = _((gm1) => { | |
| Object.defineProperty(gm1, '__esModule', { value: !0 }) | |
| gm1._createLayerParameterExposure = | |
| gm1._createConfigExposure = | |
| gm1._createGateExposure = | |
| gm1._isExposureEvent = | |
| void 0 | |
| var Fm1 = 'statsig::config_exposure', | |
| Jm1 = 'statsig::gate_exposure', | |
| Km1 = 'statsig::layer_exposure', | |
| g41 = (I, G, Z, d, W) => { | |
| if (Z.bootstrapMetadata) d.bootstrapMetadata = Z.bootstrapMetadata | |
| return { | |
| eventName: I, | |
| user: G, | |
| value: null, | |
| metadata: hC4(Z, d), | |
| secondaryExposures: W, | |
| time: Date.now(), | |
| } | |
| }, | |
| bC4 = ({ eventName: I }) => { | |
| return I === Jm1 || I === Fm1 || I === Km1 | |
| } | |
| gm1._isExposureEvent = bC4 | |
| var lC4 = (I, G) => { | |
| var Z, d, W | |
| let w = { gate: G.name, gateValue: String(G.value), ruleID: G.ruleID } | |
| if (((Z = G.__evaluation) === null || Z === void 0 ? void 0 : Z.version) != null) | |
| w.configVersion = G.__evaluation.version | |
| return g41( | |
| Jm1, | |
| I, | |
| G.details, | |
| w, | |
| (W = (d = G.__evaluation) === null || d === void 0 ? void 0 : d.secondary_exposures) !== | |
| null && W !== void 0 | |
| ? W | |
| : [], | |
| ) | |
| } | |
| gm1._createGateExposure = lC4 | |
| var jC4 = (I, G) => { | |
| var Z, d, W, w | |
| let B = { config: G.name, ruleID: G.ruleID } | |
| if (((Z = G.__evaluation) === null || Z === void 0 ? void 0 : Z.version) != null) | |
| B.configVersion = G.__evaluation.version | |
| if (((d = G.__evaluation) === null || d === void 0 ? void 0 : d.passed) != null) | |
| B.rulePassed = String(G.__evaluation.passed) | |
| return g41( | |
| Fm1, | |
| I, | |
| G.details, | |
| B, | |
| (w = (W = G.__evaluation) === null || W === void 0 ? void 0 : W.secondary_exposures) !== | |
| null && w !== void 0 | |
| ? w | |
| : [], | |
| ) | |
| } | |
| gm1._createConfigExposure = jC4 | |
| var kC4 = (I, G, Z) => { | |
| var d, W, w, B | |
| let C = G.__evaluation, | |
| V = | |
| ((d = C === null || C === void 0 ? void 0 : C.explicit_parameters) === null || d === void 0 | |
| ? void 0 | |
| : d.includes(Z)) === !0, | |
| A = '', | |
| X = | |
| (W = C === null || C === void 0 ? void 0 : C.undelegated_secondary_exposures) !== null && | |
| W !== void 0 | |
| ? W | |
| : [] | |
| if (V) | |
| (A = (w = C.allocated_experiment_name) !== null && w !== void 0 ? w : ''), | |
| (X = C.secondary_exposures) | |
| let Y = { | |
| config: G.name, | |
| parameterName: Z, | |
| ruleID: G.ruleID, | |
| allocatedExperiment: A, | |
| isExplicitParameter: String(V), | |
| } | |
| if (((B = G.__evaluation) === null || B === void 0 ? void 0 : B.version) != null) | |
| Y.configVersion = G.__evaluation.version | |
| return g41(Km1, I, G.details, Y, X) | |
| } | |
| gm1._createLayerParameterExposure = kC4 | |
| var hC4 = (I, G) => { | |
| if (((G.reason = I.reason), I.lcut)) G.lcut = String(I.lcut) | |
| if (I.receivedAt) G.receivedAt = String(I.receivedAt) | |
| return G | |
| } | |
| }) | |
| var sV = _((zm1) => { | |
| Object.defineProperty(zm1, '__esModule', { value: !0 }) | |
| zm1._setObjectInStorage = zm1._getObjectFromStorage = zm1.Storage = void 0 | |
| var iC4 = v7(), | |
| nC4 = AJ(), | |
| ZM = {}, | |
| Q41 = { | |
| isReady: () => !0, | |
| isReadyResolver: () => null, | |
| getProviderName: () => 'InMemory', | |
| getItem: (I) => (ZM[I] ? ZM[I] : null), | |
| setItem: (I, G) => { | |
| ZM[I] = G | |
| }, | |
| removeItem: (I) => { | |
| delete ZM[I] | |
| }, | |
| getAllKeys: () => Object.keys(ZM), | |
| }, | |
| Tl = null | |
| try { | |
| let I = nC4._getWindowSafe() | |
| if (I && I.localStorage && typeof I.localStorage.getItem === 'function') | |
| Tl = { | |
| isReady: () => !0, | |
| isReadyResolver: () => null, | |
| getProviderName: () => 'LocalStorage', | |
| getItem: (G) => I.localStorage.getItem(G), | |
| setItem: (G, Z) => I.localStorage.setItem(G, Z), | |
| removeItem: (G) => I.localStorage.removeItem(G), | |
| getAllKeys: () => Object.keys(I.localStorage), | |
| } | |
| } catch (I) { | |
| iC4.Log.warn('Failed to setup localStorageProvider.') | |
| } | |
| var z41 = Tl !== null && Tl !== void 0 ? Tl : Q41, | |
| SB = z41 | |
| function aC4(I) { | |
| try { | |
| return I() | |
| } catch (G) { | |
| if (G instanceof Error && G.name === 'SecurityError') | |
| return zm1.Storage._setProvider(Q41), null | |
| throw G | |
| } | |
| } | |
| zm1.Storage = { | |
| isReady: () => SB.isReady(), | |
| isReadyResolver: () => SB.isReadyResolver(), | |
| getProviderName: () => SB.getProviderName(), | |
| getItem: (I) => aC4(() => SB.getItem(I)), | |
| setItem: (I, G) => SB.setItem(I, G), | |
| removeItem: (I) => SB.removeItem(I), | |
| getAllKeys: () => SB.getAllKeys(), | |
| _setProvider: (I) => { | |
| ;(z41 = I), (SB = I) | |
| }, | |
| _setDisabled: (I) => { | |
| if (I) SB = Q41 | |
| else SB = z41 | |
| }, | |
| } | |
| function rC4(I) { | |
| let G = zm1.Storage.getItem(I) | |
| return JSON.parse(G !== null && G !== void 0 ? G : 'null') | |
| } | |
| zm1._getObjectFromStorage = rC4 | |
| function sC4(I, G) { | |
| zm1.Storage.setItem(I, JSON.stringify(G)) | |
| } | |
| zm1._setObjectInStorage = sC4 | |
| }) | |
| var q41 = _((Um1) => { | |
| Object.defineProperty(Um1, '__esModule', { value: !0 }) | |
| Um1.UrlConfiguration = void 0 | |
| var bl = GM(), | |
| eC4 = { | |
| [bl.Endpoint._initialize]: 'i', | |
| [bl.Endpoint._rgstr]: 'e', | |
| [bl.Endpoint._download_config_specs]: 'd', | |
| } | |
| class qm1 { | |
| constructor(I, G, Z, d) { | |
| if ( | |
| ((this.customUrl = null), | |
| (this.fallbackUrls = null), | |
| (this.endpoint = I), | |
| (this.endpointDnsKey = eC4[I]), | |
| G) | |
| ) | |
| this.customUrl = G | |
| if (!G && Z) this.customUrl = Z.endsWith('/') ? `${Z}${I}` : `${Z}/${I}` | |
| if (d) this.fallbackUrls = d | |
| let W = bl.NetworkDefault[I] | |
| this.defaultUrl = `${W}/${I}` | |
| } | |
| getUrl() { | |
| var I | |
| return (I = this.customUrl) !== null && I !== void 0 ? I : this.defaultUrl | |
| } | |
| } | |
| Um1.UrlConfiguration = qm1 | |
| }) | |
| var kl = _((Em1) => { | |
| Object.defineProperty(Em1, '__esModule', { value: !0 }) | |
| Em1._notifyVisibilityChanged = | |
| Em1._subscribeToVisiblityChanged = | |
| Em1._isUnloading = | |
| Em1._isCurrentlyVisible = | |
| void 0 | |
| var ll = AJ(), | |
| jl = 'foreground', | |
| f41 = 'background', | |
| Rm1 = [], | |
| U41 = jl, | |
| R41 = !1, | |
| tC4 = () => { | |
| return U41 === jl | |
| } | |
| Em1._isCurrentlyVisible = tC4 | |
| var IV4 = () => R41 | |
| Em1._isUnloading = IV4 | |
| var GV4 = (I) => { | |
| Rm1.unshift(I) | |
| } | |
| Em1._subscribeToVisiblityChanged = GV4 | |
| var ZV4 = (I) => { | |
| if (I === U41) return | |
| ;(U41 = I), Rm1.forEach((G) => G(I)) | |
| } | |
| Em1._notifyVisibilityChanged = ZV4 | |
| ll._addWindowEventListenerSafe('focus', () => { | |
| ;(R41 = !1), Em1._notifyVisibilityChanged(jl) | |
| }) | |
| ll._addWindowEventListenerSafe('blur', () => Em1._notifyVisibilityChanged(f41)) | |
| ll._addWindowEventListenerSafe('beforeunload', () => { | |
| ;(R41 = !0), Em1._notifyVisibilityChanged(f41) | |
| }) | |
| ll._addDocumentEventListenerSafe('visibilitychange', () => { | |
| Em1._notifyVisibilityChanged(document.visibilityState === 'visible' ? jl : f41) | |
| }) | |
| }) | |
| var v41 = _((pz) => { | |
| var xz = | |
| (pz && pz.__awaiter) || | |
| function (I, G, Z, d) { | |
| function W(w) { | |
| return w instanceof Z | |
| ? w | |
| : new Z(function (B) { | |
| B(w) | |
| }) | |
| } | |
| return new (Z || (Z = Promise))(function (w, B) { | |
| function C(X) { | |
| try { | |
| A(d.next(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function V(X) { | |
| try { | |
| A(d.throw(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function A(X) { | |
| X.done ? w(X.value) : W(X.value).then(C, V) | |
| } | |
| A((d = d.apply(I, G || [])).next()) | |
| }) | |
| } | |
| Object.defineProperty(pz, '__esModule', { value: !0 }) | |
| pz.EventLogger = void 0 | |
| var BV4 = IM(), | |
| CV4 = kz(), | |
| dM = v7(), | |
| vm1 = GM(), | |
| E41 = AJ(), | |
| VV4 = N41(), | |
| cz = sV(), | |
| AV4 = q41(), | |
| Mm1 = kl(), | |
| XV4 = 100, | |
| YV4 = 1e4, | |
| _V4 = 1000, | |
| DV4 = 600000, | |
| HV4 = 500, | |
| Sm1 = 200, | |
| WM = {}, | |
| hl = { Startup: 'startup', GainedFocus: 'gained_focus' } | |
| class XJ { | |
| static _safeFlushAndForget(I) { | |
| var G | |
| ;(G = WM[I]) === null || G === void 0 || G.flush().catch(() => {}) | |
| } | |
| static _safeRetryFailedLogs(I) { | |
| var G | |
| ;(G = WM[I]) === null || G === void 0 || G._retryFailedLogs(hl.GainedFocus) | |
| } | |
| constructor(I, G, Z, d) { | |
| var W | |
| ;(this._sdkKey = I), | |
| (this._emitter = G), | |
| (this._network = Z), | |
| (this._options = d), | |
| (this._queue = []), | |
| (this._lastExposureTimeMap = {}), | |
| (this._nonExposedChecks = {}), | |
| (this._hasRunQuickFlush = !1), | |
| (this._creationTime = Date.now()), | |
| (this._isLoggingDisabled = (d === null || d === void 0 ? void 0 : d.disableLogging) === !0), | |
| (this._maxQueueSize = | |
| (W = d === null || d === void 0 ? void 0 : d.loggingBufferMaxSize) !== null && | |
| W !== void 0 | |
| ? W | |
| : XV4) | |
| let w = d === null || d === void 0 ? void 0 : d.networkConfig | |
| this._logEventUrlConfig = new AV4.UrlConfiguration( | |
| vm1.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) | |
| ) | |
| XJ._safeFlushAndForget(this._sdkKey) | |
| } | |
| incrementNonExposureCount(I) { | |
| var G | |
| let Z = (G = this._nonExposedChecks[I]) !== null && G !== void 0 ? G : 0 | |
| this._nonExposedChecks[I] = Z + 1 | |
| } | |
| reset() { | |
| this._lastExposureTimeMap = {} | |
| } | |
| start() { | |
| if (E41._isServerEnv()) return | |
| ;(WM[this._sdkKey] = this), | |
| Mm1._subscribeToVisiblityChanged((I) => { | |
| if (I === 'background') XJ._safeFlushAndForget(this._sdkKey) | |
| else if (I === 'foreground') XJ._safeRetryFailedLogs(this._sdkKey) | |
| }), | |
| this._retryFailedLogs(hl.Startup), | |
| this._startBackgroundFlushInterval() | |
| } | |
| stop() { | |
| return xz(this, void 0, void 0, function* () { | |
| if (this._flushIntervalId) | |
| clearInterval(this._flushIntervalId), (this._flushIntervalId = null) | |
| delete WM[this._sdkKey], yield this.flush() | |
| }) | |
| } | |
| flush() { | |
| return xz(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 > Sm1)) return | |
| setTimeout(() => XJ._safeFlushAndForget(this._sdkKey), Sm1) | |
| } | |
| _shouldLogEvent(I) { | |
| if (E41._isServerEnv()) return !1 | |
| if (!VV4._isExposureEvent(I)) return !0 | |
| let G = I.user ? I.user : { statsigEnvironment: void 0 }, | |
| Z = BV4._getUserStorageKey(this._sdkKey, G), | |
| d = I.metadata ? I.metadata : {}, | |
| W = [ | |
| I.eventName, | |
| Z, | |
| d.gate, | |
| d.config, | |
| d.ruleID, | |
| d.allocatedExperiment, | |
| d.parameterName, | |
| String(d.isExplicitParameter), | |
| d.reason, | |
| ].join('|'), | |
| w = this._lastExposureTimeMap[W], | |
| B = Date.now() | |
| if (w && B - w < DV4) return !1 | |
| if (Object.keys(this._lastExposureTimeMap).length > _V4) this._lastExposureTimeMap = {} | |
| return (this._lastExposureTimeMap[W] = B), !0 | |
| } | |
| _sendEvents(I) { | |
| var G, Z | |
| return xz(this, void 0, void 0, function* () { | |
| if (this._isLoggingDisabled) return this._saveFailedLogsToStorage(I), !1 | |
| try { | |
| let W = | |
| Mm1._isUnloading() && | |
| this._network.isBeaconSupported() && | |
| ((Z = (G = this._options) === null || G === void 0 ? void 0 : G.networkConfig) === | |
| null || Z === void 0 | |
| ? void 0 | |
| : Z.networkOverrideFunc) == null | |
| if ( | |
| (this._emitter({ name: 'pre_logs_flushed', events: I }), | |
| (W ? yield this._sendEventsViaBeacon(I) : yield this._sendEventsViaPost(I)).success) | |
| ) | |
| return this._emitter({ name: 'logs_flushed', events: I }), !0 | |
| else return dM.Log.warn('Failed to flush events.'), this._saveFailedLogsToStorage(I), !1 | |
| } catch (d) { | |
| return dM.Log.warn('Failed to flush events.'), !1 | |
| } | |
| }) | |
| } | |
| _sendEventsViaPost(I) { | |
| var G | |
| return xz(this, void 0, void 0, function* () { | |
| let Z = yield this._network.post(this._getRequestData(I)), | |
| d = (G = Z === null || Z === void 0 ? void 0 : Z.code) !== null && G !== void 0 ? G : -1 | |
| return { success: d >= 200 && d < 300 } | |
| }) | |
| } | |
| _sendEventsViaBeacon(I) { | |
| return xz(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: { [vm1.NetworkParam.EventCount]: String(I.length) }, | |
| } | |
| } | |
| _saveFailedLogsToStorage(I) { | |
| while (I.length > HV4) I.shift() | |
| let G = this._getStorageKey() | |
| try { | |
| cz._setObjectInStorage(G, I) | |
| } catch (Z) { | |
| dM.Log.warn('Unable to save failed logs to storage') | |
| } | |
| } | |
| _retryFailedLogs(I) { | |
| let G = this._getStorageKey() | |
| ;(() => | |
| xz(this, void 0, void 0, function* () { | |
| if (!cz.Storage.isReady()) yield cz.Storage.isReadyResolver() | |
| let Z = cz._getObjectFromStorage(G) | |
| if (!Z) return | |
| if (I === hl.Startup) cz.Storage.removeItem(G) | |
| if ((yield this._sendEvents(Z)) && I === hl.GainedFocus) cz.Storage.removeItem(G) | |
| }))().catch(() => { | |
| dM.Log.warn('Failed to flush stored logs') | |
| }) | |
| } | |
| _getStorageKey() { | |
| return `statsig.failed_logs.${CV4._DJB2(this._sdkKey)}` | |
| } | |
| _normalizeAndAppendEvent(I) { | |
| if (I.user) (I.user = Object.assign({}, I.user)), delete I.user.privateAttributes | |
| let G = {}, | |
| Z = this._getCurrentPageUrl() | |
| if (Z) G.statsigMetadata = { currentPage: Z } | |
| let d = Object.assign(Object.assign({}, I), G) | |
| dM.Log.debug('Enqueued Event:', d), this._queue.push(d) | |
| } | |
| _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 E41._getCurrentPageUrlSafe() | |
| } | |
| _startBackgroundFlushInterval() { | |
| var I, G | |
| let Z = | |
| (G = (I = this._options) === null || I === void 0 ? void 0 : I.loggingIntervalMs) !== | |
| null && G !== void 0 | |
| ? G | |
| : YV4, | |
| d = setInterval(() => { | |
| let W = WM[this._sdkKey] | |
| if (!W || W._flushIntervalId !== d) clearInterval(d) | |
| else XJ._safeFlushAndForget(this._sdkKey) | |
| }, Z) | |
| this._flushIntervalId = d | |
| } | |
| } | |
| pz.EventLogger = XJ | |
| }) | |
| var wM = _((Lm1) => { | |
| Object.defineProperty(Lm1, '__esModule', { value: !0 }) | |
| Lm1.StatsigMetadataProvider = Lm1.SDK_VERSION = void 0 | |
| Lm1.SDK_VERSION = '3.12.0' | |
| var M41 = { sdkVersion: Lm1.SDK_VERSION, sdkType: 'js-mono' } | |
| Lm1.StatsigMetadataProvider = { | |
| get: () => M41, | |
| add: (I) => { | |
| M41 = Object.assign(Object.assign({}, M41), I) | |
| }, | |
| } | |
| }) | |
| var Om1 = _((Pm1) => { | |
| Object.defineProperty(Pm1, '__esModule', { value: !0 }) | |
| }) | |
| var xl = _((um1) => { | |
| Object.defineProperty(um1, '__esModule', { value: !0 }) | |
| um1.getUUID = void 0 | |
| function FV4() { | |
| if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') | |
| return crypto.randomUUID() | |
| let I = new Date().getTime(), | |
| G = (typeof performance !== 'undefined' && performance.now && performance.now() * 1000) || 0 | |
| return `xxxxxxxx-xxxx-4xxx-${'89ab'[Math.floor(Math.random() * 4)]}xxx-xxxxxxxxxxxx`.replace( | |
| /[xy]/g, | |
| (d) => { | |
| let W = Math.random() * 16 | |
| if (I > 0) (W = (I + W) % 16 | 0), (I = Math.floor(I / 16)) | |
| else (W = (G + W) % 16 | 0), (G = Math.floor(G / 16)) | |
| return (d === 'x' ? W : (W & 7) | 8).toString(16) | |
| }, | |
| ) | |
| } | |
| um1.getUUID = FV4 | |
| }) | |
| var pl = _((jm1) => { | |
| Object.defineProperty(jm1, '__esModule', { value: !0 }) | |
| jm1.StableID = void 0 | |
| var JV4 = IM(), | |
| KV4 = v7(), | |
| bm1 = sV(), | |
| gV4 = xl(), | |
| cl = {} | |
| jm1.StableID = { | |
| get: (I) => { | |
| if (cl[I] == null) { | |
| let G = NV4(I) | |
| if (G == null) (G = gV4.getUUID()), mm1(G, I) | |
| cl[I] = G | |
| } | |
| return cl[I] | |
| }, | |
| setOverride: (I, G) => { | |
| ;(cl[G] = I), mm1(I, G) | |
| }, | |
| } | |
| function lm1(I) { | |
| return `statsig.stable_id.${JV4._getStorageKey(I)}` | |
| } | |
| function mm1(I, G) { | |
| let Z = lm1(G) | |
| try { | |
| bm1._setObjectInStorage(Z, I) | |
| } catch (d) { | |
| KV4.Log.warn('Failed to save StableID') | |
| } | |
| } | |
| function NV4(I) { | |
| let G = lm1(I) | |
| return bm1._getObjectFromStorage(G) | |
| } | |
| }) | |
| var S41 = _((hm1) => { | |
| Object.defineProperty(hm1, '__esModule', { value: !0 }) | |
| hm1._getFullUserHash = hm1._normalizeUser = void 0 | |
| var zV4 = kz(), | |
| QV4 = v7() | |
| function qV4(I, G, Z) { | |
| try { | |
| let d = JSON.parse(JSON.stringify(I)) | |
| if (G != null && G.environment != null) d.statsigEnvironment = G.environment | |
| else if (Z != null) d.statsigEnvironment = { tier: Z } | |
| return d | |
| } catch (d) { | |
| return QV4.Log.error('Failed to JSON.stringify user'), { statsigEnvironment: void 0 } | |
| } | |
| } | |
| hm1._normalizeUser = qV4 | |
| function UV4(I) { | |
| return I ? zV4._DJB2Object(I) : null | |
| } | |
| hm1._getFullUserHash = UV4 | |
| }) | |
| var L41 = _((cm1) => { | |
| Object.defineProperty(cm1, '__esModule', { value: !0 }) | |
| cm1._typedJsonParse = void 0 | |
| var RV4 = v7() | |
| function EV4(I, G, Z) { | |
| try { | |
| let d = JSON.parse(I) | |
| if (d && typeof d === 'object' && G in d) return d | |
| } catch (d) {} | |
| return RV4.Log.error(`Failed to parse ${Z}`), null | |
| } | |
| cm1._typedJsonParse = EV4 | |
| }) | |
| var om1 = _((OY) => { | |
| var $41 = | |
| (OY && OY.__awaiter) || | |
| function (I, G, Z, d) { | |
| function W(w) { | |
| return w instanceof Z | |
| ? w | |
| : new Z(function (B) { | |
| B(w) | |
| }) | |
| } | |
| return new (Z || (Z = Promise))(function (w, B) { | |
| function C(X) { | |
| try { | |
| A(d.next(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function V(X) { | |
| try { | |
| A(d.throw(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function A(X) { | |
| X.done ? w(X.value) : W(X.value).then(C, V) | |
| } | |
| A((d = d.apply(I, G || [])).next()) | |
| }) | |
| } | |
| Object.defineProperty(OY, '__esModule', { value: !0 }) | |
| OY._makeDataAdapterResult = OY.DataAdapterCore = void 0 | |
| var il = v7(), | |
| vV4 = pl(), | |
| nl = S41(), | |
| PY = sV(), | |
| im1 = L41(), | |
| nm1 = 10 | |
| class am1 { | |
| constructor(I, G) { | |
| ;(this._adapterName = I), | |
| (this._cacheSuffix = G), | |
| (this._options = null), | |
| (this._sdkKey = null), | |
| (this._lastModifiedStoreKey = `statsig.last_modified_time.${G}`), | |
| (this._inMemoryCache = new rm1()) | |
| } | |
| attach(I, G) { | |
| ;(this._sdkKey = I), (this._options = G) | |
| } | |
| getDataSync(I) { | |
| let G = I && nl._normalizeUser(I, this._options), | |
| Z = this._getCacheKey(G), | |
| d = this._inMemoryCache.get(Z, G) | |
| if (d) return d | |
| let W = this._loadFromCache(Z) | |
| if (W) return this._inMemoryCache.add(Z, W), this._inMemoryCache.get(Z, G) | |
| return null | |
| } | |
| setData(I, G) { | |
| let Z = G && nl._normalizeUser(G, this._options), | |
| d = this._getCacheKey(Z) | |
| this._inMemoryCache.add(d, al('Bootstrap', I, null, Z)) | |
| } | |
| _getDataAsyncImpl(I, G, Z) { | |
| return $41(this, void 0, void 0, function* () { | |
| if (!PY.Storage.isReady()) yield PY.Storage.isReadyResolver() | |
| let d = I !== null && I !== void 0 ? I : this.getDataSync(G), | |
| W = [this._fetchAndPrepFromNetwork(d, G, Z)] | |
| if (Z === null || Z === void 0 ? void 0 : Z.timeoutMs) | |
| W.push( | |
| new Promise((w) => setTimeout(w, Z.timeoutMs)).then(() => { | |
| return il.Log.debug('Fetching latest value timed out'), null | |
| }), | |
| ) | |
| return yield Promise.race(W) | |
| }) | |
| } | |
| _prefetchDataImpl(I, G) { | |
| return $41(this, void 0, void 0, function* () { | |
| let Z = I && nl._normalizeUser(I, this._options), | |
| d = this._getCacheKey(Z), | |
| W = yield this._getDataAsyncImpl(null, Z, G) | |
| if (W) | |
| this._inMemoryCache.add(d, Object.assign(Object.assign({}, W), { source: 'Prefetch' })) | |
| }) | |
| } | |
| _fetchAndPrepFromNetwork(I, G, Z) { | |
| return $41(this, void 0, void 0, function* () { | |
| let d = null | |
| if (I && this._isCachedResultValidFor204(I, G)) d = I.data | |
| let W = yield this._fetchFromNetwork(d, G, Z) | |
| if (!W) return il.Log.debug('No response returned for latest value'), null | |
| let w = im1._typedJsonParse(W, 'has_updates', 'Response'), | |
| B = this._getSdkKey(), | |
| C = vV4.StableID.get(B), | |
| V = null | |
| if ((w === null || w === void 0 ? void 0 : w.has_updates) === !0) V = al('Network', W, C, G) | |
| else if (d && (w === null || w === void 0 ? void 0 : w.has_updates) === !1) | |
| V = al('NetworkNotModified', d, C, G) | |
| else return null | |
| let A = this._getCacheKey(G) | |
| return this._inMemoryCache.add(A, V), this._writeToCache(A, V), V | |
| }) | |
| } | |
| _getSdkKey() { | |
| if (this._sdkKey != null) return this._sdkKey | |
| return il.Log.error(`${this._adapterName} is not attached to a Client`), '' | |
| } | |
| _loadFromCache(I) { | |
| var G | |
| let Z = (G = PY.Storage.getItem) === null || G === void 0 ? void 0 : G.call(PY.Storage, I) | |
| if (Z == null) return null | |
| let d = im1._typedJsonParse(Z, 'source', 'Cached Result') | |
| return d ? Object.assign(Object.assign({}, d), { source: 'Cache' }) : null | |
| } | |
| _writeToCache(I, G) { | |
| PY.Storage.setItem(I, JSON.stringify(G)), this._runLocalStorageCacheEviction(I) | |
| } | |
| _runLocalStorageCacheEviction(I) { | |
| var G | |
| let Z = | |
| (G = PY._getObjectFromStorage(this._lastModifiedStoreKey)) !== null && G !== void 0 ? G : {} | |
| Z[I] = Date.now() | |
| let d = sm1(Z, nm1) | |
| if (d) delete Z[d], PY.Storage.removeItem(d) | |
| PY._setObjectInStorage(this._lastModifiedStoreKey, Z) | |
| } | |
| } | |
| OY.DataAdapterCore = am1 | |
| function al(I, G, Z, d) { | |
| return { | |
| source: I, | |
| data: G, | |
| receivedAt: Date.now(), | |
| stableID: Z, | |
| fullUserHash: nl._getFullUserHash(d), | |
| } | |
| } | |
| OY._makeDataAdapterResult = al | |
| class rm1 { | |
| constructor() { | |
| this._data = {} | |
| } | |
| get(I, G) { | |
| var Z | |
| let d = this._data[I], | |
| W = d === null || d === void 0 ? void 0 : d.stableID, | |
| w = | |
| (Z = G === null || G === void 0 ? void 0 : G.customIDs) === null || Z === void 0 | |
| ? void 0 | |
| : Z.stableID | |
| if (w && W && w !== W) return il.Log.warn("'StatsigUser.customIDs.stableID' mismatch"), null | |
| return d | |
| } | |
| add(I, G) { | |
| let Z = sm1(this._data, nm1 - 1) | |
| if (Z) delete this._data[Z] | |
| this._data[I] = G | |
| } | |
| merge(I) { | |
| this._data = Object.assign(Object.assign({}, this._data), I) | |
| } | |
| } | |
| function sm1(I, G) { | |
| let Z = Object.keys(I) | |
| if (Z.length <= G) return null | |
| return Z.reduce((d, W) => { | |
| let w = I[d], | |
| B = I[W] | |
| if (typeof w === 'object' && typeof B === 'object') return B.receivedAt < w.receivedAt ? W : d | |
| return B < w ? W : d | |
| }) | |
| } | |
| }) | |
| var tm1 = _((em1) => { | |
| Object.defineProperty(em1, '__esModule', { value: !0 }) | |
| }) | |
| var rl = _((Gb1) => { | |
| Object.defineProperty(Gb1, '__esModule', { value: !0 }) | |
| Gb1.SDKType = void 0 | |
| var Ib1 = {}, | |
| iz | |
| Gb1.SDKType = { | |
| _get: (I) => { | |
| var G | |
| return ( | |
| ((G = Ib1[I]) !== null && G !== void 0 ? G : 'js-mono') + | |
| (iz !== null && iz !== void 0 ? iz : '') | |
| ) | |
| }, | |
| _setClientType(I, G) { | |
| Ib1[I] = G | |
| }, | |
| _setBindingType(I) { | |
| if (!iz || iz === '-react') iz = '-' + I | |
| }, | |
| } | |
| }) | |
| var y41 = _((oV) => { | |
| var MV4 = | |
| (oV && oV.__awaiter) || | |
| function (I, G, Z, d) { | |
| function W(w) { | |
| return w instanceof Z | |
| ? w | |
| : new Z(function (B) { | |
| B(w) | |
| }) | |
| } | |
| return new (Z || (Z = Promise))(function (w, B) { | |
| function C(X) { | |
| try { | |
| A(d.next(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function V(X) { | |
| try { | |
| A(d.throw(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function A(X) { | |
| X.done ? w(X.value) : W(X.value).then(C, V) | |
| } | |
| A((d = d.apply(I, G || [])).next()) | |
| }) | |
| } | |
| Object.defineProperty(oV, '__esModule', { value: !0 }) | |
| oV.ErrorBoundary = oV.EXCEPTION_ENDPOINT = void 0 | |
| var SV4 = v7(), | |
| LV4 = rl(), | |
| $V4 = wM() | |
| oV.EXCEPTION_ENDPOINT = 'https://statsigapi.net/v1/sdk_exception' | |
| var Wb1 = '[Statsig] UnknownError' | |
| class wb1 { | |
| constructor(I, G, Z, d) { | |
| ;(this._sdkKey = I), | |
| (this._options = G), | |
| (this._emitter = Z), | |
| (this._lastSeenError = d), | |
| (this._seen = new Set()) | |
| } | |
| wrap(I) { | |
| try { | |
| let G = I | |
| PV4(G).forEach((Z) => { | |
| let d = G[Z] | |
| if ('$EB' in d) return | |
| ;(G[Z] = (...W) => { | |
| return this._capture(Z, () => d.apply(I, W)) | |
| }), | |
| (G[Z].$EB = !0) | |
| }) | |
| } catch (G) { | |
| this._onError('eb:wrap', G) | |
| } | |
| } | |
| logError(I, G) { | |
| this._onError(I, G) | |
| } | |
| 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 = db1(I) | |
| } | |
| _capture(I, G) { | |
| try { | |
| let Z = G() | |
| if (Z && Z instanceof Promise) return Z.catch((d) => this._onError(I, d)) | |
| return Z | |
| } catch (Z) { | |
| return this._onError(I, Z), null | |
| } | |
| } | |
| _onError(I, G) { | |
| try { | |
| SV4.Log.warn(`Caught error in ${I}`, { error: G }), | |
| (() => | |
| MV4(this, void 0, void 0, function* () { | |
| var d, W, w, B, C, V, A | |
| let X = G ? G : Error(Wb1), | |
| Y = X instanceof Error, | |
| H = Y ? X.name : 'No Name', | |
| J = db1(X) | |
| if (((this._lastSeenError = J), this._seen.has(H))) return | |
| if ( | |
| (this._seen.add(H), | |
| (W = (d = this._options) === null || d === void 0 ? void 0 : d.networkConfig) === | |
| null || W === void 0 | |
| ? void 0 | |
| : W.preventAllNetworkTraffic) | |
| ) { | |
| ;(w = this._emitter) === null || | |
| w === void 0 || | |
| w.call(this, { name: 'error', error: G, tag: I }) | |
| return | |
| } | |
| let K = LV4.SDKType._get(this._sdkKey), | |
| g = $V4.StatsigMetadataProvider.get(), | |
| z = Y ? X.stack : yV4(X), | |
| f = JSON.stringify( | |
| Object.assign( | |
| { tag: I, exception: H, info: z }, | |
| Object.assign(Object.assign({}, g), { sdkType: K }), | |
| ), | |
| ) | |
| yield ( | |
| (V = | |
| (C = (B = this._options) === null || B === void 0 ? void 0 : B.networkConfig) === | |
| null || C === void 0 | |
| ? void 0 | |
| : C.networkOverrideFunc) !== null && V !== void 0 | |
| ? V | |
| : fetch | |
| )(oV.EXCEPTION_ENDPOINT, { | |
| method: 'POST', | |
| headers: { | |
| 'STATSIG-API-KEY': this._sdkKey, | |
| 'STATSIG-SDK-TYPE': String(K), | |
| 'STATSIG-SDK-VERSION': String(g.sdkVersion), | |
| 'Content-Type': 'application/json', | |
| }, | |
| body: f, | |
| }), | |
| (A = this._emitter) === null || | |
| A === void 0 || | |
| A.call(this, { name: 'error', error: G, tag: I }) | |
| }))() | |
| .then(() => {}) | |
| .catch(() => {}) | |
| } catch (Z) {} | |
| } | |
| } | |
| oV.ErrorBoundary = wb1 | |
| function db1(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 yV4(I) { | |
| try { | |
| return JSON.stringify(I) | |
| } catch (G) { | |
| return Wb1 | |
| } | |
| } | |
| function PV4(I) { | |
| let G = new Set(), | |
| Z = Object.getPrototypeOf(I) | |
| while (Z && Z !== Object.prototype) | |
| Object.getOwnPropertyNames(Z) | |
| .filter((d) => typeof (Z === null || Z === void 0 ? void 0 : Z[d]) === 'function') | |
| .forEach((d) => G.add(d)), | |
| (Z = Object.getPrototypeOf(Z)) | |
| return Array.from(G) | |
| } | |
| }) | |
| var Cb1 = _((Bb1) => { | |
| Object.defineProperty(Bb1, '__esModule', { value: !0 }) | |
| }) | |
| var Ab1 = _((Vb1) => { | |
| Object.defineProperty(Vb1, '__esModule', { value: !0 }) | |
| }) | |
| var Yb1 = _((Xb1) => { | |
| Object.defineProperty(Xb1, '__esModule', { value: !0 }) | |
| }) | |
| var P41 = _((_b1) => { | |
| Object.defineProperty(_b1, '__esModule', { value: !0 }) | |
| _b1.createMemoKey = _b1.MemoPrefix = void 0 | |
| _b1.MemoPrefix = { | |
| _gate: 'g', | |
| _dynamicConfig: 'c', | |
| _experiment: 'e', | |
| _layer: 'l', | |
| _paramStore: 'p', | |
| } | |
| var OV4 = new Set([]), | |
| uV4 = new Set(['userPersistedValues']) | |
| function TV4(I, G, Z) { | |
| let d = `${I}|${G}` | |
| if (!Z) return d | |
| for (let W of Object.keys(Z)) { | |
| if (uV4.has(W)) return | |
| if (OV4.has(W)) d += `|${W}=true` | |
| else d += `|${W}=${Z[W]}` | |
| } | |
| return d | |
| } | |
| _b1.createMemoKey = TV4 | |
| }) | |
| var Hb1 = _((nz) => { | |
| var bV4 = | |
| (nz && nz.__awaiter) || | |
| function (I, G, Z, d) { | |
| function W(w) { | |
| return w instanceof Z | |
| ? w | |
| : new Z(function (B) { | |
| B(w) | |
| }) | |
| } | |
| return new (Z || (Z = Promise))(function (w, B) { | |
| function C(X) { | |
| try { | |
| A(d.next(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function V(X) { | |
| try { | |
| A(d.throw(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function A(X) { | |
| X.done ? w(X.value) : W(X.value).then(C, V) | |
| } | |
| A((d = d.apply(I, G || [])).next()) | |
| }) | |
| } | |
| Object.defineProperty(nz, '__esModule', { value: !0 }) | |
| nz._fetchTxtRecords = void 0 | |
| var lV4 = 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, | |
| ]), | |
| jV4 = 'https://cloudflare-dns.com/dns-query', | |
| kV4 = ['i', 'e', 'd'], | |
| hV4 = 200 | |
| function xV4(I) { | |
| return bV4(this, void 0, void 0, function* () { | |
| let G = yield I(jV4, { | |
| method: 'POST', | |
| headers: { 'Content-Type': 'application/dns-message', Accept: 'application/dns-message' }, | |
| body: lV4, | |
| }) | |
| if (!G.ok) { | |
| let W = new Error('Failed to fetch TXT records from DNS') | |
| throw ((W.name = 'DnsTxtFetchError'), W) | |
| } | |
| let Z = yield G.arrayBuffer(), | |
| d = new Uint8Array(Z) | |
| return cV4(d) | |
| }) | |
| } | |
| nz._fetchTxtRecords = xV4 | |
| function cV4(I) { | |
| let G = I.findIndex( | |
| (d, W) => | |
| W < hV4 && String.fromCharCode(d) === '=' && kV4.includes(String.fromCharCode(I[W - 1])), | |
| ) | |
| if (G === -1) { | |
| let d = new Error('Failed to parse TXT records from DNS') | |
| throw ((d.name = 'DnsTxtParseError'), d) | |
| } | |
| let Z = '' | |
| for (let d = G - 1; d < I.length; d++) Z += String.fromCharCode(I[d]) | |
| return Z.split(',') | |
| } | |
| }) | |
| var Qb1 = _((uY) => { | |
| var Fb1 = | |
| (uY && uY.__awaiter) || | |
| function (I, G, Z, d) { | |
| function W(w) { | |
| return w instanceof Z | |
| ? w | |
| : new Z(function (B) { | |
| B(w) | |
| }) | |
| } | |
| return new (Z || (Z = Promise))(function (w, B) { | |
| function C(X) { | |
| try { | |
| A(d.next(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function V(X) { | |
| try { | |
| A(d.throw(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function A(X) { | |
| X.done ? w(X.value) : W(X.value).then(C, V) | |
| } | |
| A((d = d.apply(I, G || [])).next()) | |
| }) | |
| } | |
| Object.defineProperty(uY, '__esModule', { value: !0 }) | |
| uY._isDomainFailure = uY.NetworkFallbackResolver = void 0 | |
| var pV4 = Hb1(), | |
| iV4 = kz(), | |
| nV4 = v7(), | |
| u41 = sV(), | |
| Jb1 = 604800000, | |
| aV4 = 14400000 | |
| class gb1 { | |
| constructor(I) { | |
| var G | |
| ;(this._fallbackInfo = null), | |
| (this._errorBoundary = null), | |
| (this._dnsQueryCooldowns = {}), | |
| (this._networkOverrideFunc = | |
| (G = I.networkConfig) === null || G === void 0 ? void 0 : G.networkOverrideFunc) | |
| } | |
| setErrorBoundary(I) { | |
| this._errorBoundary = I | |
| } | |
| tryBumpExpiryTime(I, G) { | |
| var Z | |
| let d = (Z = this._fallbackInfo) === null || Z === void 0 ? void 0 : Z[G.endpoint] | |
| if (!d) return | |
| ;(d.expiryTime = Date.now() + Jb1), | |
| O41(I, Object.assign(Object.assign({}, this._fallbackInfo), { [G.endpoint]: d })) | |
| } | |
| getActiveFallbackUrl(I, G) { | |
| var Z, d | |
| let W = this._fallbackInfo | |
| if (W == null) (W = (Z = rV4(I)) !== null && Z !== void 0 ? Z : {}), (this._fallbackInfo = W) | |
| let w = W[G.endpoint] | |
| if (!w || Date.now() > ((d = w.expiryTime) !== null && d !== void 0 ? d : 0)) | |
| return delete W[G.endpoint], (this._fallbackInfo = W), O41(I, this._fallbackInfo), null | |
| if (w.url) return w.url | |
| return null | |
| } | |
| getFallbackFromProvided(I) { | |
| let G = Kb1(I) | |
| if (G) return I.replace(G, '') | |
| return null | |
| } | |
| tryFetchUpdatedFallbackInfo(I, G, Z, d) { | |
| var W, w | |
| return Fb1(this, void 0, void 0, function* () { | |
| try { | |
| if (!Nb1(Z, d)) return !1 | |
| let C = | |
| G.customUrl == null && G.fallbackUrls == null | |
| ? yield this._tryFetchFallbackUrlsFromNetwork(G) | |
| : G.fallbackUrls, | |
| V = this._pickNewFallbackUrl( | |
| (W = this._fallbackInfo) === null || W === void 0 ? void 0 : W[G.endpoint], | |
| C, | |
| ) | |
| if (!V) return !1 | |
| return this._updateFallbackInfoWithNewUrl(I, G.endpoint, V), !0 | |
| } catch (B) { | |
| return ( | |
| (w = this._errorBoundary) === null || | |
| w === void 0 || | |
| w.logError('tryFetchUpdatedFallbackInfo', B), | |
| !1 | |
| ) | |
| } | |
| }) | |
| } | |
| _updateFallbackInfoWithNewUrl(I, G, Z) { | |
| var d, W, w | |
| let B = { url: Z, expiryTime: Date.now() + Jb1, previous: [] }, | |
| C = (d = this._fallbackInfo) === null || d === void 0 ? void 0 : d[G] | |
| if (C) B.previous.push(...C.previous) | |
| if (B.previous.length > 10) B.previous = [] | |
| let V = | |
| (w = (W = this._fallbackInfo) === null || W === void 0 ? void 0 : W[G]) === null || | |
| w === void 0 | |
| ? void 0 | |
| : w.url | |
| if (V != null) B.previous.push(V) | |
| ;(this._fallbackInfo = Object.assign(Object.assign({}, this._fallbackInfo), { [G]: B })), | |
| O41(I, this._fallbackInfo) | |
| } | |
| _tryFetchFallbackUrlsFromNetwork(I) { | |
| var G | |
| return Fb1(this, void 0, void 0, function* () { | |
| let Z = this._dnsQueryCooldowns[I.endpoint] | |
| if (Z && Date.now() < Z) return null | |
| this._dnsQueryCooldowns[I.endpoint] = Date.now() + aV4 | |
| let d = [], | |
| W = yield pV4._fetchTxtRecords( | |
| (G = this._networkOverrideFunc) !== null && G !== void 0 ? G : fetch, | |
| ), | |
| w = Kb1(I.defaultUrl) | |
| for (let B of W) { | |
| if (!B.startsWith(I.endpointDnsKey + '=')) continue | |
| let C = B.split('=') | |
| if (C.length > 1) { | |
| let V = C[1] | |
| if (V.endsWith('/')) V = V.slice(0, -1) | |
| d.push(`https://${V}${w}`) | |
| } | |
| } | |
| return d | |
| }) | |
| } | |
| _pickNewFallbackUrl(I, G) { | |
| var Z | |
| if (G == null) return null | |
| let d = new Set( | |
| (Z = I === null || I === void 0 ? void 0 : I.previous) !== null && Z !== void 0 ? Z : [], | |
| ), | |
| W = I === null || I === void 0 ? void 0 : I.url, | |
| w = null | |
| for (let B of G) { | |
| let C = B.endsWith('/') ? B.slice(0, -1) : B | |
| if (!d.has(B) && C !== W) { | |
| w = C | |
| break | |
| } | |
| } | |
| return w | |
| } | |
| } | |
| uY.NetworkFallbackResolver = gb1 | |
| function Nb1(I, G) { | |
| var Z | |
| let d = | |
| (Z = I === null || I === void 0 ? void 0 : I.toLowerCase()) !== null && Z !== void 0 ? Z : '' | |
| return ( | |
| G || | |
| d.includes('uncaught exception') || | |
| d.includes('failed to fetch') || | |
| d.includes('networkerror when attempting to fetch resource') | |
| ) | |
| } | |
| uY._isDomainFailure = Nb1 | |
| function zb1(I) { | |
| return `statsig.network_fallback.${iV4._DJB2(I)}` | |
| } | |
| function O41(I, G) { | |
| let Z = zb1(I) | |
| if (!G || Object.keys(G).length === 0) { | |
| u41.Storage.removeItem(Z) | |
| return | |
| } | |
| u41.Storage.setItem(Z, JSON.stringify(G)) | |
| } | |
| function rV4(I) { | |
| let G = zb1(I), | |
| Z = u41.Storage.getItem(G) | |
| if (!Z) return null | |
| try { | |
| return JSON.parse(Z) | |
| } catch (d) { | |
| return nV4.Log.error('Failed to parse FallbackInfo'), null | |
| } | |
| } | |
| function Kb1(I) { | |
| try { | |
| return new URL(I).pathname | |
| } catch (G) { | |
| return null | |
| } | |
| } | |
| }) | |
| var ol = _((Mb1) => { | |
| Object.defineProperty(Mb1, '__esModule', { value: !0 }) | |
| Mb1.StatsigSession = Mb1.SessionID = void 0 | |
| var sV4 = IM(), | |
| oV4 = v7(), | |
| Ub1 = sV(), | |
| fb1 = xl(), | |
| Rb1 = 1800000, | |
| Eb1 = 14400000, | |
| sl = {} | |
| Mb1.SessionID = { | |
| get: (I) => { | |
| return Mb1.StatsigSession.get(I).data.sessionID | |
| }, | |
| } | |
| Mb1.StatsigSession = { | |
| get: (I) => { | |
| if (sl[I] == null) sl[I] = eV4(I) | |
| let G = sl[I] | |
| return IA4(G) | |
| }, | |
| overrideInitialSessionID: (I, G) => { | |
| sl[G] = tV4(I, G) | |
| }, | |
| } | |
| function eV4(I) { | |
| let G = WA4(I), | |
| Z = Date.now() | |
| if (!G) G = { sessionID: fb1.getUUID(), startTime: Z, lastUpdate: Z } | |
| return { data: G, sdkKey: I } | |
| } | |
| function tV4(I, G) { | |
| let Z = Date.now() | |
| return { data: { sessionID: I, startTime: Z, lastUpdate: Z }, sdkKey: G } | |
| } | |
| function IA4(I) { | |
| let G = Date.now(), | |
| Z = I.data | |
| if (GA4(Z) || ZA4(Z)) (Z.sessionID = fb1.getUUID()), (Z.startTime = G) | |
| ;(Z.lastUpdate = G), | |
| dA4(Z, I.sdkKey), | |
| clearTimeout(I.idleTimeoutID), | |
| clearTimeout(I.ageTimeoutID) | |
| let d = G - Z.startTime, | |
| W = I.sdkKey | |
| return (I.idleTimeoutID = qb1(W, Rb1)), (I.ageTimeoutID = qb1(W, Eb1 - d)), I | |
| } | |
| function qb1(I, G) { | |
| return setTimeout(() => { | |
| let Z = __STATSIG__ === null || __STATSIG__ === void 0 ? void 0 : __STATSIG__.instance(I) | |
| if (Z) Z.$emt({ name: 'session_expired' }) | |
| }, G) | |
| } | |
| function GA4({ lastUpdate: I }) { | |
| return Date.now() - I > Rb1 | |
| } | |
| function ZA4({ startTime: I }) { | |
| return Date.now() - I > Eb1 | |
| } | |
| function vb1(I) { | |
| return `statsig.session_id.${sV4._getStorageKey(I)}` | |
| } | |
| function dA4(I, G) { | |
| let Z = vb1(G) | |
| try { | |
| Ub1._setObjectInStorage(Z, I) | |
| } catch (d) { | |
| oV4.Log.warn('Failed to save SessionID') | |
| } | |
| } | |
| function WA4(I) { | |
| let G = vb1(I) | |
| return Ub1._getObjectFromStorage(G) | |
| } | |
| }) | |
| var m41 = _((Sb1) => { | |
| Object.defineProperty(Sb1, '__esModule', { value: !0 }) | |
| Sb1.ErrorTag = void 0 | |
| Sb1.ErrorTag = { NetworkError: 'NetworkError' } | |
| }) | |
| var bb1 = _((rz) => { | |
| var az = | |
| (rz && rz.__awaiter) || | |
| function (I, G, Z, d) { | |
| function W(w) { | |
| return w instanceof Z | |
| ? w | |
| : new Z(function (B) { | |
| B(w) | |
| }) | |
| } | |
| return new (Z || (Z = Promise))(function (w, B) { | |
| function C(X) { | |
| try { | |
| A(d.next(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function V(X) { | |
| try { | |
| A(d.throw(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function A(X) { | |
| X.done ? w(X.value) : W(X.value).then(C, V) | |
| } | |
| A((d = d.apply(I, G || [])).next()) | |
| }) | |
| } | |
| Object.defineProperty(rz, '__esModule', { value: !0 }) | |
| rz.NetworkCore = void 0 | |
| VJ() | |
| var BA4 = VJ(), | |
| b41 = $l(), | |
| el = v7(), | |
| LB = GM(), | |
| CA4 = Qb1(), | |
| $b1 = rl(), | |
| VA4 = AJ(), | |
| yb1 = ol(), | |
| AA4 = pl(), | |
| XA4 = m41(), | |
| Pb1 = wM(), | |
| YA4 = kl(), | |
| _A4 = 1e4, | |
| DA4 = 500, | |
| HA4 = 30000, | |
| FA4 = 1000, | |
| Tb1 = 50, | |
| JA4 = Tb1 / FA4, | |
| KA4 = new Set([408, 500, 502, 503, 504, 522, 524, 599]) | |
| class mb1 { | |
| constructor(I, G) { | |
| if ( | |
| ((this._emitter = G), | |
| (this._errorBoundary = null), | |
| (this._timeout = _A4), | |
| (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 CA4.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 az(this, void 0, void 0, function* () { | |
| if (!Ob1(I)) return !1 | |
| let G = this._getInternalRequestArgs('POST', I), | |
| Z = yield this._getPopulatedBody(G, I.data), | |
| d = yield this._getPopulatedURL(G), | |
| W = navigator | |
| return W.sendBeacon.bind(W)(d, Z) | |
| }) | |
| } | |
| post(I) { | |
| return az(this, void 0, void 0, function* () { | |
| let G = this._getInternalRequestArgs('POST', I) | |
| if (((G.body = yield this._getPopulatedBody(G, I.data)), I.isStatsigEncodable)) | |
| G.body = this._attemptToEncodeString(G, G.body) | |
| return this._sendRequest(G) | |
| }) | |
| } | |
| get(I) { | |
| let G = this._getInternalRequestArgs('GET', I) | |
| return this._sendRequest(G) | |
| } | |
| _sendRequest(I) { | |
| var G, Z, d, W | |
| return az(this, void 0, void 0, function* () { | |
| if (!Ob1(I)) return null | |
| if (this._netConfig.preventAllNetworkTraffic) return null | |
| let { method: w, body: B, retries: C, attempt: V } = I, | |
| A = I.urlConfig.endpoint | |
| if (this._isRateLimited(A)) | |
| return ( | |
| el.Log.warn( | |
| `Request to ${A} was blocked because you are making requests too frequently.`, | |
| ), | |
| null | |
| ) | |
| let X = V !== null && V !== void 0 ? V : 1, | |
| Y = typeof AbortController !== 'undefined' ? new AbortController() : null, | |
| H = setTimeout(() => { | |
| Y === null || Y === void 0 || Y.abort(`Timeout of ${this._timeout}ms expired.`) | |
| }, this._timeout), | |
| J = yield this._getPopulatedURL(I), | |
| K = null, | |
| g = YA4._isUnloading() | |
| try { | |
| let z = { | |
| method: w, | |
| body: B, | |
| headers: Object.assign({}, I.headers), | |
| signal: Y === null || Y === void 0 ? void 0 : Y.signal, | |
| priority: I.priority, | |
| keepalive: g, | |
| } | |
| zA4(I, X) | |
| let f = this._leakyBucket[A] | |
| if (f) (f.lastRequestTime = Date.now()), (this._leakyBucket[A] = f) | |
| if ( | |
| ((K = yield ( | |
| (G = this._netConfig.networkOverrideFunc) !== null && G !== void 0 ? G : fetch | |
| )(J, z)), | |
| clearTimeout(H), | |
| !K.ok) | |
| ) { | |
| let L = yield K.text().catch(() => 'No Text'), | |
| T = new Error(`NetworkError: ${J} ${L}`) | |
| throw ((T.name = 'NetworkError'), T) | |
| } | |
| let $ = yield K.text() | |
| return ( | |
| ub1(I, K, X, $), | |
| this._fallbackResolver.tryBumpExpiryTime(I.sdkKey, I.urlConfig), | |
| { body: $, code: K.status } | |
| ) | |
| } catch (z) { | |
| let f = gA4(Y, z), | |
| S = NA4(Y) | |
| if ( | |
| (ub1(I, K, X, '', z), | |
| yield this._fallbackResolver.tryFetchUpdatedFallbackInfo(I.sdkKey, I.urlConfig, f, S)) | |
| ) | |
| I.fallbackUrl = this._fallbackResolver.getActiveFallbackUrl(I.sdkKey, I.urlConfig) | |
| if ( | |
| !C || | |
| X > C || | |
| !KA4.has( | |
| (Z = K === null || K === void 0 ? void 0 : K.status) !== null && Z !== void 0 | |
| ? Z | |
| : 500, | |
| ) | |
| ) { | |
| ;(d = this._emitter) === null || | |
| d === void 0 || | |
| d.call(this, { | |
| name: 'error', | |
| error: z, | |
| tag: XA4.ErrorTag.NetworkError, | |
| requestArgs: I, | |
| }) | |
| let L = `A networking error occurred during ${w} request to ${J}.` | |
| return ( | |
| el.Log.error(L, f, z), | |
| (W = this._errorBoundary) === null || W === void 0 || W.attachErrorIfNoneExists(L), | |
| null | |
| ) | |
| } | |
| return ( | |
| yield QA4(X), | |
| this._sendRequest(Object.assign(Object.assign({}, I), { retries: C, attempt: X + 1 })) | |
| ) | |
| } | |
| }) | |
| } | |
| _isRateLimited(I) { | |
| var G | |
| let Z = Date.now(), | |
| d = | |
| (G = this._leakyBucket[I]) !== null && G !== void 0 | |
| ? G | |
| : { count: 0, lastRequestTime: Z }, | |
| W = Z - d.lastRequestTime, | |
| w = Math.floor(W * JA4) | |
| if (((d.count = Math.max(0, d.count - w)), d.count >= Tb1)) return !0 | |
| return (d.count += 1), (d.lastRequestTime = Z), (this._leakyBucket[I] = d), !1 | |
| } | |
| _getPopulatedURL(I) { | |
| var G | |
| return az(this, void 0, void 0, function* () { | |
| let Z = (G = I.fallbackUrl) !== null && G !== void 0 ? G : I.urlConfig.getUrl() | |
| if ( | |
| I.urlConfig.endpoint === LB.Endpoint._initialize || | |
| I.urlConfig.endpoint === LB.Endpoint._download_config_specs | |
| ) | |
| this._lastUsedInitUrl = Z | |
| let d = Object.assign( | |
| { | |
| [LB.NetworkParam.SdkKey]: I.sdkKey, | |
| [LB.NetworkParam.SdkType]: $b1.SDKType._get(I.sdkKey), | |
| [LB.NetworkParam.SdkVersion]: Pb1.SDK_VERSION, | |
| [LB.NetworkParam.Time]: String(Date.now()), | |
| [LB.NetworkParam.SessionID]: yb1.SessionID.get(I.sdkKey), | |
| }, | |
| I.params, | |
| ), | |
| W = Object.keys(d) | |
| .map((w) => { | |
| return `${encodeURIComponent(w)}=${encodeURIComponent(d[w])}` | |
| }) | |
| .join('&') | |
| return `${Z}${W ? `?${W}` : ''}` | |
| }) | |
| } | |
| _getPopulatedBody(I, G) { | |
| return az(this, void 0, void 0, function* () { | |
| let { sdkKey: Z, fallbackUrl: d } = I, | |
| W = AA4.StableID.get(Z), | |
| w = yb1.SessionID.get(Z), | |
| B = $b1.SDKType._get(Z) | |
| return JSON.stringify( | |
| Object.assign(Object.assign({}, G), { | |
| statsigMetadata: Object.assign(Object.assign({}, Pb1.StatsigMetadataProvider.get()), { | |
| stableID: W, | |
| sessionID: w, | |
| sdkType: B, | |
| fallbackUrl: d, | |
| }), | |
| }), | |
| ) | |
| }) | |
| } | |
| _attemptToEncodeString(I, G) { | |
| var Z, d | |
| let W = VA4._getWindowSafe() | |
| if ( | |
| this._options.disableStatsigEncoding || | |
| BA4._getStatsigGlobalFlag('no-encode') != null || | |
| !(W === null || W === void 0 ? void 0 : W.btoa) | |
| ) | |
| return G | |
| try { | |
| let w = (Z = W.btoa(G).split('').reverse().join('')) !== null && Z !== void 0 ? Z : G | |
| return ( | |
| (I.params = Object.assign( | |
| Object.assign({}, (d = I.params) !== null && d !== void 0 ? d : {}), | |
| { [LB.NetworkParam.StatsigEncoded]: '1' }, | |
| )), | |
| w | |
| ) | |
| } catch (w) { | |
| return el.Log.warn(`Request encoding failed for ${I.urlConfig.getUrl()}`), G | |
| } | |
| } | |
| _getInternalRequestArgs(I, G) { | |
| let Z = this._fallbackResolver.getActiveFallbackUrl(G.sdkKey, G.urlConfig) | |
| return Object.assign(Object.assign({}, G), { method: I, fallbackUrl: Z }) | |
| } | |
| } | |
| rz.NetworkCore = mb1 | |
| var Ob1 = (I) => { | |
| if (!I.sdkKey) return el.Log.warn('Unable to make request without an SDK key'), !1 | |
| return !0 | |
| } | |
| function gA4(I, G) { | |
| if ( | |
| (I === null || I === void 0 ? void 0 : I.signal.aborted) && | |
| typeof I.signal.reason === 'string' | |
| ) | |
| return I.signal.reason | |
| if (typeof G === 'string') return G | |
| if (G instanceof Error) return `${G.name}: ${G.message}` | |
| return 'Unknown Error' | |
| } | |
| function NA4(I) { | |
| return ( | |
| ((I === null || I === void 0 ? void 0 : I.signal.aborted) && | |
| typeof I.signal.reason === 'string' && | |
| I.signal.reason.includes('Timeout')) || | |
| !1 | |
| ) | |
| } | |
| function zA4(I, G) { | |
| if (I.urlConfig.endpoint !== LB.Endpoint._initialize) return | |
| b41.Diagnostics._markInitNetworkReqStart(I.sdkKey, { attempt: G }) | |
| } | |
| function ub1(I, G, Z, d, W) { | |
| if (I.urlConfig.endpoint !== LB.Endpoint._initialize) return | |
| b41.Diagnostics._markInitNetworkReqEnd( | |
| I.sdkKey, | |
| b41.Diagnostics._getDiagnosticsData(G, Z, d, W), | |
| ) | |
| } | |
| function QA4(I) { | |
| return az(this, void 0, void 0, function* () { | |
| yield new Promise((G) => setTimeout(G, Math.min(DA4 * (I * I), HA4))) | |
| }) | |
| } | |
| }) | |
| var jb1 = _((lb1) => { | |
| Object.defineProperty(lb1, '__esModule', { value: !0 }) | |
| }) | |
| var hb1 = _((kb1) => { | |
| Object.defineProperty(kb1, '__esModule', { value: !0 }) | |
| }) | |
| var cb1 = _((sz) => { | |
| var qA4 = | |
| (sz && sz.__awaiter) || | |
| function (I, G, Z, d) { | |
| function W(w) { | |
| return w instanceof Z | |
| ? w | |
| : new Z(function (B) { | |
| B(w) | |
| }) | |
| } | |
| return new (Z || (Z = Promise))(function (w, B) { | |
| function C(X) { | |
| try { | |
| A(d.next(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function V(X) { | |
| try { | |
| A(d.throw(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function A(X) { | |
| X.done ? w(X.value) : W(X.value).then(C, V) | |
| } | |
| A((d = d.apply(I, G || [])).next()) | |
| }) | |
| } | |
| Object.defineProperty(sz, '__esModule', { value: !0 }) | |
| sz.StatsigClientBase = void 0 | |
| VJ() | |
| var UA4 = VJ(), | |
| fA4 = y41(), | |
| RA4 = v41(), | |
| l41 = v7(), | |
| EA4 = P41(), | |
| vA4 = AJ(), | |
| MA4 = ol(), | |
| tl = sV(), | |
| SA4 = 3000 | |
| class xb1 { | |
| constructor(I, G, Z, d) { | |
| var W | |
| ;(this.loadingStatus = 'Uninitialized'), | |
| (this._initializePromise = null), | |
| (this._listeners = {}) | |
| let w = this.$emt.bind(this) | |
| ;(d === null || d === void 0 ? void 0 : d.logLevel) != null && (l41.Log.level = d.logLevel), | |
| (d === null || d === void 0 ? void 0 : d.disableStorage) && tl.Storage._setDisabled(!0), | |
| (d === null || d === void 0 ? void 0 : d.initialSessionID) && | |
| MA4.StatsigSession.overrideInitialSessionID(d.initialSessionID, I), | |
| (d === null || d === void 0 ? void 0 : d.storageProvider) && | |
| tl.Storage._setProvider(d.storageProvider), | |
| (this._sdkKey = I), | |
| (this._options = d !== null && d !== void 0 ? d : {}), | |
| (this._memoCache = {}), | |
| (this.overrideAdapter = | |
| (W = d === null || d === void 0 ? void 0 : d.overrideAdapter) !== null && W !== void 0 | |
| ? W | |
| : null), | |
| (this._logger = new RA4.EventLogger(I, w, Z, d)), | |
| (this._errorBoundary = new fA4.ErrorBoundary(I, d, w)), | |
| this._errorBoundary.wrap(this), | |
| this._errorBoundary.wrap(G), | |
| this._errorBoundary.wrap(this._logger), | |
| Z.setErrorBoundary(this._errorBoundary), | |
| (this.dataAdapter = G), | |
| this.dataAdapter.attach(I, d), | |
| (this.storageProvider = tl.Storage), | |
| this._primeReadyRipcord(), | |
| LA4(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), tl.Storage._setDisabled(I.disableStorage) | |
| } | |
| flush() { | |
| return this._logger.flush() | |
| } | |
| shutdown() { | |
| return qA4(this, void 0, void 0, function* () { | |
| this.$emt({ name: 'pre_shutdown' }), | |
| this._setStatus('Uninitialized', null), | |
| (this._initializePromise = null), | |
| yield this._logger.stop() | |
| }) | |
| } | |
| on(I, G) { | |
| if (!this._listeners[I]) this._listeners[I] = [] | |
| this._listeners[I].push(G) | |
| } | |
| off(I, G) { | |
| if (this._listeners[I]) { | |
| let Z = this._listeners[I].indexOf(G) | |
| if (Z !== -1) this._listeners[I].splice(Z, 1) | |
| } | |
| } | |
| $on(I, G) { | |
| ;(G.__isInternal = !0), this.on(I, G) | |
| } | |
| $emt(I) { | |
| var G | |
| let Z = (d) => { | |
| try { | |
| d(I) | |
| } catch (W) { | |
| if (d.__isInternal === !0) { | |
| this._errorBoundary.logError(`__emit:${I.name}`, W) | |
| return | |
| } | |
| l41.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((d) => Z(d)) | |
| ;(G = this._listeners['*']) === null || G === void 0 || G.forEach(Z) | |
| } | |
| _setStatus(I, G) { | |
| ;(this.loadingStatus = I), | |
| (this._memoCache = {}), | |
| this.$emt({ name: 'values_updated', status: I, values: G }) | |
| } | |
| _enqueueExposure(I, G, Z) { | |
| if ((Z === null || Z === void 0 ? void 0 : Z.disableExposureLog) === !0) { | |
| this._logger.incrementNonExposureCount(I) | |
| return | |
| } | |
| this._logger.enqueue(G) | |
| } | |
| _memoize(I, G) { | |
| return (Z, d) => { | |
| if (this._options.disableEvaluationMemoization) return G(Z, d) | |
| let W = EA4.createMemoKey(I, Z, d) | |
| if (!W) return G(Z, d) | |
| if (!(W in this._memoCache)) { | |
| if (Object.keys(this._memoCache).length >= SA4) this._memoCache = {} | |
| this._memoCache[W] = G(Z, d) | |
| } | |
| return this._memoCache[W] | |
| } | |
| } | |
| } | |
| sz.StatsigClientBase = xb1 | |
| function LA4(I, G) { | |
| var Z | |
| if (vA4._isServerEnv()) return | |
| let d = UA4._getStatsigGlobal(), | |
| W = (Z = d.instances) !== null && Z !== void 0 ? Z : {}, | |
| w = G | |
| if (W[I] != null) | |
| l41.Log.warn( | |
| 'Creating multiple Statsig clients with the same SDK key can lead to unexpected behavior. Multi-instance support requires different SDK keys.', | |
| ) | |
| if (((W[I] = w), !d.firstInstance)) d.firstInstance = w | |
| ;(d.instances = W), (__STATSIG__ = d) | |
| } | |
| }) | |
| var nb1 = _((pb1) => { | |
| Object.defineProperty(pb1, '__esModule', { value: !0 }) | |
| pb1.DataAdapterCachePrefix = void 0 | |
| pb1.DataAdapterCachePrefix = 'statsig.cached' | |
| }) | |
| var rb1 = _((ab1) => { | |
| Object.defineProperty(ab1, '__esModule', { value: !0 }) | |
| }) | |
| var ob1 = _((sb1) => { | |
| Object.defineProperty(sb1, '__esModule', { value: !0 }) | |
| }) | |
| var Gl1 = _((tb1) => { | |
| Object.defineProperty(tb1, '__esModule', { value: !0 }) | |
| tb1._makeTypedGet = | |
| tb1._mergeOverride = | |
| tb1._makeLayer = | |
| tb1._makeExperiment = | |
| tb1._makeDynamicConfig = | |
| tb1._makeFeatureGate = | |
| void 0 | |
| var $A4 = v7(), | |
| yA4 = yl(), | |
| PA4 = 'default' | |
| function j41(I, G, Z, d) { | |
| var W | |
| return { | |
| name: I, | |
| details: G, | |
| ruleID: | |
| (W = Z === null || Z === void 0 ? void 0 : Z.rule_id) !== null && W !== void 0 ? W : PA4, | |
| __evaluation: Z, | |
| value: d, | |
| } | |
| } | |
| function OA4(I, G, Z) { | |
| return j41(I, G, Z, (Z === null || Z === void 0 ? void 0 : Z.value) === !0) | |
| } | |
| tb1._makeFeatureGate = OA4 | |
| function eb1(I, G, Z) { | |
| var d | |
| let W = (d = Z === null || Z === void 0 ? void 0 : Z.value) !== null && d !== void 0 ? d : {} | |
| return Object.assign(Object.assign({}, j41(I, G, Z, W)), { | |
| get: Ij(I, Z === null || Z === void 0 ? void 0 : Z.value), | |
| }) | |
| } | |
| tb1._makeDynamicConfig = eb1 | |
| function uA4(I, G, Z) { | |
| var d | |
| let W = eb1(I, G, Z) | |
| return Object.assign(Object.assign({}, W), { | |
| groupName: | |
| (d = Z === null || Z === void 0 ? void 0 : Z.group_name) !== null && d !== void 0 | |
| ? d | |
| : null, | |
| }) | |
| } | |
| tb1._makeExperiment = uA4 | |
| function TA4(I, G, Z, d) { | |
| var W, w | |
| return Object.assign(Object.assign({}, j41(I, G, Z, void 0)), { | |
| get: Ij(I, Z === null || Z === void 0 ? void 0 : Z.value, d), | |
| groupName: | |
| (W = Z === null || Z === void 0 ? void 0 : Z.group_name) !== null && W !== void 0 | |
| ? W | |
| : null, | |
| __value: | |
| (w = Z === null || Z === void 0 ? void 0 : Z.value) !== null && w !== void 0 ? w : {}, | |
| }) | |
| } | |
| tb1._makeLayer = TA4 | |
| function mA4(I, G, Z, d) { | |
| return Object.assign(Object.assign(Object.assign({}, I), G), { get: Ij(I.name, Z, d) }) | |
| } | |
| tb1._mergeOverride = mA4 | |
| function Ij(I, G, Z) { | |
| return (d, W) => { | |
| var w | |
| let B = (w = G === null || G === void 0 ? void 0 : G[d]) !== null && w !== void 0 ? w : null | |
| if (B == null) return W !== null && W !== void 0 ? W : null | |
| if (W != null && !yA4._isTypeMatch(B, W)) | |
| return ( | |
| $A4.Log.warn( | |
| `Parameter type mismatch. '${I}.${d}' was found to be type '${typeof B}' but fallback/return type is '${typeof W}'. See https://docs.statsig.com/client/javascript-sdk/#typed-getters`, | |
| ), | |
| W !== null && W !== void 0 ? W : null | |
| ) | |
| return Z === null || Z === void 0 || Z(d), B | |
| } | |
| } | |
| tb1._makeTypedGet = Ij | |
| }) | |
| var dl1 = _((Zl1) => { | |
| Object.defineProperty(Zl1, '__esModule', { value: !0 }) | |
| }) | |
| var Bl1 = _((Wl1) => { | |
| Object.defineProperty(Wl1, '__esModule', { value: !0 }) | |
| Wl1.UPDATE_DETAIL_ERROR_MESSAGES = Wl1.createUpdateDetails = void 0 | |
| var xA4 = (I, G, Z, d, W, w) => { | |
| return { duration: Z, source: G, success: I, error: d, sourceUrl: W, warnings: w } | |
| } | |
| Wl1.createUpdateDetails = xA4 | |
| Wl1.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 Xl1 = _((Vl1) => { | |
| Object.defineProperty(Vl1, '__esModule', { value: !0 }) | |
| Vl1.SDKFlags = void 0 | |
| var Cl1 = {} | |
| Vl1.SDKFlags = { | |
| setFlags: (I, G) => { | |
| Cl1[I] = G | |
| }, | |
| get: (I, G) => { | |
| var Z, d | |
| return (d = (Z = Cl1[I]) === null || Z === void 0 ? void 0 : Z[G]) !== null && d !== void 0 | |
| ? d | |
| : !1 | |
| }, | |
| } | |
| }) | |
| var TY = _((n2) => { | |
| var pA4 = | |
| (n2 && n2.__createBinding) || | |
| (Object.create | |
| ? function (I, G, Z, d) { | |
| if (d === void 0) d = Z | |
| var W = Object.getOwnPropertyDescriptor(G, Z) | |
| if (!W || ('get' in W ? !G.__esModule : W.writable || W.configurable)) | |
| W = { | |
| enumerable: !0, | |
| get: function () { | |
| return G[Z] | |
| }, | |
| } | |
| Object.defineProperty(I, d, W) | |
| } | |
| : function (I, G, Z, d) { | |
| if (d === void 0) d = Z | |
| I[d] = G[Z] | |
| }), | |
| x4 = | |
| (n2 && n2.__exportStar) || | |
| function (I, G) { | |
| for (var Z in I) | |
| if (Z !== 'default' && !Object.prototype.hasOwnProperty.call(G, Z)) pA4(G, I, Z) | |
| } | |
| Object.defineProperty(n2, '__esModule', { value: !0 }) | |
| n2.Storage = n2.Log = n2.EventLogger = n2.Diagnostics = void 0 | |
| VJ() | |
| var iA4 = $l() | |
| Object.defineProperty(n2, 'Diagnostics', { | |
| enumerable: !0, | |
| get: function () { | |
| return iA4.Diagnostics | |
| }, | |
| }) | |
| var nA4 = v41() | |
| Object.defineProperty(n2, 'EventLogger', { | |
| enumerable: !0, | |
| get: function () { | |
| return nA4.EventLogger | |
| }, | |
| }) | |
| var Yl1 = v7() | |
| Object.defineProperty(n2, 'Log', { | |
| enumerable: !0, | |
| get: function () { | |
| return Yl1.Log | |
| }, | |
| }) | |
| var aA4 = wM(), | |
| rA4 = sV() | |
| Object.defineProperty(n2, 'Storage', { | |
| enumerable: !0, | |
| get: function () { | |
| return rA4.Storage | |
| }, | |
| }) | |
| x4(VJ(), n2) | |
| x4(IM(), n2) | |
| x4(Om1(), n2) | |
| x4(om1(), n2) | |
| x4($l(), n2) | |
| x4(tm1(), n2) | |
| x4(y41(), n2) | |
| x4(Cb1(), n2) | |
| x4(Ab1(), n2) | |
| x4(kz(), n2) | |
| x4(Yb1(), n2) | |
| x4(v7(), n2) | |
| x4(P41(), n2) | |
| x4(GM(), n2) | |
| x4(bb1(), n2) | |
| x4(jb1(), n2) | |
| x4(hb1(), n2) | |
| x4(AJ(), n2) | |
| x4(rl(), n2) | |
| x4(ol(), n2) | |
| x4(pl(), n2) | |
| x4(cb1(), n2) | |
| x4(m41(), n2) | |
| x4(nb1(), n2) | |
| x4(N41(), n2) | |
| x4(wM(), n2) | |
| x4(rb1(), n2) | |
| x4(ob1(), n2) | |
| x4(Gl1(), n2) | |
| x4(dl1(), n2) | |
| x4(S41(), n2) | |
| x4(sV(), n2) | |
| x4(L41(), n2) | |
| x4(yl(), n2) | |
| x4(q41(), n2) | |
| x4(xl(), n2) | |
| x4(kl(), n2) | |
| x4(Bl1(), n2) | |
| x4(Xl1(), n2) | |
| __STATSIG__ = Object.assign( | |
| Object.assign({}, __STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {}), | |
| { Log: Yl1.Log, SDK_VERSION: aA4.SDK_VERSION }, | |
| ) | |
| }) | |
| var Hl1 = _((Dl1) => { | |
| Object.defineProperty(Dl1, '__esModule', { value: !0 }) | |
| var mY = TY() | |
| class _l1 { | |
| 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 | |
| ? mY._typedJsonParse(this._rawValues, 'has_updates', 'EvaluationStoreValues') | |
| : null | |
| } | |
| setValues(I, G) { | |
| if (!I) return !1 | |
| let Z = mY._typedJsonParse(I.data, 'has_updates', 'EvaluationResponse') | |
| if (Z == null) return !1 | |
| if (((this._source = I.source), (Z === null || Z === void 0 ? void 0 : Z.has_updates) !== !0)) | |
| return !0 | |
| if ( | |
| ((this._rawValues = I.data), | |
| (this._lcut = Z.time), | |
| (this._receivedAt = I.receivedAt), | |
| (this._values = Z), | |
| (this._bootstrapMetadata = this._extractBootstrapMetadata(I.source, Z)), | |
| I.source && Z.user) | |
| ) | |
| this._setWarningState(G, Z) | |
| if (Z.sdk_flags) mY.SDKFlags.setFlags(this._sdkKey, Z.sdk_flags) | |
| else mY.SDKFlags.setFlags(this._sdkKey, {}) | |
| return !0 | |
| } | |
| getWarnings() { | |
| if (this._warnings.size === 0) return | |
| return Array.from(this._warnings) | |
| } | |
| getGate(I) { | |
| var G | |
| return this._getDetailedStoreResult( | |
| (G = this._values) === null || G === void 0 ? void 0 : G.feature_gates, | |
| I, | |
| ) | |
| } | |
| getConfig(I) { | |
| var G | |
| return this._getDetailedStoreResult( | |
| (G = this._values) === null || G === void 0 ? void 0 : G.dynamic_configs, | |
| I, | |
| ) | |
| } | |
| getLayer(I) { | |
| var G | |
| return this._getDetailedStoreResult( | |
| (G = this._values) === null || G === void 0 ? void 0 : G.layer_configs, | |
| I, | |
| ) | |
| } | |
| getParamStore(I) { | |
| var G | |
| return this._getDetailedStoreResult( | |
| (G = this._values) === null || G === void 0 ? void 0 : G.param_stores, | |
| I, | |
| ) | |
| } | |
| getSource() { | |
| return this._source | |
| } | |
| _extractBootstrapMetadata(I, G) { | |
| if (I !== 'Bootstrap') return null | |
| let Z = {} | |
| if (G.user) Z.user = G.user | |
| if (G.sdkInfo) Z.generatorSDKInfo = G.sdkInfo | |
| return (Z.lcut = G.time), Z | |
| } | |
| _getDetailedStoreResult(I, G) { | |
| let Z = null | |
| if (I) Z = I[G] ? I[G] : I[mY._DJB2(G)] | |
| return { result: Z, details: this._getDetails(Z == null) } | |
| } | |
| _setWarningState(I, G) { | |
| var Z | |
| let d = mY.StableID.get(this._sdkKey) | |
| if (((Z = I.customIDs) === null || Z === void 0 ? void 0 : Z.stableID) !== d) { | |
| this._warnings.add('StableIDMismatch') | |
| return | |
| } | |
| if ('user' in G) { | |
| let W = G.user | |
| if (mY._getFullUserHash(I) !== mY._getFullUserHash(W)) | |
| 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 G, Z | |
| let d = this.getCurrentSourceDetails(), | |
| W = d.reason, | |
| w = (G = d.warnings) !== null && G !== void 0 ? G : [] | |
| if (this._source === 'Bootstrap' && w.length > 0) W = W + w[0] | |
| if (W !== 'Uninitialized' && W !== 'NoValues') W = `${W}:${I ? 'Unrecognized' : 'Recognized'}` | |
| let B = | |
| this._source === 'Bootstrap' | |
| ? (Z = this._bootstrapMetadata) !== null && Z !== void 0 | |
| ? Z | |
| : void 0 | |
| : void 0 | |
| if (B) d.bootstrapMetadata = B | |
| return Object.assign(Object.assign({}, d), { reason: W }) | |
| } | |
| } | |
| Dl1.default = _l1 | |
| }) | |
| var gl1 = _((Jl1) => { | |
| Object.defineProperty(Jl1, '__esModule', { value: !0 }) | |
| Jl1._resolveDeltasResponse = void 0 | |
| var Fl1 = TY(), | |
| oA4 = 2 | |
| function eA4(I, G) { | |
| let Z = Fl1._typedJsonParse(G, 'checksum', 'DeltasEvaluationResponse') | |
| if (!Z) return { hadBadDeltaChecksum: !0 } | |
| let d = tA4(I, Z), | |
| W = IX4(d), | |
| w = Fl1._DJB2Object( | |
| { | |
| feature_gates: W.feature_gates, | |
| dynamic_configs: W.dynamic_configs, | |
| layer_configs: W.layer_configs, | |
| }, | |
| oA4, | |
| ) | |
| if (w !== Z.checksumV2) | |
| return { | |
| hadBadDeltaChecksum: !0, | |
| badChecksum: w, | |
| badMergedConfigs: W, | |
| badFullResponse: Z.deltas_full_response, | |
| } | |
| return JSON.stringify(W) | |
| } | |
| Jl1._resolveDeltasResponse = eA4 | |
| function tA4(I, G) { | |
| return Object.assign(Object.assign(Object.assign({}, I), G), { | |
| feature_gates: Object.assign(Object.assign({}, I.feature_gates), G.feature_gates), | |
| layer_configs: Object.assign(Object.assign({}, I.layer_configs), G.layer_configs), | |
| dynamic_configs: Object.assign(Object.assign({}, I.dynamic_configs), G.dynamic_configs), | |
| }) | |
| } | |
| function IX4(I) { | |
| let G = I | |
| return ( | |
| k41(I.deleted_gates, G.feature_gates), | |
| delete G.deleted_gates, | |
| k41(I.deleted_configs, G.dynamic_configs), | |
| delete G.deleted_configs, | |
| k41(I.deleted_layers, G.layer_configs), | |
| delete G.deleted_layers, | |
| G | |
| ) | |
| } | |
| function k41(I, G) { | |
| I === null || | |
| I === void 0 || | |
| I.forEach((Z) => { | |
| delete G[Z] | |
| }) | |
| } | |
| }) | |
| var h41 = _((BM) => { | |
| var Nl1 = | |
| (BM && BM.__awaiter) || | |
| function (I, G, Z, d) { | |
| function W(w) { | |
| return w instanceof Z | |
| ? w | |
| : new Z(function (B) { | |
| B(w) | |
| }) | |
| } | |
| return new (Z || (Z = Promise))(function (w, B) { | |
| function C(X) { | |
| try { | |
| A(d.next(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function V(X) { | |
| try { | |
| A(d.throw(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function A(X) { | |
| X.done ? w(X.value) : W(X.value).then(C, V) | |
| } | |
| A((d = d.apply(I, G || [])).next()) | |
| }) | |
| } | |
| Object.defineProperty(BM, '__esModule', { value: !0 }) | |
| var Gj = TY(), | |
| GX4 = gl1() | |
| class zl1 extends Gj.NetworkCore { | |
| constructor(I, G) { | |
| super(I, G) | |
| let Z = I === null || I === void 0 ? void 0 : I.networkConfig | |
| this._initializeUrlConfig = new Gj.UrlConfiguration( | |
| Gj.Endpoint._initialize, | |
| Z === null || Z === void 0 ? void 0 : Z.initializeUrl, | |
| Z === null || Z === void 0 ? void 0 : Z.api, | |
| Z === null || Z === void 0 ? void 0 : Z.initializeFallbackUrls, | |
| ) | |
| } | |
| fetchEvaluations(I, G, Z, d) { | |
| return Nl1(this, void 0, void 0, function* () { | |
| let W = G ? Gj._typedJsonParse(G, 'has_updates', 'InitializeResponse') : null, | |
| w = { user: d, hash: 'djb2', deltasResponseRequested: !1, full_checksum: null } | |
| if (W === null || W === void 0 ? void 0 : W.has_updates) | |
| w = Object.assign(Object.assign({}, w), { | |
| sinceTime: W.time, | |
| previousDerivedFields: 'derived_fields' in W ? W.derived_fields : {}, | |
| deltasResponseRequested: !0, | |
| full_checksum: W.full_checksum, | |
| }) | |
| return this._fetchEvaluations(I, W, w, Z) | |
| }) | |
| } | |
| _fetchEvaluations(I, G, Z, d) { | |
| var W, w | |
| return Nl1(this, void 0, void 0, function* () { | |
| let B = yield this.post({ | |
| sdkKey: I, | |
| urlConfig: this._initializeUrlConfig, | |
| data: Z, | |
| retries: 2, | |
| isStatsigEncodable: !0, | |
| priority: d, | |
| }) | |
| if ((B === null || B === void 0 ? void 0 : B.code) === 204) return '{"has_updates": false}' | |
| if ((B === null || B === void 0 ? void 0 : B.code) !== 200) | |
| return (W = B === null || B === void 0 ? void 0 : B.body) !== null && W !== void 0 | |
| ? W | |
| : null | |
| if ( | |
| (G === null || G === void 0 ? void 0 : G.has_updates) !== !0 || | |
| ((w = B.body) === null || w === void 0 ? void 0 : w.includes('"is_delta":true')) !== !0 || | |
| Z.deltasResponseRequested !== !0 | |
| ) | |
| return B.body | |
| let C = GX4._resolveDeltasResponse(G, B.body) | |
| if (typeof C === 'string') return C | |
| return this._fetchEvaluations( | |
| I, | |
| G, | |
| Object.assign(Object.assign(Object.assign({}, Z), C), { deltasResponseRequested: !1 }), | |
| d, | |
| ) | |
| }) | |
| } | |
| } | |
| BM.default = zl1 | |
| }) | |
| var fl1 = _((ql1) => { | |
| Object.defineProperty(ql1, '__esModule', { value: !0 }) | |
| ql1._makeParamStoreGetter = void 0 | |
| var Ql1 = TY(), | |
| Zj = { disableExposureLog: !0 } | |
| function dj(I) { | |
| return I == null || I.disableExposureLog === !1 | |
| } | |
| function x41(I, G) { | |
| return G != null && !Ql1._isTypeMatch(I, G) | |
| } | |
| function ZX4(I, G) { | |
| return I.value | |
| } | |
| function dX4(I, G, Z) { | |
| if (I.getFeatureGate(G.gate_name, dj(Z) ? void 0 : Zj).value) return G.pass_value | |
| return G.fail_value | |
| } | |
| function WX4(I, G, Z, d) { | |
| let w = I.getDynamicConfig(G.config_name, Zj).get(G.param_name) | |
| if (x41(w, Z)) return Z | |
| if (dj(d)) I.getDynamicConfig(G.config_name) | |
| return w | |
| } | |
| function wX4(I, G, Z, d) { | |
| let w = I.getExperiment(G.experiment_name, Zj).get(G.param_name) | |
| if (x41(w, Z)) return Z | |
| if (dj(d)) I.getExperiment(G.experiment_name) | |
| return w | |
| } | |
| function BX4(I, G, Z, d) { | |
| let w = I.getLayer(G.layer_name, Zj).get(G.param_name) | |
| if (x41(w, Z)) return Z | |
| if (dj(d)) I.getLayer(G.layer_name).get(G.param_name) | |
| return w | |
| } | |
| function CX4(I, G, Z) { | |
| return (d, W) => { | |
| if (G == null) return W | |
| let w = G[d] | |
| if (w == null || (W != null && Ql1._typeOf(W) !== w.param_type)) return W | |
| switch (w.ref_type) { | |
| case 'static': | |
| return ZX4(w, Z) | |
| case 'gate': | |
| return dX4(I, w, Z) | |
| case 'dynamic_config': | |
| return WX4(I, w, W, Z) | |
| case 'experiment': | |
| return wX4(I, w, W, Z) | |
| case 'layer': | |
| return BX4(I, w, W, Z) | |
| default: | |
| return W | |
| } | |
| } | |
| } | |
| ql1._makeParamStoreGetter = CX4 | |
| }) | |
| var El1 = _((oz) => { | |
| var VX4 = | |
| (oz && oz.__awaiter) || | |
| function (I, G, Z, d) { | |
| function W(w) { | |
| return w instanceof Z | |
| ? w | |
| : new Z(function (B) { | |
| B(w) | |
| }) | |
| } | |
| return new (Z || (Z = Promise))(function (w, B) { | |
| function C(X) { | |
| try { | |
| A(d.next(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function V(X) { | |
| try { | |
| A(d.throw(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function A(X) { | |
| X.done ? w(X.value) : W(X.value).then(C, V) | |
| } | |
| A((d = d.apply(I, G || [])).next()) | |
| }) | |
| } | |
| Object.defineProperty(oz, '__esModule', { value: !0 }) | |
| oz.StatsigEvaluationsDataAdapter = void 0 | |
| var YJ = TY(), | |
| AX4 = h41() | |
| class Rl1 extends YJ.DataAdapterCore { | |
| constructor() { | |
| super('EvaluationsDataAdapter', 'evaluations') | |
| ;(this._network = null), (this._options = null) | |
| } | |
| attach(I, G) { | |
| super.attach(I, G), (this._network = new AX4.default(G !== null && G !== void 0 ? G : {})) | |
| } | |
| getDataAsync(I, G, Z) { | |
| return this._getDataAsyncImpl(I, YJ._normalizeUser(G, this._options), Z) | |
| } | |
| prefetchData(I, G) { | |
| return this._prefetchDataImpl(I, G) | |
| } | |
| setData(I) { | |
| let G = YJ._typedJsonParse(I, 'has_updates', 'data') | |
| if (G && 'user' in G) super.setData(I, G.user) | |
| else | |
| YJ.Log.error( | |
| 'StatsigUser not found. You may be using an older server SDK version. Please upgrade your SDK or use setDataLegacy.', | |
| ) | |
| } | |
| setDataLegacy(I, G) { | |
| super.setData(I, G) | |
| } | |
| _fetchFromNetwork(I, G, Z) { | |
| var d | |
| return VX4(this, void 0, void 0, function* () { | |
| let W = yield (d = this._network) === null || d === void 0 | |
| ? void 0 | |
| : d.fetchEvaluations( | |
| this._getSdkKey(), | |
| I, | |
| Z === null || Z === void 0 ? void 0 : Z.priority, | |
| G, | |
| ) | |
| return W !== null && W !== void 0 ? W : null | |
| }) | |
| } | |
| _getCacheKey(I) { | |
| var G | |
| let Z = YJ._getStorageKey( | |
| this._getSdkKey(), | |
| I, | |
| (G = this._options) === null || G === void 0 ? void 0 : G.customUserCacheKeyFunc, | |
| ) | |
| return `${YJ.DataAdapterCachePrefix}.${this._cacheSuffix}.${Z}` | |
| } | |
| _isCachedResultValidFor204(I, G) { | |
| return I.fullUserHash != null && I.fullUserHash === YJ._getFullUserHash(G) | |
| } | |
| } | |
| oz.StatsigEvaluationsDataAdapter = Rl1 | |
| }) | |
| var vl1 = _((CM) => { | |
| var c41 = | |
| (CM && CM.__awaiter) || | |
| function (I, G, Z, d) { | |
| function W(w) { | |
| return w instanceof Z | |
| ? w | |
| : new Z(function (B) { | |
| B(w) | |
| }) | |
| } | |
| return new (Z || (Z = Promise))(function (w, B) { | |
| function C(X) { | |
| try { | |
| A(d.next(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function V(X) { | |
| try { | |
| A(d.throw(X)) | |
| } catch (Y) { | |
| B(Y) | |
| } | |
| } | |
| function A(X) { | |
| X.done ? w(X.value) : W(X.value).then(C, V) | |
| } | |
| A((d = d.apply(I, G || [])).next()) | |
| }) | |
| } | |
| Object.defineProperty(CM, '__esModule', { value: !0 }) | |
| var t4 = TY(), | |
| XX4 = Hl1(), | |
| YX4 = h41(), | |
| _X4 = fl1(), | |
| DX4 = El1() | |
| class Wj extends t4.StatsigClientBase { | |
| static instance(I) { | |
| let G = t4._getStatsigGlobal().instance(I) | |
| if (G instanceof Wj) return G | |
| return ( | |
| t4.Log.warn( | |
| t4._isServerEnv() | |
| ? 'StatsigClient.instance is not supported in server environments' | |
| : 'Unable to find StatsigClient instance', | |
| ), | |
| new Wj(I !== null && I !== void 0 ? I : '', {}) | |
| ) | |
| } | |
| constructor(I, G, Z = null) { | |
| var d, W | |
| t4.SDKType._setClientType(I, 'javascript-client') | |
| let w = new YX4.default(Z, (C) => { | |
| this.$emt(C) | |
| }) | |
| super( | |
| I, | |
| (d = Z === null || Z === void 0 ? void 0 : Z.dataAdapter) !== null && d !== void 0 | |
| ? d | |
| : new DX4.StatsigEvaluationsDataAdapter(), | |
| w, | |
| Z, | |
| ) | |
| ;(this.getFeatureGate = this._memoize( | |
| t4.MemoPrefix._gate, | |
| this._getFeatureGateImpl.bind(this), | |
| )), | |
| (this.getDynamicConfig = this._memoize( | |
| t4.MemoPrefix._dynamicConfig, | |
| this._getDynamicConfigImpl.bind(this), | |
| )), | |
| (this.getExperiment = this._memoize( | |
| t4.MemoPrefix._experiment, | |
| this._getExperimentImpl.bind(this), | |
| )), | |
| (this.getLayer = this._memoize(t4.MemoPrefix._layer, this._getLayerImpl.bind(this))), | |
| (this.getParameterStore = this._memoize( | |
| t4.MemoPrefix._paramStore, | |
| this._getParameterStoreImpl.bind(this), | |
| )), | |
| (this._store = new XX4.default(I)), | |
| (this._network = w), | |
| (this._user = this._configureUser(G, Z)) | |
| let B = | |
| (W = Z === null || Z === void 0 ? void 0 : Z.plugins) !== null && W !== void 0 ? W : [] | |
| for (let C of B) C.bind(this) | |
| } | |
| initializeSync(I) { | |
| var G | |
| if (this.loadingStatus !== 'Uninitialized') | |
| return t4.createUpdateDetails(!0, this._store.getSource(), -1, null, null, [ | |
| 'MultipleInitializations', | |
| ...((G = this._store.getWarnings()) !== null && G !== void 0 ? G : []), | |
| ]) | |
| return this._logger.start(), this.updateUserSync(this._user, I) | |
| } | |
| initializeAsync(I) { | |
| return c41(this, void 0, void 0, function* () { | |
| if (this._initializePromise) return this._initializePromise | |
| return (this._initializePromise = this._initializeAsyncImpl(I)), this._initializePromise | |
| }) | |
| } | |
| updateUserSync(I, G) { | |
| var Z | |
| let d = performance.now(), | |
| W = [...((Z = this._store.getWarnings()) !== null && Z !== void 0 ? Z : [])] | |
| this._resetForUser(I) | |
| let w = this.dataAdapter.getDataSync(this._user) | |
| if (w == null) W.push('NoCachedValues') | |
| this._store.setValues(w, this._user), this._finalizeUpdate(w) | |
| let B = G === null || G === void 0 ? void 0 : G.disableBackgroundCacheRefresh | |
| if ( | |
| B === !0 || | |
| (B == null && (w === null || w === void 0 ? void 0 : w.source) === 'Bootstrap') | |
| ) | |
| return t4.createUpdateDetails( | |
| !0, | |
| this._store.getSource(), | |
| performance.now() - d, | |
| this._errorBoundary.getLastSeenErrorAndReset(), | |
| this._network.getLastUsedInitUrlAndReset(), | |
| W, | |
| ) | |
| return ( | |
| this._runPostUpdate(w !== null && w !== void 0 ? w : null, this._user), | |
| t4.createUpdateDetails( | |
| !0, | |
| this._store.getSource(), | |
| performance.now() - d, | |
| this._errorBoundary.getLastSeenErrorAndReset(), | |
| this._network.getLastUsedInitUrlAndReset(), | |
| W, | |
| ) | |
| ) | |
| } | |
| updateUserAsync(I, G) { | |
| return c41(this, void 0, void 0, function* () { | |
| this._resetForUser(I) | |
| let Z = this._user | |
| t4.Diagnostics._markInitOverallStart(this._sdkKey) | |
| let d = this.dataAdapter.getDataSync(Z) | |
| if ( | |
| (this._store.setValues(d, this._user), | |
| this._setStatus('Loading', d), | |
| (d = yield this.dataAdapter.getDataAsync(d, Z, G)), | |
| Z !== this._user) | |
| ) | |
| return t4.createUpdateDetails( | |
| !1, | |
| this._store.getSource(), | |
| -1, | |
| new Error('User changed during update'), | |
| this._network.getLastUsedInitUrlAndReset(), | |
| ) | |
| let W = !1 | |
| if (d != null) | |
| t4.Diagnostics._markInitProcessStart(this._sdkKey), | |
| (W = this._store.setValues(d, this._user)), | |
| t4.Diagnostics._markInitProcessEnd(this._sdkKey, { success: W }) | |
| if ((this._finalizeUpdate(d), !W)) | |
| this._errorBoundary.attachErrorIfNoneExists( | |
| t4.UPDATE_DETAIL_ERROR_MESSAGES.NO_NETWORK_DATA, | |
| ), | |
| this.$emt({ name: 'initialization_failure' }) | |
| t4.Diagnostics._markInitOverallEnd(this._sdkKey, W, this._store.getCurrentSourceDetails()) | |
| let w = t4.Diagnostics._enqueueDiagnosticsEvent( | |
| this._user, | |
| this._logger, | |
| this._sdkKey, | |
| this._options, | |
| ) | |
| return t4.createUpdateDetails( | |
| W, | |
| 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: t4.StatsigSession.get(this._sdkKey), | |
| stableID: t4.StableID.get(this._sdkKey), | |
| } | |
| } | |
| checkGate(I, G) { | |
| return this.getFeatureGate(I, G).value | |
| } | |
| logEvent(I, G, Z) { | |
| let d = typeof I === 'string' ? { eventName: I, value: G, metadata: Z } : I | |
| this._logger.enqueue( | |
| Object.assign(Object.assign({}, d), { user: this._user, time: Date.now() }), | |
| ) | |
| } | |
| _primeReadyRipcord() { | |
| this.$on('error', () => { | |
| this.loadingStatus === 'Loading' && this._finalizeUpdate(null) | |
| }) | |
| } | |
| _initializeAsyncImpl(I) { | |
| return c41(this, void 0, void 0, function* () { | |
| if (!t4.Storage.isReady()) yield t4.Storage.isReadyResolver() | |
| return this._logger.start(), this.updateUserAsync(this._user, I) | |
| }) | |
| } | |
| _finalizeUpdate(I) { | |
| this._store.finalize(), this._setStatus('Ready', I) | |
| } | |
| _runPostUpdate(I, G) { | |
| this.dataAdapter.getDataAsync(I, G, { priority: 'low' }).catch((Z) => { | |
| t4.Log.error('An error occurred after update.', Z) | |
| }) | |
| } | |
| _resetForUser(I) { | |
| this._logger.reset(), | |
| this._store.reset(), | |
| (this._user = this._configureUser(I, this._options)) | |
| } | |
| _configureUser(I, G) { | |
| var Z | |
| let d = t4._normalizeUser(I, G), | |
| W = (Z = d.customIDs) === null || Z === void 0 ? void 0 : Z.stableID | |
| if (W) t4.StableID.setOverride(W, this._sdkKey) | |
| return d | |
| } | |
| _getFeatureGateImpl(I, G) { | |
| var Z, d | |
| let { result: W, details: w } = this._store.getGate(I), | |
| B = t4._makeFeatureGate(I, w, W), | |
| C = | |
| (d = (Z = this.overrideAdapter) === null || Z === void 0 ? void 0 : Z.getGateOverride) === | |
| null || d === void 0 | |
| ? void 0 | |
| : d.call(Z, B, this._user, G), | |
| V = C !== null && C !== void 0 ? C : B | |
| return ( | |
| this._enqueueExposure(I, t4._createGateExposure(this._user, V), G), | |
| this.$emt({ name: 'gate_evaluation', gate: V }), | |
| V | |
| ) | |
| } | |
| _getDynamicConfigImpl(I, G) { | |
| var Z, d | |
| let { result: W, details: w } = this._store.getConfig(I), | |
| B = t4._makeDynamicConfig(I, w, W), | |
| C = | |
| (d = | |
| (Z = this.overrideAdapter) === null || Z === void 0 | |
| ? void 0 | |
| : Z.getDynamicConfigOverride) === null || d === void 0 | |
| ? void 0 | |
| : d.call(Z, B, this._user, G), | |
| V = C !== null && C !== void 0 ? C : B | |
| return ( | |
| this._enqueueExposure(I, t4._createConfigExposure(this._user, V), G), | |
| this.$emt({ name: 'dynamic_config_evaluation', dynamicConfig: V }), | |
| V | |
| ) | |
| } | |
| _getExperimentImpl(I, G) { | |
| var Z, d | |
| let { result: W, details: w } = this._store.getConfig(I), | |
| B = t4._makeExperiment(I, w, W), | |
| C = | |
| (d = | |
| (Z = this.overrideAdapter) === null || Z === void 0 | |
| ? void 0 | |
| : Z.getExperimentOverride) === null || d === void 0 | |
| ? void 0 | |
| : d.call(Z, B, this._user, G), | |
| V = C !== null && C !== void 0 ? C : B | |
| return ( | |
| this._enqueueExposure(I, t4._createConfigExposure(this._user, V), G), | |
| this.$emt({ name: 'experiment_evaluation', experiment: V }), | |
| V | |
| ) | |
| } | |
| _getLayerImpl(I, G) { | |
| var Z, d, W | |
| let { result: w, details: B } = this._store.getLayer(I), | |
| C = t4._makeLayer(I, B, w), | |
| V = | |
| (d = | |
| (Z = this.overrideAdapter) === null || Z === void 0 ? void 0 : Z.getLayerOverride) === | |
| null || d === void 0 | |
| ? void 0 | |
| : d.call(Z, C, this._user, G) | |
| if (G === null || G === void 0 ? void 0 : G.disableExposureLog) | |
| this._logger.incrementNonExposureCount(I) | |
| let A = t4._mergeOverride( | |
| C, | |
| V, | |
| (W = V === null || V === void 0 ? void 0 : V.__value) !== null && W !== void 0 | |
| ? W | |
| : C.__value, | |
| (X) => { | |
| if (G === null || G === void 0 ? void 0 : G.disableExposureLog) return | |
| this._enqueueExposure(I, t4._createLayerParameterExposure(this._user, A, X), G) | |
| }, | |
| ) | |
| return this.$emt({ name: 'layer_evaluation', layer: A }), A | |
| } | |
| _getParameterStoreImpl(I, G) { | |
| let { result: Z, details: d } = this._store.getParamStore(I) | |
| return ( | |
| this._logger.incrementNonExposureCount(I), | |
| { name: I, details: d, __configuration: Z, get: _X4._makeParamStoreGetter(this, Z, G) } | |
| ) | |
| } | |
| } | |
| CM.default = Wj | |
| }) | |
| var Sl1 = _(($B) => { | |
| var HX4 = | |
| ($B && $B.__createBinding) || | |
| (Object.create | |
| ? function (I, G, Z, d) { | |
| if (d === void 0) d = Z | |
| var W = Object.getOwnPropertyDescriptor(G, Z) | |
| if (!W || ('get' in W ? !G.__esModule : W.writable || W.configurable)) | |
| W = { | |
| enumerable: !0, | |
| get: function () { | |
| return G[Z] | |
| }, | |
| } | |
| Object.defineProperty(I, d, W) | |
| } | |
| : function (I, G, Z, d) { | |
| if (d === void 0) d = Z | |
| I[d] = G[Z] | |
| }), | |
| FX4 = | |
| ($B && $B.__exportStar) || | |
| function (I, G) { | |
| for (var Z in I) | |
| if (Z !== 'default' && !Object.prototype.hasOwnProperty.call(G, Z)) HX4(G, I, Z) | |
| } | |
| Object.defineProperty($B, '__esModule', { value: !0 }) | |
| $B.StatsigClient = void 0 | |
| var Ml1 = vl1() | |
| $B.StatsigClient = Ml1.default | |
| FX4(TY(), $B) | |
| __STATSIG__ = Object.assign( | |
| Object.assign({}, __STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {}), | |
| { StatsigClient: Ml1.default }, | |
| ) | |
| $B.default = __STATSIG__ | |
| }) | |
| var fj1 = _(($$9, Uj1) => { | |
| var h3 = {} | |
| Uj1.exports = h3 | |
| function qj1(I) { | |
| return I < 0 ? -1 : 1 | |
| } | |
| function GY4(I) { | |
| if (I % 1 === 0.5 && (I & 1) === 0) return Math.floor(I) | |
| else return Math.round(I) | |
| } | |
| function jY(I, G) { | |
| if (!G.unsigned) --I | |
| let Z = G.unsigned ? 0 : -Math.pow(2, I), | |
| d = Math.pow(2, I) - 1, | |
| W = G.moduloBitLength ? Math.pow(2, G.moduloBitLength) : Math.pow(2, I), | |
| w = G.moduloBitLength ? Math.pow(2, G.moduloBitLength - 1) : Math.pow(2, I - 1) | |
| return function (B, C) { | |
| if (!C) C = {} | |
| let V = +B | |
| if (C.enforceRange) { | |
| if (!Number.isFinite(V)) throw new TypeError('Argument is not a finite number') | |
| if (((V = qj1(V) * Math.floor(Math.abs(V))), V < Z || V > d)) | |
| throw new TypeError('Argument is not in byte range') | |
| return V | |
| } | |
| if (!isNaN(V) && C.clamp) { | |
| if (((V = GY4(V)), V < Z)) V = Z | |
| if (V > d) V = d | |
| return V | |
| } | |
| if (!Number.isFinite(V) || V === 0) return 0 | |
| if (((V = qj1(V) * Math.floor(Math.abs(V))), (V = V % W), !G.unsigned && V >= w)) return V - W | |
| else if (G.unsigned) { | |
| if (V < 0) V += W | |
| else if (V === -0) return 0 | |
| } | |
| return V | |
| } | |
| } | |
| h3.void = function () { | |
| return | |
| } | |
| h3.boolean = function (I) { | |
| return !!I | |
| } | |
| h3.byte = jY(8, { unsigned: !1 }) | |
| h3.octet = jY(8, { unsigned: !0 }) | |
| h3.short = jY(16, { unsigned: !1 }) | |
| h3['unsigned short'] = jY(16, { unsigned: !0 }) | |
| h3.long = jY(32, { unsigned: !1 }) | |
| h3['unsigned long'] = jY(32, { unsigned: !0 }) | |
| h3['long long'] = jY(32, { unsigned: !1, moduloBitLength: 64 }) | |
| h3['unsigned long long'] = jY(32, { unsigned: !0, moduloBitLength: 64 }) | |
| h3.double = function (I) { | |
| let G = +I | |
| if (!Number.isFinite(G)) throw new TypeError('Argument is not a finite floating-point value') | |
| return G | |
| } | |
| h3['unrestricted double'] = function (I) { | |
| let G = +I | |
| if (isNaN(G)) throw new TypeError('Argument is NaN') | |
| return G | |
| } | |
| h3.float = h3.double | |
| h3['unrestricted float'] = h3['unrestricted double'] | |
| h3.DOMString = function (I, G) { | |
| if (!G) G = {} | |
| if (G.treatNullAsEmptyString && I === null) return '' | |
| return String(I) | |
| } | |
| h3.ByteString = function (I, G) { | |
| let Z = String(I), | |
| d = void 0 | |
| for (let W = 0; (d = Z.codePointAt(W)) !== void 0; ++W) | |
| if (d > 255) throw new TypeError('Argument is not a valid bytestring') | |
| return Z | |
| } | |
| h3.USVString = function (I) { | |
| let G = String(I), | |
| Z = G.length, | |
| d = [] | |
| for (let W = 0; W < Z; ++W) { | |
| let w = G.charCodeAt(W) | |
| if (w < 55296 || w > 57343) d.push(String.fromCodePoint(w)) | |
| else if (56320 <= w && w <= 57343) d.push(String.fromCodePoint(65533)) | |
| else if (W === Z - 1) d.push(String.fromCodePoint(65533)) | |
| else { | |
| let B = G.charCodeAt(W + 1) | |
| if (56320 <= B && B <= 57343) { | |
| let C = w & 1023, | |
| V = B & 1023 | |
| d.push(String.fromCodePoint(65536 + 1024 * C + V)), ++W | |
| } else d.push(String.fromCodePoint(65533)) | |
| } | |
| } | |
| return d.join('') | |
| } | |
| h3.Date = function (I, G) { | |
| if (!(I instanceof Date)) throw new TypeError('Argument is not a Date object') | |
| if (isNaN(I)) return | |
| return I | |
| } | |
| h3.RegExp = function (I, G) { | |
| if (!(I instanceof RegExp)) I = new RegExp(I) | |
| return I | |
| } | |
| }) | |
| var vj1 = _((ZY4, kY) => { | |
| ZY4.mixin = function I(G, Z) { | |
| let d = Object.getOwnPropertyNames(Z) | |
| for (let W = 0; W < d.length; ++W) | |
| Object.defineProperty(G, d[W], Object.getOwnPropertyDescriptor(Z, d[W])) | |
| } | |
| ZY4.wrapperSymbol = Symbol('wrapper') | |
| ZY4.implSymbol = Symbol('impl') | |
| ZY4.wrapperForImpl = function (I) { | |
| return I[ZY4.wrapperSymbol] | |
| } | |
| ZY4.implForWrapper = function (I) { | |
| return I[ZY4.implSymbol] | |
| } | |
| }) | |
| var Mj1 = _((y$9, BY4) => { | |
| BY4.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'], | |
| [[1419, 1420], 'disallowed'], | |
| [[1421, 1422], 'valid', [], 'NV8'], | |
| [[1423, 1423], 'valid', [], 'NV8'], | |
| [[1424, 1424], 'disallowed'], | |
| [[1425, 1441], 'valid'], | |
| [[1442, 1442], 'valid'], | |
| [[1443, 1455], 'valid'], | |
| [[1456, 1465], 'valid'], | |
| [[1466, 1466], 'valid'], | |
| [[1467, 1469], 'valid'], | |
| [[1470, 1470], 'valid', [], 'NV8'], | |
| [[1471, 1471], 'valid'], | |
| [[1472, 1472], 'valid', [], 'NV8'], | |
| [[1473, 1474], 'valid'], | |
| [[1475, 1475], 'valid', [], 'NV8'], | |
| [[1476, 1476], 'valid'], | |
| [[1477, 1477], 'valid'], | |
| [[1478, 1478], 'valid', [], 'NV8'], | |
| [[1479, 1479], 'valid'], | |
| [[1480, 1487], 'disallowed'], | |
| [[1488, 1514], 'valid'], | |
| [[1515, 1519], 'disallowed'], | |
| [[1520, 1524], 'valid'], | |
| [[1525, 1535], 'disallowed'], | |
| [[1536, 1539], 'disallowed'], | |
| [[1540, 1540], 'disallowed'], | |
| [[1541, 1541], 'disallowed'], | |
| [[1542, 1546], 'valid', [], 'NV8'], | |
| [[1547, 1547], 'valid', [], 'NV8'], | |
| [[1548, 1548], 'valid', [], 'NV8'], | |
| [[1549, 1551], 'valid', [], 'NV8'], | |
| [[1552, 1557], 'valid'], | |
| [[1558, 1562], 'valid'], | |
| [[1563, 1563], 'valid', [], 'NV8'], | |
| [[1564, 1564], 'disallowed'], | |
| [[1565, 1565], 'disallowed'], | |
| [[1566, 1566], 'valid', [], 'NV8'], | |
| [[1567, 1567], 'valid', [], 'NV8'], | |
| [[1568, 1568], 'valid'], | |
| [[1569, 1594], 'valid'], | |
| [[1595, 1599], 'valid'], | |
| [[1600, 1600], 'valid', [], 'NV8'], | |
| [[1601, 1618], 'valid'], | |
| [[1619, 1621], 'valid'], | |
| [[1622, 1624], 'valid'], | |
| [[1625, 1630], 'valid'], | |
| [[1631, 1631], 'valid'], | |
| [[1632, 1641], 'valid'], | |
| [[1642, 1645], 'valid', [], 'NV8'], | |
| [[1646, 1647], 'valid'], | |
| [[1648, 1652], 'valid'], | |
| [[1653, 1653], 'mapped', [1575, 1652]], | |
| [[1654, 1654], 'mapped', [1608, 1652]], | |
| [[1655, 1655], 'mapped', [1735, 1652]], | |
| [[1656, 1656], 'mapped', [1610, 1652]], | |
| [[1657, 1719], 'valid'], | |
| [[1720, 1721], 'valid'], | |
| [[1722, 1726], 'valid'], | |
| [[1727, 1727], 'valid'], | |
| [[1728, 1742], 'valid'], | |
| [[1743, 1743], 'valid'], | |
| [[1744, 1747], 'valid'], | |
| [[1748, 1748], 'valid', [], 'NV8'], | |
| [[1749, 1756], 'valid'], | |
| [[1757, 1757], 'disallowed'], | |
| [[1758, 1758], 'valid', [], 'NV8'], | |
| [[1759, 1768], 'valid'], | |
| [[1769, 1769], 'valid', [], 'NV8'], | |
| [[1770, 1773], 'valid'], | |
| [[1774, 1775], 'valid'], | |
| [[1776, 1785], 'valid'], | |
| [[1786, 1790], 'valid'], | |
| [[1791, 1791], 'valid'], | |
| [[1792, 1805], 'valid', [], 'NV8'], | |
| [[1806, 1806], 'disallowed'], | |
| [[1807, 1807], 'disallowed'], | |
| [[1808, 1836], 'valid'], | |
| [[1837, 1839], 'valid'], | |
| [[1840, 1866], 'valid'], | |
| [[1867, 1868], 'disallowed'], | |
| [[1869, 1871], 'valid'], | |
| [[1872, 1901], 'valid'], | |
| [[1902, 1919], 'valid'], | |
| [[1920, 1968], 'valid'], | |
| [[1969, 1969], 'valid'], | |
| [[1970, 1983], 'disallowed'], | |
| [[1984, 2037], 'valid'], | |
| [[2038, 2042], 'valid', [], 'NV8'], | |
| [[2043, 2047], 'disallowed'], | |
| [[2048, 2093], 'valid'], | |
| [[2094, 2095], 'disallowed'], | |
| [[2096, 2110], 'valid', [], 'NV8'], | |
| [[2111, 2111], 'disallowed'], | |
| [[2112, 2139], 'valid'], | |
| [[2140, 2141], 'disallowed'], | |
| [[2142, 2142], 'valid', [], 'NV8'], | |
| [[2143, 2207], 'disallowed'], | |
| [[2208, 2208], 'valid'], | |
| [[2209, 2209], 'valid'], | |
| [[2210, 2220], 'valid'], | |
| [[2221, 2226], 'valid'], | |
| [[2227, 2228], 'valid'], | |
| [[2229, 2274], 'disallowed'], | |
| [[2275, 2275], 'valid'], | |
| [[2276, 2302], 'valid'], | |
| [[2303, 2303], 'valid'], | |
| [[2304, 2304], 'valid'], | |
| [[2305, 2307], 'valid'], | |
| [[2308, 2308], 'valid'], | |
| [[2309, 2361], 'valid'], | |
| [[2362, 2363], 'valid'], | |
| [[2364, 2381], 'valid'], | |
| [[2382, 2382], 'valid'], | |
| [[2383, 2383], 'valid'], | |
| [[2384, 2388], 'valid'], | |
| [[2389, 2389], 'valid'], | |
| [[2390, 2391], 'valid'], | |
| [[2392, 2392], 'mapped', [2325, 2364]], | |
| [[2393, 2393], 'mapped', [2326, 2364]], | |
| [[2394, 2394], 'mapped', [2327, 2364]], | |
| [[2395, 2395], 'mapped', [2332, 2364]], | |
| [[2396, 2396], 'mapped', [2337, 2364]], | |
| [[2397, 2397], 'mapped', [2338, 2364]], | |
| [[2398, 2398], 'mapped', [2347, 2364]], | |
| [[2399, 2399], 'mapped', [2351, 2364]], | |
| [[2400, 2403], 'valid'], | |
| [[2404, 2405], 'valid', [], 'NV8'], | |
| [[2406, 2415], 'valid'], | |
| [[2416, 2416], 'valid', [], 'NV8'], | |
| [[2417, 2418], 'valid'], | |
| [[2419, 2423], 'valid'], | |
| [[2424, 2424], 'valid'], | |
| [[2425, 2426], 'valid'], | |
| [[2427, 2428], 'valid'], | |
| [[2429, 2429], 'valid'], | |
| [[2430, 2431], 'valid'], | |
| [[2432, 2432], 'valid'], | |
| [[2433, 2435], 'valid'], | |
| [[2436, 2436], 'disallowed'], | |
| [[2437, 2444], 'valid'], | |
| [[2445, 2446], 'disallowed'], | |
| [[2447, 2448], 'valid'], | |
| [[2449, 2450], 'disallowed'], | |
| [[2451, 2472], 'valid'], | |
| [[2473, 2473], 'disallowed'], | |
| [[2474, 2480], 'valid'], | |
| [[2481, 2481], 'disallowed'], | |
| [[2482, 2482], 'valid'], | |
| [[2483, 2485], 'disallowed'], | |
| [[2486, 2489], 'valid'], | |
| [[2490, 2491], 'disallowed'], | |
| [[2492, 2492], 'valid'], | |
| [[2493, 2493], 'valid'], | |
| [[2494, 2500], 'valid'], | |
| [[2501, 2502], 'disallowed'], | |
| [[2503, 2504], 'valid'], | |
| [[2505, 2506], 'disallowed'], | |
| [[2507, 2509], 'valid'], | |
| [[2510, 2510], 'valid'], | |
| [[2511, 2518], 'disallowed'], | |
| [[2519, 2519], 'valid'], | |
| [[2520, 2523], 'disallowed'], | |
| [[2524, 2524], 'mapped', [2465, 2492]], | |
| [[2525, 2525], 'mapped', [2466, 2492]], | |
| [[2526, 2526], 'disallowed'], | |
| [[2527, 2527], 'mapped', [2479, 2492]], | |
| [[2528, 2531], 'valid'], | |
| [[2532, 2533], 'disallowed'], | |
| [[2534, 2545], 'valid'], | |
| [[2546, 2554], 'valid', [], 'NV8'], | |
| [[2555, 2555], 'valid', [], 'NV8'], | |
| [[2556, 2560], 'disallowed'], | |
| [[2561, 2561], 'valid'], | |
| [[2562, 2562], 'valid'], | |
| [[2563, 2563], 'valid'], | |
| [[2564, 2564], 'disallowed'], | |
| [[2565, 2570], 'valid'], | |
| [[2571, 2574], 'disallowed'], | |
| [[2575, 2576], 'valid'], | |
| [[2577, 2578], 'disallowed'], | |
| [[2579, 2600], 'valid'], | |
| [[2601, 2601], 'disallowed'], | |
| [[2602, 2608], 'valid'], | |
| [[2609, 2609], 'disallowed'], | |
| [[2610, 2610], 'valid'], | |
| [[2611, 2611], 'mapped', [2610, 2620]], | |
| [[2612, 2612], 'disallowed'], | |
| [[2613, 2613], 'valid'], | |
| [[2614, 2614], 'mapped', [2616, 2620]], | |
| [[2615, 2615], 'disallowed'], | |
| [[2616, 2617], 'valid'], | |
| [[2618, 2619], 'disallowed'], | |
| [[2620, 2620], 'valid'], | |
| [[2621, 2621], 'disallowed'], | |
| [[2622, 2626], 'valid'], | |
| [[2627, 2630], 'disallowed'], | |
| [[2631, 2632], 'valid'], | |
| [[2633, 2634], 'disallowed'], | |
| [[2635, 2637], 'valid'], | |
| [[2638, 2640], 'disallowed'], | |
| [[2641, 2641], 'valid'], | |
| [[2642, 2648], 'disallowed'], | |
| [[2649, 2649], 'mapped', [2582, 2620]], | |
| [[2650, 2650], 'mapped', [2583, 2620]], | |
| [[2651, 2651], 'mapped', [2588, 2620]], | |
| [[2652, 2652], 'valid'], | |
| [[2653, 2653], 'disallowed'], | |
| [[2654, 2654], 'mapped', [2603, 2620]], | |
| [[2655, 2661], 'disallowed'], | |
| [[2662, 2676], 'valid'], | |
| [[2677, 2677], 'valid'], | |
| [[2678, 2688], 'disallowed'], | |
| [[2689, 2691], 'valid'], | |
| [[2692, 2692], 'disallowed'], | |
| [[2693, 2699], 'valid'], | |
| [[2700, 2700], 'valid'], | |
| [[2701, 2701], 'valid'], | |
| [[2702, 2702], 'disallowed'], | |
| [[2703, 2705], 'valid'], | |
| [[2706, 2706], 'disallowed'], | |
| [[2707, 2728], 'valid'], | |
| [[2729, 2729], 'disallowed'], | |
| [[2730, 2736], 'valid'], | |
| [[2737, 2737], 'disallowed'], | |
| [[2738, 2739], 'valid'], | |
| [[2740, 2740], 'disallowed'], | |
| [[2741, 2745], 'valid'], | |
| [[2746, 2747], 'disallowed'], | |
| [[2748, 2757], 'valid'], | |
| [[2758, 2758], 'disallowed'], | |
| [[2759, 2761], 'valid'], | |
| [[2762, 2762], 'disallowed'], | |
| [[2763, 2765], 'valid'], | |
| [[2766, 2767], 'disallowed'], | |
| [[2768, 2768], 'valid'], | |
| [[2769, 2783], 'disallowed'], | |
| [[2784, 2784], 'valid'], | |
| [[2785, 2787], 'valid'], | |
| [[2788, 2789], 'disallowed'], | |
| [[2790, 2799], 'valid'], | |
| [[2800, 2800], 'valid', [], 'NV8'], | |
| [[2801, 2801], 'valid', [], 'NV8'], | |
| [[2802, 2808], 'disallowed'], | |
| [[2809, 2809], 'valid'], | |
| [[2810, 2816], 'disallowed'], | |
| [[2817, 2819], 'valid'], | |
| [[2820, 2820], 'disallowed'], | |
| [[2821, 2828], 'valid'], | |
| [[2829, 2830], 'disallowed'], | |
| [[2831, 2832], 'valid'], | |
| [[2833, 2834], 'disallowed'], | |
| [[2835, 2856], 'valid'], | |
| [[2857, 2857], 'disallowed'], | |
| [[2858, 2864], 'valid'], | |
| [[2865, 2865], 'disallowed'], | |
| [[2866, 2867], 'valid'], | |
| [[2868, 2868], 'disallowed'], | |
| [[2869, 2869], 'valid'], | |
| [[2870, 2873], 'valid'], | |
| [[2874, 2875], 'disallowed'], | |
| [[2876, 2883], 'valid'], | |
| [[2884, 2884], 'valid'], | |
| [[2885, 2886], 'disallowed'], | |
| [[2887, 2888], 'valid'], | |
| [[2889, 2890], 'disallowed'], | |
| [[2891, 2893], 'valid'], | |
| [[2894, 2901], 'disallowed'], | |
| [[2902, 2903], 'valid'], | |
| [[2904, 2907], 'disallowed'], | |
| [[2908, 2908], 'mapped', [2849, 2876]], | |
| [[2909, 2909], 'mapped', [2850, 2876]], | |
| [[2910, 2910], 'disallowed'], | |
| [[2911, 2913], 'valid'], | |
| [[2914, 2915], 'valid'], | |
| [[2916, 2917], 'disallowed'], | |
| [[2918, 2927], 'valid'], | |
| [[2928, 2928], 'valid', [], 'NV8'], | |
| [[2929, 2929], 'valid'], | |
| [[2930, 2935], 'valid', [], 'NV8'], | |
| [[2936, 2945], 'disallowed'], | |
| [[2946, 2947], 'valid'], | |
| [[2948, 2948], 'disallowed'], | |
| [[2949, 2954], 'valid'], | |
| [[2955, 2957], 'disallowed'], | |
| [[2958, 2960], 'valid'], | |
| [[2961, 2961], 'disallowed'], | |
| [[2962, 2965], 'valid'], | |
| [[2966, 2968], 'disallowed'], | |
| [[2969, 2970], 'valid'], | |
| [[2971, 2971], 'disallowed'], | |
| [[2972, 2972], 'valid'], | |
| [[2973, 2973], 'disallowed'], | |
| [[2974, 2975], 'valid'], | |
| [[2976, 2978], 'disallowed'], | |
| [[2979, 2980], 'valid'], | |
| [[2981, 2983], 'disallowed'], | |
| [[2984, 2986], 'valid'], | |
| [[2987, 2989], 'disallowed'], | |
| [[2990, 2997], 'valid'], | |
| [[2998, 2998], 'valid'], | |
| [[2999, 3001], 'valid'], | |
| [[3002, 3005], 'disallowed'], | |
| [[3006, 3010], 'valid'], | |
| [[3011, 3013], 'disallowed'], | |
| [[3014, 3016], 'valid'], | |
| [[3017, 3017], 'disallowed'], | |
| [[3018, 3021], 'valid'], | |
| [[3022, 3023], 'disallowed'], | |
| [[3024, 3024], 'valid'], | |
| [[3025, 3030], 'disallowed'], | |
| [[3031, 3031], 'valid'], | |
| [[3032, 3045], 'disallowed'], | |
| [[3046, 3046], 'valid'], | |
| [[3047, 3055], 'valid'], | |
| [[3056, 3058], 'valid', [], 'NV8'], | |
| [[3059, 3066], 'valid', [], 'NV8'], | |
| [[3067, 3071], 'disallowed'], | |
| [[3072, 3072], 'valid'], | |
| [[3073, 3075], 'valid'], | |
| [[3076, 3076], 'disallowed'], | |
| [[3077, 3084], 'valid'], | |
| [[3085, 3085], 'disallowed'], | |
| [[3086, 3088], 'valid'], | |
| [[3089, 3089], 'disallowed'], | |
| [[3090, 3112], 'valid'], | |
| [[3113, 3113], 'disallowed'], | |
| [[3114, 3123], 'valid'], | |
| [[3124, 3124], 'valid'], | |
| [[3125, 3129], 'valid'], | |
| [[3130, 3132], 'disallowed'], | |
| [[3133, 3133], 'valid'], | |
| [[3134, 3140], 'valid'], | |
| [[3141, 3141], 'disallowed'], | |
| [[3142, 3144], 'valid'], | |
| [[3145, 3145], 'disallowed'], | |
| [[3146, 3149], 'valid'], | |
| [[3150, 3156], 'disallowed'], | |
| [[3157, 3158], 'valid'], | |
| [[3159, 3159], 'disallowed'], | |
| [[3160, 3161], 'valid'], | |
| [[3162, 3162], 'valid'], | |
| [[3163, 3167], 'disallowed'], | |
| [[3168, 3169], 'valid'], | |
| [[3170, 3171], 'valid'], | |
| [[3172, 3173], 'disallowed'], | |
| [[3174, 3183], 'valid'], | |
| [[3184, 3191], 'disallowed'], | |
| [[3192, 3199], 'valid', [], 'NV8'], | |
| [[3200, 3200], 'disallowed'], | |
| [[3201, 3201], 'valid'], | |
| [[3202, 3203], 'valid'], | |
| [[3204, 3204], 'disallowed'], | |
| [[3205, 3212], 'valid'], | |
| [[3213, 3213], 'disallowed'], | |
| [[3214, 3216], 'valid'], | |
| [[3217, 3217], 'disallowed'], | |
| [[3218, 3240], 'valid'], | |
| [[3241, 3241], 'disallowed'], | |
| [[3242, 3251], 'valid'], | |
| [[3252, 3252], 'disallowed'], | |
| [[3253, 3257], 'valid'], | |
| [[3258, 3259], 'disallowed'], | |
| [[3260, 3261], 'valid'], | |
| [[3262, 3268], 'valid'], | |
| [[3269, 3269], 'disallowed'], | |
| [[3270, 3272], 'valid'], | |
| [[3273, 3273], 'disallowed'], | |
| [[3274, 3277], 'valid'], | |
| [[3278, 3284], 'disallowed'], | |
| [[3285, 3286], 'valid'], | |
| [[3287, 3293], 'disallowed'], | |
| [[3294, 3294], 'valid'], | |
| [[3295, 3295], 'disallowed'], | |
| [[3296, 3297], 'valid'], | |
| [[3298, 3299], 'valid'], | |
| [[3300, 3301], 'disallowed'], | |
| [[3302, 3311], 'valid'], | |
| [[3312, 3312], 'disallowed'], | |
| [[3313, 3314], 'valid'], | |
| [[3315, 3328], 'disallowed'], | |
| [[3329, 3329], 'valid'], | |
| [[3330, 3331], 'valid'], | |
| [[3332, 3332], 'disallowed'], | |
| [[3333, 3340], 'valid'], | |
| [[3341, 3341], 'disallowed'], | |
| [[3342, 3344], 'valid'], | |
| [[3345, 3345], 'disallowed'], | |
| [[3346, 3368], 'valid'], | |
| [[3369, 3369], 'valid'], | |
| [[3370, 3385], 'valid'], | |
| [[3386, 3386], 'valid'], | |
| [[3387, 3388], 'disallowed'], | |
| [[3389, 3389], 'valid'], | |
| [[3390, 3395], 'valid'], | |
| [[3396, 3396], 'valid'], | |
| [[3397, 3397], 'disallowed'], | |
| [[3398, 3400], 'valid'], | |
| [[3401, 3401], 'disallowed'], | |
| [[3402, 3405], 'valid'], | |
| [[3406, 3406], 'valid'], | |
| [[3407, 3414], 'disallowed'], | |
| [[3415, 3415], 'valid'], | |
| [[3416, 3422], 'disallowed'], | |
| [[3423, 3423], 'valid'], | |
| [[3424, 3425], 'valid'], | |
| [[3426, 3427], 'valid'], | |
| [[3428, 3429], 'disallowed'], | |
| [[3430, 3439], 'valid'], | |
| [[3440, 3445], 'valid', [], 'NV8'], | |
| [[3446, 3448], 'disallowed'], | |
| [[3449, 3449], 'valid', [], 'NV8'], | |
| [[3450, 3455], 'valid'], | |
| [[3456, 3457], 'disallowed'], | |
| [[3458, 3459], 'valid'], | |
| [[3460, 3460], 'disallowed'], | |
| [[3461, 3478], 'valid'], | |
| [[3479, 3481], 'disallowed'], | |
| [[3482, 3505], 'valid'], | |
| [[3506, 3506], 'disallowed'], | |
| [[3507, 3515], 'valid'], | |
| [[3516, 3516], 'disallowed'], | |
| [[3517, 3517], 'valid'], | |
| [[3518, 3519], 'disallowed'], | |
| [[3520, 3526], 'valid'], | |
| [[3527, 3529], 'disallowed'], | |
| [[3530, 3530], 'valid'], | |
| [[3531, 3534], 'disallowed'], | |
| [[3535, 3540], 'valid'], | |
| [[3541, 3541], 'disallowed'], | |
| [[3542, 3542], 'valid'], | |
| [[3543, 3543], 'disallowed'], | |
| [[3544, 3551], 'valid'], | |
| [[3552, 3557], 'disallowed'], | |
| [[3558, 3567], 'valid'], | |
| [[3568, 3569], 'disallowed'], | |
| [[3570, 3571], 'valid'], | |
| [[3572, 3572], 'valid', [], 'NV8'], | |
| [[3573, 3584], 'disallowed'], | |
| [[3585, 3634], 'valid'], | |
| [[3635, 3635], 'mapped', [3661, 3634]], | |
| [[3636, 3642], 'valid'], | |
| [[3643, 3646], 'disallowed'], | |
| [[3647, 3647], 'valid', [], 'NV8'], | |
| [[3648, 3662], 'valid'], | |
| [[3663, 3663], 'valid', [], 'NV8'], | |
| [[3664, 3673], 'valid'], | |
| [[3674, 3675], 'valid', [], 'NV8'], | |
| [[3676, 3712], 'disallowed'], | |
| [[3713, 3714], 'valid'], | |
| [[3715, 3715], 'disallowed'], | |
| [[3716, 3716], 'valid'], | |
| [[3717, 3718], 'disallowed'], | |
| [[3719, 3720], 'valid'], | |
| [[3721, 3721], 'disallowed'], | |
| [[3722, 3722], 'valid'], | |
| [[3723, 3724], 'disallowed'], | |
| [[3725, 3725], 'valid'], | |
| [[3726, 3731], 'disallowed'], | |
| [[3732, 3735], 'valid'], | |
| [[3736, 3736], 'disallowed'], | |
| [[3737, 3743], 'valid'], | |
| [[3744, 3744], 'disallowed'], | |
| [[3745, 3747], 'valid'], | |
| [[3748, 3748], 'disallowed'], | |
| [[3749, 3749], 'valid'], | |
| [[3750, 3750], 'disallowed'], | |
| [[3751, 3751], 'valid'], | |
| [[3752, 3753], 'disallowed'], | |
| [[3754, 3755], 'valid'], | |
| [[3756, 3756], 'disallowed'], | |
| [[3757, 3762], 'valid'], | |
| [[3763, 3763], 'mapped', [3789, 3762]], | |
| [[3764, 3769], 'valid'], | |
| [[3770, 3770], 'disallowed'], | |
| [[3771, 3773], 'valid'], | |
| [[3774, 3775], 'disallowed'], | |
| [[3776, 3780], 'valid'], | |
| [[3781, 3781], 'disallowed'], | |
| [[3782, 3782], 'valid'], | |
| [[3783, 3783], 'disallowed'], | |
| [[3784, 3789], 'valid'], | |
| [[3790, 3791], 'disallowed'], | |
| [[3792, 3801], 'valid'], | |
| [[3802, 3803], 'disallowed'], | |
| [[3804, 3804], 'mapped', [3755, 3737]], | |
| [[3805, 3805], 'mapped', [3755, 3745]], | |
| [[3806, 3807], 'valid'], | |
| [[3808, 3839], 'disallowed'], | |
| [[3840, 3840], 'valid'], | |
| [[3841, 3850], 'valid', [], 'NV8'], | |
| [[3851, 3851], 'valid'], | |
| [[3852, 3852], 'mapped', [3851]], | |
| [[3853, 3863], 'valid', [], 'NV8'], | |
| [[3864, 3865], 'valid'], | |
| [[3866, 3871], 'valid', [], 'NV8'], | |
| [[3872, 3881], 'valid'], | |
| [[3882, 3892], 'valid', [], 'NV8'], | |
| [[3893, 3893], 'valid'], | |
| [[3894, 3894], 'valid', [], 'NV8'], | |
| [[3895, 3895], 'valid'], | |
| [[3896, 3896], 'valid', [], 'NV8'], | |
| [[3897, 3897], 'valid'], | |
| [[3898, 3901], 'valid', [], 'NV8'], | |
| [[3902, 3906], 'valid'], | |
| [[3907, 3907], 'mapped', [3906, 4023]], | |
| [[3908, 3911], 'valid'], | |
| [[3912, 3912], 'disallowed'], | |
| [[3913, 3916], 'valid'], | |
| [[3917, 3917], 'mapped', [3916, 4023]], | |
| [[3918, 3921], 'valid'], | |
| [[3922, 3922], 'mapped', [3921, 4023]], | |
| [[3923, 3926], 'valid'], | |
| [[3927, 3927], 'mapped', [3926, 4023]], | |
| [[3928, 3931], 'valid'], | |
| [[3932, 3932], 'mapped', [3931, 4023]], | |
| [[3933, 3944], 'valid'], | |
| [[3945, 3945], 'mapped', [3904, 4021]], | |
| [[3946, 3946], 'valid'], | |
| [[3947, 3948], 'valid'], | |
| [[3949, 3952], 'disallowed'], | |
| [[3953, 3954], 'valid'], | |
| [[3955, 3955], 'mapped', [3953, 3954]], | |
| [[3956, 3956], 'valid'], | |
| [[3957, 3957], 'mapped', [3953, 3956]], | |
| [[3958, 3958], 'mapped', [4018, 3968]], | |
| [[3959, 3959], 'mapped', [4018, 3953, 3968]], | |
| [[3960, 3960], 'mapped', [4019, 3968]], | |
| [[3961, 3961], 'mapped', [4019, 3953, 3968]], | |
| [[3962, 3968], 'valid'], | |
| [[3969, 3969], 'mapped', [3953, 3968]], | |
| [[3970, 3972], 'valid'], | |
| [[3973, 3973], 'valid', [], 'NV8'], | |
| [[3974, 3979], 'valid'], | |
| [[3980, 3983], 'valid'], | |
| [[3984, 3986], 'valid'], | |
| [[3987, 3987], 'mapped', [3986, 4023]], | |
| [[3988, 3989], 'valid'], | |
| [[3990, 3990], 'valid'], | |
| [[3991, 3991], 'valid'], | |
| [[3992, 3992], 'disallowed'], | |
| [[3993, 3996], 'valid'], | |
| [[3997, 3997], 'mapped', [3996, 4023]], | |
| [[3998, 4001], 'valid'], | |
| [[4002, 4002], 'mapped', [4001, 4023]], | |
| [[4003, 4006], 'valid'], | |
| [[4007, 4007], 'mapped', [4006, 4023]], | |
| [[4008, 4011], 'valid'], | |
| [[4012, 4012], 'mapped', [4011, 4023]], | |
| [[4013, 4013], 'valid'], | |
| [[4014, 4016], 'valid'], | |
| [[4017, 4023], 'valid'], | |
| [[4024, 4024], 'valid'], | |
| [[4025, 4025], 'mapped', [3984, 4021]], | |
| [[4026, 4028], 'valid'], | |
| [[4029, 4029], 'disallowed'], | |
| [[4030, 4037], 'valid', [], 'NV8'], | |
| [[4038, 4038], 'valid'], | |
| [[4039, 4044], 'valid', [], 'NV8'], | |
| [[4045, 4045], 'disallowed'], | |
| [[4046, 4046], 'valid', [], 'NV8'], | |
| [[4047, 4047], 'valid', [], 'NV8'], | |
| [[4048, 4049], 'valid', [], 'NV8'], | |
| [[4050, 4052], 'valid', [], 'NV8'], | |
| [[4053, 4056], 'valid', [], 'NV8'], | |
| [[4057, 4058], 'valid', [], 'NV8'], | |
| [[4059, 4095], 'disallowed'], | |
| [[4096, 4129], 'valid'], | |
| [[4130, 4130], 'valid'], | |
| [[4131, 4135], 'valid'], | |
| [[4136, 4136], 'valid'], | |
| [[4137, 4138], 'valid'], | |
| [[4139, 4139], 'valid'], | |
| [[4140, 4146], 'valid'], | |
| [[4147, 4149], 'valid'], | |
| [[4150, 4153], 'valid'], | |
| [[4154, 4159], 'valid'], | |
| [[4160, 4169], 'valid'], | |
| [[4170, 4175], 'valid', [], 'NV8'], | |
| [[4176, 4185], 'valid'], | |
| [[4186, 4249], 'valid'], | |
| [[4250, 4253], 'valid'], | |
| [[4254, 4255], 'valid', [], 'NV8'], | |
| [[4256, 4293], 'disallowed'], | |
| [[4294, 4294], 'disallowed'], | |
| [[4295, 4295], 'mapped', [11559]], | |
| [[4296, 4300], 'disallowed'], | |
| [[4301, 4301], 'mapped', [11565]], | |
| [[4302, 4303], 'disallowed'], | |
| [[4304, 4342], 'valid'], | |
| [[4343, 4344], 'valid'], | |
| [[4345, 4346], 'valid'], | |
| [[4347, 4347], 'valid', [], 'NV8'], | |
| [[4348, 4348], 'mapped', [4316]], | |
| [[4349, 4351], 'valid'], | |
| [[4352, 4441], 'valid', [], 'NV8'], | |
| [[4442, 4446], 'valid', [], 'NV8'], | |
| [[4447, 4448], 'disallowed'], | |
| [[4449, 4514], 'valid', [], 'NV8'], | |
| [[4515, 4519], 'valid', [], 'NV8'], | |
| [[4520, 4601], 'valid', [], 'NV8'], | |
| [[4602, 4607], 'valid', [], 'NV8'], | |
| [[4608, 4614], 'valid'], | |
| [[4615, 4615], 'valid'], | |
| [[4616, 4678], 'valid'], | |
| [[4679, 4679], 'valid'], | |
| [[4680, 4680], 'valid'], | |
| [[4681, 4681], 'disallowed'], | |
| [[4682, 4685], 'valid'], | |
| [[4686, 4687], 'disallowed'], | |
| [[4688, 4694], 'valid'], | |
| [[4695, 4695], 'disallowed'], | |
| [[4696, 4696], 'valid'], | |
| [[4697, 4697], 'disallowed'], | |
| [[4698, 4701], 'valid'], | |
| [[4702, 4703], 'disallowed'], | |
| [[4704, 4742], 'valid'], | |
| [[4743, 4743], 'valid'], | |
| [[4744, 4744], 'valid'], | |
| [[4745, 4745], 'disallowed'], | |
| [[4746, 4749], 'valid'], | |
| [[4750, 4751], 'disallowed'], | |
| [[4752, 4782], 'valid'], | |
| [[4783, 4783], 'valid'], | |
| [[4784, 4784], 'valid'], | |
| [[4785, 4785], 'disallowed'], | |
| [[4786, 4789], 'valid'], | |
| [[4790, 4791], 'disallowed'], | |
| [[4792, 4798], 'valid'], | |
| [[4799, 4799], 'disallowed'], | |
| [[4800, 4800], 'valid'], | |
| [[4801, 4801], 'disallowed'], | |
| [[4802, 4805], 'valid'], | |
| [[4806, 4807], 'disallowed'], | |
| [[4808, 4814], 'valid'], | |
| [[4815, 4815], 'valid'], | |
| [[4816, 4822], 'valid'], | |
| [[4823, 4823], 'disallowed'], | |
| [[4824, 4846], 'valid'], | |
| [[4847, 4847], 'valid'], | |
| [[4848, 4878], 'valid'], | |
| [[4879, 4879], 'valid'], | |
| [[4880, 4880], 'valid'], | |
| [[4881, 4881], 'disallowed'], | |
| [[4882, 4885], 'valid'], | |
| [[4886, 4887], 'disallowed'], | |
| [[4888, 4894], 'valid'], | |
| [[4895, 4895], 'valid'], | |
| [[4896, 4934], 'valid'], | |
| [[4935, 4935], 'valid'], | |
| [[4936, 4954], 'valid'], | |
| [[4955, 4956], 'disallowed'], | |
| [[4957, 4958], 'valid'], | |
| [[4959, 4959], 'valid'], | |
| [[4960, 4960], 'valid', [], 'NV8'], | |
| [[4961, 4988], 'valid', [], 'NV8'], | |
| [[4989, 4991], 'disallowed'], | |
| [[4992, 5007], 'valid'], | |
| [[5008, 5017], 'valid', [], 'NV8'], | |
| [[5018, 5023], 'disallowed'], | |
| [[5024, 5108], 'valid'], | |
| [[5109, 5109], 'valid'], | |
| [[5110, 5111], 'disallowed'], | |
| [[5112, 5112], 'mapped', [5104]], | |
| [[5113, 5113], 'mapped', [5105]], | |
| [[5114, 5114], 'mapped', [5106]], | |
| [[5115, 5115], 'mapped', [5107]], | |
| [[5116, 5116], 'mapped', [5108]], | |
| [[5117, 5117], 'mapped', [5109]], | |
| [[5118, 5119], 'disallowed'], | |
| [[5120, 5120], 'valid', [], 'NV8'], | |
| [[5121, 5740], 'valid'], | |
| [[5741, 5742], 'valid', [], 'NV8'], | |
| [[5743, 5750], 'valid'], | |
| [[5751, 5759], 'valid'], | |
| [[5760, 5760], 'disallowed'], | |
| [[5761, 5786], 'valid'], | |
| [[5787, 5788], 'valid', [], 'NV8'], | |
| [[5789, 5791], 'disallowed'], | |
| [[5792, 5866], 'valid'], | |
| [[5867, 5872], 'valid', [], 'NV8'], | |
| [[5873, 5880], 'valid'], | |
| [[5881, 5887], 'disallowed'], | |
| [[5888, 5900], 'valid'], | |
| [[5901, 5901], 'disallowed'], | |
| [[5902, 5908], 'valid'], | |
| [[5909, 5919], 'disallowed'], | |
| [[5920, 5940], 'valid'], | |
| [[5941, 5942], 'valid', [], 'NV8'], | |
| [[5943, 5951], 'disallowed'], | |
| [[5952, 5971], 'valid'], | |
| [[5972, 5983], 'disallowed'], | |
| [[5984, 5996], 'valid'], | |
| [[5997, 5997], 'disallowed'], | |
| [[5998, 6000], 'valid'], | |
| [[6001, 6001], 'disallowed'], | |
| [[6002, 6003], 'valid'], | |
| [[6004, 6015], 'disallowed'], | |
| [[6016, 6067], 'valid'], | |
| [[6068, 6069], 'disallowed'], | |
| [[6070, 6099], 'valid'], | |
| [[6100, 6102], 'valid', [], 'NV8'], | |
| [[6103, 6103], 'valid'], | |
| [[6104, 6107], 'valid', [], 'NV8'], | |
| [[6108, 6108], 'valid'], | |
| [[6109, 6109], 'valid'], | |
| [[6110, 6111], 'disallowed'], | |
| [[6112, 6121], 'valid'], | |
| [[6122, 6127], 'disallowed'], | |
| [[6128, 6137], 'valid', [], 'NV8'], | |
| [[6138, 6143], 'disallowed'], | |
| [[6144, 6149], 'valid', [], 'NV8'], | |
| [[6150, 6150], 'disallowed'], | |
| [[6151, 6154], 'valid', [], 'NV8'], | |
| [[6155, 6157], 'ignored'], | |
| [[6158, 6158], 'disallowed'], | |
| [[6159, 6159], 'disallowed'], | |
| [[6160, 6169], 'valid'], | |
| [[6170, 6175], 'disallowed'], | |
| [[6176, 6263], 'valid'], | |
| [[6264, 6271], 'disallowed'], | |
| [[6272, 6313], 'valid'], | |
| [[6314, 6314], 'valid'], | |
| [[6315, 6319], 'disallowed'], | |
| [[6320, 6389], 'valid'], | |
| [[6390, 6399], 'disallowed'], | |
| [[6400, 6428], 'valid'], | |
| [[6429, 6430], 'valid'], | |
| [[6431, 6431], 'disallowed'], | |
| [[6432, 6443], 'valid'], | |
| [[6444, 6447], 'disallowed'], | |
| [[6448, 6459], 'valid'], | |
| [[6460, 6463], 'disallowed'], | |
| [[6464, 6464], 'valid', [], 'NV8'], | |
| [[6465, 6467], 'disallowed'], | |
| [[6468, 6469], 'valid', [], 'NV8'], | |
| [[6470, 6509], 'valid'], | |
| [[6510, 6511], 'disallowed'], | |
| [[6512, 6516], 'valid'], | |
| [[6517, 6527], 'disallowed'], | |
| [[6528, 6569], 'valid'], | |
| [[6570, 6571], 'valid'], | |
| [[6572, 6575], 'disallowed'], | |
| [[6576, 6601], 'valid'], | |
| [[6602, 6607], 'disallowed'], | |
| [[6608, 6617], 'valid'], | |
| [[6618, 6618], 'valid', [], 'XV8'], | |
| [[6619, 6621], 'disallowed'], | |
| [[6622, 6623], 'valid', [], 'NV8'], | |
| [[6624, 6655], 'valid', [], 'NV8'], | |
| [[6656, 6683], 'valid'], | |
| [[6684, 6685], 'disallowed'], | |
| [[6686, 6687], 'valid', [], 'NV8'], | |
| [[6688, 6750], 'valid'], | |
| [[6751, 6751], 'disallowed'], | |
| [[6752, 6780], 'valid'], | |
| [[6781, 6782], 'disallowed'], | |
| [[6783, 6793], 'valid'], | |
| [[6794, 6799], 'disallowed'], | |
| [[6800, 6809], 'valid'], | |
| [[6810, 6815], 'disallowed'], | |
| [[6816, 6822], 'valid', [], 'NV8'], | |
| [[6823, 6823], 'valid'], | |
| [[6824, 6829], 'valid', [], 'NV8'], | |
| [[6830, 6831], 'disallowed'], | |
| [[6832, 6845], 'valid'], | |
| [[6846, 6846], 'valid', [], 'NV8'], | |
| [[6847, 6911], 'disallowed'], | |
| [[6912, 6987], 'valid'], | |
| [[6988, 6991], 'disallowed'], | |
| [[6992, 7001], 'valid'], | |
| [[7002, 7018], 'valid', [], 'NV8'], | |
| [[7019, 7027], 'valid'], | |
| [[7028, 7036], 'valid', [], 'NV8'], | |
| [[7037, 7039], 'disallowed'], | |
| [[7040, 7082], 'valid'], | |
| [[7083, 7085], 'valid'], | |
| [[7086, 7097], 'valid'], | |
| [[7098, 7103], 'valid'], | |
| [[7104, 7155], 'valid'], | |
| [[7156, 7163], 'disallowed'], | |
| [[7164, 7167], 'valid', [], 'NV8'], | |
| [[7168, 7223], 'valid'], | |
| [[7224, 7226], 'disallowed'], | |
| [[7227, 7231], 'valid', [], 'NV8'], | |
| [[7232, 7241], 'valid'], | |
| [[7242, 7244], 'disallowed'], | |
| [[7245, 7293], 'valid'], | |
| [[7294, 7295], 'valid', [], 'NV8'], | |
| [[7296, 7359], 'disallowed'], | |
| [[7360, 7367], 'valid', [], 'NV8'], | |
| [[7368, 7375], 'disallowed'], | |
| [[7376, 7378], 'valid'], | |
| [[7379, 7379], 'valid', [], 'NV8'], | |
| [[7380, 7410], 'valid'], | |
| [[7411, 7414], 'valid'], | |
| [[7415, 7415], 'disallowed'], | |
| [[7416, 7417], 'valid'], | |
| [[7418, 7423], 'disallowed'], | |
| [[7424, 7467], 'valid'], | |
| [[7468, 7468], 'mapped', [97]], | |
| [[7469, 7469], 'mapped', [230]], | |
| [[7470, 7470], 'mapped', [98]], | |
| [[7471, 7471], 'valid'], | |
| [[7472, 7472], 'mapped', [100]], | |
| [[7473, 7473], 'mapped', [101]], | |
| [[7474, 7474], 'mapped', [477]], | |
| [[7475, 7475], 'mapped', [103]], | |
| [[7476, 7476], 'mapped', [104]], | |
| [[7477, 7477], 'mapped', [105]], | |
| [[7478, 7478], 'mapped', [106]], | |
| [[7479, 7479], 'mapped', [107]], | |
| [[7480, 7480], 'mapped', [108]], | |
| [[7481, 7481], 'mapped', [109]], | |
| [[7482, 7482], 'mapped', [110]], | |
| [[7483, 7483], 'valid'], | |
| [[7484, 7484], 'mapped', [111]], | |
| [[7485, 7485], 'mapped', [547]], | |
| [[7486, 7486], 'mapped', [112]], | |
| [[7487, 7487], 'mapped', [114]], | |
| [[7488, 7488], 'mapped', [116]], | |
| [[7489, 7489], 'mapped', [117]], | |
| [[7490, 7490], 'mapped', [119]], | |
| [[7491, 7491], 'mapped', [97]], | |
| [[7492, 7492], 'mapped', [592]], | |
| [[7493, 7493], 'mapped', [593]], | |
| [[7494, 7494], 'mapped', [7426]], | |
| [[7495, 7495], 'mapped', [98]], | |
| [[7496, 7496], 'mapped', [100]], | |
| [[7497, 7497], 'mapped', [101]], | |
| [[7498, 7498], 'mapped', [601]], | |
| [[7499, 7499], 'mapped', [603]], | |
| [[7500, 7500], 'mapped', [604]], | |
| [[7501, 7501], 'mapped', [103]], | |
| [[7502, 7502], 'valid'], | |
| [[7503, 7503], 'mapped', [107]], | |
| [[7504, 7504], 'mapped', [109]], | |
| [[7505, 7505], 'mapped', [331]], | |
| [[7506, 7506], 'mapped', [111]], | |
| [[7507, 7507], 'mapped', [596]], | |
| [[7508, 7508], 'mapped', [7446]], | |
| [[7509, 7509], 'mapped', [7447]], | |
| [[7510, 7510], 'mapped', [112]], | |
| [[7511, 7511], 'mapped', [116]], | |
| [[7512, 7512], 'mapped', [117]], | |
| [[7513, 7513], 'mapped', [7453]], | |
| [[7514, 7514], 'mapped', [623]], | |
| [[7515, 7515], 'mapped', [118]], | |
| [[7516, 7516], 'mapped', [7461]], | |
| [[7517, 7517], 'mapped', [946]], | |
| [[7518, 7518], 'mapped', [947]], | |
| [[7519, 7519], 'mapped', [948]], | |
| [[7520, 7520], 'mapped', [966]], | |
| [[7521, 7521], 'mapped', [967]], | |
| [[7522, 7522], 'mapped', [105]], | |
| [[7523, 7523], 'mapped', [114]], | |
| [[7524, 7524], 'mapped', [117]], | |
| [[7525, 7525], 'mapped', [118]], | |
| [[7526, 7526], 'mapped', [946]], | |
| [[7527, 7527], 'mapped', [947]], | |
| [[7528, 7528], 'mapped', [961]], | |
| [[7529, 7529], 'mapped', [966]], | |
| [[7530, 7530], 'mapped', [967]], | |
| [[7531, 7531], 'valid'], | |
| [[7532, 7543], 'valid'], | |
| [[7544, 7544], 'mapped', [1085]], | |
| [[7545, 7578], 'valid'], | |
| [[7579, 7579], 'mapped', [594]], | |
| [[7580, 7580], 'mapped', [99]], | |
| [[7581, 7581], 'mapped', [597]], | |
| [[7582, 7582], 'mapped', [240]], | |
| [[7583, 7583], 'mapped', [604]], | |
| [[7584, 7584], 'mapped', [102]], | |
| [[7585, 7585], 'mapped', [607]], | |
| [[7586, 7586], 'mapped', [609]], | |
| [[7587, 7587], 'mapped', [613]], | |
| [[7588, 7588], 'mapped', [616]], | |
| [[7589, 7589], 'mapped', [617]], | |
| [[7590, 7590], 'mapped', [618]], | |
| [[7591, 7591], 'mapped', [7547]], | |
| [[7592, 7592], 'mapped', [669]], | |
| [[7593, 7593], 'mapped', [621]], | |
| [[7594, 7594], 'mapped', [7557]], | |
| [[7595, 7595], 'mapped', [671]], | |
| [[7596, 7596], 'mapped', [625]], | |
| [[7597, 7597], 'mapped', [624]], | |
| [[7598, 7598], 'mapped', [626]], | |
| [[7599, 7599], 'mapped', [627]], | |
| [[7600, 7600], 'mapped', [628]], | |
| [[7601, 7601], 'mapped', [629]], | |
| [[7602, 7602], 'mapped', [632]], | |
| [[7603, 7603], 'mapped', [642]], | |
| [[7604, 7604], 'mapped', [643]], | |
| [[7605, 7605], 'mapped', [427]], | |
| [[7606, 7606], 'mapped', [649]], | |
| [[7607, 7607], 'mapped', [650]], | |
| [[7608, 7608], 'mapped', [7452]], | |
| [[7609, 7609], 'mapped', [651]], | |
| [[7610, 7610], 'mapped', [652]], | |
| [[7611, 7611], 'mapped', [122]], | |
| [[7612, 7612], 'mapped', [656]], | |
| [[7613, 7613], 'mapped', [657]], | |
| [[7614, 7614], 'mapped', [658]], | |
| [[7615, 7615], 'mapped', [952]], | |
| [[7616, 7619], 'valid'], | |
| [[7620, 7626], 'valid'], | |
| [[7627, 7654], 'valid'], | |
| [[7655, 7669], 'valid'], | |
| [[7670, 7675], 'disallowed'], | |
| [[7676, 7676], 'valid'], | |
| [[7677, 7677], 'valid'], | |
| [[7678, 7679], 'valid'], | |
| [[7680, 7680], 'mapped', [7681]], | |
| [[7681, 7681], 'valid'], | |
| [[7682, 7682], 'mapped', [7683]], | |
| [[7683, 7683], 'valid'], | |
| [[7684, 7684], 'mapped', [7685]], | |
| [[7685, 7685], 'valid'], | |
| [[7686, 7686], 'mapped', [7687]], | |
| [[7687, 7687], 'valid'], | |
| [[7688, 7688], 'mapped', [7689]], | |
| [[7689, 7689], 'valid'], | |
| [[7690, 7690], 'mapped', [7691]], | |
| [[7691, 7691], 'valid'], | |
| [[7692, 7692], 'mapped', [7693]], | |
| [[7693, 7693], 'valid'], | |
| [[7694, 7694], 'mapped', [7695]], | |
| [[7695, 7695], 'valid'], | |
| [[7696, 7696], 'mapped', [7697]], | |
| [[7697, 7697], 'valid'], | |
| [[7698, 7698], 'mapped', [7699]], | |
| [[7699, 7699], 'valid'], | |
| [[7700, 7700], 'mapped', [7701]], | |
| [[7701, 7701], 'valid'], | |
| [[7702, 7702], 'mapped', [7703]], | |
| [[7703, 7703], 'valid'], | |
| [[7704, 7704], 'mapped', [7705]], | |
| [[7705, 7705], 'valid'], | |
| [[7706, 7706], 'mapped', [7707]], | |
| [[7707, 7707], 'valid'], | |
| [[7708, 7708], 'mapped', [7709]], | |
| [[7709, 7709], 'valid'], | |
| [[7710, 7710], 'mapped', [7711]], | |
| [[7711, 7711], 'valid'], | |
| [[7712, 7712], 'mapped', [7713]], | |
| [[7713, 7713], 'valid'], | |
| [[7714, 7714], 'mapped', [7715]], | |
| [[7715, 7715], 'valid'], | |
| [[7716, 7716], 'mapped', [7717]], | |
| [[7717, 7717], 'valid'], | |
| [[7718, 7718], 'mapped', [7719]], | |
| [[7719, 7719], 'valid'], | |
| [[7720, 7720], 'mapped', [7721]], | |
| [[7721, 7721], 'valid'], | |
| [[7722, 7722], 'mapped', [7723]], | |
| [[7723, 7723], 'valid'], | |
| [[7724, 7724], 'mapped', [7725]], | |
| [[7725, 7725], 'valid'], | |
| [[7726, 7726], 'mapped', [7727]], | |
| [[7727, 7727], 'valid'], | |
| [[7728, 7728], 'mapped', [7729]], | |
| [[7729, 7729], 'valid'], | |
| [[7730, 7730], 'mapped', [7731]], | |
| [[7731, 7731], 'valid'], | |
| [[7732, 7732], 'mapped', [7733]], | |
| [[7733, 7733], 'valid'], | |
| [[7734, 7734], 'mapped', [7735]], | |
| [[7735, 7735], 'valid'], | |
| [[7736, 7736], 'mapped', [7737]], | |
| [[7737, 7737], 'valid'], | |
| [[7738, 7738], 'mapped', [7739]], | |
| [[7739, 7739], 'valid'], | |
| [[7740, 7740], 'mapped', [7741]], | |
| [[7741, 7741], 'valid'], | |
| [[7742, 7742], 'mapped', [7743]], | |
| [[7743, 7743], 'valid'], | |
| [[7744, 7744], 'mapped', [7745]], | |
| [[7745, 7745], 'valid'], | |
| [[7746, 7746], 'mapped', [7747]], | |
| [[7747, 7747], 'valid'], | |
| [[7748, 7748], 'mapped', [7749]], | |
| [[7749, 7749], 'valid'], | |
| [[7750, 7750], 'mapped', [7751]], | |
| [[7751, 7751], 'valid'], | |
| [[7752, 7752], 'mapped', [7753]], | |
| [[7753, 7753], 'valid'], | |
| [[7754, 7754], 'mapped', [7755]], | |
| [[7755, 7755], 'valid'], | |
| [[7756, 7756], 'mapped', [7757]], | |
| [[7757, 7757], 'valid'], | |
| [[7758, 7758], 'mapped', [7759]], | |
| [[7759, 7759], 'valid'], | |
| [[7760, 7760], 'mapped', [7761]], | |
| [[7761, 7761], 'valid'], | |
| [[7762, 7762], 'mapped', [7763]], | |
| [[7763, 7763], 'valid'], | |
| [[7764, 7764], 'mapped', [7765]], | |
| [[7765, 7765], 'valid'], | |
| [[7766, 7766], 'mapped', [7767]], | |
| [[7767, 7767], 'valid'], | |
| [[7768, 7768], 'mapped', [7769]], | |
| [[7769, 7769], 'valid'], | |
| [[7770, 7770], 'mapped', [7771]], | |
| [[7771, 7771], 'valid'], | |
| [[7772, 7772], 'mapped', [7773]], | |
| [[7773, 7773], 'valid'], | |
| [[7774, 7774], 'mapped', [7775]], | |
| [[7775, 7775], 'valid'], | |
| [[7776, 7776], 'mapped', [7777]], | |
| [[7777, 7777], 'valid'], | |
| [[7778, 7778], 'mapped', [7779]], | |
| [[7779, 7779], 'valid'], | |
| [[7780, 7780], 'mapped', [7781]], | |
| [[7781, 7781], 'valid'], | |
| [[7782, 7782], 'mapped', [7783]], | |
| [[7783, 7783], 'valid'], | |
| [[7784, 7784], 'mapped', [7785]], | |
| [[7785, 7785], 'valid'], | |
| [[7786, 7786], 'mapped', [7787]], | |
| [[7787, 7787], 'valid'], | |
| [[7788, 7788], 'mapped', [7789]], | |
| [[7789, 7789], 'valid'], | |
| [[7790, 7790], 'mapped', [7791]], | |
| [[7791, 7791], 'valid'], | |
| [[7792, 7792], 'mapped', [7793]], | |
| [[7793, 7793], 'valid'], | |
| [[7794, 7794], 'mapped', [7795]], | |
| [[7795, 7795], 'valid'], | |
| [[7796, 7796], 'mapped', [7797]], | |
| [[7797, 7797], 'valid'], | |
| [[7798, 7798], 'mapped', [7799]], | |
| [[7799, 7799], 'valid'], | |
| [[7800, 7800], 'mapped', [7801]], | |
| [[7801, 7801], 'valid'], | |
| [[7802, 7802], 'mapped', [7803]], | |
| [[7803, 7803], 'valid'], | |
| [[7804, 7804], 'mapped', [7805]], | |
| [[7805, 7805], 'valid'], | |
| [[7806, 7806], 'mapped', [7807]], | |
| [[7807, 7807], 'valid'], | |
| [[7808, 7808], 'mapped', [7809]], | |
| [[7809, 7809], 'valid'], | |
| [[7810, 7810], 'mapped', [7811]], | |
| [[7811, 7811], 'valid'], | |
| [[7812, 7812], 'mapped', [7813]], | |
| [[7813, 7813], 'valid'], | |
| [[7814, 7814], 'mapped', [7815]], | |
| [[7815, 7815], 'valid'], | |
| [[7816, 7816], 'mapped', [7817]], | |
| [[7817, 7817], 'valid'], | |
| [[7818, 7818], 'mapped', [7819]], | |
| [[7819, 7819], 'valid'], | |
| [[7820, 7820], 'mapped', [7821]], | |
| [[7821, 7821], 'valid'], | |
| [[7822, 7822], 'mapped', [7823]], | |
| [[7823, 7823], 'valid'], | |
| [[7824, 7824], 'mapped', [7825]], | |
| [[7825, 7825], 'valid'], | |
| [[7826, 7826], 'mapped', [7827]], | |
| [[7827, 7827], 'valid'], | |
| [[7828, 7828], 'mapped', [7829]], | |
| [[7829, 7833], 'valid'], | |
| [[7834, 7834], 'mapped', [97, 702]], | |
| [[7835, 7835], 'mapped', [7777]], | |
| [[7836, 7837], 'valid'], | |
| [[7838, 7838], 'mapped', [115, 115]], | |
| [[7839, 7839], 'valid'], | |
| [[7840, 7840], 'mapped', [7841]], | |
| [[7841, 7841], 'valid'], | |
| [[7842, 7842], 'mapped', [7843]], | |
| [[7843, 7843], 'valid'], | |
| [[7844, 7844], 'mapped', [7845]], | |
| [[7845, 7845], 'valid'], | |
| [[7846, 7846], 'mapped', [7847]], | |
| [[7847, 7847], 'valid'], | |
| [[7848, 7848], 'mapped', [7849]], | |
| [[7849, 7849], 'valid'], | |
| [[7850, 7850], 'mapped', [7851]], | |
| [[7851, 7851], 'valid'], | |
| [[7852, 7852], 'mapped', [7853]], | |
| [[7853, 7853], 'valid'], | |
| [[7854, 7854], 'mapped', [7855]], | |
| [[7855, 7855], 'valid'], | |
| [[7856, 7856], 'mapped', [7857]], | |
| [[7857, 7857], 'valid'], | |
| [[7858, 7858], 'mapped', [7859]], | |
| [[7859, 7859], 'valid'], | |
| [[7860, 7860], 'mapped', [7861]], | |
| [[7861, 7861], 'valid'], | |
| [[7862, 7862], 'mapped', [7863]], | |
| [[7863, 7863], 'valid'], | |
| [[7864, 7864], 'mapped', [7865]], | |
| [[7865, 7865], 'valid'], | |
| [[7866, 7866], 'mapped', [7867]], | |
| [[7867, 7867], 'valid'], | |
| [[7868, 7868], 'mapped', [7869]], | |
| [[7869, 7869], 'valid'], | |
| [[7870, 7870], 'mapped', [7871]], | |
| [[7871, 7871], 'valid'], | |
| [[7872, 7872], 'mapped', [7873]], | |
| [[7873, 7873], 'valid'], | |
| [[7874, 7874], 'mapped', [7875]], | |
| [[7875, 7875], 'valid'], | |
| [[7876, 7876], 'mapped', [7877]], | |
| [[7877, 7877], 'valid'], | |
| [[7878, 7878], 'mapped', [7879]], | |
| [[7879, 7879], 'valid'], | |
| [[7880, 7880], 'mapped', [7881]], | |
| [[7881, 7881], 'valid'], | |
| [[7882, 7882], 'mapped', [7883]], | |
| [[7883, 7883], 'valid'], | |
| [[7884, 7884], 'mapped', [7885]], | |
| [[7885, 7885], 'valid'], | |
| [[7886, 7886], 'mapped', [7887]], | |
| [[7887, 7887], 'valid'], | |
| [[7888, 7888], 'mapped', [7889]], | |
| [[7889, 7889], 'valid'], | |
| [[7890, 7890], 'mapped', [7891]], | |
| [[7891, 7891], 'valid'], | |
| [[7892, 7892], 'mapped', [7893]], | |
| [[7893, 7893], 'valid'], | |
| [[7894, 7894], 'mapped', [7895]], | |
| [[7895, 7895], 'valid'], | |
| [[7896, 7896], 'mapped', [7897]], | |
| [[7897, 7897], 'valid'], | |
| [[7898, 7898], 'mapped', [7899]], | |
| [[7899, 7899], 'valid'], | |
| [[7900, 7900], 'mapped', [7901]], | |
| [[7901, 7901], 'valid'], | |
| [[7902, 7902], 'mapped', [7903]], | |
| [[7903, 7903], 'valid'], | |
| [[7904, 7904], 'mapped', [7905]], | |
| [[7905, 7905], 'valid'], | |
| [[7906, 7906], 'mapped', [7907]], | |
| [[7907, 7907], 'valid'], | |
| [[7908, 7908], 'mapped', [7909]], | |
| [[7909, 7909], 'valid'], | |
| [[7910, 7910], 'mapped', [7911]], | |
| [[7911, 7911], 'valid'], | |
| [[7912, 7912], 'mapped', [7913]], | |
| [[7913, 7913], 'valid'], | |
| [[7914, 7914], 'mapped', [7915]], | |
| [[7915, 7915], 'valid'], | |
| [[7916, 7916], 'mapped', [7917]], | |
| [[7917, 7917], 'valid'], | |
| [[7918, 7918], 'mapped', [7919]], | |
| [[7919, 7919], 'valid'], | |
| [[7920, 7920], 'mapped', [7921]], | |
| [[7921, 7921], 'valid'], | |
| [[7922, 7922], 'mapped', [7923]], | |
| [[7923, 7923], 'valid'], | |
| [[7924, 7924], 'mapped', [7925]], | |
| [[7925, 7925], 'valid'], | |
| [[7926, 7926], 'mapped', [7927]], | |
| [[7927, 7927], 'valid'], | |
| [[7928, 7928], 'mapped', [7929]], | |
| [[7929, 7929], 'valid'], | |
| [[7930, 7930], 'mapped', [7931]], | |
| [[7931, 7931], 'valid'], | |
| [[7932, 7932], 'mapped', [7933]], | |
| [[7933, 7933], 'valid'], | |
| [[7934, 7934], 'mapped', [7935]], | |
| [[7935, 7935], 'valid'], | |
| [[7936, 7943], 'valid'], | |
| [[7944, 7944], 'mapped', [7936]], | |
| [[7945, 7945], 'mapped', [7937]], | |
| [[7946, 7946], 'mapped', [7938]], | |
| [[7947, 7947], 'mapped', [7939]], | |
| [[7948, 7948], 'mapped', [7940]], | |
| [[7949, 7949], 'mapped', [7941]], | |
| [[7950, 7950], 'mapped', [7942]], | |
| [[7951, 7951], 'mapped', [7943]], | |
| [[7952, 7957], 'valid'], | |
| [[7958, 7959], 'disallowed'], | |
| [[7960, 7960], 'mapped', [7952]], | |
| [[7961, 7961], 'mapped', [7953]], | |
| [[7962, 7962], 'mapped', [7954]], | |
| [[7963, 7963], 'mapped', [7955]], | |
| [[7964, 7964], 'mapped', [7956]], | |
| [[7965, 7965], 'mapped', [7957]], | |
| [[7966, 7967], 'disallowed'], | |
| [[7968, 7975], 'valid'], | |
| [[7976, 7976], 'mapped', [7968]], | |
| [[7977, 7977], 'mapped', [7969]], | |
| [[7978, 7978], 'mapped', [7970]], | |
| [[7979, 7979], 'mapped', [7971]], | |
| [[7980, 7980], 'mapped', [7972]], | |
| [[7981, 7981], 'mapped', [7973]], | |
| [[7982, 7982], 'mapped', [7974]], | |
| [[7983, 7983], 'mapped', [7975]], | |
| [[7984, 7991], 'valid'], | |
| [[7992, 7992], 'mapped', [7984]], | |
| [[7993, 7993], 'mapped', [7985]], | |
| [[7994, 7994], 'mapped', [7986]], | |
| [[7995, 7995], 'mapped', [7987]], | |
| [[7996, 7996], 'mapped', [7988]], | |
| [[7997, 7997], 'mapped', [7989]], | |
| [[7998, 7998], 'mapped', [7990]], | |
| [[7999, 7999], 'mapped', [7991]], | |
| [[8000, 8005], 'valid'], | |
| [[8006, 8007], 'disallowed'], | |
| [[8008, 8008], 'mapped', [8000]], | |
| [[8009, 8009], 'mapped', [8001]], | |
| [[8010, 8010], 'mapped', [8002]], | |
| [[8011, 8011], 'mapped', [8003]], | |
| [[8012, 8012], 'mapped', [8004]], | |
| [[8013, 8013], 'mapped', [8005]], | |
| [[8014, 8015], 'disallowed'], | |
| [[8016, 8023], 'valid'], | |
| [[8024, 8024], 'disallowed'], | |
| [[8025, 8025], 'mapped', [8017]], | |
| [[8026, 8026], 'disallowed'], | |
| [[8027, 8027], 'mapped', [8019]], | |
| [[8028, 8028], 'disallowed'], | |
| [[8029, 8029], 'mapped', [8021]], | |
| [[8030, 8030], 'disallowed'], | |
| [[8031, 8031], 'mapped', [8023]], | |
| [[8032, 8039], 'valid'], | |
| [[8040, 8040], 'mapped', [8032]], | |
| [[8041, 8041], 'mapped', [8033]], | |
| [[8042, 8042], 'mapped', [8034]], | |
| [[8043, 8043], 'mapped', [8035]], | |
| [[8044, 8044], 'mapped', [8036]], | |
| [[8045, 8045], 'mapped', [8037]], | |
| [[8046, 8046], 'mapped', [8038]], | |
| [[8047, 8047], 'mapped', [8039]], | |
| [[8048, 8048], 'valid'], | |
| [[8049, 8049], 'mapped', [940]], | |
| [[8050, 8050], 'valid'], | |
| [[8051, 8051], 'mapped', [941]], | |
| [[8052, 8052], 'valid'], | |
| [[8053, 8053], 'mapped', [942]], | |
| [[8054, 8054], 'valid'], | |
| [[8055, 8055], 'mapped', [943]], | |
| [[8056, 8056], 'valid'], | |
| [[8057, 8057], 'mapped', [972]], | |
| [[8058, 8058], 'valid'], | |
| [[8059, 8059], 'mapped', [973]], | |
| [[8060, 8060], 'valid'], | |
| [[8061, 8061], 'mapped', [974]], | |
| [[8062, 8063], 'disallowed'], | |
| [[8064, 8064], 'mapped', [7936, 953]], | |
| [[8065, 8065], 'mapped', [7937, 953]], | |
| [[8066, 8066], 'mapped', [7938, 953]], | |
| [[8067, 8067], 'mapped', [7939, 953]], | |
| [[8068, 8068], 'mapped', [7940, 953]], | |
| [[8069, 8069], 'mapped', [7941, 953]], | |
| [[8070, 8070], 'mapped', [7942, 953]], | |
| [[8071, 8071], 'mapped', [7943, 953]], | |
| [[8072, 8072], 'mapped', [7936, 953]], | |
| [[8073, 8073], 'mapped', [7937, 953]], | |
| [[8074, 8074], 'mapped', [7938, 953]], | |
| [[8075, 8075], 'mapped', [7939, 953]], | |
| [[8076, 8076], 'mapped', [7940, 953]], | |
| [[8077, 8077], 'mapped', [7941, 953]], | |
| [[8078, 8078], 'mapped', [7942, 953]], | |
| [[8079, 8079], 'mapped', [7943, 953]], | |
| [[8080, 8080], 'mapped', [7968, 953]], | |
| [[8081, 8081], 'mapped', [7969, 953]], | |
| [[8082, 8082], 'mapped', [7970, 953]], | |
| [[8083, 8083], 'mapped', [7971, 953]], | |
| [[8084, 8084], 'mapped', [7972, 953]], | |
| [[8085, 8085], 'mapped', [7973, 953]], | |
| [[8086, 8086], 'mapped', [7974, 953]], | |
| [[8087, 8087], 'mapped', [7975, 953]], | |
| [[8088, 8088], 'mapped', [7968, 953]], | |
| [[8089, 8089], 'mapped', [7969, 953]], | |
| [[8090, 8090], 'mapped', [7970, 953]], | |
| [[8091, 8091], 'mapped', [7971, 953]], | |
| [[8092, 8092], 'mapped', [7972, 953]], | |
| [[8093, 8093], 'mapped', [7973, 953]], | |
| [[8094, 8094], 'mapped', [7974, 953]], | |
| [[8095, 8095], 'mapped', [7975, 953]], | |
| [[8096, 8096], 'mapped', [8032, 953]], | |
| [[8097, 8097], 'mapped', [8033, 953]], | |
| [[8098, 8098], 'mapped', [8034, 953]], | |
| [[8099, 8099], 'mapped', [8035, 953]], | |
| [[8100, 8100], 'mapped', [8036, 953]], | |
| [[8101, 8101], 'mapped', [8037, 953]], | |
| [[8102, 8102], 'mapped', [8038, 953]], | |
| [[8103, 8103], 'mapped', [8039, 953]], | |
| [[8104, 8104], 'mapped', [8032, 953]], | |
| [[8105, 8105], 'mapped', [8033, 953]], | |
| [[8106, 8106], 'mapped', [8034, 953]], | |
| [[8107, 8107], 'mapped', [8035, 953]], | |
| [[8108, 8108], 'mapped', [8036, 953]], | |
| [[8109, 8109], 'mapped', [8037, 953]], | |
| [[8110, 8110], 'mapped', [8038, 953]], | |
| [[8111, 8111], 'mapped', [8039, 953]], | |
| [[8112, 8113], 'valid'], | |
| [[8114, 8114], 'mapped', [8048, 953]], | |
| [[8115, 8115], 'mapped', [945, 953]], | |
| [[8116, 8116], 'mapped', [940, 953]], | |
| [[8117, 8117], 'disallowed'], | |
| [[8118, 8118], 'valid'], | |
| [[8119, 8119], 'mapped', [8118, 953]], | |
| [[8120, 8120], 'mapped', [8112]], | |
| [[8121, 8121], 'mapped', [8113]], | |
| [[8122, 8122], 'mapped', [8048]], | |
| [[8123, 8123], 'mapped', [940]], | |
| [[8124, 8124], 'mapped', [945, 953]], | |
| [[8125, 8125], 'disallowed_STD3_mapped', [32, 787]], | |
| [[8126, 8126], 'mapped', [953]], | |
| [[8127, 8127], 'disallowed_STD3_mapped', [32, 787]], | |
| [[8128, 8128], 'disallowed_STD3_mapped', [32, 834]], | |
| [[8129, 8129], 'disallowed_STD3_mapped', [32, 776, 834]], | |
| [[8130, 8130], 'mapped', [8052, 953]], | |
| [[8131, 8131], 'mapped', [951, 953]], | |
| [[8132, 8132], 'mapped', [942, 953]], | |
| [[8133, 8133], 'disallowed'], | |
| [[8134, 8134], 'valid'], | |
| [[8135, 8135], 'mapped', [8134, 953]], | |
| [[8136, 8136], 'mapped', [8050]], | |
| [[8137, 8137], 'mapped', [941]], | |
| [[8138, 8138], 'mapped', [8052]], | |
| [[8139, 8139], 'mapped', [942]], | |
| [[8140, 8140], 'mapped', [951, 953]], | |
| [[8141, 8141], 'disallowed_STD3_mapped', [32, 787, 768]], | |
| [[8142, 8142], 'disallowed_STD3_mapped', [32, 787, 769]], | |
| [[8143, 8143], 'disallowed_STD3_mapped', [32, 787, 834]], | |
| [[8144, 8146], 'valid'], | |
| [[8147, 8147], 'mapped', [912]], | |
| [[8148, 8149], 'disallowed'], | |
| [[8150, 8151], 'valid'], | |
| [[8152, 8152], 'mapped', [8144]], | |
| [[8153, 8153], 'mapped', [8145]], | |
| [[8154, 8154], 'mapped', [8054]], | |
| [[8155, 8155], 'mapped', [943]], | |
| [[8156, 8156], 'disallowed'], | |
| [[8157, 8157], 'disallowed_STD3_mapped', [32, 788, 768]], | |
| [[8158, 8158], 'disallowed_STD3_mapped', [32, 788, 769]], | |
| [[8159, 8159], 'disallowed_STD3_mapped', [32, 788, 834]], | |
| [[8160, 8162], 'valid'], | |
| [[8163, 8163], 'mapped', [944]], | |
| [[8164, 8167], 'valid'], | |
| [[8168, 8168], 'mapped', [8160]], | |
| [[8169, 8169], 'mapped', [8161]], | |
| [[8170, 8170], 'mapped', [8058]], | |
| [[8171, 8171], 'mapped', [973]], | |
| [[8172, 8172], 'mapped', [8165]], | |
| [[8173, 8173], 'disallowed_STD3_mapped', [32, 776, 768]], | |
| [[8174, 8174], 'disallowed_STD3_mapped', [32, 776, 769]], | |
| [[8175, 8175], 'disallowed_STD3_mapped', [96]], | |
| [[8176, 8177], 'disallowed'], | |
| [[8178, 8178], 'mapped', [8060, 953]], | |
| [[8179, 8179], 'mapped', [969, 953]], | |
| [[8180, 8180], 'mapped', [974, 953]], | |
| [[8181, 8181], 'disallowed'], | |
| [[8182, 8182], 'valid'], | |
| [[8183, 8183], 'mapped', [8182, 953]], | |
| [[8184, 8184], 'mapped', [8056]], | |
| [[8185, 8185], 'mapped', [972]], | |
| [[8186, 8186], 'mapped', [8060]], | |
| [[8187, 8187], 'mapped', [974]], | |
| [[8188, 8188], 'mapped', [969, 953]], | |
| [[8189, 8189], 'disallowed_STD3_mapped', [32, 769]], | |
| [[8190, 8190], 'disallowed_STD3_mapped', [32, 788]], | |
| [[8191, 8191], 'disallowed'], | |
| [[8192, 8202], 'disallowed_STD3_mapped', [32]], | |
| [[8203, 8203], 'ignored'], | |
| [[8204, 8205], 'deviation', []], | |
| [[8206, 8207], 'disallowed'], | |
| [[8208, 8208], 'valid', [], 'NV8'], | |
| [[8209, 8209], 'mapped', [8208]], | |
| [[8210, 8214], 'valid', [], 'NV8'], | |
| [[8215, 8215], 'disallowed_STD3_mapped', [32, 819]], | |
| [[8216, 8227], 'valid', [], 'NV8'], | |
| [[8228, 8230], 'disallowed'], | |
| [[8231, 8231], 'valid', [], 'NV8'], | |
| [[8232, 8238], 'disallowed'], | |
| [[8239, 8239], 'disallowed_STD3_mapped', [32]], | |
| [[8240, 8242], 'valid', [], 'NV8'], | |
| [[8243, 8243], 'mapped', [8242, 8242]], | |
| [[8244, 8244], 'mapped', [8242, 8242, 8242]], | |
| [[8245, 8245], 'valid', [], 'NV8'], | |
| [[8246, 8246], 'mapped', [8245, 8245]], | |
| [[8247, 8247], 'mapped', [8245, 8245, 8245]], | |
| [[8248, 8251], 'valid', [], 'NV8'], | |
| [[8252, 8252], 'disallowed_STD3_mapped', [33, 33]], | |
| [[8253, 8253], 'valid', [], 'NV8'], | |
| [[8254, 8254], 'disallowed_STD3_mapped', [32, 773]], | |
| [[8255, 8262], 'valid', [], 'NV8'], | |
| [[8263, 8263], 'disallowed_STD3_mapped', [63, 63]], | |
| [[8264, 8264], 'disallowed_STD3_mapped', [63, 33]], | |
| [[8265, 8265], 'disallowed_STD3_mapped', [33, 63]], | |
| [[8266, 8269], 'valid', [], 'NV8'], | |
| [[8270, 8274], 'valid', [], 'NV8'], | |
| [[8275, 8276], 'valid', [], 'NV8'], | |
| [[8277, 8278], 'valid', [], 'NV8'], | |
| [[8279, 8279], 'mapped', [8242, 8242, 8242, 8242]], | |
| [[8280, 8286], 'valid', [], 'NV8'], | |
| [[8287, 8287], 'disallowed_STD3_mapped', [32]], | |
| [[8288, 8288], 'ignored'], | |
| [[8289, 8291], 'disallowed'], | |
| [[8292, 8292], 'ignored'], | |
| [[8293, 8293], 'disallowed'], | |
| [[8294, 8297], 'disallowed'], | |
| [[8298, 8303], 'disallowed'], | |
| [[8304, 8304], 'mapped', [48]], | |
| [[8305, 8305], 'mapped', [105]], | |
| [[8306, 8307], 'disallowed'], | |
| [[8308, 8308], 'mapped', [52]], | |
| [[8309, 8309], 'mapped', [53]], | |
| [[8310, 8310], 'mapped', [54]], | |
| [[8311, 8311], 'mapped', [55]], | |
| [[8312, 8312], 'mapped', [56]], | |
| [[8313, 8313], 'mapped', [57]], | |
| [[8314, 8314], 'disallowed_STD3_mapped', [43]], | |
| [[8315, 8315], 'mapped', [8722]], | |
| [[8316, 8316], 'disallowed_STD3_mapped', [61]], | |
| [[8317, 8317], 'disallowed_STD3_mapped', [40]], | |
| [[8318, 8318], 'disallowed_STD3_mapped', [41]], | |
| [[8319, 8319], 'mapped', [110]], | |
| [[8320, 8320], 'mapped', [48]], | |
| [[8321, 8321], 'mapped', [49]], | |
| [[8322, 8322], 'mapped', [50]], | |
| [[8323, 8323], 'mapped', [51]], | |
| [[8324, 8324], 'mapped', [52]], | |
| [[8325, 8325], 'mapped', [53]], | |
| [[8326, 8326], 'mapped', [54]], | |
| [[8327, 8327], 'mapped', [55]], | |
| [[8328, 8328], 'mapped', [56]], | |
| [[8329, 8329], 'mapped', [57]], | |
| [[8330, 8330], 'disallowed_STD3_mapped', [43]], | |
| [[8331, 8331], 'mapped', [8722]], | |
| [[8332, 8332], 'disallowed_STD3_mapped', [61]], | |
| [[8333, 8333], 'disallowed_STD3_mapped', [40]], | |
| [[8334, 8334], 'disallowed_STD3_mapped', [41]], | |
| [[8335, 8335], 'disallowed'], | |
| [[8336, 8336], 'mapped', [97]], | |
| [[8337, 8337], 'mapped', [101]], | |
| [[8338, 8338], 'mapped', [111]], | |
| [[8339, 8339], 'mapped', [120]], | |
| [[8340, 8340], 'mapped', [601]], | |
| [[8341, 8341], 'mapped', [104]], | |
| [[8342, 8342], 'mapped', [107]], | |
| [[8343, 8343], 'mapped', [108]], | |
| [[8344, 8344], 'mapped', [109]], | |
| [[8345, 8345], 'mapped', [110]], | |
| [[8346, 8346], 'mapped', [112]], | |
| [[8347, 8347], 'mapped', [115]], | |
| [[8348, 8348], 'mapped', [116]], | |
| [[8349, 8351], 'disallowed'], | |
| [[8352, 8359], 'valid', [], 'NV8'], | |
| [[8360, 8360], 'mapped', [114, 115]], | |
| [[8361, 8362], 'valid', [], 'NV8'], | |
| [[8363, 8363], 'valid', [], 'NV8'], | |
| [[8364, 8364], 'valid', [], 'NV8'], | |
| [[8365, 8367], 'valid', [], 'NV8'], | |
| [[8368, 8369], 'valid', [], 'NV8'], | |
| [[8370, 8373], 'valid', [], 'NV8'], | |
| [[8374, 8376], 'valid', [], 'NV8'], | |
| [[8377, 8377], 'valid', [], 'NV8'], | |
| [[8378, 8378], 'valid', [], 'NV8'], | |
| [[8379, 8381], 'valid', [], 'NV8'], | |
| [[8382, 8382], 'valid', [], 'NV8'], | |
| [[8383, 8399], 'disallowed'], | |
| [[8400, 8417], 'valid', [], 'NV8'], | |
| [[8418, 8419], 'valid', [], 'NV8'], | |
| [[8420, 8426], 'valid', [], 'NV8'], | |
| [[8427, 8427], 'valid', [], 'NV8'], | |
| [[8428, 8431], 'valid', [], 'NV8'], | |
| [[8432, 8432], 'valid', [], 'NV8'], | |
| [[8433, 8447], 'disallowed'], | |
| [[8448, 8448], 'disallowed_STD3_mapped', [97, 47, 99]], | |
| [[8449, 8449], 'disallowed_STD3_mapped', [97, 47, 115]], | |
| [[8450, 8450], 'mapped', [99]], | |
| [[8451, 8451], 'mapped', [176, 99]], | |
| [[8452, 8452], 'valid', [], 'NV8'], | |
| [[8453, 8453], 'disallowed_STD3_mapped', [99, 47, 111]], | |
| [[8454, 8454], 'disallowed_STD3_mapped', [99, 47, 117]], | |
| [[8455, 8455], 'mapped', [603]], | |
| [[8456, 8456], 'valid', [], 'NV8'], | |
| [[8457, 8457], 'mapped', [176, 102]], | |
| [[8458, 8458], 'mapped', [103]], | |
| [[8459, 8462], 'mapped', [104]], | |
| [[8463, 8463], 'mapped', [295]], | |
| [[8464, 8465], 'mapped', [105]], | |
| [[8466, 8467], 'mapped', [108]], | |
| [[8468, 8468], 'valid', [], 'NV8'], | |
| [[8469, 8469], 'mapped', [110]], | |
| [[8470, 8470], 'mapped', [110, 111]], | |
| [[8471, 8472], 'valid', [], 'NV8'], | |
| [[8473, 8473], 'mapped', [112]], | |
| [[8474, 8474], 'mapped', [113]], | |
| [[8475, 8477], 'mapped', [114]], | |
| [[8478, 8479], 'valid', [], 'NV8'], | |
| [[8480, 8480], 'mapped', [115, 109]], | |
| [[8481, 8481], 'mapped', [116, 101, 108]], | |
| [[8482, 8482], 'mapped', [116, 109]], | |
| [[8483, 8483], 'valid', [], 'NV8'], | |
| [[8484, 8484], 'mapped', [122]], | |
| [[8485, 8485], 'valid', [], 'NV8'], | |
| [[8486, 8486], 'mapped', [969]], | |
| [[8487, 8487], 'valid', [], 'NV8'], | |
| [[8488, 8488], 'mapped', [122]], | |
| [[8489, 8489], 'valid', [], 'NV8'], | |
| [[8490, 8490], 'mapped', [107]], | |
| [[8491, 8491], 'mapped', [229]], | |
| [[8492, 8492], 'mapped', [98]], | |
| [[8493, 8493], 'mapped', [99]], | |
| [[8494, 8494], 'valid', [], 'NV8'], | |
| [[8495, 8496], 'mapped', [101]], | |
| [[8497, 8497], 'mapped', [102]], | |
| [[8498, 8498], 'disallowed'], | |
| [[8499, 8499], 'mapped', [109]], | |
| [[8500, 8500], 'mapped', [111]], | |
| [[8501, 8501], 'mapped', [1488]], | |
| [[8502, 8502], 'mapped', [1489]], | |
| [[8503, 8503], 'mapped', [1490]], | |
| [[8504, 8504], 'mapped', [1491]], | |
| [[8505, 8505], 'mapped', [105]], | |
| [[8506, 8506], 'valid', [], 'NV8'], | |
| [[8507, 8507], 'mapped', [102, 97, 120]], | |
| [[8508, 8508], 'mapped', [960]], | |
| [[8509, 8510], 'mapped', [947]], | |
| [[8511, 8511], 'mapped', [960]], | |
| [[8512, 8512], 'mapped', [8721]], | |
| [[8513, 8516], 'valid', [], 'NV8'], | |
| [[8517, 8518], 'mapped', [100]], | |
| [[8519, 8519], 'mapped', [101]], | |
| [[8520, 8520], 'mapped', [105]], | |
| [[8521, 8521], 'mapped', [106]], | |
| [[8522, 8523], 'valid', [], 'NV8'], | |
| [[8524, 8524], 'valid', [], 'NV8'], | |
| [[8525, 8525], 'valid', [], 'NV8'], | |
| [[8526, 8526], 'valid'], | |
| [[8527, 8527], 'valid', [], 'NV8'], | |
| [[8528, 8528], 'mapped', [49, 8260, 55]], | |
| [[8529, 8529], 'mapped', [49, 8260, 57]], | |
| [[8530, 8530], 'mapped', [49, 8260, 49, 48]], | |
| [[8531, 8531], 'mapped', [49, 8260, 51]], | |
| [[8532, 8532], 'mapped', [50, 8260, 51]], | |
| [[8533, 8533], 'mapped', [49, 8260, 53]], | |
| [[8534, 8534], 'mapped', [50, 8260, 53]], | |
| [[8535, 8535], 'mapped', [51, 8260, 53]], | |
| [[8536, 8536], 'mapped', [52, 8260, 53]], | |
| [[8537, 8537], 'mapped', [49, 8260, 54]], | |
| [[8538, 8538], 'mapped', [53, 8260, 54]], | |
| [[8539, 8539], 'mapped', [49, 8260, 56]], | |
| [[8540, 8540], 'mapped', [51, 8260, 56]], | |
| [[8541, 8541], 'mapped', [53, 8260, 56]], | |
| [[8542, 8542], 'mapped', [55, 8260, 56]], | |
| [[8543, 8543], 'mapped', [49, 8260]], | |
| [[8544, 8544], 'mapped', [105]], | |
| [[8545, 8545], 'mapped', [105, 105]], | |
| [[8546, 8546], 'mapped', [105, 105, 105]], | |
| [[8547, 8547], 'mapped', [105, 118]], | |
| [[8548, 8548], 'mapped', [118]], | |
| [[8549, 8549], 'mapped', [118, 105]], | |
| [[8550, 8550], 'mapped', [118, 105, 105]], | |
| [[8551, 8551], 'mapped', [118, 105, 105, 105]], | |
| [[8552, 8552], 'mapped', [105, 120]], | |
| [[8553, 8553], 'mapped', [120]], | |
| [[8554, 8554], 'mapped', [120, 105]], | |
| [[8555, 8555], 'mapped', [120, 105, 105]], | |
| [[8556, 8556], 'mapped', [108]], | |
| [[8557, 8557], 'mapped', [99]], | |
| [[8558, 8558], 'mapped', [100]], | |
| [[8559, 8559], 'mapped', [109]], | |
| [[8560, 8560], 'mapped', [105]], | |
| [[8561, 8561], 'mapped', [105, 105]], | |
| [[8562, 8562], 'mapped', [105, 105, 105]], | |
| [[8563, 8563], 'mapped', [105, 118]], | |
| [[8564, 8564], 'mapped', [118]], | |
| [[8565, 8565], 'mapped', [118, 105]], | |
| [[8566, 8566], 'mapped', [118, 105, 105]], | |
| [[8567, 8567], 'mapped', [118, 105, 105, 105]], | |
| [[8568, 8568], 'mapped', [105, 120]], | |
| [[8569, 8569], 'mapped', [120]], | |
| [[8570, 8570], 'mapped', [120, 105]], | |
| [[8571, 8571], 'mapped', [120, 105, 105]], | |
| [[8572, 8572], 'mapped', [108]], | |
| [[8573, 8573], 'mapped', [99]], | |
| [[8574, 8574], 'mapped', [100]], | |
| [[8575, 8575], 'mapped', [109]], | |
| [[8576, 8578], 'valid', [], 'NV8'], | |
| [[8579, 8579], 'disallowed'], | |
| [[8580, 8580], 'valid'], | |
| [[8581, 8584], 'valid', [], 'NV8'], | |
| [[8585, 8585], 'mapped', [48, 8260, 51]], | |
| [[8586, 8587], 'valid', [], 'NV8'], | |
| [[8588, 8591], 'disallowed'], | |
| [[8592, 8682], 'valid', [], 'NV8'], | |
| [[8683, 8691], 'valid', [], 'NV8'], | |
| [[8692, 8703], 'valid', [], 'NV8'], | |
| [[8704, 8747], 'valid', [], 'NV8'], | |
| [[8748, 8748], 'mapped', [8747, 8747]], | |
| [[8749, 8749], 'mapped', [8747, 8747, 8747]], | |
| [[8750, 8750], 'valid', [], 'NV8'], | |
| [[8751, 8751], 'mapped', [8750, 8750]], | |
| [[8752, 8752], 'mapped', [8750, 8750, 8750]], | |
| [[8753, 8799], 'valid', [], 'NV8'], | |
| [[8800, 8800], 'disallowed_STD3_valid'], | |
| [[8801, 8813], 'valid', [], 'NV8'], | |
| [[8814, 8815], 'disallowed_STD3_valid'], | |
| [[8816, 8945], 'valid', [], 'NV8'], | |
| [[8946, 8959], 'valid', [], 'NV8'], | |
| [[8960, 8960], 'valid', [], 'NV8'], | |
| [[8961, 8961], 'valid', [], 'NV8'], | |
| [[8962, 9000], 'valid', [], 'NV8'], | |
| [[9001, 9001], 'mapped', [12296]], | |
| [[9002, 9002], 'mapped', [12297]], | |
| [[9003, 9082], 'valid', [], 'NV8'], | |
| [[9083, 9083], 'valid', [], 'NV8'], | |
| [[9084, 9084], 'valid', [], 'NV8'], | |
| [[9085, 9114], 'valid', [], 'NV8'], | |
| [[9115, 9166], 'valid', [], 'NV8'], | |
| [[9167, 9168], 'valid', [], 'NV8'], | |
| [[9169, 9179], 'valid', [], 'NV8'], | |
| [[9180, 9191], 'valid', [], 'NV8'], | |
| [[9192, 9192], 'valid', [], 'NV8'], | |
| [[9193, 9203], 'valid', [], 'NV8'], | |
| [[9204, 9210], 'valid', [], 'NV8'], | |
| [[9211, 9215], 'disallowed'], | |
| [[9216, 9252], 'valid', [], 'NV8'], | |
| [[9253, 9254], 'valid', [], 'NV8'], | |
| [[9255, 9279], 'disallowed'], | |
| [[9280, 9290], 'valid', [], 'NV8'], | |
| [[9291, 9311], 'disallowed'], | |
| [[9312, 9312], 'mapped', [49]], | |
| [[9313, 9313], 'mapped', [50]], | |
| [[9314, 9314], 'mapped', [51]], | |
| [[9315, 9315], 'mapped', [52]], | |
| [[9316, 9316], 'mapped', [53]], | |
| [[9317, 9317], 'mapped', [54]], | |
| [[9318, 9318], 'mapped', [55]], | |
| [[9319, 9319], 'mapped', [56]], | |
| [[9320, 9320], 'mapped', [57]], | |
| [[9321, 9321], 'mapped', [49, 48]], | |
| [[9322, 9322], 'mapped', [49, 49]], | |
| [[9323, 9323], 'mapped', [49, 50]], | |
| [[9324, 9324], 'mapped', [49, 51]], | |
| [[9325, 9325], 'mapped', [49, 52]], | |
| [[9326, 9326], 'mapped', [49, 53]], | |
| [[9327, 9327], 'mapped', [49, 54]], | |
| [[9328, 9328], 'mapped', [49, 55]], | |
| [[9329, 9329], 'mapped', [49, 56]], | |
| [[9330, 9330], 'mapped', [49, 57]], | |
| [[9331, 9331], 'mapped', [50, 48]], | |
| [[9332, 9332], 'disallowed_STD3_mapped', [40, 49, 41]], | |
| [[9333, 9333], 'disallowed_STD3_mapped', [40, 50, 41]], | |
| [[9334, 9334], 'disallowed_STD3_mapped', [40, 51, 41]], | |
| [[9335, 9335], 'disallowed_STD3_mapped', [40, 52, 41]], | |
| [[9336, 9336], 'disallowed_STD3_mapped', [40, 53, 41]], | |
| [[9337, 9337], 'disallowed_STD3_mapped', [40, 54, 41]], | |
| [[9338, 9338], 'disallowed_STD3_mapped', [40, 55, 41]], | |
| [[9339, 9339], 'disallowed_STD3_mapped', [40, 56, 41]], | |
| [[9340, 9340], 'disallowed_STD3_mapped', [40, 57, 41]], | |
| [[9341, 9341], 'disallowed_STD3_mapped', [40, 49, 48, 41]], | |
| [[9342, 9342], 'disallowed_STD3_mapped', [40, 49, 49, 41]], | |
| [[9343, 9343], 'disallowed_STD3_mapped', [40, 49, 50, 41]], | |
| [[9344, 9344], 'disallowed_STD3_mapped', [40, 49, 51, 41]], | |
| [[9345, 9345], 'disallowed_STD3_mapped', [40, 49, 52, 41]], | |
| [[9346, 9346], 'disallowed_STD3_mapped', [40, 49, 53, 41]], | |
| [[9347, 9347], 'disallowed_STD3_mapped', [40, 49, 54, 41]], | |
| [[9348, 9348], 'disallowed_STD3_mapped', [40, 49, 55, 41]], | |
| [[9349, 9349], 'disallowed_STD3_mapped', [40, 49, 56, 41]], | |
| [[9350, 9350], 'disallowed_STD3_mapped', [40, 49, 57, 41]], | |
| [[9351, 9351], 'disallowed_STD3_mapped', [40, 50, 48, 41]], | |
| [[9352, 9371], 'disallowed'], | |
| [[9372, 9372], 'disallowed_STD3_mapped', [40, 97, 41]], | |
| [[9373, 9373], 'disallowed_STD3_mapped', [40, 98, 41]], | |
| [[9374, 9374], 'disallowed_STD3_mapped', [40, 99, 41]], | |
| [[9375, 9375], 'disallowed_STD3_mapped', [40, 100, 41]], | |
| [[9376, 9376], 'disallowed_STD3_mapped', [40, 101, 41]], | |
| [[9377, 9377], 'disallowed_STD3_mapped', [40, 102, 41]], | |
| [[9378, 9378], 'disallowed_STD3_mapped', [40, 103, 41]], | |
| [[9379, 9379], 'disallowed_STD3_mapped', [40, 104, 41]], | |
| [[9380, 9380], 'disallowed_STD3_mapped', [40, 105, 41]], | |
| [[9381, 9381], 'disallowed_STD3_mapped', [40, 106, 41]], | |
| [[9382, 9382], 'disallowed_STD3_mapped', [40, 107, 41]], | |
| [[9383, 9383], 'disallowed_STD3_mapped', [40, 108, 41]], | |
| [[9384, 9384], 'disallowed_STD3_mapped', [40, 109, 41]], | |
| [[9385, 9385], 'disallowed_STD3_mapped', [40, 110, 41]], | |
| [[9386, 9386], 'disallowed_STD3_mapped', [40, 111, 41]], | |
| [[9387, 9387], 'disallowed_STD3_mapped', [40, 112, 41]], | |
| [[9388, 9388], 'disallowed_STD3_mapped', [40, 113, 41]], | |
| [[9389, 9389], 'disallowed_STD3_mapped', [40, 114, 41]], | |
| [[9390, 9390], 'disallowed_STD3_mapped', [40, 115, 41]], | |
| [[9391, 9391], 'disallowed_STD3_mapped', [40, 116, 41]], | |
| [[9392, 9392], 'disallowed_STD3_mapped', [40, 117, 41]], | |
| [[9393, 9393], 'disallowed_STD3_mapped', [40, 118, 41]], | |
| [[9394, 9394], 'disallowed_STD3_mapped', [40, 119, 41]], | |
| [[9395, 9395], 'disallowed_STD3_mapped', [40, 120, 41]], | |
| [[9396, 9396], 'disallowed_STD3_mapped', [40, 121, 41]], | |
| [[9397, 9397], 'disallowed_STD3_mapped', [40, 122, 41]], | |
| [[9398, 9398], 'mapped', [97]], | |
| [[9399, 9399], 'mapped', [98]], | |
| [[9400, 9400], 'mapped', [99]], | |
| [[9401, 9401], 'mapped', [100]], | |
| [[9402, 9402], 'mapped', [101]], | |
| [[9403, 9403], 'mapped', [102]], | |
| [[9404, 9404], 'mapped', [103]], | |
| [[9405, 9405], 'mapped', [104]], | |
| [[9406, 9406], 'mapped', [105]], | |
| [[9407, 9407], 'mapped', [106]], | |
| [[9408, 9408], 'mapped', [107]], | |
| [[9409, 9409], 'mapped', [108]], | |
| [[9410, 9410], 'mapped', [109]], | |
| [[9411, 9411], 'mapped', [110]], | |
| [[9412, 9412], 'mapped', [111]], | |
| [[9413, 9413], 'mapped', [112]], | |
| [[9414, 9414], 'mapped', [113]], | |
| [[9415, 9415], 'mapped', [114]], | |
| [[9416, 9416], 'mapped', [115]], | |
| [[9417, 9417], 'mapped', [116]], | |
| [[9418, 9418], 'mapped', [117]], | |
| [[9419, 9419], 'mapped', [118]], | |
| [[9420, 9420], 'mapped', [119]], | |
| [[9421, 9421], 'mapped', [120]], | |
| [[9422, 9422], 'mapped', [121]], | |
| [[9423, 9423], 'mapped', [122]], | |
| [[9424, 9424], 'mapped', [97]], | |
| [[9425, 9425], 'mapped', [98]], | |
| [[9426, 9426], 'mapped', [99]], | |
| [[9427, 9427], 'mapped', [100]], | |
| [[9428, 9428], 'mapped', [101]], | |
| [[9429, 9429], 'mapped', [102]], | |
| [[9430, 9430], 'mapped', [103]], | |
| [[9431, 9431], 'mapped', [104]], | |
| [[9432, 9432], 'mapped', [105]], | |
| [[9433, 9433], 'mapped', [106]], | |
| [[9434, 9434], 'mapped', [107]], | |
| [[9435, 9435], 'mapped', [108]], | |
| [[9436, 9436], 'mapped', [109]], | |
| [[9437, 9437], 'mapped', [110]], | |
| [[9438, 9438], 'mapped', [111]], | |
| [[9439, 9439], 'mapped', [112]], | |
| [[9440, 9440], 'mapped', [113]], | |
| [[9441, 9441], 'mapped', [114]], | |
| [[9442, 9442], 'mapped', [115]], | |
| [[9443, 9443], 'mapped', [116]], | |
| [[9444, 9444], 'mapped', [117]], | |
| [[9445, 9445], 'mapped', [118]], | |
| [[9446, 9446], 'mapped', [119]], | |
| [[9447, 9447], 'mapped', [120]], | |
| [[9448, 9448], 'mapped', [121]], | |
| [[9449, 9449], 'mapped', [122]], | |
| [[9450, 9450], 'mapped', [48]], | |
| [[9451, 9470], 'valid', [], 'NV8'], | |
| [[9471, 9471], 'valid', [], 'NV8'], | |
| [[9472, 9621], 'valid', [], 'NV8'], | |
| [[9622, 9631], 'valid', [], 'NV8'], | |
| [[9632, 9711], 'valid', [], 'NV8'], | |
| [[9712, 9719], 'valid', [], 'NV8'], | |
| [[9720, 9727], 'valid', [], 'NV8'], | |
| [[9728, 9747], 'valid', [], 'NV8'], | |
| [[9748, 9749], 'valid', [], 'NV8'], | |
| [[9750, 9751], 'valid', [], 'NV8'], | |
| [[9752, 9752], 'valid', [], 'NV8'], | |
| [[9753, 9753], 'valid', [], 'NV8'], | |
| [[9754, 9839], 'valid', [], 'NV8'], | |
| [[9840, 9841], 'valid', [], 'NV8'], | |
| [[9842, 9853], 'valid', [], 'NV8'], | |
| [[9854, 9855], 'valid', [], 'NV8'], | |
| [[9856, 9865], 'valid', [], 'NV8'], | |
| [[9866, 9873], 'valid', [], 'NV8'], | |
| [[9874, 9884], 'valid', [], 'NV8'], | |
| [[9885, 9885], 'valid', [], 'NV8'], | |
| [[9886, 9887], 'valid', [], 'NV8'], | |
| [[9888, 9889], 'valid', [], 'NV8'], | |
| [[9890, 9905], 'valid', [], 'NV8'], | |
| [[9906, 9906], 'valid', [], 'NV8'], | |
| [[9907, 9916], 'valid', [], 'NV8'], | |
| [[9917, 9919], 'valid', [], 'NV8'], | |
| [[9920, 9923], 'valid', [], 'NV8'], | |
| [[9924, 9933], 'valid', [], 'NV8'], | |
| [[9934, 9934], 'valid', [], 'NV8'], | |
| [[9935, 9953], 'valid', [], 'NV8'], | |
| [[9954, 9954], 'valid', [], 'NV8'], | |
| [[9955, 9955], 'valid', [], 'NV8'], | |
| [[9956, 9959], 'valid', [], 'NV8'], | |
| [[9960, 9983], 'valid', [], 'NV8'], | |
| [[9984, 9984], 'valid', [], 'NV8'], | |
| [[9985, 9988], 'valid', [], 'NV8'], | |
| [[9989, 9989], 'valid', [], 'NV8'], | |
| [[9990, 9993], 'valid', [], 'NV8'], | |
| [[9994, 9995], 'valid', [], 'NV8'], | |
| [[9996, 10023], 'valid', [], 'NV8'], | |
| [[10024, 10024], 'valid', [], 'NV8'], | |
| [[10025, 10059], 'valid', [], 'NV8'], | |
| [[10060, 10060], 'valid', [], 'NV8'], | |
| [[10061, 10061], 'valid', [], 'NV8'], | |
| [[10062, 10062], 'valid', [], 'NV8'], | |
| [[10063, 10066], 'valid', [], 'NV8'], | |
| [[10067, 10069], 'valid', [], 'NV8'], | |
| [[10070, 10070], 'valid', [], 'NV8'], | |
| [[10071, 10071], 'valid', [], 'NV8'], | |
| [[10072, 10078], 'valid', [], 'NV8'], | |
| [[10079, 10080], 'valid', [], 'NV8'], | |
| [[10081, 10087], 'valid', [], 'NV8'], | |
| [[10088, 10101], 'valid', [], 'NV8'], | |
| [[10102, 10132], 'valid', [], 'NV8'], | |
| [[10133, 10135], 'valid', [], 'NV8'], | |
| [[10136, 10159], 'valid', [], 'NV8'], | |
| [[10160, 10160], 'valid', [], 'NV8'], | |
| [[10161, 10174], 'valid', [], 'NV8'], | |
| [[10175, 10175], 'valid', [], 'NV8'], | |
| [[10176, 10182], 'valid', [], 'NV8'], | |
| [[10183, 10186], 'valid', [], 'NV8'], | |
| [[10187, 10187], 'valid', [], 'NV8'], | |
| [[10188, 10188], 'valid', [], 'NV8'], | |
| [[10189, 10189], 'valid', [], 'NV8'], | |
| [[10190, 10191], 'valid', [], 'NV8'], | |
| [[10192, 10219], 'valid', [], 'NV8'], | |
| [[10220, 10223], 'valid', [], 'NV8'], | |
| [[10224, 10239], 'valid', [], 'NV8'], | |
| [[10240, 10495], 'valid', [], 'NV8'], | |
| [[10496, 10763], 'valid', [], 'NV8'], | |
| [[10764, 10764], 'mapped', [8747, 8747, 8747, 8747]], | |
| [[10765, 10867], 'valid', [], 'NV8'], | |
| [[10868, 10868], 'disallowed_STD3_mapped', [58, 58, 61]], | |
| [[10869, 10869], 'disallowed_STD3_mapped', [61, 61]], | |
| [[10870, 10870], 'disallowed_STD3_mapped', [61, 61, 61]], | |
| [[10871, 10971], 'valid', [], 'NV8'], | |
| [[10972, 10972], 'mapped', [10973, 824]], | |
| [[10973, 11007], 'valid', [], 'NV8'], | |
| [[11008, 11021], 'valid', [], 'NV8'], | |
| [[11022, 11027], 'valid', [], 'NV8'], | |
| [[11028, 11034], 'valid', [], 'NV8'], | |
| [[11035, 11039], 'valid', [], 'NV8'], | |
| [[11040, 11043], 'valid', [], 'NV8'], | |
| [[11044, 11084], 'valid', [], 'NV8'], | |
| [[11085, 11087], 'valid', [], 'NV8'], | |
| [[11088, 11092], 'valid', [], 'NV8'], | |
| [[11093, 11097], 'valid', [], 'NV8'], | |
| [[11098, 11123], 'valid', [], 'NV8'], | |
| [[11124, 11125], 'disallowed'], | |
| [[11126, 11157], 'valid', [], 'NV8'], | |
| [[11158, 11159], 'disallowed'], | |
| [[11160, 11193], 'valid', [], 'NV8'], | |
| [[11194, 11196], 'disallowed'], | |
| [[11197, 11208], 'valid', [], 'NV8'], | |
| [[11209, 11209], 'disallowed'], | |
| [[11210, 11217], 'valid', [], 'NV8'], | |
| [[11218, 11243], 'disallowed'], | |
| [[11244, 11247], 'valid', [], 'NV8'], | |
| [[11248, 11263], 'disallowed'], | |
| [[11264, 11264], 'mapped', [11312]], | |
| [[11265, 11265], 'mapped', [11313]], | |
| [[11266, 11266], 'mapped', [11314]], | |
| [[11267, 11267], 'mapped', [11315]], | |
| [[11268, 11268], 'mapped', [11316]], | |
| [[11269, 11269], 'mapped', [11317]], | |
| [[11270, 11270], 'mapped', [11318]], | |
| [[11271, 11271], 'mapped', [11319]], | |
| [[11272, 11272], 'mapped', [11320]], | |
| [[11273, 11273], 'mapped', [11321]], | |
| [[11274, 11274], 'mapped', [11322]], | |
| [[11275, 11275], 'mapped', [11323]], | |
| [[11276, 11276], 'mapped', [11324]], | |
| [[11277, 11277], 'mapped', [11325]], | |
| [[11278, 11278], 'mapped', [11326]], | |
| [[11279, 11279], 'mapped', [11327]], | |
| [[11280, 11280], 'mapped', [11328]], | |
| [[11281, 11281], 'mapped', [11329]], | |
| [[11282, 11282], 'mapped', [11330]], | |
| [[11283, 11283], 'mapped', [11331]], | |
| [[11284, 11284], 'mapped', [11332]], | |
| [[11285, 11285], 'mapped', [11333]], | |
| [[11286, 11286], 'mapped', [11334]], | |
| [[11287, 11287], 'mapped', [11335]], | |
| [[11288, 11288], 'mapped', [11336]], | |
| [[11289, 11289], 'mapped', [11337]], | |
| [[11290, 11290], 'mapped', [11338]], | |
| [[11291, 11291], 'mapped', [11339]], | |
| [[11292, 11292], 'mapped', [11340]], | |
| [[11293, 11293], 'mapped', [11341]], | |
| [[11294, 11294], 'mapped', [11342]], | |
| [[11295, 11295], 'mapped', [11343]], | |
| [[11296, 11296], 'mapped', [11344]], | |
| [[11297, 11297], 'mapped', [11345]], | |
| [[11298, 11298], 'mapped', [11346]], | |
| [[11299, 11299], 'mapped', [11347]], | |
| [[11300, 11300], 'mapped', [11348]], | |
| [[11301, 11301], 'mapped', [11349]], | |
| [[11302, 11302], 'mapped', [11350]], | |
| [[11303, 11303], 'mapped', [11351]], | |
| [[11304, 11304], 'mapped', [11352]], | |
| [[11305, 11305], 'mapped', [11353]], | |
| [[11306, 11306], 'mapped', [11354]], | |
| [[11307, 11307], 'mapped', [11355]], | |
| [[11308, 11308], 'mapped', [11356]], | |
| [[11309, 11309], 'mapped', [11357]], | |
| [[11310, 11310], 'mapped', [11358]], | |
| [[11311, 11311], 'disallowed'], | |
| [[11312, 11358], 'valid'], | |
| [[11359, 11359], 'disallowed'], | |
| [[11360, 11360], 'mapped', [11361]], | |
| [[11361, 11361], 'valid'], | |
| [[11362, 11362], 'mapped', [619]], | |
| [[11363, 11363], 'mapped', [7549]], | |
| [[11364, 11364], 'mapped', [637]], | |
| [[11365, 11366], 'valid'], | |
| [[11367, 11367], 'mapped', [11368]], | |
| [[11368, 11368], 'valid'], | |
| [[11369, 11369], 'mapped', [11370]], | |
| [[11370, 11370], 'valid'], | |
| [[11371, 11371], 'mapped', [11372]], | |
| [[11372, 11372], 'valid'], | |
| [[11373, 11373], 'mapped', [593]], | |
| [[11374, 11374], 'mapped', [625]], | |
| [[11375, 11375], 'mapped', [592]], | |
| [[11376, 11376], 'mapped', [594]], | |
| [[11377, 11377], 'valid'], | |
| [[11378, 11378], 'mapped', [11379]], | |
| [[11379, 11379], 'valid'], | |
| [[11380, 11380], 'valid'], | |
| [[11381, 11381], 'mapped', [11382]], | |
| [[11382, 11383], 'valid'], | |
| [[11384, 11387], 'valid'], | |
| [[11388, 11388], 'mapped', [106]], | |
| [[11389, 11389], 'mapped', [118]], | |
| [[11390, 11390], 'mapped', [575]], | |
| [[11391, 11391], 'mapped', [576]], | |
| [[11392, 11392], 'mapped', [11393]], | |
| [[11393, 11393], 'valid'], | |
| [[11394, 11394], 'mapped', [11395]], | |
| [[11395, 11395], 'valid'], | |
| [[11396, 11396], 'mapped', [11397]], | |
| [[11397, 11397], 'valid'], | |
| [[11398, 11398], 'mapped', [11399]], | |
| [[11399, 11399], 'valid'], | |
| [[11400, 11400], 'mapped', [11401]], | |
| [[11401, 11401], 'valid'], | |
| [[11402, 11402], 'mapped', [11403]], | |
| [[11403, 11403], 'valid'], | |
| [[11404, 11404], 'mapped', [11405]], | |
| [[11405, 11405], 'valid'], | |
| [[11406, 11406], 'mapped', [11407]], | |
| [[11407, 11407], 'valid'], | |
| [[11408, 11408], 'mapped', [11409]], | |
| [[11409, 11409], 'valid'], | |
| [[11410, 11410], 'mapped', [11411]], | |
| [[11411, 11411], 'valid'], | |
| [[11412, 11412], 'mapped', [11413]], | |
| [[11413, 11413], 'valid'], | |
| [[11414, 11414], 'mapped', [11415]], | |
| [[11415, 11415], 'valid'], | |
| [[11416, 11416], 'mapped', [11417]], | |
| [[11417, 11417], 'valid'], | |
| [[11418, 11418], 'mapped', [11419]], | |
| [[11419, 11419], 'valid'], | |
| [[11420, 11420], 'mapped', [11421]], | |
| [[11421, 11421], 'valid'], | |
| [[11422, 11422], 'mapped', [11423]], | |
| [[11423, 11423], 'valid'], | |
| [[11424, 11424], 'mapped', [11425]], | |
| [[11425, 11425], 'valid'], | |
| [[11426, 11426], 'mapped', [11427]], | |
| [[11427, 11427], 'valid'], | |
| [[11428, 11428], 'mapped', [11429]], | |
| [[11429, 11429], 'valid'], | |
| [[11430, 11430], 'mapped', [11431]], | |
| [[11431, 11431], 'valid'], | |
| [[11432, 11432], 'mapped', [11433]], | |
| [[11433, 11433], 'valid'], | |
| [[11434, 11434], 'mapped', [11435]], | |
| [[11435, 11435], 'valid'], | |
| [[11436, 11436], 'mapped', [11437]], | |
| [[11437, 11437], 'valid'], | |
| [[11438, 11438], 'mapped', [11439]], | |
| [[11439, 11439], 'valid'], | |
| [[11440, 11440], 'mapped', [11441]], | |
| [[11441, 11441], 'valid'], | |
| [[11442, 11442], 'mapped', [11443]], | |
| [[11443, 11443], 'valid'], | |
| [[11444, 11444], 'mapped', [11445]], | |
| [[11445, 11445], 'valid'], | |
| [[11446, 11446], 'mapped', [11447]], | |
| [[11447, 11447], 'valid'], | |
| [[11448, 11448], 'mapped', [11449]], | |
| [[11449, 11449], 'valid'], | |
| [[11450, 11450], 'mapped', [11451]], | |
| [[11451, 11451], 'valid'], | |
| [[11452, 11452], 'mapped', [11453]], | |
| [[11453, 11453], 'valid'], | |
| [[11454, 11454], 'mapped', [11455]], | |
| [[11455, 11455], 'valid'], | |
| [[11456, 11456], 'mapped', [11457]], | |
| [[11457, 11457], 'valid'], | |
| [[11458, 11458], 'mapped', [11459]], | |
| [[11459, 11459], 'valid'], | |
| [[11460, 11460], 'mapped', [11461]], | |
| [[11461, 11461], 'valid'], | |
| [[11462, 11462], 'mapped', [11463]], | |
| [[11463, 11463], 'valid'], | |
| [[11464, 11464], 'mapped', [11465]], | |
| [[11465, 11465], 'valid'], | |
| [[11466, 11466], 'mapped', [11467]], | |
| [[11467, 11467], 'valid'], | |
| [[11468, 11468], 'mapped', [11469]], | |
| [[11469, 11469], 'valid'], | |
| [[11470, 11470], 'mapped', [11471]], | |
| [[11471, 11471], 'valid'], | |
| [[11472, 11472], 'mapped', [11473]], | |
| [[11473, 11473], 'valid'], | |
| [[11474, 11474], 'mapped', [11475]], | |
| [[11475, 11475], 'valid'], | |
| [[11476, 11476], 'mapped', [11477]], | |
| [[11477, 11477], 'valid'], | |
| [[11478, 11478], 'mapped', [11479]], | |
| [[11479, 11479], 'valid'], | |
| [[11480, 11480], 'mapped', [11481]], | |
| [[11481, 11481], 'valid'], | |
| [[11482, 11482], 'mapped', [11483]], | |
| [[11483, 11483], 'valid'], | |
| [[11484, 11484], 'mapped', [11485]], | |
| [[11485, 11485], 'valid'], | |
| [[11486, 11486], 'mapped', [11487]], | |
| [[11487, 11487], 'valid'], | |
| [[11488, 11488], 'mapped', [11489]], | |
| [[11489, 11489], 'valid'], | |
| [[11490, 11490], 'mapped', [11491]], | |
| [[11491, 11492], 'valid'], | |
| [[11493, 11498], 'valid', [], 'NV8'], | |
| [[11499, 11499], 'mapped', [11500]], | |
| [[11500, 11500], 'valid'], | |
| [[11501, 11501], 'mapped', [11502]], | |
| [[11502, 11505], 'valid'], | |
| [[11506, 11506], 'mapped', [11507]], | |
| [[11507, 11507], 'valid'], | |
| [[11508, 11512], 'disallowed'], | |
| [[11513, 11519], 'valid', [], 'NV8'], | |
| [[11520, 11557], 'valid'], | |
| [[11558, 11558], 'disallowed'], | |
| [[11559, 11559], 'valid'], | |
| [[11560, 11564], 'disallowed'], | |
| [[11565, 11565], 'valid'], | |
| [[11566, 11567], 'disallowed'], | |
| [[11568, 11621], 'valid'], | |
| [[11622, 11623], 'valid'], | |
| [[11624, 11630], 'disallowed'], | |
| [[11631, 11631], 'mapped', [11617]], | |
| [[11632, 11632], 'valid', [], 'NV8'], | |
| [[11633, 11646], 'disallowed'], | |
| [[11647, 11647], 'valid'], | |
| [[11648, 11670], 'valid'], | |
| [[11671, 11679], 'disallowed'], | |
| [[11680, 11686], 'valid'], | |
| [[11687, 11687], 'disallowed'], | |
| [[11688, 11694], 'valid'], | |
| [[11695, 11695], 'disallowed'], | |
| [[11696, 11702], 'valid'], | |
| [[11703, 11703], 'disallowed'], | |
| [[11704, 11710], 'valid'], | |
| [[11711, 11711], 'disallowed'], | |
| [[11712, 11718], 'valid'], | |
| [[11719, 11719], 'disallowed'], | |
| [[11720, 11726], 'valid'], | |
| [[11727, 11727], 'disallowed'], | |
| [[11728, 11734], 'valid'], | |
| [[11735, 11735], 'disallowed'], | |
| [[11736, 11742], 'valid'], | |
| [[11743, 11743], 'disallowed'], | |
| [[11744, 11775], 'valid'], | |
| [[11776, 11799], 'valid', [], 'NV8'], | |
| [[11800, 11803], 'valid', [], 'NV8'], | |
| [[11804, 11805], 'valid', [], 'NV8'], | |
| [[11806, 11822], 'valid', [], 'NV8'], | |
| [[11823, 11823], 'valid'], | |
| [[11824, 11824], 'valid', [], 'NV8'], | |
| [[11825, 11825], 'valid', [], 'NV8'], | |
| [[11826, 11835], 'valid', [], 'NV8'], | |
| [[11836, 11842], 'valid', [], 'NV8'], | |
| [[11843, 11903], 'disallowed'], | |
| [[11904, 11929], 'valid', [], 'NV8'], | |
| [[11930, 11930], 'disallowed'], | |
| [[11931, 11934], 'valid', [], 'NV8'], | |
| [[11935, 11935], 'mapped', [27597]], | |
| [[11936, 12018], 'valid', [], 'NV8'], | |
| [[12019, 12019], 'mapped', [40863]], | |
| [[12020, 12031], 'disallowed'], | |
| [[12032, 12032], 'mapped', [19968]], | |
| [[12033, 12033], 'mapped', [20008]], | |
| [[12034, 12034], 'mapped', [20022]], | |
| [[12035, 12035], 'mapped', [20031]], | |
| [[12036, 12036], 'mapped', [20057]], | |
| [[12037, 12037], 'mapped', [20101]], | |
| [[12038, 12038], 'mapped', [20108]], | |
| [[12039, 12039], 'mapped', [20128]], | |
| [[12040, 12040], 'mapped', [20154]], | |
| [[12041, 12041], 'mapped', [20799]], | |
| [[12042, 12042], 'mapped', [20837]], | |
| [[12043, 12043], 'mapped', [20843]], | |
| [[12044, 12044], 'mapped', [20866]], | |
| [[12045, 12045], 'mapped', [20886]], | |
| [[12046, 12046], 'mapped', [20907]], | |
| [[12047, 12047], 'mapped', [20960]], | |
| [[12048, 12048], 'mapped', [20981]], | |
| [[12049, 12049], 'mapped', [20992]], | |
| [[12050, 12050], 'mapped', [21147]], | |
| [[12051, 12051], 'mapped', [21241]], | |
| [[12052, 12052], 'mapped', [21269]], | |
| [[12053, 12053], 'mapped', [21274]], | |
| [[12054, 12054], 'mapped', [21304]], | |
| [[12055, 12055], 'mapped', [21313]], | |
| [[12056, 12056], 'mapped', [21340]], | |
| [[12057, 12057], 'mapped', [21353]], | |
| [[12058, 12058], 'mapped', [21378]], | |
| [[12059, 12059], 'mapped', [21430]], | |
| [[12060, 12060], 'mapped', [21448]], | |
| [[12061, 12061], 'mapped', [21475]], | |
| [[12062, 12062], 'mapped', [22231]], | |
| [[12063, 12063], 'mapped', [22303]], | |
| [[12064, 12064], 'mapped', [22763]], | |
| [[12065, 12065], 'mapped', [22786]], | |
| [[12066, 12066], 'mapped', [22794]], | |
| [[12067, 12067], 'mapped', [22805]], | |
| [[12068, 12068], 'mapped', [22823]], | |
| [[12069, 12069], 'mapped', [22899]], | |
| [[12070, 12070], 'mapped', [23376]], | |
| [[12071, 12071], 'mapped', [23424]], | |
| [[12072, 12072], 'mapped', [23544]], | |
| [[12073, 12073], 'mapped', [23567]], | |
| [[12074, 12074], 'mapped', [23586]], | |
| [[12075, 12075], 'mapped', [23608]], | |
| [[12076, 12076], 'mapped', [23662]], | |
| [[12077, 12077], 'mapped', [23665]], | |
| [[12078, 12078], 'mapped', [24027]], | |
| [[12079, 12079], 'mapped', [24037]], | |
| [[12080, 12080], 'mapped', [24049]], | |
| [[12081, 12081], 'mapped', [24062]], | |
| [[12082, 12082], 'mapped', [24178]], | |
| [[12083, 12083], 'mapped', [24186]], | |
| [[12084, 12084], 'mapped', [24191]], | |
| [[12085, 12085], 'mapped', [24308]], | |
| [[12086, 12086], 'mapped', [24318]], | |
| [[12087, 12087], 'mapped', [24331]], | |
| [[12088, 12088], 'mapped', [24339]], | |
| [[12089, 12089], 'mapped', [24400]], | |
| [[12090, 12090], 'mapped', [24417]], | |
| [[12091, 12091], 'mapped', [24435]], | |
| [[12092, 12092], 'mapped', [24515]], | |
| [[12093, 12093], 'mapped', [25096]], | |
| [[12094, 12094], 'mapped', [25142]], | |
| [[12095, 12095], 'mapped', [25163]], | |
| [[12096, 12096], 'mapped', [25903]], | |
| [[12097, 12097], 'mapped', [25908]], | |
| [[12098, 12098], 'mapped', [25991]], | |
| [[12099, 12099], 'mapped', [26007]], | |
| [[12100, 12100], 'mapped', [26020]], | |
| [[12101, 12101], 'mapped', [26041]], | |
| [[12102, 12102], 'mapped', [26080]], | |
| [[12103, 12103], 'mapped', [26085]], | |
| [[12104, 12104], 'mapped', [26352]], | |
| [[12105, 12105], 'mapped', [26376]], | |
| [[12106, 12106], 'mapped', [26408]], | |
| [[12107, 12107], 'mapped', [27424]], | |
| [[12108, 12108], 'mapped', [27490]], | |
| [[12109, 12109], 'mapped', [27513]], | |
| [[12110, 12110], 'mapped', [27571]], | |
| [[12111, 12111], 'mapped', [27595]], | |
| [[12112, 12112], 'mapped', [27604]], | |
| [[12113, 12113], 'mapped', [27611]], | |
| [[12114, 12114], 'mapped', [27663]], | |
| [[12115, 12115], 'mapped', [27668]], | |
| [[12116, 12116], 'mapped', [27700]], | |
| [[12117, 12117], 'mapped', [28779]], | |
| [[12118, 12118], 'mapped', [29226]], | |
| [[12119, 12119], 'mapped', [29238]], | |
| [[12120, 12120], 'mapped', [29243]], | |
| [[12121, 12121], 'mapped', [29247]], | |
| [[12122, 12122], 'mapped', [29255]], | |
| [[12123, 12123], 'mapped', [29273]], | |
| [[12124, 12124], 'mapped', [29275]], | |
| [[12125, 12125], 'mapped', [29356]], | |
| [[12126, 12126], 'mapped', [29572]], | |
| [[12127, 12127], 'mapped', [29577]], | |
| [[12128, 12128], 'mapped', [29916]], | |
| [[12129, 12129], 'mapped', [29926]], | |
| [[12130, 12130], 'mapped', [29976]], | |
| [[12131, 12131], 'mapped', [29983]], | |
| [[12132, 12132], 'mapped', [29992]], | |
| [[12133, 12133], 'mapped', [30000]], | |
| [[12134, 12134], 'mapped', [30091]], | |
| [[12135, 12135], 'mapped', [30098]], | |
| [[12136, 12136], 'mapped', [30326]], | |
| [[12137, 12137], 'mapped', [30333]], | |
| [[12138, 12138], 'mapped', [30382]], | |
| [[12139, 12139], 'mapped', [30399]], | |
| [[12140, 12140], 'mapped', [30446]], | |
| [[12141, 12141], 'mapped', [30683]], | |
| [[12142, 12142], 'mapped', [30690]], | |
| [[12143, 12143], 'mapped', [30707]], | |
| [[12144, 12144], 'mapped', [31034]], | |
| [[12145, 12145], 'mapped', [31160]], | |
| [[12146, 12146], 'mapped', [31166]], | |
| [[12147, 12147], 'mapped', [31348]], | |
| [[12148, 12148], 'mapped', [31435]], | |
| [[12149, 12149], 'mapped', [31481]], | |
| [[12150, 12150], 'mapped', [31859]], | |
| [[12151, 12151], 'mapped', [31992]], | |
| [[12152, 12152], 'mapped', [32566]], | |
| [[12153, 12153], 'mapped', [32593]], | |
| [[12154, 12154], 'mapped', [32650]], | |
| [[12155, 12155], 'mapped', [32701]], | |
| [[12156, 12156], 'mapped', [32769]], | |
| [[12157, 12157], 'mapped', [32780]], | |
| [[12158, 12158], 'mapped', [32786]], | |
| [[12159, 12159], 'mapped', [32819]], | |
| [[12160, 12160], 'mapped', [32895]], | |
| [[12161, 12161], 'mapped', [32905]], | |
| [[12162, 12162], 'mapped', [33251]], | |
| [[12163, 12163], 'mapped', [33258]], | |
| [[12164, 12164], 'mapped', [33267]], | |
| [[12165, 12165], 'mapped', [33276]], | |
| [[12166, 12166], 'mapped', [33292]], | |
| [[12167, 12167], 'mapped', [33307]], | |
| [[12168, 12168], 'mapped', [33311]], | |
| [[12169, 12169], 'mapped', [33390]], | |
| [[12170, 12170], 'mapped', [33394]], | |
| [[12171, 12171], 'mapped', [33400]], | |
| [[12172, 12172], 'mapped', [34381]], | |
| [[12173, 12173], 'mapped', [34411]], | |
| [[12174, 12174], 'mapped', [34880]], | |
| [[12175, 12175], 'mapped', [34892]], | |
| [[12176, 12176], 'mapped', [34915]], | |
| [[12177, 12177], 'mapped', [35198]], | |
| [[12178, 12178], 'mapped', [35211]], | |
| [[12179, 12179], 'mapped', [35282]], | |
| [[12180, 12180], 'mapped', [35328]], | |
| [[12181, 12181], 'mapped', [35895]], | |
| [[12182, 12182], 'mapped', [35910]], | |
| [[12183, 12183], 'mapped', [35925]], | |
| [[12184, 12184], 'mapped', [35960]], | |
| [[12185, 12185], 'mapped', [35997]], | |
| [[12186, 12186], 'mapped', [36196]], | |
| [[12187, 12187], 'mapped', [36208]], | |
| [[12188, 12188], 'mapped', [36275]], | |
| [[12189, 12189], 'mapped', [36523]], | |
| [[12190, 12190], 'mapped', [36554]], | |
| [[12191, 12191], 'mapped', [36763]], | |
| [[12192, 12192], 'mapped', [36784]], | |
| [[12193, 12193], 'mapped', [36789]], | |
| [[12194, 12194], 'mapped', [37009]], | |
| [[12195, 12195], 'mapped', [37193]], | |
| [[12196, 12196], 'mapped', [37318]], | |
| [[12197, 12197], 'mapped', [37324]], | |
| [[12198, 12198], 'mapped', [37329]], | |
| [[12199, 12199], 'mapped', [38263]], | |
| [[12200, 12200], 'mapped', [38272]], | |
| [[12201, 12201], 'mapped', [38428]], | |
| [[12202, 12202], 'mapped', [38582]], | |
| [[12203, 12203], 'mapped', [38585]], | |
| [[12204, 12204], 'mapped', [38632]], | |
| [[12205, 12205], 'mapped', [38737]], | |
| [[12206, 12206], 'mapped', [38750]], | |
| [[12207, 12207], 'mapped', [38754]], | |
| [[12208, 12208], 'mapped', [38761]], | |
| [[12209, 12209], 'mapped', [38859]], | |
| [[12210, 12210], 'mapped', [38893]], | |
| [[12211, 12211], 'mapped', [38899]], | |
| [[12212, 12212], 'mapped', [38913]], | |
| [[12213, 12213], 'mapped', [39080]], | |
| [[12214, 12214], 'mapped', [39131]], | |
| [[12215, 12215], 'mapped', [39135]], | |
| [[12216, 12216], 'mapped', [39318]], | |
| [[12217, 12217], 'mapped', [39321]], | |
| [[12218, 12218], 'mapped', [39340]], | |
| [[12219, 12219], 'mapped', [39592]], | |
| [[12220, 12220], 'mapped', [39640]], | |
| [[12221, 12221], 'mapped', [39647]], | |
| [[12222, 12222], 'mapped', [39717]], | |
| [[12223, 12223], 'mapped', [39727]], | |
| [[12224, 12224], 'mapped', [39730]], | |
| [[12225, 12225], 'mapped', [39740]], | |
| [[12226, 12226], 'mapped', [39770]], | |
| [[12227, 12227], 'mapped', [40165]], | |
| [[12228, 12228], 'mapped', [40565]], | |
| [[12229, 12229], 'mapped', [40575]], | |
| [[12230, 12230], 'mapped', [40613]], | |
| [[12231, 12231], 'mapped', [40635]], | |
| [[12232, 12232], 'mapped', [40643]], | |
| [[12233, 12233], 'mapped', [40653]], | |
| [[12234, 12234], 'mapped', [40657]], | |
| [[12235, 12235], 'mapped', [40697]], | |
| [[12236, 12236], 'mapped', [40701]], | |
| [[12237, 12237], 'mapped', [40718]], | |
| [[12238, 12238], 'mapped', [40723]], | |
| [[12239, 12239], 'mapped', [40736]], | |
| [[12240, 12240], 'mapped', [40763]], | |
| [[12241, 12241], 'mapped', [40778]], | |
| [[12242, 12242], 'mapped', [40786]], | |
| [[12243, 12243], 'mapped', [40845]], | |
| [[12244, 12244], 'mapped', [40860]], | |
| [[12245, 12245], 'mapped', [40864]], | |
| [[12246, 12271], 'disallowed'], | |
| [[12272, 12283], 'disallowed'], | |
| [[12284, 12287], 'disallowed'], | |
| [[12288, 12288], 'disallowed_STD3_mapped', [32]], | |
| [[12289, 12289], 'valid', [], 'NV8'], | |
| [[12290, 12290], 'mapped', [46]], | |
| [[12291, 12292], 'valid', [], 'NV8'], | |
| [[12293, 12295], 'valid'], | |
| [[12296, 12329], 'valid', [], 'NV8'], | |
| [[12330, 12333], 'valid'], | |
| [[12334, 12341], 'valid', [], 'NV8'], | |
| [[12342, 12342], 'mapped', [12306]], | |
| [[12343, 12343], 'valid', [], 'NV8'], | |
| [[12344, 12344], 'mapped', [21313]], | |
| [[12345, 12345], 'mapped', [21316]], | |
| [[12346, 12346], 'mapped', [21317]], | |
| [[12347, 12347], 'valid', [], 'NV8'], | |
| [[12348, 12348], 'valid'], | |
| [[12349, 12349], 'valid', [], 'NV8'], | |
| [[12350, 12350], 'valid', [], 'NV8'], | |
| [[12351, 12351], 'valid', [], 'NV8'], | |
| [[12352, 12352], 'disallowed'], | |
| [[12353, 12436], 'valid'], | |
| [[12437, 12438], 'valid'], | |
| [[12439, 12440], 'disallowed'], | |
| [[12441, 12442], 'valid'], | |
| [[12443, 12443], 'disallowed_STD3_mapped', [32, 12441]], | |
| [[12444, 12444], 'disallowed_STD3_mapped', [32, 12442]], | |
| [[12445, 12446], 'valid'], | |
| [[12447, 12447], 'mapped', [12424, 12426]], | |
| [[12448, 12448], 'valid', [], 'NV8'], | |
| [[12449, 12542], 'valid'], | |
| [[12543, 12543], 'mapped', [12467, 12488]], | |
| [[12544, 12548], 'disallowed'], | |
| [[12549, 12588], 'valid'], | |
| [[12589, 12589], 'valid'], | |
| [[12590, 12592], 'disallowed'], | |
| [[12593, 12593], 'mapped', [4352]], | |
| [[12594, 12594], 'mapped', [4353]], | |
| [[12595, 12595], 'mapped', [4522]], | |
| [[12596, 12596], 'mapped', [4354]], | |
| [[12597, 12597], 'mapped', [4524]], | |
| [[12598, 12598], 'mapped', [4525]], | |
| [[12599, 12599], 'mapped', [4355]], | |
| [[12600, 12600], 'mapped', [4356]], | |
| [[12601, 12601], 'mapped', [4357]], | |
| [[12602, 12602], 'mapped', [4528]], | |
| [[12603, 12603], 'mapped', [4529]], | |
| [[12604, 12604], 'mapped', [4530]], | |
| [[12605, 12605], 'mapped', [4531]], | |
| [[12606, 12606], 'mapped', [4532]], | |
| [[12607, 12607], 'mapped', [4533]], | |
| [[12608, 12608], 'mapped', [4378]], | |
| [[12609, 12609], 'mapped', [4358]], | |
| [[12610, 12610], 'mapped', [4359]], | |
| [[12611, 12611], 'mapped', [4360]], | |
| [[12612, 12612], 'mapped', [4385]], | |
| [[12613, 12613], 'mapped', [4361]], | |
| [[12614, 12614], 'mapped', [4362]], | |
| [[12615, 12615], 'mapped', [4363]], | |
| [[12616, 12616], 'mapped', [4364]], | |
| [[12617, 12617], 'mapped', [4365]], | |
| [[12618, 12618], 'mapped', [4366]], | |
| [[12619, 12619], 'mapped', [4367]], | |
| [[12620, 12620], 'mapped', [4368]], | |
| [[12621, 12621], 'mapped', [4369]], | |
| [[12622, 12622], 'mapped', [4370]], | |
| [[12623, 12623], 'mapped', [4449]], | |
| [[12624, 12624], 'mapped', [4450]], | |
| [[12625, 12625], 'mapped', [4451]], | |
| [[12626, 12626], 'mapped', [4452]], | |
| [[12627, 12627], 'mapped', [4453]], | |
| [[12628, 12628], 'mapped', [4454]], | |
| [[12629, 12629], 'mapped', [4455]], | |
| [[12630, 12630], 'mapped', [4456]], | |
| [[12631, 12631], 'mapped', [4457]], | |
| [[12632, 12632], 'mapped', [4458]], | |
| [[12633, 12633], 'mapped', [4459]], | |
| [[12634, 12634], 'mapped', [4460]], | |
| [[12635, 12635], 'mapped', [4461]], | |
| [[12636, 12636], 'mapped', [4462]], | |
| [[12637, 12637], 'mapped', [4463]], | |
| [[12638, 12638], 'mapped', [4464]], | |
| [[12639, 12639], 'mapped', [4465]], | |
| [[12640, 12640], 'mapped', [4466]], | |
| [[12641, 12641], 'mapped', [4467]], | |
| [[12642, 12642], 'mapped', [4468]], | |
| [[12643, 12643], 'mapped', [4469]], | |
| [[12644, 12644], 'disallowed'], | |
| [[12645, 12645], 'mapped', [4372]], | |
| [[12646, 12646], 'mapped', [4373]], | |
| [[12647, 12647], 'mapped', [4551]], | |
| [[12648, 12648], 'mapped', [4552]], | |
| [[12649, 12649], 'mapped', [4556]], | |
| [[12650, 12650], 'mapped', [4558]], | |
| [[12651, 12651], 'mapped', [4563]], | |
| [[12652, 12652], 'mapped', [4567]], | |
| [[12653, 12653], 'mapped', [4569]], | |
| [[12654, 12654], 'mapped', [4380]], | |
| [[12655, 12655], 'mapped', [4573]], | |
| [[12656, 12656], 'mapped', [4575]], | |
| [[12657, 12657], 'mapped', [4381]], | |
| [[12658, 12658], 'mapped', [4382]], | |
| [[12659, 12659], 'mapped', [4384]], | |
| [[12660, 12660], 'mapped', [4386]], | |
| [[12661, 12661], 'mapped', [4387]], | |
| [[12662, 12662], 'mapped', [4391]], | |
| [[12663, 12663], 'mapped', [4393]], | |
| [[12664, 12664], 'mapped', [4395]], | |
| [[12665, 12665], 'mapped', [4396]], | |
| [[12666, 12666], 'mapped', [4397]], | |
| [[12667, 12667], 'mapped', [4398]], | |
| [[12668, 12668], 'mapped', [4399]], | |
| [[12669, 12669], 'mapped', [4402]], | |
| [[12670, 12670], 'mapped', [4406]], | |
| [[12671, 12671], 'mapped', [4416]], | |
| [[12672, 12672], 'mapped', [4423]], | |
| [[12673, 12673], 'mapped', [4428]], | |
| [[12674, 12674], 'mapped', [4593]], | |
| [[12675, 12675], 'mapped', [4594]], | |
| [[12676, 12676], 'mapped', [4439]], | |
| [[12677, 12677], 'mapped', [4440]], | |
| [[12678, 12678], 'mapped', [4441]], | |
| [[12679, 12679], 'mapped', [4484]], | |
| [[12680, 12680], 'mapped', [4485]], | |
| [[12681, 12681], 'mapped', [4488]], | |
| [[12682, 12682], 'mapped', [4497]], | |
| [[12683, 12683], 'mapped', [4498]], | |
| [[12684, 12684], 'mapped', [4500]], | |
| [[12685, 12685], 'mapped', [4510]], | |
| [[12686, 12686], 'mapped', [4513]], | |
| [[12687, 12687], 'disallowed'], | |
| [[12688, 12689], 'valid', [], 'NV8'], | |
| [[12690, 12690], 'mapped', [19968]], | |
| [[12691, 12691], 'mapped', [20108]], | |
| [[12692, 12692], 'mapped', [19977]], | |
| [[12693, 12693], 'mapped', [22235]], | |
| [[12694, 12694], 'mapped', [19978]], | |
| [[12695, 12695], 'mapped', [20013]], | |
| [[12696, 12696], 'mapped', [19979]], | |
| [[12697, 12697], 'mapped', [30002]], | |
| [[12698, 12698], 'mapped', [20057]], | |
| [[12699, 12699], 'mapped', [19993]], | |
| [[12700, 12700], 'mapped', [19969]], | |
| [[12701, 12701], 'mapped', [22825]], | |
| [[12702, 12702], 'mapped', [22320]], | |
| [[12703, 12703], 'mapped', [20154]], | |
| [[12704, 12727], 'valid'], | |
| [[12728, 12730], 'valid'], | |
| [[12731, 12735], 'disallowed'], | |
| [[12736, 12751], 'valid', [], 'NV8'], | |
| [[12752, 12771], 'valid', [], 'NV8'], | |
| [[12772, 12783], 'disallowed'], | |
| [[12784, 12799], 'valid'], | |
| [[12800, 12800], 'disallowed_STD3_mapped', [40, 4352, 41]], | |
| [[12801, 12801], 'disallowed_STD3_mapped', [40, 4354, 41]], | |
| [[12802, 12802], 'disallowed_STD3_mapped', [40, 4355, 41]], | |
| [[12803, 12803], 'disallowed_STD3_mapped', [40, 4357, 41]], | |
| [[12804, 12804], 'disallowed_STD3_mapped', [40, 4358, 41]], | |
| [[12805, 12805], 'disallowed_STD3_mapped', [40, 4359, 41]], | |
| [[12806, 12806], 'disallowed_STD3_mapped', [40, 4361, 41]], | |
| [[12807, 12807], 'disallowed_STD3_mapped', [40, 4363, 41]], | |
| [[12808, 12808], 'disallowed_STD3_mapped', [40, 4364, 41]], | |
| [[12809, 12809], 'disallowed_STD3_mapped', [40, 4366, 41]], | |
| [[12810, 12810], 'disallowed_STD3_mapped', [40, 4367, 41]], | |
| [[12811, 12811], 'disallowed_STD3_mapped', [40, 4368, 41]], | |
| [[12812, 12812], 'disallowed_STD3_mapped', [40, 4369, 41]], | |
| [[12813, 12813], 'disallowed_STD3_mapped', [40, 4370, 41]], | |
| [[12814, 12814], 'disallowed_STD3_mapped', [40, 44032, 41]], | |
| [[12815, 12815], 'disallowed_STD3_mapped', [40, 45208, 41]], | |
| [[12816, 12816], 'disallowed_STD3_mapped', [40, 45796, 41]], | |
| [[12817, 12817], 'disallowed_STD3_mapped', [40, 46972, 41]], | |
| [[12818, 12818], 'disallowed_STD3_mapped', [40, 47560, 41]], | |
| [[12819, 12819], 'disallowed_STD3_mapped', [40, 48148, 41]], | |
| [[12820, 12820], 'disallowed_STD3_mapped', [40, 49324, 41]], | |
| [[12821, 12821], 'disallowed_STD3_mapped', [40, 50500, 41]], | |
| [[12822, 12822], 'disallowed_STD3_mapped', [40, 51088, 41]], | |
| [[12823, 12823], 'disallowed_STD3_mapped', [40, 52264, 41]], | |
| [[12824, 12824], 'disallowed_STD3_mapped', [40, 52852, 41]], | |
| [[12825, 12825], 'disallowed_STD3_mapped', [40, 53440, 41]], | |
| [[12826, 12826], 'disallowed_STD3_mapped', [40, 54028, 41]], | |
| [[12827, 12827], 'disallowed_STD3_mapped', [40, 54616, 41]], | |
| [[12828, 12828], 'disallowed_STD3_mapped', [40, 51452, 41]], | |
| [[12829, 12829], 'disallowed_STD3_mapped', [40, 50724, 51204, 41]], | |
| [[12830, 12830], 'disallowed_STD3_mapped', [40, 50724, 54980, 41]], | |
| [[12831, 12831], 'disallowed'], | |
| [[12832, 12832], 'disallowed_STD3_mapped', [40, 19968, 41]], | |
| [[12833, 12833], 'disallowed_STD3_mapped', [40, 20108, 41]], | |
| [[12834, 12834], 'disallowed_STD3_mapped', [40, 19977, 41]], | |
| [[12835, 12835], 'disallowed_STD3_mapped', [40, 22235, 41]], | |
| [[12836, 12836], 'disallowed_STD3_mapped', [40, 20116, 41]], | |
| [[12837, 12837], 'disallowed_STD3_mapped', [40, 20845, 41]], | |
| [[12838, 12838], 'disallowed_STD3_mapped', [40, 19971, 41]], | |
| [[12839, 12839], 'disallowed_STD3_mapped', [40, 20843, 41]], | |
| [[12840, 12840], 'disallowed_STD3_mapped', [40, 20061, 41]], | |
| [[12841, 12841], 'disallowed_STD3_mapped', [40, 21313, 41]], | |
| [[12842, 12842], 'disallowed_STD3_mapped', [40, 26376, 41]], | |
| [[12843, 12843], 'disallowed_STD3_mapped', [40, 28779, 41]], | |
| [[12844, 12844], 'disallowed_STD3_mapped', [40, 27700, 41]], | |
| [[12845, 12845], 'disallowed_STD3_mapped', [40, 26408, 41]], | |
| [[12846, 12846], 'disallowed_STD3_mapped', [40, 37329, 41]], | |
| [[12847, 12847], 'disallowed_STD3_mapped', [40, 22303, 41]], | |
| [[12848, 12848], 'disallowed_STD3_mapped', [40, 26085, 41]], | |
| [[12849, 12849], 'disallowed_STD3_mapped', [40, 26666, 41]], | |
| [[12850, 12850], 'disallowed_STD3_mapped', [40, 26377, 41]], | |
| [[12851, 12851], 'disallowed_STD3_mapped', [40, 31038, 41]], | |
| [[12852, 12852], 'disallowed_STD3_mapped', [40, 21517, 41]], | |
| [[12853, 12853], 'disallowed_STD3_mapped', [40, 29305, 41]], | |
| [[12854, 12854], 'disallowed_STD3_mapped', [40, 36001, 41]], | |
| [[12855, 12855], 'disallowed_STD3_mapped', [40, 31069, 41]], | |
| [[12856, 12856], 'disallowed_STD3_mapped', [40, 21172, 41]], | |
| [[12857, 12857], 'disallowed_STD3_mapped', [40, 20195, 41]], | |
| [[12858, 12858], 'disallowed_STD3_mapped', [40, 21628, 41]], | |
| [[12859, 12859], 'disallowed_STD3_mapped', [40, 23398, 41]], | |
| [[12860, 12860], 'disallowed_STD3_mapped', [40, 30435, 41]], | |
| [[12861, 12861], 'disallowed_STD3_mapped', [40, 20225, 41]], | |
| [[12862, 12862], 'disallowed_STD3_mapped', [40, 36039, 41]], | |
| [[12863, 12863], 'disallowed_STD3_mapped', [40, 21332, 41]], | |
| [[12864, 12864], 'disallowed_STD3_mapped', [40, 31085, 41]], | |
| [[12865, 12865], 'disallowed_STD3_mapped', [40, 20241, 41]], | |
| [[12866, 12866], 'disallowed_STD3_mapped', [40, 33258, 41]], | |
| [[12867, 12867], 'disallowed_STD3_mapped', [40, 33267, 41]], | |
| [[12868, 12868], 'mapped', [21839]], | |
| [[12869, 12869], 'mapped', [24188]], | |
| [[12870, 12870], 'mapped', [25991]], | |
| [[12871, 12871], 'mapped', [31631]], | |
| [[12872, 12879], 'valid', [], 'NV8'], | |
| [[12880, 12880], 'mapped', [112, 116, 101]], | |
| [[12881, 12881], 'mapped', [50, 49]], | |
| [[12882, 12882], 'mapped', [50, 50]], | |
| [[12883, 12883], 'mapped', [50, 51]], | |
| [[12884, 12884], 'mapped', [50, 52]], | |
| [[12885, 12885], 'mapped', [50, 53]], | |
| [[12886, 12886], 'mapped', [50, 54]], | |
| [[12887, 12887], 'mapped', [50, 55]], | |
| [[12888, 12888], 'mapped', [50, 56]], | |
| [[12889, 12889], 'mapped', [50, 57]], | |
| [[12890, 12890], 'mapped', [51, 48]], | |
| [[12891, 12891], 'mapped', [51, 49]], | |
| [[12892, 12892], 'mapped', [51, 50]], | |
| [[12893, 12893], 'mapped', [51, 51]], | |
| [[12894, 12894], 'mapped', [51, 52]], | |
| [[12895, 12895], 'mapped', [51, 53]], | |
| [[12896, 12896], 'mapped', [4352]], | |
| [[12897, 12897], 'mapped', [4354]], | |
| [[12898, 12898], 'mapped', [4355]], | |
| [[12899, 12899], 'mapped', [4357]], | |
| [[12900, 12900], 'mapped', [4358]], | |
| [[12901, 12901], 'mapped', [4359]], | |
| [[12902, 12902], 'mapped', [4361]], | |
| [[12903, 12903], 'mapped', [4363]], | |
| [[12904, 12904], 'mapped', [4364]], | |
| [[12905, 12905], 'mapped', [4366]], | |
| [[12906, 12906], 'mapped', [4367]], | |
| [[12907, 12907], 'mapped', [4368]], | |
| [[12908, 12908], 'mapped', [4369]], | |
| [[12909, 12909], 'mapped', [4370]], | |
| [[12910, 12910], 'mapped', [44032]], | |
| [[12911, 12911], 'mapped', [45208]], | |
| [[12912, 12912], 'mapped', [45796]], | |
| [[12913, 12913], 'mapped', [46972]], | |
| [[12914, 12914], 'mapped', [47560]], | |
| [[12915, 12915], 'mapped', [48148]], | |
| [[12916, 12916], 'mapped', [49324]], | |
| [[12917, 12917], 'mapped', [50500]], | |
| [[12918, 12918], 'mapped', [51088]], | |
| [[12919, 12919], 'mapped', [52264]], | |
| [[12920, 12920], 'mapped', [52852]], | |
| [[12921, 12921], 'mapped', [53440]], | |
| [[12922, 12922], 'mapped', [54028]], | |
| [[12923, 12923], 'mapped', [54616]], | |
| [[12924, 12924], 'mapped', [52280, 44256]], | |
| [[12925, 12925], 'mapped', [51452, 51032]], | |
| [[12926, 12926], 'mapped', [50864]], | |
| [[12927, 12927], 'valid', [], 'NV8'], | |
| [[12928, 12928], 'mapped', [19968]], | |
| [[12929, 12929], 'mapped', [20108]], | |
| [[12930, 12930], 'mapped', [19977]], | |
| [[12931, 12931], 'mapped', [22235]], | |
| [[12932, 12932], 'mapped', [20116]], | |
| [[12933, 12933], 'mapped', [20845]], | |
| [[12934, 12934], 'mapped', [19971]], | |
| [[12935, 12935], 'mapped', [20843]], | |
| [[12936, 12936], 'mapped', [20061]], | |
| [[12937, 12937], 'mapped', [21313]], | |
| [[12938, 12938], 'mapped', [26376]], | |
| [[12939, 12939], 'mapped', [28779]], | |
| [[12940, 12940], 'mapped', [27700]], | |
| [[12941, 12941], 'mapped', [26408]], | |
| [[12942, 12942], 'mapped', [37329]], | |
| [[12943, 12943], 'mapped', [22303]], | |
| [[12944, 12944], 'mapped', [26085]], | |
| [[12945, 12945], 'mapped', [26666]], | |
| [[12946, 12946], 'mapped', [26377]], | |
| [[12947, 12947], 'mapped', [31038]], | |
| [[12948, 12948], 'mapped', [21517]], | |
| [[12949, 12949], 'mapped', [29305]], | |
| [[12950, 12950], 'mapped', [36001]], | |
| [[12951, 12951], 'mapped', [31069]], | |
| [[12952, 12952], 'mapped', [21172]], | |
| [[12953, 12953], 'mapped', [31192]], | |
| [[12954, 12954], 'mapped', [30007]], | |
| [[12955, 12955], 'mapped', [22899]], | |
| [[12956, 12956], 'mapped', [36969]], | |
| [[12957, 12957], 'mapped', [20778]], | |
| [[12958, 12958], 'mapped', [21360]], | |
| [[12959, 12959], 'mapped', [27880]], | |
| [[12960, 12960], 'mapped', [38917]], | |
| [[12961, 12961], 'mapped', [20241]], | |
| [[12962, 12962], 'mapped', [20889]], | |
| [[12963, 12963], 'mapped', [27491]], | |
| [[12964, 12964], 'mapped', [19978]], | |
| [[12965, 12965], 'mapped', [20013]], | |
| [[12966, 12966], 'mapped', [19979]], | |
| [[12967, 12967], 'mapped', [24038]], | |
| [[12968, 12968], 'mapped', [21491]], | |
| [[12969, 12969], 'mapped', [21307]], | |
| [[12970, 12970], 'mapped', [23447]], | |
| [[12971, 12971], 'mapped', [23398]], | |
| [[12972, 12972], 'mapped', [30435]], | |
| [[12973, 12973], 'mapped', [20225]], | |
| [[12974, 12974], 'mapped', [36039]], | |
| [[12975, 12975], 'mapped', [21332]], | |
| [[12976, 12976], 'mapped', [22812]], | |
| [[12977, 12977], 'mapped', [51, 54]], | |
| [[12978, 12978], 'mapped', [51, 55]], | |
| [[12979, 12979], 'mapped', [51, 56]], | |
| [[12980, 12980], 'mapped', [51, 57]], | |
| [[12981, 12981], 'mapped', [52, 48]], | |
| [[12982, 12982], 'mapped', [52, 49]], | |
| [[12983, 12983], 'mapped', [52, 50]], | |
| [[12984, 12984], 'mapped', [52, 51]], | |
| [[12985, 12985], 'mapped', [52, 52]], | |
| [[12986, 12986], 'mapped', [52, 53]], | |
| [[12987, 12987], 'mapped', [52, 54]], | |
| [[12988, 12988], 'mapped', [52, 55]], | |
| [[12989, 12989], 'mapped', [52, 56]], | |
| [[12990, 12990], 'mapped', [52, 57]], | |
| [[12991, 12991], 'mapped', [53, 48]], | |
| [[12992, 12992], 'mapped', [49, 26376]], | |
| [[12993, 12993], 'mapped', [50, 26376]], | |
| [[12994, 12994], 'mapped', [51, 26376]], | |
| [[12995, 12995], 'mapped', [52, 26376]], | |
| [[12996, 12996], 'mapped', [53, 26376]], | |
| [[12997, 12997], 'mapped', [54, 26376]], | |
| [[12998, 12998], 'mapped', [55, 26376]], | |
| [[12999, 12999], 'mapped', [56, 26376]], | |
| [[13000, 13000], 'mapped', [57, 26376]], | |
| [[13001, 13001], 'mapped', [49, 48, 26376]], | |
| [[13002, 13002], 'mapped', [49, 49, 26376]], | |
| [[13003, 13003], 'mapped', [49, 50, 26376]], | |
| [[13004, 13004], 'mapped', [104, 103]], | |
| [[13005, 13005], 'mapped', [101, 114, 103]], | |
| [[13006, 13006], 'mapped', [101, 118]], | |
| [[13007, 13007], 'mapped', [108, 116, 100]], | |
| [[13008, 13008], 'mapped', [12450]], | |
| [[13009, 13009], 'mapped', [12452]], | |
| [[13010, 13010], 'mapped', [12454]], | |
| [[13011, 13011], 'mapped', [12456]], | |
| [[13012, 13012], 'mapped', [12458]], | |
| [[13013, 13013], 'mapped', [12459]], | |
| [[13014, 13014], 'mapped', [12461]], | |
| [[13015, 13015], 'mapped', [12463]], | |
| [[13016, 13016], 'mapped', [12465]], | |
| [[13017, 13017], 'mapped', [12467]], | |
| [[13018, 13018], 'mapped', [12469]], | |
| [[13019, 13019], 'mapped', [12471]], | |
| [[13020, 13020], 'mapped', [12473]], | |
| [[13021, 13021], 'mapped', [12475]], | |
| [[13022, 13022], 'mapped', [12477]], | |
| [[13023, 13023], 'mapped', [12479]], | |
| [[13024, 13024], 'mapped', [12481]], | |
| [[13025, 13025], 'mapped', [12484]], | |
| [[13026, 13026], 'mapped', [12486]], | |
| [[13027, 13027], 'mapped', [12488]], | |
| [[13028, 13028], 'mapped', [12490]], | |
| [[13029, 13029], 'mapped', [12491]], | |
| [[13030, 13030], 'mapped', [12492]], | |
| [[13031, 13031], 'mapped', [12493]], | |
| [[13032, 13032], 'mapped', [12494]], | |
| [[13033, 13033], 'mapped', [12495]], | |
| [[13034, 13034], 'mapped', [12498]], | |
| [[13035, 13035], 'mapped', [12501]], | |
| [[13036, 13036], 'mapped', [12504]], | |
| [[13037, 13037], 'mapped', [12507]], | |
| [[13038, 13038], 'mapped', [12510]], | |
| [[13039, 13039], 'mapped', [12511]], | |
| [[13040, 13040], 'mapped', [12512]], | |
| [[13041, 13041], 'mapped', [12513]], | |
| [[13042, 13042], 'mapped', [12514]], | |
| [[13043, 13043], 'mapped', [12516]], | |
| [[13044, 13044], 'mapped', [12518]], | |
| [[13045, 13045], 'mapped', [12520]], | |
| [[13046, 13046], 'mapped', [12521]], | |
| [[13047, 13047], 'mapped', [12522]], | |
| [[13048, 13048], 'mapped', [12523]], | |
| [[13049, 13049], 'mapped', [12524]], | |
| [[13050, 13050], 'mapped', [12525]], | |
| [[13051, 13051], 'mapped', [12527]], | |
| [[13052, 13052], 'mapped', [12528]], | |
| [[13053, 13053], 'mapped', [12529]], | |
| [[13054, 13054], 'mapped', [12530]], | |
| [[13055, 13055], 'disallowed'], | |
| [[13056, 13056], 'mapped', [12450, 12497, 12540, 12488]], | |
| [[13057, 13057], 'map |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment