/*!
 * Application Insights JavaScript SDK - Core, 3.3.10
 * Copyright (c) Microsoft and contributors. All rights reserved.
 */
(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
    typeof define === 'function' && define.amd ? define(['exports'], factory) :
    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.Microsoft = global.Microsoft || {}, global.Microsoft.ApplicationInsights = global.Microsoft.ApplicationInsights || {})));
})(this, (function (exports) { 'use strict';

    var MinChannelPriorty = 100;

    /*! https://github.com/nevware21/ts-utils v0.12.5 */
    /*#__NO_SIDE_EFFECTS__*/
    function _pureAssign(func1, func2) {
        return func1 || func2;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _pureRef(value, name) {
        return value[name];
    }
    var UNDEF_VALUE = undefined;
    var NULL_VALUE = null;
    var EMPTY = "";
    var FUNCTION = "function";
    var OBJECT = "object";
    var PROTOTYPE = "prototype";
    var __PROTO__ = "__proto__";
    var UNDEFINED = "undefined";
    var CONSTRUCTOR = "constructor";
    var SYMBOL = "Symbol";
    var LENGTH = "length";
    var NAME = "name";
    var CALL = "call";
    var TO_STRING = "toString";
    var GET_OWN_PROPERTY_DESCRIPTOR = "getOwnPropertyDescriptor";
    var ObjClass$1 = ( /*#__PURE__*/_pureAssign(Object));
    var ObjProto = ( /*#__PURE__*/_pureRef(ObjClass$1, PROTOTYPE));
    var StrCls = ( /*#__PURE__*/_pureAssign(String));
    var StrProto = ( /*#__PURE__*/_pureRef(StrCls, PROTOTYPE));
    var MathCls = ( /*#__PURE__*/_pureAssign(Math));
    var ArrCls = ( /*#__PURE__*/_pureAssign(Array));
    var ArrProto = ( /*#__PURE__*/_pureRef(ArrCls, PROTOTYPE));
    var ArrSlice = ( /*#__PURE__*/_pureRef(ArrProto, "slice"));
    var POLYFILL_TAG = "_polyfill";
    var POLYFILL_TYPE_NAME = "__nw21$polytype__";
    function _isPolyfillType(obj, polyfillTypeName) {
        return !!(obj && obj[POLYFILL_TYPE_NAME] === polyfillTypeName);
    }
    function safe(func, argArray) {
        try {
            return {
                v: func.apply(this, argArray)
            };
        }
        catch (e) {
            return { e: e };
        }
    }
    /*#__NO_SIDE_EFFECTS__*/
    function safeGet(cb, defValue, argArray) {
        var result = safe(cb, argArray);
        return result.e ? defValue : result.v;
    }
    var _primitiveTypes;
    /*#__NO_SIDE_EFFECTS__*/
    function _createIs(theType) {
        return function (value) {
            return typeof value === theType;
        };
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _createIsWithPoly(theType) {
        return function (value) {
            return typeof value === theType || _isPolyfillType(value, theType);
        };
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _createObjIs(theName) {
        var theType = "[object " + theName + "]";
        return function (value) {
            return !!(value && objToString(value) === theType);
        };
    }
    /*#__NO_SIDE_EFFECTS__*/
    function objToString(value) {
        return ObjProto[TO_STRING].call(value);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function isTypeof(value, theType) {
        return typeof value === theType;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function isUndefined(value) {
        return typeof value === UNDEFINED || value === UNDEFINED;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function isStrictUndefined(arg) {
        return arg === UNDEF_VALUE;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function isNullOrUndefined(value) {
        return value === NULL_VALUE || isUndefined(value);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function isStrictNullOrUndefined(value) {
        return value === NULL_VALUE || value === UNDEF_VALUE;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function isDefined(arg) {
        return !!arg || arg !== UNDEF_VALUE;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function isPrimitiveType(theType) {
        !_primitiveTypes && (_primitiveTypes = ["string", "number", "boolean", UNDEFINED, "symbol", "bigint"]);
        return !!(theType !== OBJECT && _primitiveTypes.indexOf(theType) !== -1);
    }
    var isString = ( /*#__PURE__*/_createIs("string"));
    var isFunction = ( /*#__PURE__*/_createIs(FUNCTION));
    /*#__NO_SIDE_EFFECTS__*/
    function isObject(value) {
        if (!value && isNullOrUndefined(value)) {
            return false;
        }
        return !!value && typeof value === OBJECT;
    }
    var isArray = ( /* #__PURE__*/_pureRef(ArrCls, "isArray"));
    var isDate = ( /*#__PURE__*/_createObjIs("Date"));
    var isNumber = ( /*#__PURE__*/_createIs("number"));
    var isBoolean = ( /*#__PURE__*/_createIs("boolean"));
    var isError = ( /*#__PURE__*/_createObjIs("Error"));
    /*#__NO_SIDE_EFFECTS__*/
    function isPromiseLike(value) {
        return !!(value && value.then && isFunction(value.then));
    }
    /*#__NO_SIDE_EFFECTS__*/
    function isNotTruthy(value) {
        return !value || !isTruthy(value);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function isTruthy(value) {
        return !(!value || safeGet(function () { return !(value && (0 + value)); }, !value));
    }
    function _returnNothing() {
        return;
    }
    function _returnFalse() {
        return false;
    }
    var asString = ( /*#__PURE__*/_pureAssign(StrCls));
    var ERROR_TYPE = "[object Error]";
    /*#__NO_SIDE_EFFECTS__*/
    function dumpObj(object, format) {
        var propertyValueDump = EMPTY;
        var objType = ObjProto[TO_STRING][CALL](object);
        if (objType === ERROR_TYPE) {
            object = { stack: asString(object.stack), message: asString(object.message), name: asString(object.name) };
        }
        try {
            propertyValueDump = JSON.stringify(object, NULL_VALUE, format ? ((typeof format === "number") ? format : 4) : UNDEF_VALUE);
            propertyValueDump = (propertyValueDump ? propertyValueDump.replace(/"(\w+)"\s*:\s{0,1}/g, "$1: ") : NULL_VALUE) || asString(object);
        }
        catch (e) {
            propertyValueDump = " - " + dumpObj(e, format);
        }
        return objType + ": " + propertyValueDump;
    }
    function throwError(message) {
        throw new Error(message);
    }
    function throwTypeError(message) {
        throw new TypeError(message);
    }
    function _throwIfNullOrUndefined(obj) {
        if (isStrictNullOrUndefined(obj)) {
            throwTypeError("Cannot convert undefined or null to object");
        }
    }
    function _throwIfNotString(value) {
        if (!isString(value)) {
            throwTypeError("'" + dumpObj(value) + "' is not a string");
        }
    }
    /*#__NO_SIDE_EFFECTS__*/
    function objHasOwnProperty(obj, prop) {
        return !!obj && ObjProto.hasOwnProperty[CALL](obj, prop);
    }
    var _objGetOwnPropertyDescriptor$2 = ( /*#__PURE__*/_pureAssign(( /*#__PURE__*/_pureRef(ObjClass$1, GET_OWN_PROPERTY_DESCRIPTOR)), _returnNothing));
    var objHasOwn = ( /*#__PURE__*/_pureAssign(( /*#__PURE__*/_pureRef(ObjClass$1, "hasOwn")), polyObjHasOwn));
    /*#__NO_SIDE_EFFECTS__*/
    function polyObjHasOwn(obj, prop) {
        _throwIfNullOrUndefined(obj);
        return objHasOwnProperty(obj, prop) || !!_objGetOwnPropertyDescriptor$2(obj, prop);
    }
    function objForEachKey(theObject, callbackfn, thisArg) {
        if (theObject && (isObject(theObject) || isFunction(theObject))) {
            for (var prop in theObject) {
                if (objHasOwn(theObject, prop)) {
                    if (callbackfn[CALL](thisArg || theObject, prop, theObject[prop]) === -1) {
                        break;
                    }
                }
            }
        }
    }
    function arrForEach(theArray, callbackfn, thisArg) {
        if (theArray) {
            var len = theArray[LENGTH] >>> 0;
            for (var idx = 0; idx < len; idx++) {
                if (idx in theArray) {
                    if (callbackfn[CALL](thisArg || theArray, theArray[idx], idx, theArray) === -1) {
                        break;
                    }
                }
            }
        }
    }
    var _unwrapFunction = ( _unwrapFunctionWithPoly);
    /*#__NO_SIDE_EFFECTS__*/
    function _unwrapFunctionWithPoly(funcName, clsProto, polyFunc) {
        var clsFn = clsProto ? clsProto[funcName] : NULL_VALUE;
        return function (thisArg) {
            var theFunc = (thisArg ? thisArg[funcName] : NULL_VALUE) || clsFn;
            if (theFunc || polyFunc) {
                var theArgs = arguments;
                return (theFunc || polyFunc).apply(thisArg, theFunc ? ArrSlice[CALL](theArgs, 1) : theArgs);
            }
            throwTypeError("\"" + asString(funcName) + "\" not defined for " + dumpObj(thisArg));
        };
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _unwrapProp(propName) {
        return function (thisArg) {
            return thisArg[propName];
        };
    }
    var _objGetOwnPropertyDescriptor$1 = ( /*#__PURE__*/_pureAssign(( /*#__PURE__*/_pureRef(ObjClass$1, GET_OWN_PROPERTY_DESCRIPTOR)), _returnNothing));
    var propMap = {
        e: "enumerable",
        c: "configurable",
        v: "value",
        w: "writable",
        g: "get",
        s: "set"
    };
    /*#__NO_SIDE_EFFECTS__*/
    function _createProp(value) {
        var prop = {};
        prop[propMap["c"]] = true;
        prop[propMap["e"]] = true;
        if (value.l) {
            prop.get = function () { return value.l.v; };
            var desc = _objGetOwnPropertyDescriptor$1(value.l, "v");
            if (desc && desc.set) {
                prop.set = function (newValue) {
                    value.l.v = newValue;
                };
            }
        }
        objForEachKey(value, function (key, value) {
            prop[propMap[key]] = isStrictUndefined(value) ? prop[propMap[key]] : value;
        });
        return prop;
    }
    var objDefineProp = ( /*#__PURE__*/_pureRef(ObjClass$1, "defineProperty"));
    var objDefineProperties = ( /*#__PURE__*/_pureRef(ObjClass$1, "defineProperties"));
    function objDefineAccessors(target, prop, getProp, setProp, configurable, enumerable) {
        var desc = {
            e: enumerable,
            c: configurable
        };
        if (getProp) {
            desc.g = getProp;
        }
        if (setProp) {
            desc.s = setProp;
        }
        return objDefineProp(target, prop, _createProp(desc));
    }
    function objDefine(target, key, propDesc) {
        return objDefineProp(target, key, _createProp(propDesc));
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _createKeyValueMap(values, keyType, valueType, completeFn, writable) {
        var theMap = {};
        objForEachKey(values, function (key, value) {
            _assignMapValue(theMap, key, keyType ? value : key);
            _assignMapValue(theMap, value, valueType ? value : key);
        });
        return completeFn ? completeFn(theMap) : theMap;
    }
    function _assignMapValue(theMap, key, value, writable) {
        objDefineProp(theMap, key, {
            value: value,
            enumerable: true,
            writable: false
        });
    }
    var objIsFrozen = ( /*#__PURE__*/_pureAssign(( /*#__PURE__*/_pureRef(ObjClass$1, "isFrozen")), _returnFalse));
    var _objFreeze = ( /*#__PURE__*/_pureRef(ObjClass$1, "freeze"));
    function _doNothing(value) {
        return value;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _getProto(value) {
        _throwIfNullOrUndefined(value);
        return value[__PROTO__] || NULL_VALUE;
    }
    var objAssign = ( /*#__PURE__*/_pureRef(ObjClass$1, "assign"));
    var objKeys = ( /*#__PURE__*/_pureRef(ObjClass$1, "keys"));
    function _deepFreeze(val, visited) {
        if ((isArray(val) || isObject(val) || isFunction(val)) && !objIsFrozen(val)) {
            for (var lp = 0; lp < visited.length; lp++) {
                if (visited[lp] === val) {
                    return val;
                }
            }
            visited.push(val);
            objForEachKey(val, function (_key, propValue) {
                _deepFreeze(propValue, visited);
            });
            objFreeze(val);
        }
        return val;
    }
    function objDeepFreeze(value) {
        return _objFreeze ? _deepFreeze(value, []) : value;
    }
    var objFreeze = ( /*#__PURE__*/_pureAssign(_objFreeze, _doNothing));
    var objSeal = ( /*#__PURE__*/_pureAssign(( /*#__PURE__*/_pureRef(ObjClass$1, "seal")), _doNothing));
    var objGetPrototypeOf = ( /*#__PURE__*/_pureAssign(( /*#__PURE__*/_pureRef(ObjClass$1, "getPrototypeOf")), _getProto));
    /*#__NO_SIDE_EFFECTS__*/
    function createEnum(values) {
        return _createKeyValueMap(values, 1 , 0 , objFreeze);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function createEnumKeyMap(values) {
        return _createKeyValueMap(values, 0 , 0 , objFreeze);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function createSimpleMap(values) {
        var mapClass = {};
        objForEachKey(values, function (key, value) {
            _assignMapValue(mapClass, key, value[1]);
            _assignMapValue(mapClass, value[0], value[1]);
        });
        return objFreeze(mapClass);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function createTypeMap(values) {
        return createSimpleMap(values);
    }
    var _wellKnownSymbolMap = ( /*#__PURE__*/createEnumKeyMap({
        asyncIterator: 0 ,
        hasInstance: 1 ,
        isConcatSpreadable: 2 ,
        iterator: 3 ,
        match: 4 ,
        matchAll: 5 ,
        replace: 6 ,
        search: 7 ,
        species: 8 ,
        split: 9 ,
        toPrimitive: 10 ,
        toStringTag: 11 ,
        unscopables: 12
    }));
    var GLOBAL_CONFIG_KEY = "__tsUtils$gblCfg";
    var _globalCfg;
    /*#__NO_SIDE_EFFECTS__*/
    function _getGlobalValue() {
        var result;
        if (typeof globalThis !== UNDEFINED) {
            result = globalThis;
        }
        if (!result && typeof self !== UNDEFINED) {
            result = self;
        }
        if (!result && typeof window !== UNDEFINED) {
            result = window;
        }
        if (!result && typeof global !== UNDEFINED) {
            result = global;
        }
        return result;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _getGlobalConfig() {
        if (!_globalCfg) {
            var gbl = safe(_getGlobalValue).v || {};
            _globalCfg = gbl[GLOBAL_CONFIG_KEY] = gbl[GLOBAL_CONFIG_KEY] || {};
        }
        return _globalCfg;
    }
    var mathMax = ( /*#__PURE__*/_pureRef(MathCls, "max"));
    var strSlice = ( /*#__PURE__*/_unwrapFunction("slice", StrProto));
    var strSubstring = ( /*#__PURE__*/_unwrapFunction("substring", StrProto));
    var strSubstr = ( /*#__PURE__*/_unwrapFunctionWithPoly("substr", StrProto, polyStrSubstr));
    /*#__NO_SIDE_EFFECTS__*/
    function polyStrSubstr(value, start, length) {
        _throwIfNullOrUndefined(value);
        if (length < 0) {
            return EMPTY;
        }
        start = start || 0;
        if (start < 0) {
            start = mathMax(start + value[LENGTH], 0);
        }
        if (isUndefined(length)) {
            return strSlice(value, start);
        }
        return strSlice(value, start, start + length);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function strLeft(value, count) {
        return strSubstring(value, 0, count);
    }
    function _tagAsPolyfill(target, polyfillTypeName) {
        if (target) {
            safe(function () {
                target[POLYFILL_TAG] = true;
                target[POLYFILL_TYPE_NAME] = polyfillTypeName;
            });
            safe(objDefine, [target, POLYFILL_TAG, {
                    v: true,
                    w: false,
                    e: false
                }]);
            safe(objDefine, [target, POLYFILL_TYPE_NAME, {
                    v: polyfillTypeName,
                    w: false,
                    e: false
                }]);
        }
        return target;
    }
    var objCreate = ( /* #__PURE__*/_pureAssign(( /* #__PURE__*/_pureRef(ObjClass$1, "create")), polyObjCreate));
    /*#__NO_SIDE_EFFECTS__*/
    function polyObjCreate(obj, properties) {
        var newObj = null;
        function tempFunc() { }
        if (!isStrictNullOrUndefined(obj)) {
            var type = typeof obj;
            if (type !== OBJECT && type !== FUNCTION) {
                throwTypeError("Prototype must be an Object or function: " + dumpObj(obj));
            }
            tempFunc[PROTOTYPE] = obj;
            safe(function () {
                tempFunc[__PROTO__] = obj;
            });
            newObj = new tempFunc();
        }
        else {
            newObj = {};
        }
        if (properties) {
            safe(objDefineProperties, [newObj, properties]);
        }
        return newObj;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function utcNow() {
        return (Date.now || polyUtcNow)();
    }
    /*#__NO_SIDE_EFFECTS__*/
    function polyUtcNow() {
        return new Date().getTime();
    }
    function fnApply(fn, thisArg, argArray) {
        return fn.apply(thisArg, argArray);
    }
    var _globalLazyTestHooks;
    function _initTestHooks() {
        _globalLazyTestHooks = _getGlobalConfig();
    }
    /*#__NO_SIDE_EFFECTS__*/
    function getLazy(cb, argArray) {
        var lazyValue = {};
        !_globalLazyTestHooks && _initTestHooks();
        lazyValue.b = _globalLazyTestHooks.lzy;
        objDefineProp(lazyValue, "v", {
            configurable: true,
            get: function () {
                var result = fnApply(cb, null, argArray);
                if (!_globalLazyTestHooks.lzy) {
                    objDefineProp(lazyValue, "v", {
                        value: result
                    });
                }
                lazyValue.b = _globalLazyTestHooks.lzy;
                return result;
            }
        });
        return lazyValue;
    }
    var mathRandom = ( /*#__PURE__*/_pureRef(MathCls, "random"));
    var _uniqueInstanceId = ( /*#__PURE__*/getLazy(function () {
        var value = (utcNow().toString(36).slice(2));
        while (value.length < 16) {
            value += mathRandom().toString(36).slice(2);
        }
        value = value.substring(0, 16);
        return value;
    }));
    var UNIQUE_REGISTRY_ID = "_urid";
    var POLY_SYM = "$nw21sym";
    var _polySymbols;
    var _polyId = 0;
    /*#__NO_SIDE_EFFECTS__*/
    function _globalSymbolRegistry() {
        if (!_polySymbols) {
            var gblCfg = _getGlobalConfig();
            _polySymbols = gblCfg.gblSym = gblCfg.gblSym || { k: {}, s: {} };
        }
        return _polySymbols;
    }
    var _wellKnownSymbolCache;
    /*#__NO_SIDE_EFFECTS__*/
    function polyNewSymbol(description) {
        var uniqueId = "_" + _polyId++ + "_" + _uniqueInstanceId.v;
        var symString = SYMBOL + "(" + description + ")";
        function _setProp(name, value) {
            objDefine(theSymbol, name, {
                v: value,
                e: false,
                w: false
            });
        }
        var theSymbol = objCreate(null);
        _setProp("description", asString(description));
        _setProp(TO_STRING, function () { return symString + POLY_SYM + uniqueId; });
        _setProp("valueOf", function () { return theSymbol; });
        _setProp("v", symString);
        _setProp("_uid", uniqueId);
        return _tagAsPolyfill(theSymbol, "symbol");
    }
    /*#__NO_SIDE_EFFECTS__*/
    function polySymbolFor(key) {
        var registry = _globalSymbolRegistry();
        if (!objHasOwn(registry.k, key)) {
            var newSymbol_1 = polyNewSymbol(key);
            var regId_1 = objKeys(registry.s).length;
            newSymbol_1[UNIQUE_REGISTRY_ID] = function () { return regId_1 + "_" + newSymbol_1[TO_STRING](); };
            registry.k[key] = newSymbol_1;
            registry.s[newSymbol_1[UNIQUE_REGISTRY_ID]()] = asString(key);
        }
        return registry.k[key];
    }
    /*#__NO_SIDE_EFFECTS__*/
    function polyGetKnownSymbol(name) {
        !_wellKnownSymbolCache && (_wellKnownSymbolCache = {});
        var result;
        var knownName = _wellKnownSymbolMap[name];
        if (knownName) {
            result = _wellKnownSymbolCache[knownName] = _wellKnownSymbolCache[knownName] || polyNewSymbol(SYMBOL + "." + knownName);
        }
        return result;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function createCachedValue(value) {
        return objDefineProp({
            toJSON: function () { return value; }
        }, "v", { value: value });
    }
    var WINDOW = "window";
    var _cachedGlobal;
    function _getGlobalInstFn(getFn, theArgs) {
        var cachedValue;
        return function () {
            !_globalLazyTestHooks && _initTestHooks();
            if (!cachedValue || _globalLazyTestHooks.lzy) {
                cachedValue = createCachedValue(safe(getFn, theArgs).v);
            }
            return cachedValue.v;
        };
    }
    function getGlobal(useCached) {
        !_globalLazyTestHooks && _initTestHooks();
        if (!_cachedGlobal || useCached === false || _globalLazyTestHooks.lzy) {
            _cachedGlobal = createCachedValue(safe(_getGlobalValue).v || NULL_VALUE);
        }
        return _cachedGlobal.v;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function getInst(name, useCached) {
        var gbl;
        if (!_cachedGlobal || useCached === false) {
            gbl = getGlobal(useCached);
        }
        else {
            gbl = _cachedGlobal.v;
        }
        if (gbl && gbl[name]) {
            return gbl[name];
        }
        if (name === WINDOW) {
            try {
                return window;
            }
            catch (e) {
            }
        }
        return NULL_VALUE;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function hasDocument() {
        return !!( /*#__PURE__*/getDocument());
    }
    var getDocument = ( /*#__PURE__*/_getGlobalInstFn(getInst, ["document"]));
    /*#__NO_SIDE_EFFECTS__*/
    function hasWindow() {
        return !!( /*#__PURE__*/getWindow());
    }
    var getWindow = ( /*#__PURE__*/_getGlobalInstFn(getInst, [WINDOW]));
    /*#__NO_SIDE_EFFECTS__*/
    function hasNavigator() {
        return !!( /*#__PURE__*/getNavigator());
    }
    var getNavigator = ( /*#__PURE__*/_getGlobalInstFn(getInst, ["navigator"]));
    /*#__NO_SIDE_EFFECTS__*/
    function hasHistory() {
        return !!( /*#__PURE__*/getHistory());
    }
    var getHistory = ( /*#__PURE__*/_getGlobalInstFn(getInst, ["history"]));
    var isNode = ( /*#__PURE__*/_getGlobalInstFn(function () {
        return !!( safe(function () { return (process && (process.versions || {}).node); }).v);
    }));
    var _symbol;
    var _symbolFor;
    /*#__NO_SIDE_EFFECTS__*/
    function _initSymbol() {
        _symbol = ( /*#__PURE__*/createCachedValue(safe((getInst), [SYMBOL]).v));
        return _symbol;
    }
    function _getSymbolKey(key) {
        var gblSym = ((!_globalLazyTestHooks.lzy ? _symbol : 0) || _initSymbol());
        return (gblSym.v ? gblSym.v[key] : UNDEF_VALUE);
    }
    var isSymbol = ( /*#__PURE__*/_createIsWithPoly("symbol"));
    /*#__NO_SIDE_EFFECTS__*/
    function hasSymbol() {
        return !!( /*#__PURE__*/getSymbol());
    }
    /*#__NO_SIDE_EFFECTS__*/
    function getSymbol() {
        !_globalLazyTestHooks && _initTestHooks();
        return ((!_globalLazyTestHooks.lzy ? _symbol : 0) || _initSymbol()).v;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function getKnownSymbol(name, noPoly) {
        var knownName = _wellKnownSymbolMap[name];
        !_globalLazyTestHooks && _initTestHooks();
        var sym = ((!_globalLazyTestHooks.lzy ? _symbol : 0) || _initSymbol());
        return sym.v ? sym.v[knownName || name] : (!noPoly ? polyGetKnownSymbol(name) : UNDEF_VALUE);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function newSymbol(description, noPoly) {
        !_globalLazyTestHooks && _initTestHooks();
        var sym = ((!_globalLazyTestHooks.lzy ? _symbol : 0) || _initSymbol());
        return sym.v ? sym.v(description) : (!noPoly ? polyNewSymbol(description) : NULL_VALUE);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function symbolFor(key) {
        !_globalLazyTestHooks && _initTestHooks();
        _symbolFor = ((!_globalLazyTestHooks.lzy ? _symbolFor : 0) || ( /*#__PURE__*/createCachedValue(safe((_getSymbolKey), ["for"]).v)));
        return (_symbolFor.v || polySymbolFor)(key);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function isIterator(value) {
        return !!value && isFunction(value.next);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function isIterable(value) {
        return !isStrictNullOrUndefined(value) && isFunction(value[getKnownSymbol(3 )]);
    }
    var _iterSymbol$1;
    function iterForOf(iter, callbackfn, thisArg) {
        if (iter) {
            if (!isIterator(iter)) {
                !_iterSymbol$1 && (_iterSymbol$1 = createCachedValue(getKnownSymbol(3 )));
                iter = iter[_iterSymbol$1.v] ? iter[_iterSymbol$1.v]() : NULL_VALUE;
            }
            if (isIterator(iter)) {
                var err = UNDEF_VALUE;
                var iterResult = UNDEF_VALUE;
                try {
                    var count = 0;
                    while (!(iterResult = iter.next()).done) {
                        if (callbackfn[CALL](thisArg || iter, iterResult.value, count, iter) === -1) {
                            break;
                        }
                        count++;
                    }
                }
                catch (failed) {
                    err = { e: failed };
                    if (iter.throw) {
                        iterResult = NULL_VALUE;
                        iter.throw(err);
                    }
                }
                finally {
                    try {
                        if (iterResult && !iterResult.done) {
                            iter.return && iter.return(iterResult);
                        }
                    }
                    finally {
                        if (err) {
                            throw err.e;
                        }
                    }
                }
            }
        }
    }
    function arrAppend(target, elms) {
        if (!isUndefined(elms) && target) {
            if (isArray(elms)) {
                fnApply(target.push, target, elms);
            }
            else if (isIterator(elms) || isIterable(elms)) {
                iterForOf(elms, function (elm) {
                    target.push(elm);
                });
            }
            else {
                target.push(elms);
            }
        }
        return target;
    }
    var arrIndexOf = ( /*#__PURE__*/_unwrapFunction("indexOf", ArrProto));
    var arrMap = ( /*#__PURE__*/_unwrapFunction("map", ArrProto));
    function arrSlice(theArray, start, end) {
        return ((theArray ? theArray["slice"] : NULL_VALUE) || ArrSlice).apply(theArray, ArrSlice[CALL](arguments, 1));
    }
    var arrReduce = ( /*#__PURE__*/_unwrapFunction("reduce", ArrProto));
    var _isProtoArray;
    var objSetPrototypeOf = ( /*#__PURE__*/_pureAssign(( /*#__PURE__*/_pureRef(ObjClass$1, "setPrototypeOf")), _polyObjSetPrototypeOf));
    function _polyObjSetPrototypeOf(obj, proto) {
        var _a;
        !_isProtoArray && (_isProtoArray = createCachedValue((_a = {}, _a[__PROTO__] = [], _a) instanceof Array));
        _isProtoArray.v ? obj[__PROTO__] = proto : objForEachKey(proto, function (key, value) { return obj[key] = value; });
        return obj;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _createCustomError(name, d, b) {
        safe(objDefine, [d, NAME, { v: name, c: true, e: false }]);
        d = objSetPrototypeOf(d, b);
        function __() {
            this[CONSTRUCTOR] = d;
            safe(objDefine, [this, NAME, { v: name, c: true, e: false }]);
        }
        d[PROTOTYPE] = b === NULL_VALUE ? objCreate(b) : (__[PROTOTYPE] = b[PROTOTYPE], new __());
        return d;
    }
    function _setName(baseClass, name) {
        name && (baseClass[NAME] = name);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function createCustomError(name, constructCb, errorBase) {
        var theBaseClass = errorBase || Error;
        var orgName = theBaseClass[PROTOTYPE][NAME];
        var captureFn = Error.captureStackTrace;
        return _createCustomError(name, function () {
            var _this = this;
            var theArgs = arguments;
            try {
                safe(_setName, [theBaseClass, name]);
                var _self = fnApply(theBaseClass, _this, ArrSlice[CALL](theArgs)) || _this;
                if (_self !== _this) {
                    var orgProto = objGetPrototypeOf(_this);
                    if (orgProto !== objGetPrototypeOf(_self)) {
                        objSetPrototypeOf(_self, orgProto);
                    }
                }
                captureFn && captureFn(_self, _this[CONSTRUCTOR]);
                constructCb && constructCb(_self, theArgs);
                return _self;
            }
            finally {
                safe(_setName, [theBaseClass, orgName]);
            }
        }, theBaseClass);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _createTrimFn(exp) {
        return function _doTrim(value) {
            _throwIfNullOrUndefined(value);
            if (value && value.replace) {
                value = value.replace(exp, EMPTY);
            }
            return value;
        };
    }
    var polyStrTrim = ( /*#__PURE__*/_createTrimFn(/^\s+|(?=\s)\s+$/g));
    var strTrim = ( /*#__PURE__*/_unwrapFunctionWithPoly("trim", StrProto, polyStrTrim));
    var mathFloor = ( /*#__PURE__*/_pureRef(MathCls, "floor"));
    var _fnToString;
    var _objCtrFnString;
    var _gblWindow;
    /*#__NO_SIDE_EFFECTS__*/
    function isPlainObject(value) {
        if (!value || typeof value !== OBJECT) {
            return false;
        }
        if (!_gblWindow) {
            _gblWindow = hasWindow() ? getWindow() : true;
        }
        var result = false;
        if (value !== _gblWindow) {
            if (!_objCtrFnString) {
                _fnToString = Function[PROTOTYPE][TO_STRING];
                _objCtrFnString = _fnToString[CALL](ObjClass$1);
            }
            try {
                var proto = objGetPrototypeOf(value);
                result = !proto;
                if (!result) {
                    if (objHasOwnProperty(proto, CONSTRUCTOR)) {
                        proto = proto[CONSTRUCTOR];
                    }
                    result = !!(proto && typeof proto === FUNCTION && _fnToString[CALL](proto) === _objCtrFnString);
                }
            }
            catch (ex) {
            }
        }
        return result;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _defaultDeepCopyHandler(details) {
        details.value && plainObjDeepCopyHandler(details);
        return true;
    }
    var defaultDeepCopyHandlers = [
        arrayDeepCopyHandler,
        plainObjDeepCopyHandler,
        functionDeepCopyHandler,
        dateDeepCopyHandler
    ];
    /*#__NO_SIDE_EFFECTS__*/
    function _getSetVisited(visitMap, source, newPath, cb) {
        var theEntry;
        arrForEach(visitMap, function (entry) {
            if (entry.k === source) {
                theEntry = entry;
                return -1;
            }
        });
        if (!theEntry) {
            theEntry = { k: source, v: source };
            visitMap.push(theEntry);
            cb(theEntry);
        }
        return theEntry.v;
    }
    function _deepCopy(visitMap, value, ctx, key) {
        var userHandler = ctx.handler;
        var newPath = ctx.path ? (key ? ctx.path.concat(key) : ctx.path) : [];
        var newCtx = {
            handler: ctx.handler,
            src: ctx.src,
            path: newPath
        };
        var theType = typeof value;
        var isPlain = false;
        var isPrim = value === NULL_VALUE;
        if (!isPrim) {
            if (value && theType === OBJECT) {
                isPlain = isPlainObject(value);
            }
            else {
                isPrim = isPrimitiveType(theType);
            }
        }
        var details = {
            type: theType,
            isPrim: isPrim,
            isPlain: isPlain,
            value: value,
            result: value,
            path: newPath,
            origin: ctx.src,
            copy: function (source, newKey) {
                return _deepCopy(visitMap, source, newKey ? newCtx : ctx, newKey);
            },
            copyTo: function (target, source) {
                return _copyProps(visitMap, target, source, newCtx);
            }
        };
        if (!details.isPrim) {
            return _getSetVisited(visitMap, value, newPath, function (newEntry) {
                objDefine(details, "result", {
                    g: function () {
                        return newEntry.v;
                    },
                    s: function (newValue) {
                        newEntry.v = newValue;
                    }
                });
                var idx = 0;
                var handler = userHandler;
                while (!(handler || (idx < defaultDeepCopyHandlers.length ? defaultDeepCopyHandlers[idx++] : _defaultDeepCopyHandler))[CALL](ctx, details)) {
                    handler = NULL_VALUE;
                }
            });
        }
        if (userHandler && userHandler[CALL](ctx, details)) {
            return details.result;
        }
        return value;
    }
    function _copyProps(visitMap, target, source, ctx) {
        if (!isNullOrUndefined(source)) {
            for (var key in source) {
                target[key] = _deepCopy(visitMap, source[key], ctx, key);
            }
        }
        return target;
    }
    function objCopyProps(target, source, handler) {
        var ctx = {
            handler: handler,
            src: source,
            path: []
        };
        return _copyProps([], target, source, ctx);
    }
    /*#__NO_SIDE_EFFECTS__*/
    function objDeepCopy(source, handler) {
        var ctx = {
            handler: handler,
            src: source
        };
        return _deepCopy([], source, ctx);
    }
    function arrayDeepCopyHandler(details) {
        var value = details.value;
        if (isArray(value)) {
            var target = details.result = [];
            target.length = value.length;
            details.copyTo(target, value);
            return true;
        }
        return false;
    }
    function dateDeepCopyHandler(details) {
        var value = details.value;
        if (isDate(value)) {
            details.result = new Date(value.getTime());
            return true;
        }
        return false;
    }
    function functionDeepCopyHandler(details) {
        if (details.type === FUNCTION) {
            return true;
        }
        return false;
    }
    function plainObjDeepCopyHandler(details) {
        var value = details.value;
        if (value && details.isPlain) {
            var target = details.result = {};
            details.copyTo(target, value);
            return true;
        }
        return false;
    }
    function _doExtend(target, theArgs) {
        arrForEach(theArgs, function (theArg) {
            objCopyProps(target, theArg);
        });
        return target;
    }
    function deepExtend(target, obj1, obj2, obj3, obj4, obj5, obj6) {
        return _doExtend(objDeepCopy(target) || {}, ArrSlice[CALL](arguments));
    }
    var getLength = ( /*#__PURE__*/_unwrapProp(LENGTH));
    var _perf;
    /*#__NO_SIDE_EFFECTS__*/
    function getPerformance() {
        !_globalLazyTestHooks && _initTestHooks();
        if (!_perf || _globalLazyTestHooks.lzy) {
            _perf = createCachedValue(safe((getInst), ["performance"]).v);
        }
        return _perf.v;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function perfNow() {
        var perf = getPerformance();
        if (perf && perf.now) {
            return perf.now();
        }
        return utcNow();
    }
    var objGetOwnPropertyDescriptor = ( /*#__PURE__*/_pureAssign(( /*#__PURE__*/_pureRef(ObjClass$1, GET_OWN_PROPERTY_DESCRIPTOR)), _returnNothing));
    var strEndsWith = ( /*#__PURE__*/_unwrapFunctionWithPoly("endsWith", StrProto, polyStrEndsWith));
    /*#__NO_SIDE_EFFECTS__*/
    function polyStrEndsWith(value, searchString, length) {
        _throwIfNotString(value);
        var searchValue = isString(searchString) ? searchString : asString(searchString);
        var end = (!isUndefined(length) && length < value[LENGTH]) ? length : value[LENGTH];
        return strSubstring(value, end - searchValue[LENGTH], end) === searchValue;
    }
    var strIndexOf = ( /*#__PURE__*/_unwrapFunction("indexOf", StrProto));
    var strStartsWith = ( /*#__PURE__*/_unwrapFunctionWithPoly("startsWith", StrProto, polyStrStartsWith));
    /*#__NO_SIDE_EFFECTS__*/
    function polyStrStartsWith(value, searchString, position) {
        _throwIfNotString(value);
        var searchValue = isString(searchString) ? searchString : asString(searchString);
        var pos = position > 0 ? position : 0;
        return strSubstring(value, pos, pos + searchValue[LENGTH]) === searchValue;
    }
    var REF = "ref";
    var UNREF = "unref";
    var HAS_REF = "hasRef";
    var ENABLED = "enabled";
    /*#__NO_SIDE_EFFECTS__*/
    function _createTimerHandler(startTimer, refreshFn, cancelFn) {
        var ref = true;
        var timerId = startTimer ? refreshFn(NULL_VALUE) : NULL_VALUE;
        var theTimerHandler;
        function _unref() {
            ref = false;
            timerId && timerId[UNREF] && timerId[UNREF]();
            return theTimerHandler;
        }
        function _cancel() {
            timerId && cancelFn(timerId);
            timerId = NULL_VALUE;
        }
        function _refresh() {
            timerId = refreshFn(timerId);
            if (!ref) {
                _unref();
            }
            return theTimerHandler;
        }
        function _setEnabled(value) {
            !value && timerId && _cancel();
            value && !timerId && _refresh();
        }
        theTimerHandler = {
            cancel: _cancel,
            refresh: _refresh
        };
        theTimerHandler[HAS_REF] = function () {
            if (timerId && timerId[HAS_REF]) {
                return timerId[HAS_REF]();
            }
            return ref;
        };
        theTimerHandler[REF] = function () {
            ref = true;
            timerId && timerId[REF] && timerId[REF]();
            return theTimerHandler;
        };
        theTimerHandler[UNREF] = _unref;
        theTimerHandler = objDefineProp(theTimerHandler, ENABLED, {
            get: function () { return !!timerId; },
            set: _setEnabled
        });
        return {
            h: theTimerHandler,
            dn: function () {
                timerId = NULL_VALUE;
            }
        };
    }
    var _setTimeoutFn;
    var _clearTimeoutFn;
    function _resolveTimeoutFn(timeoutFn) {
        var result = isFunction(timeoutFn) ? timeoutFn : _setTimeoutFn;
        if (!result) {
            var globalOverrides = _getGlobalConfig().tmOut || [];
            if (isArray(globalOverrides) && globalOverrides.length > 0 && isFunction(globalOverrides[0])) {
                result = globalOverrides[0];
            }
        }
        return result || setTimeout;
    }
    function _resolveClearTimeoutFn(timeoutFn) {
        var result = isFunction(timeoutFn) ? timeoutFn : _clearTimeoutFn;
        if (!result) {
            var globalOverrides = _getGlobalConfig().tmOut || [];
            if (isArray(globalOverrides) && globalOverrides.length > 1 && isFunction(globalOverrides[1])) {
                result = globalOverrides[1];
            }
        }
        return result || clearTimeout;
    }
    function _createTimeoutWith(startTimer, overrideFn, theArgs) {
        var isArr = isArray(overrideFn);
        var len = isArr ? overrideFn.length : 0;
        var setFn = _resolveTimeoutFn(len > 0 ? overrideFn[0] : (!isArr ? overrideFn : UNDEF_VALUE));
        var clearFn = _resolveClearTimeoutFn(len > 1 ? overrideFn[1] : UNDEF_VALUE);
        var timerFn = theArgs[0];
        theArgs[0] = function () {
            handler.dn();
            fnApply(timerFn, UNDEF_VALUE, ArrSlice[CALL](arguments));
        };
        var handler = _createTimerHandler(startTimer, function (timerId) {
            if (timerId) {
                if (timerId.refresh) {
                    timerId.refresh();
                    return timerId;
                }
                fnApply(clearFn, UNDEF_VALUE, [timerId]);
            }
            return fnApply(setFn, UNDEF_VALUE, theArgs);
        }, function (timerId) {
            fnApply(clearFn, UNDEF_VALUE, [timerId]);
        });
        return handler.h;
    }
    function scheduleTimeout(callback, timeout) {
        return _createTimeoutWith(true, UNDEF_VALUE, ArrSlice[CALL](arguments));
    }
    function createTimeout(callback, timeout) {
        return _createTimeoutWith(false, UNDEF_VALUE, ArrSlice[CALL](arguments));
    }

    var createEnumStyle = createEnum;
    var createValueMap = createTypeMap;

    var EventsDiscardedReason = ( /* @__PURE__ */createEnumStyle({
        Unknown: 0 ,
        NonRetryableStatus: 1 ,
        InvalidEvent: 2 ,
        SizeLimitExceeded: 3 ,
        KillSwitch: 4 ,
        QueueFull: 5
    }));
    var BatchDiscardedReason = ( /* @__PURE__ */createEnumStyle({
        Unknown: 0 ,
        NonRetryableStatus: 1 ,
        CleanStorage: 2 ,
        MaxInStorageTimeExceeded: 3
    }));

    var ActiveStatus = ( /* @__PURE__ */createEnumStyle({
        NONE: 0 ,
        PENDING: 3 ,
        INACTIVE: 1 ,
        ACTIVE: 2
    }));

    var _DYN_TO_LOWER_CASE = "toLowerCase";
    var _DYN_LENGTH = "length";
    var _DYN_WARN_TO_CONSOLE = "warnToConsole";
    var _DYN_THROW_INTERNAL = "throwInternal";
    var _DYN_WATCH = "watch";
    var _DYN_APPLY = "apply";
    var _DYN_PUSH = "push";
    var _DYN_SPLICE = "splice";
    var _DYN_LOGGER = "logger";
    var _DYN_CANCEL = "cancel";
    var _DYN_INITIALIZE = "initialize";
    var _DYN_IDENTIFIER = "identifier";
    var _DYN_REMOVE_NOTIFICATION_0 = "removeNotificationListener";
    var _DYN_ADD_NOTIFICATION_LIS1 = "addNotificationListener";
    var _DYN_IS_INITIALIZED = "isInitialized";
    var _DYN_GET_NOTIFY_MGR = "getNotifyMgr";
    var _DYN_GET_PLUGIN = "getPlugin";
    var _DYN_NAME = "name";
    var _DYN_PROCESS_NEXT = "processNext";
    var _DYN_GET_PROCESS_TEL_CONT2 = "getProcessTelContext";
    var _DYN_VALUE = "value";
    var _DYN_ENABLED = "enabled";
    var _DYN_STOP_POLLING_INTERNA3 = "stopPollingInternalLogs";
    var _DYN_UNLOAD = "unload";
    var _DYN_ON_COMPLETE = "onComplete";
    var _DYN_VERSION = "version";
    var _DYN_LOGGING_LEVEL_CONSOL4 = "loggingLevelConsole";
    var _DYN_CREATE_NEW = "createNew";
    var _DYN_TEARDOWN = "teardown";
    var _DYN_MESSAGE_ID = "messageId";
    var _DYN_MESSAGE = "message";
    var _DYN_DIAG_LOG = "diagLog";
    var _DYN__DO_TEARDOWN = "_doTeardown";
    var _DYN_UPDATE = "update";
    var _DYN_GET_NEXT = "getNext";
    var _DYN_SET_NEXT_PLUGIN = "setNextPlugin";
    var _DYN_USER_AGENT = "userAgent";
    var _DYN_SPLIT = "split";
    var _DYN_REPLACE = "replace";
    var _DYN_SUBSTRING = "substring";
    var _DYN_INDEX_OF = "indexOf";
    var _DYN_TYPE = "type";
    var _DYN_EVT_NAME = "evtName";
    var _DYN_STATUS = "status";
    var _DYN_GET_ALL_RESPONSE_HEA5 = "getAllResponseHeaders";
    var _DYN_IS_CHILD_EVT = "isChildEvt";
    var _DYN_DATA = "data";
    var _DYN_GET_CTX = "getCtx";
    var _DYN_SET_CTX = "setCtx";
    var _DYN_ITEMS_RECEIVED = "itemsReceived";
    var _DYN_HEADERS = "headers";
    var _DYN_URL_STRING = "urlString";
    var _DYN_TIMEOUT = "timeout";
    var _DYN_TRACE_FLAGS = "traceFlags";
    var _DYN_GET_ATTRIBUTE = "getAttribute";

    var aggregationErrorType;
    function throwAggregationError(message, sourceErrors) {
        if (!aggregationErrorType) {
            aggregationErrorType = createCustomError("AggregationError", function (self, args) {
                if (args[_DYN_LENGTH ] > 1) {
                    self.errors = args[1];
                }
            });
        }
        var theMessage = message || "One or more errors occurred.";
        arrForEach(sourceErrors, function (srcError, idx) {
            theMessage += "\n".concat(idx, " > ").concat(dumpObj(srcError));
        });
        throw new aggregationErrorType(theMessage, sourceErrors || []);
    }

    var strShimFunction = "function";
    var strShimObject = "object";
    var strShimUndefined = "undefined";
    var strShimPrototype = "prototype";
    var ObjClass = Object;

    (getGlobal() || {})["Symbol"];
    (getGlobal() || {})["Reflect"];
    var strHasOwnProperty = "hasOwnProperty";
    var extendStaticsFn = function (d, b) {
        extendStaticsFn = ObjClass["setPrototypeOf"] ||
            ({ __proto__: [] } instanceof Array && function (d, b) {
                d.__proto__ = b;
            }) ||
            function (d, b) {
                for (var p in b) {
                    if (b[strHasOwnProperty](p)) {
                        d[p] = b[p];
                    }
                }
            };
        return extendStaticsFn(d, b);
    };
    function __extendsFn(d, b) {
        if (typeof b !== strShimFunction && b !== null) {
            throwTypeError("Class extends value " + String(b) + " is not a constructor or null");
        }
        extendStaticsFn(d, b);
        function __() {
            this.constructor = d;
        }
        d[strShimPrototype] = b === null ? objCreate(b) : (__[strShimPrototype] = b[strShimPrototype], new __());
    }
    function __spreadArrayFn(to, from) {
        for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) {
            to[j] = from[i];
        }
        return to;
    }

    var _a$4;
    var Constructor = 'constructor';
    var Prototype = 'prototype';
    var strFunction = 'function';
    var DynInstFuncTable = '_dynInstFuncs';
    var DynProxyTag = '_isDynProxy';
    var DynClassName = '_dynClass';
    var DynClassNamePrefix = '_dynCls$';
    var DynInstChkTag = '_dynInstChk';
    var DynAllowInstChkTag = DynInstChkTag;
    var DynProtoDefaultOptions = '_dfOpts';
    var UnknownValue = '_unknown_';
    var str__Proto = "__proto__";
    var DynProtoBaseProto = "_dyn" + str__Proto;
    var DynProtoGlobalSettings = "__dynProto$Gbl";
    var DynProtoCurrent = "_dynInstProto";
    var strUseBaseInst = 'useBaseInst';
    var strSetInstFuncs = 'setInstFuncs';
    var Obj = Object;
    var _objGetPrototypeOf = Obj["getPrototypeOf"];
    var _objGetOwnProps = Obj["getOwnPropertyNames"];
    var _gbl = getGlobal();
    var _gblInst = _gbl[DynProtoGlobalSettings] || (_gbl[DynProtoGlobalSettings] = {
        o: (_a$4 = {},
            _a$4[strSetInstFuncs] = true,
            _a$4[strUseBaseInst] = true,
            _a$4),
        n: 1000
    });
    function _isObjectOrArrayPrototype(target) {
        return target && (target === Obj[Prototype] || target === Array[Prototype]);
    }
    function _isObjectArrayOrFunctionPrototype(target) {
        return _isObjectOrArrayPrototype(target) || target === Function[Prototype];
    }
    function _getObjProto$1(target) {
        var newProto;
        if (target) {
            if (_objGetPrototypeOf) {
                return _objGetPrototypeOf(target);
            }
            var curProto = target[str__Proto] || target[Prototype] || (target[Constructor] ? target[Constructor][Prototype] : null);
            newProto = target[DynProtoBaseProto] || curProto;
            if (!objHasOwnProperty(target, DynProtoBaseProto)) {
                delete target[DynProtoCurrent];
                newProto = target[DynProtoBaseProto] = target[DynProtoCurrent] || target[DynProtoBaseProto];
                target[DynProtoCurrent] = curProto;
            }
        }
        return newProto;
    }
    function _forEachProp(target, func) {
        var props = [];
        if (_objGetOwnProps) {
            props = _objGetOwnProps(target);
        }
        else {
            for (var name_1 in target) {
                if (typeof name_1 === "string" && objHasOwnProperty(target, name_1)) {
                    props.push(name_1);
                }
            }
        }
        if (props && props.length > 0) {
            for (var lp = 0; lp < props.length; lp++) {
                func(props[lp]);
            }
        }
    }
    function _isDynamicCandidate(target, funcName, skipOwn) {
        return (funcName !== Constructor && typeof target[funcName] === strFunction && (skipOwn || objHasOwnProperty(target, funcName)) && funcName !== str__Proto && funcName !== Prototype);
    }
    function _throwTypeError(message) {
        throwTypeError("DynamicProto: " + message);
    }
    function _getInstanceFuncs(thisTarget) {
        var instFuncs = objCreate(null);
        _forEachProp(thisTarget, function (name) {
            if (!instFuncs[name] && _isDynamicCandidate(thisTarget, name, false)) {
                instFuncs[name] = thisTarget[name];
            }
        });
        return instFuncs;
    }
    function _hasVisited(values, value) {
        for (var lp = values.length - 1; lp >= 0; lp--) {
            if (values[lp] === value) {
                return true;
            }
        }
        return false;
    }
    function _getBaseFuncs(classProto, thisTarget, instFuncs, useBaseInst) {
        function _instFuncProxy(target, funcHost, funcName) {
            var theFunc = funcHost[funcName];
            if (theFunc[DynProxyTag] && useBaseInst) {
                var instFuncTable = target[DynInstFuncTable] || {};
                if (instFuncTable[DynAllowInstChkTag] !== false) {
                    theFunc = (instFuncTable[funcHost[DynClassName]] || {})[funcName] || theFunc;
                }
            }
            return function () {
                return theFunc.apply(target, arguments);
            };
        }
        var baseFuncs = objCreate(null);
        _forEachProp(instFuncs, function (name) {
            baseFuncs[name] = _instFuncProxy(thisTarget, instFuncs, name);
        });
        var baseProto = _getObjProto$1(classProto);
        var visited = [];
        while (baseProto && !_isObjectArrayOrFunctionPrototype(baseProto) && !_hasVisited(visited, baseProto)) {
            _forEachProp(baseProto, function (name) {
                if (!baseFuncs[name] && _isDynamicCandidate(baseProto, name, !_objGetPrototypeOf)) {
                    baseFuncs[name] = _instFuncProxy(thisTarget, baseProto, name);
                }
            });
            visited.push(baseProto);
            baseProto = _getObjProto$1(baseProto);
        }
        return baseFuncs;
    }
    function _getInstFunc(target, funcName, proto, currentDynProtoProxy) {
        var instFunc = null;
        if (target && objHasOwnProperty(proto, DynClassName)) {
            var instFuncTable = target[DynInstFuncTable] || objCreate(null);
            instFunc = (instFuncTable[proto[DynClassName]] || objCreate(null))[funcName];
            if (!instFunc) {
                _throwTypeError("Missing [" + funcName + "] " + strFunction);
            }
            if (!instFunc[DynInstChkTag] && instFuncTable[DynAllowInstChkTag] !== false) {
                var canAddInst = !objHasOwnProperty(target, funcName);
                var objProto = _getObjProto$1(target);
                var visited = [];
                while (canAddInst && objProto && !_isObjectArrayOrFunctionPrototype(objProto) && !_hasVisited(visited, objProto)) {
                    var protoFunc = objProto[funcName];
                    if (protoFunc) {
                        canAddInst = (protoFunc === currentDynProtoProxy);
                        break;
                    }
                    visited.push(objProto);
                    objProto = _getObjProto$1(objProto);
                }
                try {
                    if (canAddInst) {
                        target[funcName] = instFunc;
                    }
                    instFunc[DynInstChkTag] = 1;
                }
                catch (e) {
                    instFuncTable[DynAllowInstChkTag] = false;
                }
            }
        }
        return instFunc;
    }
    function _getProtoFunc(funcName, proto, currentDynProtoProxy) {
        var protoFunc = proto[funcName];
        if (protoFunc === currentDynProtoProxy) {
            protoFunc = _getObjProto$1(proto)[funcName];
        }
        if (typeof protoFunc !== strFunction) {
            _throwTypeError("[" + funcName + "] is not a " + strFunction);
        }
        return protoFunc;
    }
    function _populatePrototype(proto, className, target, baseInstFuncs, setInstanceFunc) {
        function _createDynamicPrototype(proto, funcName) {
            var dynProtoProxy = function () {
                var instFunc = _getInstFunc(this, funcName, proto, dynProtoProxy) || _getProtoFunc(funcName, proto, dynProtoProxy);
                return instFunc.apply(this, arguments);
            };
            dynProtoProxy[DynProxyTag] = 1;
            return dynProtoProxy;
        }
        if (!_isObjectOrArrayPrototype(proto)) {
            var instFuncTable = target[DynInstFuncTable] = target[DynInstFuncTable] || objCreate(null);
            if (!_isObjectOrArrayPrototype(instFuncTable)) {
                var instFuncs_1 = instFuncTable[className] = (instFuncTable[className] || objCreate(null));
                if (instFuncTable[DynAllowInstChkTag] !== false) {
                    instFuncTable[DynAllowInstChkTag] = !!setInstanceFunc;
                }
                if (!_isObjectOrArrayPrototype(instFuncs_1)) {
                    _forEachProp(target, function (name) {
                        if (_isDynamicCandidate(target, name, false) && target[name] !== baseInstFuncs[name]) {
                            instFuncs_1[name] = target[name];
                            delete target[name];
                            if (!objHasOwnProperty(proto, name) || (proto[name] && !proto[name][DynProxyTag])) {
                                proto[name] = _createDynamicPrototype(proto, name);
                            }
                        }
                    });
                }
            }
        }
    }
    function _checkPrototype(classProto, thisTarget) {
        if (_objGetPrototypeOf) {
            var visited = [];
            var thisProto = _getObjProto$1(thisTarget);
            while (thisProto && !_isObjectArrayOrFunctionPrototype(thisProto) && !_hasVisited(visited, thisProto)) {
                if (thisProto === classProto) {
                    return true;
                }
                visited.push(thisProto);
                thisProto = _getObjProto$1(thisProto);
            }
            return false;
        }
        return true;
    }
    function _getObjName(target, unknownValue) {
        if (objHasOwnProperty(target, Prototype)) {
            return target.name || unknownValue || UnknownValue;
        }
        return (((target || {})[Constructor]) || {}).name || unknownValue || UnknownValue;
    }
    function dynamicProto(theClass, target, delegateFunc, options) {
        if (!objHasOwnProperty(theClass, Prototype)) {
            _throwTypeError("theClass is an invalid class definition.");
        }
        var classProto = theClass[Prototype];
        if (!_checkPrototype(classProto, target)) {
            _throwTypeError("[" + _getObjName(theClass) + "] not in hierarchy of [" + _getObjName(target) + "]");
        }
        var className = null;
        if (objHasOwnProperty(classProto, DynClassName)) {
            className = classProto[DynClassName];
        }
        else {
            className = DynClassNamePrefix + _getObjName(theClass, "_") + "$" + _gblInst.n;
            _gblInst.n++;
            classProto[DynClassName] = className;
        }
        var perfOptions = dynamicProto[DynProtoDefaultOptions];
        var useBaseInst = !!perfOptions[strUseBaseInst];
        if (useBaseInst && options && options[strUseBaseInst] !== undefined) {
            useBaseInst = !!options[strUseBaseInst];
        }
        var instFuncs = _getInstanceFuncs(target);
        var baseFuncs = _getBaseFuncs(classProto, target, instFuncs, useBaseInst);
        delegateFunc(target, baseFuncs);
        var setInstanceFunc = !!_objGetPrototypeOf && !!perfOptions[strSetInstFuncs];
        if (setInstanceFunc && options) {
            setInstanceFunc = !!options[strSetInstFuncs];
        }
        _populatePrototype(classProto, className, target, instFuncs, setInstanceFunc !== false);
    }
    dynamicProto[DynProtoDefaultOptions] = _gblInst.o;

    /*!
     * NevWare21 Solutions LLC - ts-async, 0.5.4
     * https://github.com/nevware21/ts-async
     * Copyright (c) NevWare21 Solutions LLC and contributors. All rights reserved.
     * Licensed under the MIT license.
     */
    var STR_PROMISE = "Promise";
    var REJECTED = "rejected";
    function doAwaitResponse(value, cb) {
        return doAwait(value, function (value) {
            return cb ? cb({
                status: "fulfilled",
                rejected: false,
                value: value
            }) : value;
        }, function (reason) {
            return cb ? cb({
                status: REJECTED,
                rejected: true,
                reason: reason
            }) : reason;
        });
    }
    function doAwait(value, resolveFn, rejectFn, finallyFn) {
        var result = value;
        try {
            if (isPromiseLike(value)) {
                if (resolveFn || rejectFn) {
                    result = value.then(resolveFn, rejectFn);
                }
            }
            else {
                try {
                    if (resolveFn) {
                        result = resolveFn(value);
                    }
                }
                catch (err) {
                    if (rejectFn) {
                        result = rejectFn(err);
                    }
                    else {
                        throw err;
                    }
                }
            }
        }
        finally {
            if (finallyFn) {
                doFinally(result, finallyFn);
            }
        }
        return result;
    }
    function doFinally(value, finallyFn) {
        var result = value;
        if (finallyFn) {
            if (isPromiseLike(value)) {
                if (value.finally) {
                    result = value.finally(finallyFn);
                }
                else {
                    result = value.then(function (value) {
                        finallyFn();
                        return value;
                    }, function (reason) {
                        finallyFn();
                        throw reason;
                    });
                }
            }
            else {
                finallyFn();
            }
        }
        return result;
    }
    var STRING_STATES =  [
        "pending", "resolving", "resolved", REJECTED
    ];
    var DISPATCH_EVENT = "dispatchEvent";
    var _hasInitEvent;
    function _hasInitEventFn(doc) {
        var evt;
        if (doc && doc.createEvent) {
            evt = doc.createEvent("Event");
        }
        return (!!evt && evt.initEvent);
    }
    function emitEvent(target, evtName, populateEvent, useNewEvent) {
        var doc = getDocument();
        !_hasInitEvent && (_hasInitEvent = createCachedValue(!!safe(_hasInitEventFn, [doc]).v));
        var theEvt = _hasInitEvent.v ? doc.createEvent("Event") : (useNewEvent ? new Event(evtName) : {});
        populateEvent && populateEvent(theEvt);
        if (_hasInitEvent.v) {
            theEvt.initEvent(evtName, false, true);
        }
        if (theEvt && target[DISPATCH_EVENT]) {
            target[DISPATCH_EVENT](theEvt);
        }
        else {
            var handler = target["on" + evtName];
            if (handler) {
                handler(theEvt);
            }
            else {
                var theConsole = getInst("console");
                theConsole && (theConsole["error"] || theConsole["log"])(evtName, dumpObj(theEvt));
            }
        }
    }
    var NODE_UNHANDLED_REJECTION = "unhandledRejection";
    var UNHANDLED_REJECTION = NODE_UNHANDLED_REJECTION.toLowerCase();
    var _unhandledRejectionTimeout = 10;
    var _hasPromiseRejectionEvent;
    function dumpFnObj(value) {
        if (isFunction(value)) {
            return value.toString();
        }
        return dumpObj(value);
    }
    function _createPromise(newPromise, processor, executor) {
        var additionalArgs = arrSlice(arguments, 3);
        var _state = 0 ;
        var _hasResolved = false;
        var _settledValue;
        var _queue = [];
        var _handled = false;
        var _unHandledRejectionHandler = null;
        var _thePromise;
        function _then(onResolved, onRejected) {
            try {
                _handled = true;
                _unHandledRejectionHandler && _unHandledRejectionHandler.cancel();
                _unHandledRejectionHandler = null;
                var thenPromise = newPromise(function (resolve, reject) {
                    _queue.push(function () {
                        try {
                            var handler = _state === 2  ? onResolved : onRejected;
                            var value = isUndefined(handler) ? _settledValue : (isFunction(handler) ? handler(_settledValue) : handler);
                            if (isPromiseLike(value)) {
                                value.then(resolve, reject);
                            }
                            else if (handler) {
                                resolve(value);
                            }
                            else if (_state === 3 ) {
                                reject(value);
                            }
                            else {
                                resolve(value);
                            }
                        }
                        catch (e) {
                            reject(e);
                        }
                    });
                    if (_hasResolved) {
                        _processQueue();
                    }
                }, additionalArgs);
                return thenPromise;
            }
            finally {
            }
        }
        function _catch(onRejected) {
            return _then(undefined, onRejected);
        }
        function _finally(onFinally) {
            var thenFinally = onFinally;
            var catchFinally = onFinally;
            if (isFunction(onFinally)) {
                thenFinally = function (value) {
                    onFinally && onFinally();
                    return value;
                };
                catchFinally = function (reason) {
                    onFinally && onFinally();
                    throw reason;
                };
            }
            return _then(thenFinally, catchFinally);
        }
        function _strState() {
            return STRING_STATES[_state];
        }
        function _processQueue() {
            if (_queue.length > 0) {
                var pending = _queue.slice();
                _queue = [];
                _handled = true;
                _unHandledRejectionHandler && _unHandledRejectionHandler.cancel();
                _unHandledRejectionHandler = null;
                processor(pending);
            }
        }
        function _createSettleIfFn(newState, allowState) {
            return function (theValue) {
                if (_state === allowState) {
                    if (newState === 2  && isPromiseLike(theValue)) {
                        _state = 1 ;
                        theValue.then(_createSettleIfFn(2 , 1 ), _createSettleIfFn(3 , 1 ));
                        return;
                    }
                    _state = newState;
                    _hasResolved = true;
                    _settledValue = theValue;
                    _processQueue();
                    if (!_handled && newState === 3  && !_unHandledRejectionHandler) {
                        _unHandledRejectionHandler = scheduleTimeout(_notifyUnhandledRejection, _unhandledRejectionTimeout);
                    }
                }
            };
        }
        function _notifyUnhandledRejection() {
            if (!_handled) {
                _handled = true;
                if (isNode()) {
                    process.emit(NODE_UNHANDLED_REJECTION, _settledValue, _thePromise);
                }
                else {
                    var gbl = getWindow() || getGlobal();
                    !_hasPromiseRejectionEvent && (_hasPromiseRejectionEvent = createCachedValue(safe((getInst), [STR_PROMISE + "RejectionEvent"]).v));
                    emitEvent(gbl, UNHANDLED_REJECTION, function (theEvt) {
                        objDefine(theEvt, "promise", { g: function () { return _thePromise; } });
                        theEvt.reason = _settledValue;
                        return theEvt;
                    }, !!_hasPromiseRejectionEvent.v);
                }
            }
        }
        _thePromise = {
            then: _then,
            "catch": _catch,
            finally: _finally
        };
        objDefineProp(_thePromise, "state", {
            get: _strState
        });
        if (hasSymbol()) {
            _thePromise[getKnownSymbol(11 )] = "IPromise";
        }
        function _toString() {
            return "IPromise" + ("") + " " + _strState() + (_hasResolved ? (" - " + dumpFnObj(_settledValue)) : "") + ("");
        }
        _thePromise.toString = _toString;
        (function _initialize() {
            if (!isFunction(executor)) {
                throwTypeError(STR_PROMISE + ": executor is not a function - " + dumpFnObj(executor));
            }
            var _rejectFn = _createSettleIfFn(3 , 0 );
            try {
                executor.call(_thePromise, _createSettleIfFn(2 , 0 ), _rejectFn);
            }
            catch (e) {
                _rejectFn(e);
            }
        })();
        return _thePromise;
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _createAllPromise(newPromise) {
        return function (input) {
            var additionalArgs = arrSlice(arguments, 1);
            return newPromise(function (resolve, reject) {
                try {
                    var values_1 = [];
                    var pending_1 = 1;
                    iterForOf(input, function (item, idx) {
                        if (item) {
                            pending_1++;
                            doAwait(item, function (value) {
                                values_1[idx] = value;
                                if (--pending_1 === 0) {
                                    resolve(values_1);
                                }
                            }, reject);
                        }
                    });
                    pending_1--;
                    if (pending_1 === 0) {
                        resolve(values_1);
                    }
                }
                catch (e) {
                    reject(e);
                }
            }, additionalArgs);
        };
    }
    /*#__NO_SIDE_EFFECTS__*/
    function _createAllSettledPromise(newPromise) {
        return createCachedValue(function (input) {
            var additionalArgs = arrSlice(arguments, 1);
            return newPromise(function (resolve, reject) {
                var values = [];
                var pending = 1;
                function processItem(item, idx) {
                    pending++;
                    doAwaitResponse(item, function (value) {
                        if (value.rejected) {
                            values[idx] = {
                                status: REJECTED,
                                reason: value.reason
                            };
                        }
                        else {
                            values[idx] = {
                                status: "fulfilled",
                                value: value.value
                            };
                        }
                        if (--pending === 0) {
                            resolve(values);
                        }
                    });
                }
                try {
                    if (isArray(input)) {
                        arrForEach(input, processItem);
                    }
                    else if (isIterable(input)) {
                        iterForOf(input, processItem);
                    }
                    else {
                        throwTypeError("Input is not an iterable");
                    }
                    pending--;
                    if (pending === 0) {
                        resolve(values);
                    }
                }
                catch (e) {
                    reject(e);
                }
            }, additionalArgs);
        });
    }
    function syncItemProcessor(pending) {
        arrForEach(pending, function (fn) {
            try {
                fn();
            }
            catch (e) {
            }
        });
    }
    function timeoutItemProcessor(timeout) {
        var callbackTimeout = isNumber(timeout) ? timeout : 0;
        return function (pending) {
            scheduleTimeout(function () {
                syncItemProcessor(pending);
            }, callbackTimeout);
        };
    }
    function createAsyncPromise(executor, timeout) {
        return _createPromise(createAsyncPromise, timeoutItemProcessor(timeout), executor, timeout);
    }
    var _promiseCls;
    function createNativePromise(executor, timeout) {
        !_promiseCls && (_promiseCls = createCachedValue((safe(getInst, [STR_PROMISE]).v) || null));
        var PrmCls = _promiseCls.v;
        if (!PrmCls) {
            return createAsyncPromise(executor);
        }
        if (!isFunction(executor)) {
            throwTypeError(STR_PROMISE + ": executor is not a function - " + dumpObj(executor));
        }
        var _state = 0 ;
        function _strState() {
            return STRING_STATES[_state];
        }
        var thePromise = new PrmCls(function (resolve, reject) {
            function _resolve(value) {
                _state = 2 ;
                resolve(value);
            }
            function _reject(reason) {
                _state = 3 ;
                reject(reason);
            }
            executor(_resolve, _reject);
        });
        objDefineProp(thePromise, "state", {
            get: _strState
        });
        return thePromise;
    }
    var _allSyncSettledCreator;
    function createSyncPromise(executor) {
        return _createPromise(createSyncPromise, syncItemProcessor, executor);
    }
    function createSyncAllSettledPromise(input, timeout) {
        !_allSyncSettledCreator && (_allSyncSettledCreator = _createAllSettledPromise(createSyncPromise));
        return _allSyncSettledCreator.v(input, timeout);
    }
    var _promiseCreator;
    function createPromise(executor, timeout) {
        !_promiseCreator && (_promiseCreator = createCachedValue(createNativePromise));
        return _promiseCreator.v.call(this, executor, timeout);
    }
    var createAllPromise = /*#__PURE__*/ _createAllPromise(createPromise);

    var UNDEFINED_VALUE = undefined;
    var STR_EMPTY$1 = "";
    var STR_CHANNELS = "channels";
    var STR_CORE = "core";
    var STR_CREATE_PERF_MGR = "createPerfMgr";
    var STR_DISABLED = "disabled";
    var STR_EXTENSION_CONFIG = "extensionConfig";
    var STR_EXTENSIONS = "extensions";
    var STR_PROCESS_TELEMETRY = "processTelemetry";
    var STR_PRIORITY = "priority";
    var STR_EVENTS_SENT = "eventsSent";
    var STR_EVENTS_DISCARDED = "eventsDiscarded";
    var STR_EVENTS_SEND_REQUEST = "eventsSendRequest";
    var STR_PERF_EVENT = "perfEvent";
    var STR_OFFLINE_STORE = "offlineEventsStored";
    var STR_OFFLINE_SENT = "offlineBatchSent";
    var STR_OFFLINE_DROP = "offlineBatchDrop";
    var STR_GET_PERF_MGR = "getPerfMgr";
    var STR_DOMAIN = "domain";
    var STR_PATH = "path";
    var STR_NOT_DYNAMIC_ERROR = "Not dynamic - ";
    var STR_REDACTED = "REDACTED";
    var DEFAULT_SENSITIVE_PARAMS = ["sig", "Signature", "AWSAccessKeyId", "X-Goog-Signature"];

    var strGetPrototypeOf = "getPrototypeOf";
    var rCamelCase = /-([a-z])/g;
    var rNormalizeInvalid = /([^\w\d_$])/g;
    var rLeadingNumeric = /^(\d+[\w\d_$])/;
    var _getObjProto = Object[strGetPrototypeOf];
    function isNotUndefined(value) {
        return !isUndefined(value);
    }
    function isNotNullOrUndefined(value) {
        return !isNullOrUndefined(value);
    }
    function normalizeJsName(name) {
        var value = name;
        if (value && isString(value)) {
            value = value[_DYN_REPLACE ](rCamelCase, function (_all, letter) {
                return letter.toUpperCase();
            });
            value = value[_DYN_REPLACE ](rNormalizeInvalid, "_");
            value = value[_DYN_REPLACE ](rLeadingNumeric, function (_all, match) {
                return "_" + match;
            });
        }
        return value;
    }
    function strContains(value, search) {
        if (value && search) {
            return strIndexOf(value, search) !== -1;
        }
        return false;
    }
    function toISOString(date) {
        return date && date.toISOString() || "";
    }
    function getExceptionName(object) {
        if (isError(object)) {
            return object[_DYN_NAME ];
        }
        return STR_EMPTY$1;
    }
    function setValue(target, field, value, valChk, srcChk) {
        var theValue = value;
        if (target) {
            theValue = target[field];
            if (theValue !== value && (!srcChk || srcChk(theValue)) && (!valChk || valChk(value))) {
                theValue = value;
                target[field] = theValue;
            }
        }
        return theValue;
    }
    function getSetValue(target, field, defValue) {
        var theValue;
        if (target) {
            theValue = target[field];
            if (!theValue && isNullOrUndefined(theValue)) {
                theValue = !isUndefined(defValue) ? defValue : {};
                target[field] = theValue;
            }
        }
        else {
            theValue = !isUndefined(defValue) ? defValue : {};
        }
        return theValue;
    }
    function _createProxyFunction(source, funcName) {
        var srcFunc = null;
        var src = null;
        if (isFunction(source)) {
            srcFunc = source;
        }
        else {
            src = source;
        }
        return function () {
            var originalArguments = arguments;
            if (srcFunc) {
                src = srcFunc();
            }
            if (src) {
                return src[funcName][_DYN_APPLY ](src, originalArguments);
            }
        };
    }
    function proxyAssign(target, source, chkSet) {
        if (target && source && isObject(target) && isObject(source)) {
            var _loop_1 = function (field) {
                if (isString(field)) {
                    var value = source[field];
                    if (isFunction(value)) {
                        if (!chkSet || chkSet(field, true, source, target)) {
                            target[field] = _createProxyFunction(source, field);
                        }
                    }
                    else if (!chkSet || chkSet(field, false, source, target)) {
                        if (objHasOwn(target, field)) {
                            delete target[field];
                        }
                        objDefine(target, field, {
                            g: function () {
                                return source[field];
                            },
                            s: function (theValue) {
                                source[field] = theValue;
                            }
                        });
                    }
                }
            };
            for (var field in source) {
                _loop_1(field);
            }
        }
        return target;
    }
    function proxyFunctionAs(target, name, source, theFunc, overwriteTarget) {
        if (target && name && source) {
            if (overwriteTarget !== false || isUndefined(target[name])) {
                target[name] = _createProxyFunction(source, theFunc);
            }
        }
    }
    function proxyFunctions(target, source, functionsToProxy, overwriteTarget) {
        if (target && source && isObject(target) && isArray(functionsToProxy)) {
            arrForEach(functionsToProxy, function (theFuncName) {
                if (isString(theFuncName)) {
                    proxyFunctionAs(target, theFuncName, source, theFuncName, overwriteTarget);
                }
            });
        }
        return target;
    }
    function createClassFromInterface(defaults) {
        return /** @class */ (function () {
            function class_1() {
                var _this = this;
                if (defaults) {
                    objForEachKey(defaults, function (field, value) {
                        _this[field] = value;
                    });
                }
            }
            return class_1;
        }());
    }
    function optimizeObject(theObject) {
        if (theObject && objAssign) {
            theObject = ObjClass(objAssign({}, theObject));
        }
        return theObject;
    }
    function objExtend(obj1, obj2, obj3, obj4, obj5, obj6) {
        var theArgs = arguments;
        var extended = theArgs[0] || {};
        var argLen = theArgs[_DYN_LENGTH ];
        var deep = false;
        var idx = 1;
        if (argLen > 0 && isBoolean(extended)) {
            deep = extended;
            extended = theArgs[idx] || {};
            idx++;
        }
        if (!isObject(extended)) {
            extended = {};
        }
        for (; idx < argLen; idx++) {
            var arg = theArgs[idx];
            var isArgArray = isArray(arg);
            var isArgObj = isObject(arg);
            for (var prop in arg) {
                var propOk = (isArgArray && (prop in arg)) || (isArgObj && objHasOwn(arg, prop));
                if (!propOk) {
                    continue;
                }
                var newValue = arg[prop];
                var isNewArray = void 0;
                if (deep && newValue && ((isNewArray = isArray(newValue)) || isPlainObject(newValue))) {
                    var clone = extended[prop];
                    if (isNewArray) {
                        if (!isArray(clone)) {
                            clone = [];
                        }
                    }
                    else if (!isPlainObject(clone)) {
                        clone = {};
                    }
                    newValue = objExtend(deep, clone, newValue);
                }
                if (newValue !== undefined) {
                    extended[prop] = newValue;
                }
            }
        }
        return extended;
    }
    function isFeatureEnabled(feature, cfg, sdkDefaultState) {
        var ft = cfg && cfg.featureOptIn && cfg.featureOptIn[feature];
        if (feature && ft) {
            var mode = ft.mode;
            if (mode === 3 ) {
                return true;
            }
            else if (mode === 2 ) {
                return false;
            }
        }
        return sdkDefaultState;
    }
    function getResponseText(xhr) {
        try {
            return xhr.responseText;
        }
        catch (e) {
        }
        return null;
    }
    function formatErrorMessageXdr(xdr, message) {
        if (xdr) {
            return "XDomainRequest,Response:" + getResponseText(xdr) || "";
        }
        return message;
    }
    function formatErrorMessageXhr(xhr, message) {
        if (xhr) {
            return "XMLHttpRequest,Status:" + xhr[_DYN_STATUS ] + ",Response:" + getResponseText(xhr) || xhr.response || "";
        }
        return message;
    }
    function prependTransports(theTransports, newTransports) {
        if (newTransports) {
            if (isNumber(newTransports)) {
                theTransports = [newTransports].concat(theTransports);
            }
            else if (isArray(newTransports)) {
                theTransports = newTransports.concat(theTransports);
            }
        }
        return theTransports;
    }
    var strDisabledPropertyName = "Microsoft_ApplicationInsights_BypassAjaxInstrumentation";
    var strWithCredentials = "withCredentials";
    var strTimeout = "timeout";
    function openXhr(method, urlString, withCredentials, disabled, isSync, timeout) {
        if (disabled === void 0) { disabled = false; }
        if (isSync === void 0) { isSync = false; }
        function _wrapSetXhrProp(xhr, prop, value) {
            try {
                xhr[prop] = value;
            }
            catch (e) {
            }
        }
        var xhr = new XMLHttpRequest();
        if (disabled) {
            _wrapSetXhrProp(xhr, strDisabledPropertyName, disabled);
        }
        if (withCredentials) {
            _wrapSetXhrProp(xhr, strWithCredentials, withCredentials);
        }
        xhr.open(method, urlString, !isSync);
        if (withCredentials) {
            _wrapSetXhrProp(xhr, strWithCredentials, withCredentials);
        }
        if (!isSync && timeout) {
            _wrapSetXhrProp(xhr, strTimeout, timeout);
        }
        return xhr;
    }
    function convertAllHeadersToMap(headersString) {
        var headers = {};
        if (isString(headersString)) {
            var headersArray = strTrim(headersString)[_DYN_SPLIT ](/[\r\n]+/);
            arrForEach(headersArray, function (headerEntry) {
                if (headerEntry) {
                    var idx = headerEntry[_DYN_INDEX_OF ](": ");
                    if (idx !== -1) {
                        var header = strTrim(headerEntry.substring(0, idx))[_DYN_TO_LOWER_CASE ]();
                        var value = strTrim(headerEntry[_DYN_SUBSTRING ](idx + 1));
                        headers[header] = value;
                    }
                    else {
                        headers[strTrim(headerEntry)] = 1;
                    }
                }
            });
        }
        return headers;
    }
    function _appendHeader(theHeaders, xhr, name) {
        if (!theHeaders[name] && xhr && xhr.getResponseHeader) {
            var value = xhr.getResponseHeader(name);
            if (value) {
                theHeaders[name] = strTrim(value);
            }
        }
        return theHeaders;
    }
    var STR_KILL_DURATION_HEADER = "kill-duration";
    var STR_KILL_DURATION_SECONDS_HEADER = "kill-duration-seconds";
    var STR_TIME_DELTA_HEADER = "time-delta-millis";
    function _getAllResponseHeaders(xhr, isOneDs) {
        var theHeaders = {};
        if (!xhr[_DYN_GET_ALL_RESPONSE_HEA5 ]) {
            if (!!isOneDs) {
                theHeaders = _appendHeader(theHeaders, xhr, STR_TIME_DELTA_HEADER);
                theHeaders = _appendHeader(theHeaders, xhr, STR_KILL_DURATION_HEADER);
                theHeaders = _appendHeader(theHeaders, xhr, STR_KILL_DURATION_SECONDS_HEADER);
            }
        }
        else {
            theHeaders = convertAllHeadersToMap(xhr[_DYN_GET_ALL_RESPONSE_HEA5 ]());
        }
        return theHeaders;
    }

    var strDocumentMode = "documentMode";
    var strLocation = "location";
    var strConsole = "console";
    var strJSON = "JSON";
    var strCrypto = "crypto";
    var strMsCrypto = "msCrypto";
    var strReactNative = "ReactNative";
    var strMsie = "msie";
    var strTrident = "trident/";
    var strXMLHttpRequest = "XMLHttpRequest";
    var _isTrident = null;
    var _navUserAgentCheck = null;
    var _enableMocks = false;
    var _useXDomainRequest = null;
    var _beaconsSupported = null;
    function _hasProperty(theClass, property) {
        var supported = false;
        if (theClass) {
            try {
                supported = property in theClass;
                if (!supported) {
                    var proto = theClass[strShimPrototype];
                    if (proto) {
                        supported = property in proto;
                    }
                }
            }
            catch (e) {
            }
            if (!supported) {
                try {
                    var tmp = new theClass();
                    supported = !isUndefined(tmp[property]);
                }
                catch (e) {
                }
            }
        }
        return supported;
    }
    function setEnableEnvMocks(enabled) {
        _enableMocks = enabled;
    }
    function getLocation(checkForMock) {
        if (checkForMock && _enableMocks) {
            var mockLocation = getInst("__mockLocation");
            if (mockLocation) {
                return mockLocation;
            }
        }
        if (typeof location === strShimObject && location) {
            return location;
        }
        return getInst(strLocation);
    }
    function getConsole() {
        if (typeof console !== strShimUndefined) {
            return console;
        }
        return getInst(strConsole);
    }
    function hasJSON() {
        return Boolean((typeof JSON === strShimObject && JSON) || getInst(strJSON) !== null);
    }
    function getJSON() {
        if (hasJSON()) {
            return JSON || getInst(strJSON);
        }
        return null;
    }
    function getCrypto() {
        return getInst(strCrypto);
    }
    function getMsCrypto() {
        return getInst(strMsCrypto);
    }
    function isReactNative() {
        var nav = getNavigator();
        if (nav && nav.product) {
            return nav.product === strReactNative;
        }
        return false;
    }
    function isIE() {
        var nav = getNavigator();
        if (nav && (nav[_DYN_USER_AGENT ] !== _navUserAgentCheck || _isTrident === null)) {
            _navUserAgentCheck = nav[_DYN_USER_AGENT ];
            var userAgent = (_navUserAgentCheck || STR_EMPTY$1)[_DYN_TO_LOWER_CASE ]();
            _isTrident = (strContains(userAgent, strMsie) || strContains(userAgent, strTrident));
        }
        return _isTrident;
    }
    function getIEVersion(userAgentStr) {
        if (userAgentStr === void 0) { userAgentStr = null; }
        if (!userAgentStr) {
            var navigator_1 = getNavigator() || {};
            userAgentStr = navigator_1 ? (navigator_1.userAgent || STR_EMPTY$1)[_DYN_TO_LOWER_CASE ]() : STR_EMPTY$1;
        }
        var ua = (userAgentStr || STR_EMPTY$1)[_DYN_TO_LOWER_CASE ]();
        if (strContains(ua, strMsie)) {
            var doc = getDocument() || {};
            return mathMax(parseInt(ua[_DYN_SPLIT ](strMsie)[1]), (doc[strDocumentMode] || 0));
        }
        else if (strContains(ua, strTrident)) {
            var tridentVer = parseInt(ua[_DYN_SPLIT ](strTrident)[1]);
            if (tridentVer) {
                return tridentVer + 4;
            }
        }
        return null;
    }
    function isSafari(userAgentStr) {
        if (!userAgentStr || !isString(userAgentStr)) {
            var navigator_2 = getNavigator() || {};
            userAgentStr = navigator_2 ? (navigator_2.userAgent || STR_EMPTY$1)[_DYN_TO_LOWER_CASE ]() : STR_EMPTY$1;
        }
        var ua = (userAgentStr || STR_EMPTY$1)[_DYN_TO_LOWER_CASE ]();
        return (strIndexOf(ua, "safari") >= 0);
    }
    function isBeaconsSupported(useCached) {
        if (_beaconsSupported === null || useCached === false) {
            _beaconsSupported = hasNavigator() && Boolean(getNavigator().sendBeacon);
        }
        return _beaconsSupported;
    }
    function isFetchSupported(withKeepAlive) {
        var isSupported = false;
        try {
            isSupported = !!getInst("fetch");
            var request = getInst("Request");
            if (isSupported && withKeepAlive && request) {
                isSupported = _hasProperty(request, "keepalive");
            }
        }
        catch (e) {
        }
        return isSupported;
    }
    function useXDomainRequest() {
        if (_useXDomainRequest === null) {
            _useXDomainRequest = (typeof XDomainRequest !== strShimUndefined);
            if (_useXDomainRequest && isXhrSupported()) {
                _useXDomainRequest = _useXDomainRequest && !_hasProperty(getInst(strXMLHttpRequest), "withCredentials");
            }
        }
        return _useXDomainRequest;
    }
    function isXhrSupported() {
        var isSupported = false;
        try {
            var xmlHttpRequest = getInst(strXMLHttpRequest);
            isSupported = !!xmlHttpRequest;
        }
        catch (e) {
        }
        return isSupported;
    }
    function _getNamedValue(values, name) {
        if (values) {
            for (var i = 0; i < values[_DYN_LENGTH ]; i++) {
                var value = values[i];
                if (value[_DYN_NAME ]) {
                    if (value[_DYN_NAME ] === name) {
                        return value;
                    }
                }
            }
        }
        return {};
    }
    function findMetaTag(name) {
        var doc = getDocument();
        if (doc && name) {
            return _getNamedValue(doc.querySelectorAll("meta"), name).content;
        }
        return null;
    }
    function findNamedServerTiming(name) {
        var value;
        var perf = getPerformance();
        if (perf) {
            var navPerf = perf.getEntriesByType("navigation") || [];
            value = _getNamedValue((navPerf[_DYN_LENGTH ] > 0 ? navPerf[0] : {}).serverTiming, name).description;
        }
        return value;
    }
    function dispatchEvent(target, evnt) {
        if (target && target.dispatchEvent && evnt) {
            target.dispatchEvent(evnt);
            return true;
        }
        return false;
    }
    function createCustomDomEvent(eventName, details) {
        var event = null;
        var detail = { detail: details || null };
        if (isFunction(CustomEvent)) {
            event = new CustomEvent(eventName, detail);
        }
        else {
            var doc = getDocument();
            if (doc && doc.createEvent) {
                event = doc.createEvent("CustomEvent");
                event.initCustomEvent(eventName, true, true, detail);
            }
        }
        return event;
    }
    function sendCustomEvent(evtName, cfg, customDetails) {
        var global = getGlobal();
        if (global && global.CustomEvent) {
            try {
                var details = { cfg: cfg || null, customDetails: customDetails || null };
                return dispatchEvent(global, createCustomDomEvent(evtName, details));
            }
            catch (e) {
            }
        }
        return false;
    }
    function redactUserInfo(url) {
        return url.replace(/^([a-zA-Z][a-zA-Z0-9+.-]*:\/\/)([^:@]{1,200}):([^@]{1,200})@(.*)$/, "$1REDACTED:REDACTED@$4");
    }
    function redactQueryParameters(url, config) {
        var sensitiveParams;
        var questionMarkIndex = strIndexOf(url, "?");
        if (questionMarkIndex === -1) {
            return url;
        }
        if (config && config.redactQueryParams) {
            sensitiveParams = DEFAULT_SENSITIVE_PARAMS.concat(config.redactQueryParams);
        }
        else {
            sensitiveParams = DEFAULT_SENSITIVE_PARAMS;
        }
        var baseUrl = strSubstring(url, 0, questionMarkIndex + 1);
        var queryString = strSubstring(url, questionMarkIndex + 1);
        var fragment = STR_EMPTY$1;
        var hashIndex = strIndexOf(queryString, "#");
        if (hashIndex !== -1) {
            fragment = strSubstring(queryString, hashIndex);
            queryString = strSubstring(queryString, 0, hashIndex);
        }
        var hasPotentialSensitiveParam = false;
        for (var i = 0; i < sensitiveParams[_DYN_LENGTH ]; i++) {
            var paramCheck = sensitiveParams[i] + "=";
            if (strIndexOf(queryString, paramCheck) !== -1) {
                hasPotentialSensitiveParam = true;
                break;
            }
        }
        if (!hasPotentialSensitiveParam) {
            return url;
        }
        var resultParts = [];
        var anyParamRedacted = false;
        if (queryString && queryString[_DYN_LENGTH ]) {
            var pairs = queryString[_DYN_SPLIT ]("&");
            for (var i = 0; i < pairs[_DYN_LENGTH ]; i++) {
                var pair = pairs[i];
                if (!pair) {
                    continue;
                }
                var equalsIndex = strIndexOf(pair, "=");
                if (equalsIndex === -1) {
                    resultParts[_DYN_PUSH ](pair);
                }
                else {
                    var paramName = pair[_DYN_SUBSTRING ](0, equalsIndex);
                    var paramValue = pair[_DYN_SUBSTRING ](equalsIndex + 1);
                    if (paramValue === STR_EMPTY$1) {
                        resultParts[_DYN_PUSH ](pair);
                    }
                    else {
                        var shouldRedact = false;
                        for (var j = 0; j < sensitiveParams[_DYN_LENGTH ]; j++) {
                            if (paramName === sensitiveParams[j]) {
                                shouldRedact = true;
                                anyParamRedacted = true;
                                break;
                            }
                        }
                        if (shouldRedact) {
                            resultParts[_DYN_PUSH ](paramName + "=" + STR_REDACTED);
                        }
                        else {
                            resultParts[_DYN_PUSH ](pair);
                        }
                    }
                }
            }
        }
        if (!anyParamRedacted) {
            return url;
        }
        return baseUrl + resultParts.join("&") + fragment;
    }
    function fieldRedaction(input, config) {
        if (!input || input[_DYN_INDEX_OF ](" ") !== -1) {
            return input;
        }
        var isRedactionDisabled = config && config.redactUrls === false;
        if (isRedactionDisabled) {
            return input;
        }
        var hasCredentials = strIndexOf(input, "@") !== -1;
        var hasQueryParams = strIndexOf(input, "?") !== -1;
        if (!hasCredentials && !hasQueryParams) {
            return input;
        }
        try {
            var result = input;
            if (hasCredentials) {
                result = redactUserInfo(input);
            }
            if (hasQueryParams) {
                result = redactQueryParameters(result, config);
            }
            return result;
        }
        catch (e) {
            return input;
        }
    }

    var UInt32Mask = 0x100000000;
    var MaxUInt32 = 0xffffffff;
    var SEED1 = 123456789;
    var SEED2 = 987654321;
    var _mwcSeeded = false;
    var _mwcW = SEED1;
    var _mwcZ = SEED2;
    function _mwcSeed(seedValue) {
        if (seedValue < 0) {
            seedValue >>>= 0;
        }
        _mwcW = (SEED1 + seedValue) & MaxUInt32;
        _mwcZ = (SEED2 - seedValue) & MaxUInt32;
        _mwcSeeded = true;
    }
    function _autoSeedMwc() {
        try {
            var now = utcNow() & 0x7fffffff;
            _mwcSeed(((Math.random() * UInt32Mask) ^ now) + now);
        }
        catch (e) {
        }
    }
    function randomValue(maxValue) {
        if (maxValue > 0) {
            return mathFloor((random32() / MaxUInt32) * (maxValue + 1)) >>> 0;
        }
        return 0;
    }
    function random32(signed) {
        var value = 0;
        var c = getCrypto() || getMsCrypto();
        if (c && c.getRandomValues) {
            value = c.getRandomValues(new Uint32Array(1))[0] & MaxUInt32;
        }
        if (value === 0 && isIE()) {
            if (!_mwcSeeded) {
                _autoSeedMwc();
            }
            value = mwcRandom32() & MaxUInt32;
        }
        if (value === 0) {
            value = mathFloor((UInt32Mask * Math.random()) | 0);
        }
        if (!signed) {
            value >>>= 0;
        }
        return value;
    }
    function mwcRandomSeed(value) {
        if (!value) {
            _autoSeedMwc();
        }
        else {
            _mwcSeed(value);
        }
    }
    function mwcRandom32(signed) {
        _mwcZ = (36969 * (_mwcZ & 0xFFFF) + (_mwcZ >> 16)) & MaxUInt32;
        _mwcW = (18000 * (_mwcW & 0xFFFF) + (_mwcW >> 16)) & MaxUInt32;
        var value = (((_mwcZ << 16) + (_mwcW & 0xFFFF)) >>> 0) & MaxUInt32 | 0;
        if (!signed) {
            value >>>= 0;
        }
        return value;
    }
    function newId(maxLength) {
        if (maxLength === void 0) { maxLength = 22; }
        var base64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
        var number = random32() >>> 0;
        var chars = 0;
        var result = STR_EMPTY$1;
        while (result[_DYN_LENGTH ] < maxLength) {
            chars++;
            result += base64chars.charAt(number & 0x3F);
            number >>>= 6;
            if (chars === 5) {
                number = (((random32() << 2) & 0xFFFFFFFF) | (number & 0x03)) >>> 0;
                chars = 0;
            }
        }
        return result;
    }

    var version = '3.3.10';
    var instanceName = "." + newId(6);
    var _dataUid = 0;
    function _canAcceptData(target) {
        return target.nodeType === 1 || target.nodeType === 9 || !(+target.nodeType);
    }
    function _getCache(data, target) {
        var theCache = target[data.id];
        if (!theCache) {
            theCache = {};
            try {
                if (_canAcceptData(target)) {
                    objDefine(target, data.id, {
                        e: false,
                        v: theCache
                    });
                }
            }
            catch (e) {
            }
        }
        return theCache;
    }
    function createUniqueNamespace(name, includeVersion) {
        if (includeVersion === void 0) { includeVersion = false; }
        return normalizeJsName(name + (_dataUid++) + (includeVersion ? "." + version : STR_EMPTY$1) + instanceName);
    }
    function createElmNodeData(name) {
        var data = {
            id: createUniqueNamespace("_aiData-" + (name || STR_EMPTY$1) + "." + version),
            accept: function (target) {
                return _canAcceptData(target);
            },
            get: function (target, name, defValue, addDefault) {
                var theCache = target[data.id];
                if (!theCache) {
                    if (addDefault) {
                        theCache = _getCache(data, target);
                        theCache[normalizeJsName(name)] = defValue;
                    }
                    return defValue;
                }
                return theCache[normalizeJsName(name)];
            },
            kill: function (target, name) {
                if (target && target[name]) {
                    try {
                        delete target[name];
                    }
                    catch (e) {
                    }
                }
            }
        };
        return data;
    }

    function _isConfigDefaults(value) {
        return (value && isObject(value) && !isArray(value) && (value.isVal || value.fb || objHasOwn(value, "v") || objHasOwn(value, "mrg") || objHasOwn(value, "ref") || value.set));
    }
    function _getDefault(dynamicHandler, theConfig, cfgDefaults) {
        var defValue;
        var isDefaultValid = cfgDefaults.dfVal || isDefined;
        if (theConfig && cfgDefaults.fb) {
            var fallbacks = cfgDefaults.fb;
            if (!isArray(fallbacks)) {
                fallbacks = [fallbacks];
            }
            for (var lp = 0; lp < fallbacks[_DYN_LENGTH ]; lp++) {
                var fallback = fallbacks[lp];
                var fbValue = theConfig[fallback];
                if (isDefaultValid(fbValue)) {
                    defValue = fbValue;
                }
                else if (dynamicHandler) {
                    fbValue = dynamicHandler.cfg[fallback];
                    if (isDefaultValid(fbValue)) {
                        defValue = fbValue;
                    }
                    dynamicHandler.set(dynamicHandler.cfg, asString(fallback), fbValue);
                }
                if (isDefaultValid(defValue)) {
                    break;
                }
            }
        }
        if (!isDefaultValid(defValue) && isDefaultValid(cfgDefaults.v)) {
            defValue = cfgDefaults.v;
        }
        return defValue;
    }
    function _resolveDefaultValue(dynamicHandler, theConfig, cfgDefaults) {
        var theValue = cfgDefaults;
        if (cfgDefaults && _isConfigDefaults(cfgDefaults)) {
            theValue = _getDefault(dynamicHandler, theConfig, cfgDefaults);
        }
        if (theValue) {
            if (_isConfigDefaults(theValue)) {
                theValue = _resolveDefaultValue(dynamicHandler, theConfig, theValue);
            }
            var newValue_1;
            if (isArray(theValue)) {
                newValue_1 = [];
                newValue_1[_DYN_LENGTH ] = theValue[_DYN_LENGTH ];
            }
            else if (isPlainObject(theValue)) {
                newValue_1 = {};
            }
            if (newValue_1) {
                objForEachKey(theValue, function (key, value) {
                    if (value && _isConfigDefaults(value)) {
                        value = _resolveDefaultValue(dynamicHandler, theConfig, value);
                    }
                    newValue_1[key] = value;
                });
                theValue = newValue_1;
            }
        }
        return theValue;
    }
    function _applyDefaultValue(dynamicHandler, theConfig, name, defaultValue) {
        var isValid;
        var setFn;
        var defValue;
        var cfgDefaults = defaultValue;
        var mergeDf;
        var reference;
        var readOnly;
        var blkDynamicValue;
        if (_isConfigDefaults(cfgDefaults)) {
            isValid = cfgDefaults.isVal;
            setFn = cfgDefaults.set;
            readOnly = cfgDefaults.rdOnly;
            blkDynamicValue = cfgDefaults.blkVal;
            mergeDf = cfgDefaults.mrg;
            reference = cfgDefaults.ref;
            if (!reference && isUndefined(reference)) {
                reference = !!mergeDf;
            }
            defValue = _getDefault(dynamicHandler, theConfig, cfgDefaults);
        }
        else {
            defValue = defaultValue;
        }
        if (blkDynamicValue) {
            dynamicHandler.blkVal(theConfig, name);
        }
        var theValue;
        var usingDefault = true;
        var cfgValue = theConfig[name];
        if (cfgValue || !isNullOrUndefined(cfgValue)) {
            theValue = cfgValue;
            usingDefault = false;
            if (isValid && theValue !== defValue && !isValid(theValue)) {
                theValue = defValue;
                usingDefault = true;
            }
            if (setFn) {
                theValue = setFn(theValue, defValue, theConfig);
                usingDefault = theValue === defValue;
            }
        }
        if (!usingDefault) {
            if (isPlainObject(theValue) || isArray(defValue)) {
                if (mergeDf && defValue && (isPlainObject(defValue) || isArray(defValue))) {
                    objForEachKey(defValue, function (dfName, dfValue) {
                        _applyDefaultValue(dynamicHandler, theValue, dfName, dfValue);
                    });
                }
            }
        }
        else if (defValue) {
            theValue = _resolveDefaultValue(dynamicHandler, theConfig, defValue);
        }
        else {
            theValue = defValue;
        }
        dynamicHandler.set(theConfig, name, theValue);
        if (reference) {
            dynamicHandler.ref(theConfig, name);
        }
        if (readOnly) {
            dynamicHandler.rdOnly(theConfig, name);
        }
    }

    var CFG_HANDLER_LINK = symbolFor("[[ai_dynCfg_1]]");
    var BLOCK_DYNAMIC = symbolFor("[[ai_blkDynCfg_1]]");
    var FORCE_DYNAMIC = symbolFor("[[ai_frcDynCfg_1]]");
    function _cfgDeepCopy(source) {
        if (source) {
            var target_1;
            if (isArray(source)) {
                target_1 = [];
                target_1[_DYN_LENGTH ] = source[_DYN_LENGTH ];
            }
            else if (isPlainObject(source)) {
                target_1 = {};
            }
            if (target_1) {
                objForEachKey(source, function (key, value) {
                    target_1[key] = _cfgDeepCopy(value);
                });
                return target_1;
            }
        }
        return source;
    }
    function getDynamicConfigHandler(value) {
        if (value) {
            var handler = value[CFG_HANDLER_LINK] || value;
            if (handler.cfg && (handler.cfg === value || handler.cfg[CFG_HANDLER_LINK] === handler)) {
                return handler;
            }
        }
        return null;
    }
    function blockDynamicConversion(value) {
        if (value && (isPlainObject(value) || isArray(value))) {
            try {
                value[BLOCK_DYNAMIC] = true;
            }
            catch (e) {
            }
        }
        return value;
    }
    function forceDynamicConversion(value) {
        if (value) {
            try {
                value[FORCE_DYNAMIC] = true;
            }
            catch (e) {
            }
        }
        return value;
    }
    function _canMakeDynamic(getFunc, state, value) {
        var result = false;
        if (value && !getFunc[state.blkVal]) {
            result = value[FORCE_DYNAMIC];
            if (!result && !value[BLOCK_DYNAMIC]) {
                result = isPlainObject(value) || isArray(value);
            }
        }
        return result;
    }
    function throwInvalidAccess(message) {
        throwTypeError("InvalidAccess:" + message);
    }

    var arrayMethodsToPatch = [
        "push",
        "pop",
        "shift",
        "unshift",
        "splice"
    ];
    var _throwDynamicError = function (logger, name, desc, e) {
        logger && logger[_DYN_THROW_INTERNAL ](3 , 108 , "".concat(desc, " [").concat(name, "] failed - ") + dumpObj(e));
    };
    function _patchArray(state, target, name) {
        if (isArray(target)) {
            arrForEach(arrayMethodsToPatch, function (method) {
                var orgMethod = target[method];
                target[method] = function () {
                    var args = [];
                    for (var _i = 0; _i < arguments.length; _i++) {
                        args[_i] = arguments[_i];
                    }
                    var result = orgMethod[_DYN_APPLY ](this, args);
                    _makeDynamicObject(state, target, name, "Patching");
                    return result;
                };
            });
        }
    }
    function _getOwnPropGetter(target, name) {
        var propDesc = objGetOwnPropertyDescriptor(target, name);
        return propDesc && propDesc.get;
    }
    function _createDynamicProperty(state, theConfig, name, value) {
        var detail = {
            n: name,
            h: [],
            trk: function (handler) {
                if (handler && handler.fn) {
                    if (arrIndexOf(detail.h, handler) === -1) {
                        detail.h[_DYN_PUSH ](handler);
                    }
                    state.trk(handler, detail);
                }
            },
            clr: function (handler) {
                var idx = arrIndexOf(detail.h, handler);
                if (idx !== -1) {
                    detail.h[_DYN_SPLICE ](idx, 1);
                }
            }
        };
        var checkDynamic = true;
        var isObjectOrArray = false;
        function _getProperty() {
            if (checkDynamic) {
                isObjectOrArray = isObjectOrArray || _canMakeDynamic(_getProperty, state, value);
                if (value && !value[CFG_HANDLER_LINK] && isObjectOrArray) {
                    value = _makeDynamicObject(state, value, name, "Converting");
                }
                checkDynamic = false;
            }
            var activeHandler = state.act;
            if (activeHandler) {
                detail.trk(activeHandler);
            }
            return value;
        }
        _getProperty[state.prop] = {
            chng: function () {
                state.add(detail);
            }
        };
        function _setProperty(newValue) {
            if (value !== newValue) {
                if (!!_getProperty[state.ro] && !state.upd) {
                    throwInvalidAccess("[" + name + "] is read-only:" + dumpObj(theConfig));
                }
                if (checkDynamic) {
                    isObjectOrArray = isObjectOrArray || _canMakeDynamic(_getProperty, state, value);
                    checkDynamic = false;
                }
                var isReferenced = isObjectOrArray && _getProperty[state.rf];
                if (isObjectOrArray) {
                    if (isReferenced) {
                        objForEachKey(value, function (key) {
                            value[key] = newValue ? newValue[key] : UNDEFINED_VALUE;
                        });
                        try {
                            objForEachKey(newValue, function (key, theValue) {
                                _setDynamicProperty(state, value, key, theValue);
                            });
                            newValue = value;
                        }
                        catch (e) {
                            _throwDynamicError((state.hdlr || {})[_DYN_LOGGER ], name, "Assigning", e);
                            isObjectOrArray = false;
                        }
                    }
                    else if (value && value[CFG_HANDLER_LINK]) {
                        objForEachKey(value, function (key) {
                            var getter = _getOwnPropGetter(value, key);
                            if (getter) {
                                var valueState = getter[state.prop];
                                valueState && valueState.chng();
                            }
                        });
                    }
                }
                if (newValue !== value) {
                    var newIsObjectOrArray = newValue && _canMakeDynamic(_getProperty, state, newValue);
                    if (!isReferenced && newIsObjectOrArray) {
                        newValue = _makeDynamicObject(state, newValue, name, "Converting");
                    }
                    value = newValue;
                    isObjectOrArray = newIsObjectOrArray;
                }
                state.add(detail);
            }
        }
        objDefine(theConfig, detail.n, { g: _getProperty, s: _setProperty });
    }
    function _setDynamicProperty(state, target, name, value) {
        if (target) {
            var getter = _getOwnPropGetter(target, name);
            var isDynamic = getter && !!getter[state.prop];
            if (!isDynamic) {
                _createDynamicProperty(state, target, name, value);
            }
            else {
                target[name] = value;
            }
        }
        return target;
    }
    function _setDynamicPropertyState(state, target, name, flags) {
        if (target) {
            var getter = _getOwnPropGetter(target, name);
            var isDynamic = getter && !!getter[state.prop];
            var inPlace = flags && flags[0 ];
            var rdOnly = flags && flags[1 ];
            var blkProp = flags && flags[2 ];
            if (!isDynamic) {
                if (blkProp) {
                    try {
                        blockDynamicConversion(target);
                    }
                    catch (e) {
                        _throwDynamicError((state.hdlr || {})[_DYN_LOGGER ], name, "Blocking", e);
                    }
                }
                try {
                    _setDynamicProperty(state, target, name, target[name]);
                    getter = _getOwnPropGetter(target, name);
                }
                catch (e) {
                    _throwDynamicError((state.hdlr || {})[_DYN_LOGGER ], name, "State", e);
                }
            }
            if (inPlace) {
                getter[state.rf] = inPlace;
            }
            if (rdOnly) {
                getter[state.ro] = rdOnly;
            }
            if (blkProp) {
                getter[state.blkVal] = true;
            }
        }
        return target;
    }
    function _makeDynamicObject(state, target, name, desc) {
        try {
            objForEachKey(target, function (key, value) {
                _setDynamicProperty(state, target, key, value);
            });
            if (!target[CFG_HANDLER_LINK]) {
                objDefineProp(target, CFG_HANDLER_LINK, {
                    get: function () {
                        return state.hdlr;
                    }
                });
                _patchArray(state, target, name);
            }
        }
        catch (e) {
            _throwDynamicError((state.hdlr || {})[_DYN_LOGGER ], name, desc, e);
        }
        return target;
    }

    var symPrefix = "[[ai_";
    var symPostfix = "]]";
    function _createState(cfgHandler) {
        var dynamicPropertySymbol = newSymbol(symPrefix + "get" + cfgHandler.uid + symPostfix);
        var dynamicPropertyReadOnly = newSymbol(symPrefix + "ro" + cfgHandler.uid + symPostfix);
        var dynamicPropertyReferenced = newSymbol(symPrefix + "rf" + cfgHandler.uid + symPostfix);
        var dynamicPropertyBlockValue = newSymbol(symPrefix + "blkVal" + cfgHandler.uid + symPostfix);
        var dynamicPropertyDetail = newSymbol(symPrefix + "dtl" + cfgHandler.uid + symPostfix);
        var _waitingHandlers = null;
        var _watcherTimer = null;
        var theState;
        function _useHandler(activeHandler, callback) {
            var prevWatcher = theState.act;
            try {
                theState.act = activeHandler;
                if (activeHandler && activeHandler[dynamicPropertyDetail]) {
                    arrForEach(activeHandler[dynamicPropertyDetail], function (detail) {
                        detail.clr(activeHandler);
                    });
                    activeHandler[dynamicPropertyDetail] = [];
                }
                callback({
                    cfg: cfgHandler.cfg,
                    set: cfgHandler.set.bind(cfgHandler),
                    setDf: cfgHandler.setDf.bind(cfgHandler),
                    ref: cfgHandler.ref.bind(cfgHandler),
                    rdOnly: cfgHandler.rdOnly.bind(cfgHandler)
                });
            }
            catch (e) {
                var logger = cfgHandler[_DYN_LOGGER ];
                if (logger) {
                    logger[_DYN_THROW_INTERNAL ](1 , 107 , dumpObj(e));
                }
                throw e;
            }
            finally {
                theState.act = prevWatcher || null;
            }
        }
        function _notifyWatchers() {
            if (_waitingHandlers) {
                var notifyHandlers = _waitingHandlers;
                _waitingHandlers = null;
                _watcherTimer && _watcherTimer[_DYN_CANCEL ]();
                _watcherTimer = null;
                var watcherFailures_1 = [];
                arrForEach(notifyHandlers, function (handler) {
                    if (handler) {
                        if (handler[dynamicPropertyDetail]) {
                            arrForEach(handler[dynamicPropertyDetail], function (detail) {
                                detail.clr(handler);
                            });
                            handler[dynamicPropertyDetail] = null;
                        }
                        if (handler.fn) {
                            try {
                                _useHandler(handler, handler.fn);
                            }
                            catch (e) {
                                watcherFailures_1[_DYN_PUSH ](e);
                            }
                        }
                    }
                });
                if (_waitingHandlers) {
                    try {
                        _notifyWatchers();
                    }
                    catch (e) {
                        watcherFailures_1[_DYN_PUSH ](e);
                    }
                }
                if (watcherFailures_1[_DYN_LENGTH ] > 0) {
                    throwAggregationError("Watcher error(s): ", watcherFailures_1);
                }
            }
        }
        function _addWatcher(detail) {
            if (detail && detail.h[_DYN_LENGTH ] > 0) {
                if (!_waitingHandlers) {
                    _waitingHandlers = [];
                }
                if (!_watcherTimer) {
                    _watcherTimer = scheduleTimeout(function () {
                        _watcherTimer = null;
                        _notifyWatchers();
                    }, 0);
                }
                for (var idx = 0; idx < detail.h[_DYN_LENGTH ]; idx++) {
                    var handler = detail.h[idx];
                    if (handler && arrIndexOf(_waitingHandlers, handler) === -1) {
                        _waitingHandlers[_DYN_PUSH ](handler);
                    }
                }
            }
        }
        function _trackHandler(handler, detail) {
            if (handler) {
                var details = handler[dynamicPropertyDetail] = handler[dynamicPropertyDetail] || [];
                if (arrIndexOf(details, detail) === -1) {
                    details[_DYN_PUSH ](detail);
                }
            }
        }
        theState = {
            prop: dynamicPropertySymbol,
            ro: dynamicPropertyReadOnly,
            rf: dynamicPropertyReferenced,
            blkVal: dynamicPropertyBlockValue,
            hdlr: cfgHandler,
            add: _addWatcher,
            notify: _notifyWatchers,
            use: _useHandler,
            trk: _trackHandler
        };
        return theState;
    }

    function _createAndUseHandler(state, configHandler) {
        var handler = {
            fn: configHandler,
            rm: function () {
                handler.fn = null;
                state = null;
                configHandler = null;
            }
        };
        objDefine(handler, "toJSON", { v: function () { return "WatcherHandler" + (handler.fn ? "" : "[X]"); } });
        state.use(handler, configHandler);
        return handler;
    }
    function _createDynamicHandler(logger, target, inPlace) {
        var dynamicHandler = getDynamicConfigHandler(target);
        if (dynamicHandler) {
            return dynamicHandler;
        }
        var uid = createUniqueNamespace("dyncfg", true);
        var newTarget = (target && inPlace !== false) ? target : _cfgDeepCopy(target);
        var theState;
        function _notifyWatchers() {
            theState.notify();
        }
        function _setValue(target, name, value) {
            try {
                target = _setDynamicProperty(theState, target, name, value);
            }
            catch (e) {
                _throwDynamicError(logger, name, "Setting value", e);
            }
            return target[name];
        }
        function _watch(configHandler) {
            return _createAndUseHandler(theState, configHandler);
        }
        function _block(configHandler, allowUpdate) {
            theState.use(null, function (details) {
                var prevUpd = theState.upd;
                try {
                    if (!isUndefined(allowUpdate)) {
                        theState.upd = allowUpdate;
                    }
                    configHandler(details);
                }
                finally {
                    theState.upd = prevUpd;
                }
            });
        }
        function _ref(target, name) {
            var _a;
            return _setDynamicPropertyState(theState, target, name, (_a = {}, _a[0 ] = true, _a))[name];
        }
        function _rdOnly(target, name) {
            var _a;
            return _setDynamicPropertyState(theState, target, name, (_a = {}, _a[1 ] = true, _a))[name];
        }
        function _blkPropValue(target, name) {
            var _a;
            return _setDynamicPropertyState(theState, target, name, (_a = {}, _a[2 ] = true, _a))[name];
        }
        function _applyDefaults(theConfig, defaultValues) {
            if (defaultValues) {
                objForEachKey(defaultValues, function (name, value) {
                    _applyDefaultValue(cfgHandler, theConfig, name, value);
                });
            }
            return theConfig;
        }
        var cfgHandler = {
            uid: null,
            cfg: newTarget,
            logger: logger,
            notify: _notifyWatchers,
            set: _setValue,
            setDf: _applyDefaults,
            watch: _watch,
            ref: _ref,
            rdOnly: _rdOnly,
            blkVal: _blkPropValue,
            _block: _block
        };
        objDefine(cfgHandler, "uid", {
            c: false,
            e: false,
            w: false,
            v: uid
        });
        theState = _createState(cfgHandler);
        _makeDynamicObject(theState, newTarget, "config", "Creating");
        return cfgHandler;
    }
    function _logInvalidAccess(logger, message) {
        if (logger) {
            logger[_DYN_WARN_TO_CONSOLE ](message);
            logger[_DYN_THROW_INTERNAL ](2 , 108 , message);
        }
        else {
            throwInvalidAccess(message);
        }
    }
    function createDynamicConfig(config, defaultConfig, logger, inPlace) {
        var dynamicHandler = _createDynamicHandler(logger, config || {}, inPlace);
        if (defaultConfig) {
            dynamicHandler.setDf(dynamicHandler.cfg, defaultConfig);
        }
        return dynamicHandler;
    }
    function onConfigChange(config, configHandler, logger) {
        var handler = config[CFG_HANDLER_LINK] || config;
        if (handler.cfg && (handler.cfg === config || handler.cfg[CFG_HANDLER_LINK] === handler)) {
            return handler[_DYN_WATCH ](configHandler);
        }
        _logInvalidAccess(logger, STR_NOT_DYNAMIC_ERROR + dumpObj(config));
        return createDynamicConfig(config, null, logger)[_DYN_WATCH ](configHandler);
    }

    function runTargetUnload(target, isAsync) {
        if (target && target[_DYN_UNLOAD ]) {
            return target[_DYN_UNLOAD ](isAsync);
        }
    }
    function doUnloadAll(targets, isAsync, done) {
        var result;
        if (!done) {
            result = createPromise(function (resolved) {
                done = resolved;
            });
        }
        if (targets && getLength(targets) > 0) {
            doAwaitResponse(runTargetUnload(targets[0], isAsync), function () {
                doUnloadAll(arrSlice(targets, 1), isAsync, done);
            });
        }
        else {
            done();
        }
        return result;
    }

    var ChannelControllerPriority = 500;
    var DisabledPropertyName = "Microsoft_ApplicationInsights_BypassAjaxInstrumentation";

    function _stringToBoolOrDefault(theValue, defaultValue, theConfig) {
        if (!theValue && isNullOrUndefined(theValue)) {
            return defaultValue;
        }
        if (isBoolean(theValue)) {
            return theValue;
        }
        return asString(theValue)[_DYN_TO_LOWER_CASE ]() === "true";
    }
    function cfgDfMerge(defaultValue) {
        return {
            mrg: true,
            v: defaultValue
        };
    }
    function cfgDfSet(setter, defaultValue) {
        return {
            set: setter,
            v: defaultValue
        };
    }
    function cfgDfValidate(validator, defaultValue, fallBackName) {
        return {
            fb: fallBackName,
            isVal: validator,
            v: defaultValue
        };
    }
    function cfgDfBoolean(defaultValue, fallBackName) {
        return {
            fb: fallBackName,
            set: _stringToBoolOrDefault,
            v: !!defaultValue
        };
    }
    function cfgDfFunc(defaultValue) {
        return {
            isVal: isFunction,
            v: defaultValue || null
        };
    }
    function cfgDfString(defaultValue) {
        return {
            isVal: isString,
            v: asString(defaultValue || STR_EMPTY$1)
        };
    }
    function cfgDfBlockPropValue(defaultValue) {
        return {
            blkVal: true,
            v: defaultValue
        };
    }

    var listenerFuncs = [STR_EVENTS_SENT, STR_EVENTS_DISCARDED, STR_EVENTS_SEND_REQUEST, STR_PERF_EVENT];
    var _aiNamespace = null;
    var _debugListener;
    function _listenerProxyFunc(name, config) {
        return function () {
            var args = arguments;
            var dbgExt = getDebugExt(config);
            if (dbgExt) {
                var listener = dbgExt.listener;
                if (listener && listener[name]) {
                    listener[name][_DYN_APPLY ](listener, args);
                }
            }
        };
    }
    function _getExtensionNamespace() {
        var target = getInst("Microsoft");
        if (target) {
            _aiNamespace = target["ApplicationInsights"];
        }
        return _aiNamespace;
    }
    function getDebugExt(config) {
        var ns = _aiNamespace;
        if (!ns && config.disableDbgExt !== true) {
            ns = _aiNamespace || _getExtensionNamespace();
        }
        return ns ? ns["ChromeDbgExt"] : null;
    }
    function getDebugListener(config) {
        if (!_debugListener) {
            _debugListener = {};
            for (var lp = 0; lp < listenerFuncs[_DYN_LENGTH ]; lp++) {
                _debugListener[listenerFuncs[lp]] = _listenerProxyFunc(listenerFuncs[lp], config);
            }
        }
        return _debugListener;
    }

    var _a$3;
    var STR_WARN_TO_CONSOLE = "warnToConsole";
    var AiNonUserActionablePrefix = "AI (Internal): ";
    var AiUserActionablePrefix = "AI: ";
    var AIInternalMessagePrefix = "AITR_";
    var defaultValues$2 = {
        loggingLevelConsole: 0,
        loggingLevelTelemetry: 1,
        maxMessageLimit: 25,
        enableDebug: false
    };
    var _logFuncs = (_a$3 = {},
        _a$3[0 ] = null,
        _a$3[1 ] = "errorToConsole",
        _a$3[2 ] = STR_WARN_TO_CONSOLE,
        _a$3[3 ] = "debugToConsole",
        _a$3);
    function _sanitizeDiagnosticText(text) {
        if (text) {
            return "\"" + text[_DYN_REPLACE ](/\"/g, STR_EMPTY$1) + "\"";
        }
        return STR_EMPTY$1;
    }
    function _logToConsole(func, message) {
        var theConsole = getConsole();
        if (!!theConsole) {
            var logFunc = "log";
            if (theConsole[func]) {
                logFunc = func;
            }
            if (isFunction(theConsole[logFunc])) {
                theConsole[logFunc](message);
            }
        }
    }
    var _InternalLogMessage = /** @class */ (function () {
        function _InternalLogMessage(msgId, msg, isUserAct, properties) {
            if (isUserAct === void 0) { isUserAct = false; }
            var _self = this;
            _self[_DYN_MESSAGE_ID ] = msgId;
            _self[_DYN_MESSAGE ] =
                (isUserAct ? AiUserActionablePrefix : AiNonUserActionablePrefix) +
                    msgId;
            var strProps = STR_EMPTY$1;
            if (hasJSON()) {
                strProps = getJSON().stringify(properties);
            }
            var diagnosticText = (msg ? " message:" + _sanitizeDiagnosticText(msg) : STR_EMPTY$1) +
                (properties ? " props:" + _sanitizeDiagnosticText(strProps) : STR_EMPTY$1);
            _self[_DYN_MESSAGE ] += diagnosticText;
        }
        _InternalLogMessage.dataType = "MessageData";
        return _InternalLogMessage;
    }());
    function safeGetLogger(core, config) {
        return (core || {})[_DYN_LOGGER ] || new DiagnosticLogger(config);
    }
    var DiagnosticLogger = /** @class */ (function () {
        function DiagnosticLogger(config) {
            this.identifier = "DiagnosticLogger";
            this.queue = [];
            var _messageCount = 0;
            var _messageLogged = {};
            var _loggingLevelConsole;
            var _loggingLevelTelemetry;
            var _maxInternalMessageLimit;
            var _enableDebug;
            var _unloadHandler;
            dynamicProto(DiagnosticLogger, this, function (_self) {
                _unloadHandler = _setDefaultsFromConfig(config || {});
                _self.consoleLoggingLevel = function () { return _loggingLevelConsole; };
                _self[_DYN_THROW_INTERNAL ] = function (severity, msgId, msg, properties, isUserAct) {
                    if (isUserAct === void 0) { isUserAct = false; }
                    var message = new _InternalLogMessage(msgId, msg, isUserAct, properties);
                    if (_enableDebug) {
                        throw dumpObj(message);
                    }
                    else {
                        var logFunc = _logFuncs[severity] || STR_WARN_TO_CONSOLE;
                        if (!isUndefined(message[_DYN_MESSAGE ])) {
                            if (isUserAct) {
                                var messageKey = +message[_DYN_MESSAGE_ID ];
                                if (!_messageLogged[messageKey] && _loggingLevelConsole >= severity) {
                                    _self[logFunc](message[_DYN_MESSAGE ]);
                                    _messageLogged[messageKey] = true;
                                }
                            }
                            else {
                                if (_loggingLevelConsole >= severity) {
                                    _self[logFunc](message[_DYN_MESSAGE ]);
                                }
                            }
                            _logInternalMessage(severity, message);
                        }
                        else {
                            _debugExtMsg("throw" + (severity === 1  ? "Critical" : "Warning"), message);
                        }
                    }
                };
                _self.debugToConsole = function (message) {
                    _logToConsole("debug", message);
                    _debugExtMsg("warning", message);
                };
                _self[_DYN_WARN_TO_CONSOLE ] = function (message) {
                    _logToConsole("warn", message);
                    _debugExtMsg("warning", message);
                };
                _self.errorToConsole = function (message) {
                    _logToConsole("error", message);
                    _debugExtMsg("error", message);
                };
                _self.resetInternalMessageCount = function () {
                    _messageCount = 0;
                    _messageLogged = {};
                };
                _self.logInternalMessage = _logInternalMessage;
                _self[_DYN_UNLOAD ] = function (isAsync) {
                    _unloadHandler && _unloadHandler.rm();
                    _unloadHandler = null;
                };
                function _logInternalMessage(severity, message) {
                    if (_areInternalMessagesThrottled()) {
                        return;
                    }
                    var logMessage = true;
                    var messageKey = AIInternalMessagePrefix + message[_DYN_MESSAGE_ID ];
                    if (_messageLogged[messageKey]) {
                        logMessage = false;
                    }
                    else {
                        _messageLogged[messageKey] = true;
                    }
                    if (logMessage) {
                        if (severity <= _loggingLevelTelemetry) {
                            _self.queue[_DYN_PUSH ](message);
                            _messageCount++;
                            _debugExtMsg((severity === 1  ? "error" : "warn"), message);
                        }
                        if (_messageCount === _maxInternalMessageLimit) {
                            var throttleLimitMessage = "Internal events throttle limit per PageView reached for this app.";
                            var throttleMessage = new _InternalLogMessage(23 , throttleLimitMessage, false);
                            _self.queue[_DYN_PUSH ](throttleMessage);
                            if (severity === 1 ) {
                                _self.errorToConsole(throttleLimitMessage);
                            }
                            else {
                                _self[_DYN_WARN_TO_CONSOLE ](throttleLimitMessage);
                            }
                        }
                    }
                }
                function _setDefaultsFromConfig(config) {
                    return onConfigChange(createDynamicConfig(config, defaultValues$2, _self).cfg, function (details) {
                        var config = details.cfg;
                        _loggingLevelConsole = config[_DYN_LOGGING_LEVEL_CONSOL4 ];
                        _loggingLevelTelemetry = config.loggingLevelTelemetry;
                        _maxInternalMessageLimit = config.maxMessageLimit;
                        _enableDebug = config.enableDebug;
                    });
                }
                function _areInternalMessagesThrottled() {
                    return _messageCount >= _maxInternalMessageLimit;
                }
                function _debugExtMsg(name, data) {
                    var dbgExt = getDebugExt(config || {});
                    if (dbgExt && dbgExt[_DYN_DIAG_LOG ]) {
                        dbgExt[_DYN_DIAG_LOG ](name, data);
                    }
                }
            });
        }
        DiagnosticLogger.__ieDyn=1;
        return DiagnosticLogger;
    }());
    function _getLogger(logger) {
        return (logger || new DiagnosticLogger());
    }
    function _throwInternal(logger, severity, msgId, msg, properties, isUserAct) {
        if (isUserAct === void 0) { isUserAct = false; }
        _getLogger(logger)[_DYN_THROW_INTERNAL ](severity, msgId, msg, properties, isUserAct);
    }
    function _warnToConsole(logger, message) {
        _getLogger(logger)[_DYN_WARN_TO_CONSOLE ](message);
    }
    function _logInternalMessage(logger, severity, message) {
        _getLogger(logger).logInternalMessage(severity, message);
    }

    var _a$2, _b;
    var strToGMTString = "toGMTString";
    var strToUTCString = "toUTCString";
    var strCookie = "cookie";
    var strExpires = "expires";
    var strIsCookieUseDisabled = "isCookieUseDisabled";
    var strDisableCookiesUsage = "disableCookiesUsage";
    var strConfigCookieMgr = "_ckMgr";
    var _supportsCookies = null;
    var _allowUaSameSite = null;
    var _parsedCookieValue = null;
    var _doc;
    var _cookieCache = {};
    var _globalCookieConfig = {};
    var rootDefaultConfig = (_a$2 = {
            cookieCfg: cfgDfMerge((_b = {},
                _b[STR_DOMAIN] = { fb: "cookieDomain", dfVal: isNotNullOrUndefined },
                _b.path = { fb: "cookiePath", dfVal: isNotNullOrUndefined },
                _b.enabled = UNDEFINED_VALUE,
                _b.ignoreCookies = UNDEFINED_VALUE,
                _b.blockedCookies = UNDEFINED_VALUE,
                _b.disableCookieDefer = false,
                _b)),
            cookieDomain: UNDEFINED_VALUE,
            cookiePath: UNDEFINED_VALUE
        },
        _a$2[strDisableCookiesUsage] = UNDEFINED_VALUE,
        _a$2);
    function _getDoc() {
        !_doc && (_doc = getLazy(function () { return getDocument(); }));
    }
    function _gblCookieMgr(config, logger) {
        var inst = createCookieMgr[strConfigCookieMgr] || _globalCookieConfig[strConfigCookieMgr];
        if (!inst) {
            inst = createCookieMgr[strConfigCookieMgr] = createCookieMgr(config, logger);
            _globalCookieConfig[strConfigCookieMgr] = inst;
        }
        return inst;
    }
    function _isMgrEnabled(cookieMgr) {
        if (cookieMgr) {
            return cookieMgr.isEnabled();
        }
        return true;
    }
    function _isIgnoredCookie(cookieMgrCfg, name) {
        if (name && cookieMgrCfg && isArray(cookieMgrCfg.ignoreCookies)) {
            return arrIndexOf(cookieMgrCfg.ignoreCookies, name) !== -1;
        }
        return false;
    }
    function _isBlockedCookie(cookieMgrCfg, name) {
        if (name && cookieMgrCfg && isArray(cookieMgrCfg.blockedCookies)) {
            if (arrIndexOf(cookieMgrCfg.blockedCookies, name) !== -1) {
                return true;
            }
        }
        return _isIgnoredCookie(cookieMgrCfg, name);
    }
    function _isCfgEnabled(rootConfig, cookieMgrConfig) {
        var isCfgEnabled = cookieMgrConfig[_DYN_ENABLED ];
        if (isNullOrUndefined(isCfgEnabled)) {
            var cookieEnabled = void 0;
            if (!isUndefined(rootConfig[strIsCookieUseDisabled])) {
                cookieEnabled = !rootConfig[strIsCookieUseDisabled];
            }
            if (!isUndefined(rootConfig[strDisableCookiesUsage])) {
                cookieEnabled = !rootConfig[strDisableCookiesUsage];
            }
            isCfgEnabled = cookieEnabled;
        }
        return isCfgEnabled;
    }
    function safeGetCookieMgr(core, config) {
        var cookieMgr;
        if (core) {
            cookieMgr = core.getCookieMgr();
        }
        else if (config) {
            var cookieCfg = config.cookieCfg;
            if (cookieCfg && cookieCfg[strConfigCookieMgr]) {
                cookieMgr = cookieCfg[strConfigCookieMgr];
            }
            else {
                cookieMgr = createCookieMgr(config);
            }
        }
        if (!cookieMgr) {
            cookieMgr = _gblCookieMgr(config, (core || {})[_DYN_LOGGER ]);
        }
        return cookieMgr;
    }
    function createCookieMgr(rootConfig, logger) {
        var cookieMgrConfig;
        var _path;
        var _domain;
        var unloadHandler;
        var _enabled;
        var _getCookieFn;
        var _setCookieFn;
        var _delCookieFn;
        var _pendingCookies = [];
        function _formatDeletionValue(path) {
            var _a;
            var values = (_a = {},
                _a[STR_PATH] = path ? path : "/",
                _a[strExpires] = "Thu, 01 Jan 1970 00:00:01 GMT",
                _a);
            if (!isIE()) {
                values["max-age"] = "0";
            }
            return _formatCookieValue(STR_EMPTY$1, values);
        }
        function _formatSetCookieValue(value, maxAgeSec, domain, path) {
            var values = {};
            var theValue = strTrim(value || STR_EMPTY$1);
            var idx = strIndexOf(theValue, ";");
            if (idx !== -1) {
                theValue = strTrim(strLeft(value, idx));
                values = _extractParts(strSubstring(value, idx + 1));
            }
            setValue(values, STR_DOMAIN, domain || _domain, isTruthy, isUndefined);
            if (!isNullOrUndefined(maxAgeSec)) {
                var _isIE = isIE();
                if (isUndefined(values[strExpires])) {
                    var nowMs = utcNow();
                    var expireMs = nowMs + (maxAgeSec * 1000);
                    if (expireMs > 0) {
                        var expiry = new Date();
                        expiry.setTime(expireMs);
                        setValue(values, strExpires, _formatDate(expiry, !_isIE ? strToUTCString : strToGMTString) || _formatDate(expiry, _isIE ? strToGMTString : strToUTCString) || STR_EMPTY$1, isTruthy);
                    }
                }
                if (!_isIE) {
                    setValue(values, "max-age", STR_EMPTY$1 + maxAgeSec, null, isUndefined);
                }
            }
            var location = getLocation();
            if (location && location.protocol === "https:") {
                setValue(values, "secure", null, null, isUndefined);
                if (_allowUaSameSite === null) {
                    _allowUaSameSite = !uaDisallowsSameSiteNone((getNavigator() || {})[_DYN_USER_AGENT ]);
                }
                if (_allowUaSameSite) {
                    setValue(values, "SameSite", "None", null, isUndefined);
                }
            }
            setValue(values, STR_PATH, path || _path, null, isUndefined);
            return _formatCookieValue(theValue, values);
        }
        function _removePendingCookie(name) {
            if (_pendingCookies) {
                for (var i = _pendingCookies[_DYN_LENGTH ] - 1; i >= 0; i--) {
                    if (_pendingCookies[i].n === name) {
                        _pendingCookies[_DYN_SPLICE ](i, 1);
                    }
                }
            }
        }
        function _flushPendingCookies() {
            if (areCookiesSupported(logger) && _pendingCookies) {
                arrForEach(_pendingCookies, function (pendingData) {
                    if (!_isBlockedCookie(cookieMgrConfig, pendingData.n)) {
                        if (pendingData.o === 0 ) {
                            _setCookieFn(pendingData.n, pendingData.v);
                        }
                        else if (pendingData.o === 1 ) {
                            _delCookieFn(pendingData.n, pendingData.v);
                        }
                    }
                });
                _pendingCookies = [];
            }
        }
        rootConfig = createDynamicConfig(rootConfig || _globalCookieConfig, null, logger).cfg;
        unloadHandler = onConfigChange(rootConfig, function (details) {
            details.setDf(details.cfg, rootDefaultConfig);
            cookieMgrConfig = details.ref(details.cfg, "cookieCfg");
            _path = cookieMgrConfig[STR_PATH ] || "/";
            _domain = cookieMgrConfig[STR_DOMAIN ];
            if (cookieMgrConfig.disableCookieDefer) {
                _pendingCookies = null;
            }
            else if (_pendingCookies === null) {
                _pendingCookies = [];
            }
            var wasEnabled = _enabled;
            _enabled = _isCfgEnabled(rootConfig, cookieMgrConfig) !== false;
            _getCookieFn = cookieMgrConfig.getCookie || _getCookieValue;
            _setCookieFn = cookieMgrConfig.setCookie || _setCookieValue;
            _delCookieFn = cookieMgrConfig.delCookie || _setCookieValue;
            if (!wasEnabled && _enabled && _pendingCookies) {
                _flushPendingCookies();
            }
        }, logger);
        var cookieMgr = {
            isEnabled: function () {
                var enabled = _isCfgEnabled(rootConfig, cookieMgrConfig) !== false && _enabled && areCookiesSupported(logger);
                var gblManager = _globalCookieConfig[strConfigCookieMgr];
                if (enabled && gblManager && cookieMgr !== gblManager) {
                    enabled = _isMgrEnabled(gblManager);
                }
                return enabled;
            },
            setEnabled: function (value) {
                cookieMgrConfig[_DYN_ENABLED ] = value;
                if (!isUndefined(rootConfig[strDisableCookiesUsage])) {
                    rootConfig[strDisableCookiesUsage] = !value;
                }
            },
            set: function (name, value, maxAgeSec, domain, path) {
                var result = false;
                var isBlocked = _isBlockedCookie(cookieMgrConfig, name);
                if (!isBlocked) {
                    var cookieValue = _formatSetCookieValue(value, maxAgeSec, domain, path);
                    if (_isMgrEnabled(cookieMgr)) {
                        _setCookieFn(name, cookieValue);
                        result = true;
                    }
                    else if (_pendingCookies) {
                        _removePendingCookie(name);
                        _pendingCookies[_DYN_PUSH ]({
                            n: name,
                            o: 0 ,
                            v: cookieValue
                        });
                        result = true;
                    }
                }
                return result;
            },
            get: function (name) {
                var value = STR_EMPTY$1;
                var isIgnored = _isIgnoredCookie(cookieMgrConfig, name);
                if (!isIgnored) {
                    if (_isMgrEnabled(cookieMgr)) {
                        value = _getCookieFn(name);
                    }
                    else if (_pendingCookies) {
                        for (var i = _pendingCookies[_DYN_LENGTH ] - 1; i >= 0; i--) {
                            var pendingData = _pendingCookies[i];
                            if (pendingData.n === name) {
                                if (pendingData.o === 0 ) {
                                    var cookieValue = pendingData.v;
                                    var idx = strIndexOf(cookieValue, ";");
                                    value = idx !== -1 ? strTrim(strLeft(cookieValue, idx)) : strTrim(cookieValue);
                                }
                                break;
                            }
                        }
                    }
                }
                return value;
            },
            del: function (name, path) {
                var result = false;
                if (_isMgrEnabled(cookieMgr)) {
                    result = cookieMgr.purge(name, path);
                }
                else if (_pendingCookies) {
                    _removePendingCookie(name);
                    _pendingCookies[_DYN_PUSH ]({
                        n: name,
                        o: 1 ,
                        v: _formatDeletionValue(path)
                    });
                    result = true;
                }
                return result;
            },
            purge: function (name, path) {
                var result = false;
                if (areCookiesSupported(logger)) {
                    _delCookieFn(name, _formatDeletionValue(path));
                    result = true;
                }
                return result;
            },
            unload: function (isAsync) {
                unloadHandler && unloadHandler.rm();
                unloadHandler = null;
                _pendingCookies = null;
            }
        };
        cookieMgr[strConfigCookieMgr] = cookieMgr;
        return cookieMgr;
    }
    function areCookiesSupported(logger) {
        if (_supportsCookies === null) {
            _supportsCookies = false;
            !_doc && _getDoc();
            try {
                var doc = _doc.v || {};
                _supportsCookies = doc[strCookie] !== undefined;
            }
            catch (e) {
                _throwInternal(logger, 2 , 68 , "Cannot access document.cookie - " + getExceptionName(e), { exception: dumpObj(e) });
            }
        }
        return _supportsCookies;
    }
    function _extractParts(theValue) {
        var values = {};
        if (theValue && theValue[_DYN_LENGTH ]) {
            var parts = strTrim(theValue)[_DYN_SPLIT ](";");
            arrForEach(parts, function (thePart) {
                thePart = strTrim(thePart || STR_EMPTY$1);
                if (thePart) {
                    var idx = strIndexOf(thePart, "=");
                    if (idx === -1) {
                        values[thePart] = null;
                    }
                    else {
                        values[strTrim(strLeft(thePart, idx))] = strTrim(strSubstring(thePart, idx + 1));
                    }
                }
            });
        }
        return values;
    }
    function _formatDate(theDate, func) {
        if (isFunction(theDate[func])) {
            return theDate[func]();
        }
        return null;
    }
    function _formatCookieValue(value, values) {
        var cookieValue = value || STR_EMPTY$1;
        objForEachKey(values, function (name, theValue) {
            cookieValue += "; " + name + (!isNullOrUndefined(theValue) ? "=" + theValue : STR_EMPTY$1);
        });
        return cookieValue;
    }
    function _getCookieValue(name) {
        var cookieValue = STR_EMPTY$1;
        !_doc && _getDoc();
        if (_doc.v) {
            var theCookie = _doc.v[strCookie] || STR_EMPTY$1;
            if (_parsedCookieValue !== theCookie) {
                _cookieCache = _extractParts(theCookie);
                _parsedCookieValue = theCookie;
            }
            cookieValue = strTrim(_cookieCache[name] || STR_EMPTY$1);
        }
        return cookieValue;
    }
    function _setCookieValue(name, cookieValue) {
        !_doc && _getDoc();
        if (_doc.v) {
            _doc.v[strCookie] = name + "=" + cookieValue;
        }
    }
    function uaDisallowsSameSiteNone(userAgent) {
        if (!isString(userAgent)) {
            return false;
        }
        if (strContains(userAgent, "CPU iPhone OS 12") || strContains(userAgent, "iPad; CPU OS 12")) {
            return true;
        }
        if (strContains(userAgent, "Macintosh; Intel Mac OS X 10_14") && strContains(userAgent, "Version/") && strContains(userAgent, "Safari")) {
            return true;
        }
        if (strContains(userAgent, "Macintosh; Intel Mac OS X 10_14") && strEndsWith(userAgent, "AppleWebKit/605.1.15 (KHTML, like Gecko)")) {
            return true;
        }
        if (strContains(userAgent, "Chrome/5") || strContains(userAgent, "Chrome/6")) {
            return true;
        }
        if (strContains(userAgent, "UnrealEngine") && !strContains(userAgent, "Chrome")) {
            return true;
        }
        if (strContains(userAgent, "UCBrowser/12") || strContains(userAgent, "UCBrowser/11")) {
            return true;
        }
        return false;
    }

    var defaultValues$1 = {
        perfEvtsSendAll: false
    };
    function _runScheduledListeners(asyncNotifications) {
        asyncNotifications.h = null;
        var callbacks = asyncNotifications.cb;
        asyncNotifications.cb = [];
        arrForEach(callbacks, function (cb) {
            safe(cb.fn, [cb.arg]);
        });
    }
    function _runListeners(listeners, name, asyncNotifications, callback) {
        arrForEach(listeners, function (listener) {
            if (listener && listener[name]) {
                if (asyncNotifications) {
                    asyncNotifications.cb[_DYN_PUSH ]({
                        fn: callback,
                        arg: listener
                    });
                    asyncNotifications.h = asyncNotifications.h || scheduleTimeout(_runScheduledListeners, 0, asyncNotifications);
                }
                else {
                    safe(callback, [listener]);
                }
            }
        });
    }
    var NotificationManager = /** @class */ (function () {
        function NotificationManager(config) {
            this.listeners = [];
            var perfEvtsSendAll;
            var unloadHandler;
            var _listeners = [];
            var _asyncNotifications = {
                h: null,
                cb: []
            };
            var cfgHandler = createDynamicConfig(config, defaultValues$1);
            unloadHandler = cfgHandler[_DYN_WATCH ](function (details) {
                perfEvtsSendAll = !!details.cfg.perfEvtsSendAll;
            });
            dynamicProto(NotificationManager, this, function (_self) {
                objDefine(_self, "listeners", {
                    g: function () { return _listeners; }
                });
                _self[_DYN_ADD_NOTIFICATION_LIS1 ] = function (listener) {
                    _listeners[_DYN_PUSH ](listener);
                };
                _self[_DYN_REMOVE_NOTIFICATION_0 ] = function (listener) {
                    var index = arrIndexOf(_listeners, listener);
                    while (index > -1) {
                        _listeners[_DYN_SPLICE ](index, 1);
                        index = arrIndexOf(_listeners, listener);
                    }
                };
                _self[STR_EVENTS_SENT ] = function (events) {
                    _runListeners(_listeners, STR_EVENTS_SENT, _asyncNotifications, function (listener) {
                        listener[STR_EVENTS_SENT ](events);
                    });
                };
                _self[STR_EVENTS_DISCARDED ] = function (events, reason) {
                    _runListeners(_listeners, STR_EVENTS_DISCARDED, _asyncNotifications, function (listener) {
                        listener[STR_EVENTS_DISCARDED ](events, reason);
                    });
                };
                _self[STR_EVENTS_SEND_REQUEST ] = function (sendReason, isAsync) {
                    _runListeners(_listeners, STR_EVENTS_SEND_REQUEST, isAsync ? _asyncNotifications : null, function (listener) {
                        listener[STR_EVENTS_SEND_REQUEST ](sendReason, isAsync);
                    });
                };
                _self[STR_PERF_EVENT ] = function (perfEvent) {
                    if (perfEvent) {
                        if (perfEvtsSendAll || !perfEvent[_DYN_IS_CHILD_EVT ]()) {
                            _runListeners(_listeners, STR_PERF_EVENT, null, function (listener) {
                                if (perfEvent.isAsync) {
                                    scheduleTimeout(function () { return listener[STR_PERF_EVENT ](perfEvent); }, 0);
                                }
                                else {
                                    listener[STR_PERF_EVENT ](perfEvent);
                                }
                            });
                        }
                    }
                };
                _self[STR_OFFLINE_STORE ] = function (events) {
                    if (events && events[_DYN_LENGTH ]) {
                        _runListeners(_listeners, STR_OFFLINE_STORE, _asyncNotifications, function (listener) {
                            listener[STR_OFFLINE_STORE ](events);
                        });
                    }
                };
                _self[STR_OFFLINE_SENT ] = function (batch) {
                    if (batch && batch[_DYN_DATA ]) {
                        _runListeners(_listeners, STR_OFFLINE_SENT, _asyncNotifications, function (listener) {
                            listener[STR_OFFLINE_SENT ](batch);
                        });
                    }
                };
                _self[STR_OFFLINE_DROP ] = function (cnt, reason) {
                    if (cnt > 0) {
                        var rn_1 = reason || 0;
                        _runListeners(_listeners, STR_OFFLINE_DROP, _asyncNotifications, function (listener) {
                            listener[STR_OFFLINE_DROP ](cnt, rn_1);
                        });
                    }
                };
                _self[_DYN_UNLOAD ] = function (isAsync) {
                    var _finishUnload = function () {
                        unloadHandler && unloadHandler.rm();
                        unloadHandler = null;
                        _listeners = [];
                        _asyncNotifications.h && _asyncNotifications.h[_DYN_CANCEL ]();
                        _asyncNotifications.h = null;
                        _asyncNotifications.cb = [];
                    };
                    var waiting;
                    _runListeners(_listeners, "unload", null, function (listener) {
                        var asyncUnload = listener[_DYN_UNLOAD ](isAsync);
                        if (asyncUnload) {
                            if (!waiting) {
                                waiting = [];
                            }
                            waiting[_DYN_PUSH ](asyncUnload);
                        }
                    });
                    if (waiting) {
                        return createPromise(function (resolve) {
                            return doAwaitResponse(createAllPromise(waiting), function () {
                                _finishUnload();
                                resolve();
                            });
                        });
                    }
                    else {
                        _finishUnload();
                    }
                };
            });
        }
        NotificationManager.__ieDyn=1;
        return NotificationManager;
    }());

    var strExecutionContextKey = "ctx";
    var strParentContextKey = "ParentContextKey";
    var strChildrenContextKey = "ChildrenContextKey";
    var _defaultPerfManager = null;
    var PerfEvent = /** @class */ (function () {
        function PerfEvent(name, payloadDetails, isAsync) {
            var _self = this;
            _self.start = utcNow();
            _self[_DYN_NAME ] = name;
            _self.isAsync = isAsync;
            _self[_DYN_IS_CHILD_EVT ] = function () { return false; };
            if (isFunction(payloadDetails)) {
                var theDetails_1;
                objDefine(_self, "payload", {
                    g: function () {
                        if (!theDetails_1 && isFunction(payloadDetails)) {
                            theDetails_1 = payloadDetails();
                            payloadDetails = null;
                        }
                        return theDetails_1;
                    }
                });
            }
            _self[_DYN_GET_CTX ] = function (key) {
                if (key) {
                    if (key === PerfEvent[strParentContextKey] || key === PerfEvent[strChildrenContextKey]) {
                        return _self[key];
                    }
                    return (_self[strExecutionContextKey] || {})[key];
                }
                return null;
            };
            _self[_DYN_SET_CTX ] = function (key, value) {
                if (key) {
                    if (key === PerfEvent[strParentContextKey]) {
                        if (!_self[key]) {
                            _self[_DYN_IS_CHILD_EVT ] = function () { return true; };
                        }
                        _self[key] = value;
                    }
                    else if (key === PerfEvent[strChildrenContextKey]) {
                        _self[key] = value;
                    }
                    else {
                        var ctx = _self[strExecutionContextKey] = _self[strExecutionContextKey] || {};
                        ctx[key] = value;
                    }
                }
            };
            _self.complete = function () {
                var childTime = 0;
                var childEvts = _self[_DYN_GET_CTX ](PerfEvent[strChildrenContextKey]);
                if (isArray(childEvts)) {
                    for (var lp = 0; lp < childEvts[_DYN_LENGTH ]; lp++) {
                        var childEvt = childEvts[lp];
                        if (childEvt) {
                            childTime += childEvt.time;
                        }
                    }
                }
                _self.time = utcNow() - _self.start;
                _self.exTime = _self.time - childTime;
                _self.complete = function () { };
            };
        }
        PerfEvent.ParentContextKey = "parent";
        PerfEvent.ChildrenContextKey = "childEvts";
        return PerfEvent;
    }());
    var PerfManager = /** @class */ (function () {
        function PerfManager(manager) {
            this.ctx = {};
            dynamicProto(PerfManager, this, function (_self) {
                _self.create = function (src, payloadDetails, isAsync) {
                    return new PerfEvent(src, payloadDetails, isAsync);
                };
                _self.fire = function (perfEvent) {
                    if (perfEvent) {
                        perfEvent.complete();
                        if (manager && isFunction(manager[STR_PERF_EVENT ])) {
                            manager[STR_PERF_EVENT ](perfEvent);
                        }
                    }
                };
                _self[_DYN_SET_CTX ] = function (key, value) {
                    if (key) {
                        var ctx = _self[strExecutionContextKey] = _self[strExecutionContextKey] || {};
                        ctx[key] = value;
                    }
                };
                _self[_DYN_GET_CTX ] = function (key) {
                    return (_self[strExecutionContextKey] || {})[key];
                };
            });
        }
        PerfManager.__ieDyn=1;
        return PerfManager;
    }());
    var doPerfActiveKey = "CoreUtils.doPerf";
    function doPerf(mgrSource, getSource, func, details, isAsync) {
        if (mgrSource) {
            var perfMgr = mgrSource;
            if (perfMgr[STR_GET_PERF_MGR]) {
                perfMgr = perfMgr[STR_GET_PERF_MGR]();
            }
            if (perfMgr) {
                var perfEvt = void 0;
                var currentActive = perfMgr[_DYN_GET_CTX ](doPerfActiveKey);
                try {
                    perfEvt = perfMgr.create(getSource(), details, isAsync);
                    if (perfEvt) {
                        if (currentActive && perfEvt[_DYN_SET_CTX ]) {
                            perfEvt[_DYN_SET_CTX ](PerfEvent[strParentContextKey], currentActive);
                            if (currentActive[_DYN_GET_CTX ] && currentActive[_DYN_SET_CTX ]) {
                                var children = currentActive[_DYN_GET_CTX ](PerfEvent[strChildrenContextKey]);
                                if (!children) {
                                    children = [];
                                    currentActive[_DYN_SET_CTX ](PerfEvent[strChildrenContextKey], children);
                                }
                                children[_DYN_PUSH ](perfEvt);
                            }
                        }
                        perfMgr[_DYN_SET_CTX ](doPerfActiveKey, perfEvt);
                        return func(perfEvt);
                    }
                }
                catch (ex) {
                    if (perfEvt && perfEvt[_DYN_SET_CTX ]) {
                        perfEvt[_DYN_SET_CTX ]("exception", ex);
                    }
                }
                finally {
                    if (perfEvt) {
                        perfMgr.fire(perfEvt);
                    }
                    perfMgr[_DYN_SET_CTX ](doPerfActiveKey, currentActive);
                }
            }
        }
        return func();
    }
    function setGblPerfMgr(perfManager) {
        _defaultPerfManager = perfManager;
    }
    function getGblPerfMgr() {
        return _defaultPerfManager;
    }

    var Undefined = strShimUndefined;
    function newGuid() {
        var uuid = generateW3CId();
        return strSubstring(uuid, 0, 8) + "-" + strSubstring(uuid, 8, 12) + "-" + strSubstring(uuid, 12, 16) + "-" + strSubstring(uuid, 16, 20) + "-" + strSubstring(uuid, 20);
    }
    function generateW3CId() {
        var hexValues = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
        var oct = STR_EMPTY$1, tmp;
        for (var a = 0; a < 4; a++) {
            tmp = random32();
            oct +=
                hexValues[tmp & 0xF] +
                    hexValues[tmp >> 4 & 0xF] +
                    hexValues[tmp >> 8 & 0xF] +
                    hexValues[tmp >> 12 & 0xF] +
                    hexValues[tmp >> 16 & 0xF] +
                    hexValues[tmp >> 20 & 0xF] +
                    hexValues[tmp >> 24 & 0xF] +
                    hexValues[tmp >> 28 & 0xF];
        }
        var clockSequenceHi = hexValues[8 + (random32() & 0x03) | 0];
        return strSubstr(oct, 0, 8) + strSubstr(oct, 9, 4) + "4" + strSubstr(oct, 13, 3) + clockSequenceHi + strSubstr(oct, 16, 3) + strSubstr(oct, 19, 12);
    }

    var TRACE_PARENT_REGEX = /^([\da-f]{2})-([\da-f]{32})-([\da-f]{16})-([\da-f]{2})(-[^\s]{1,64})?$/i;
    var DEFAULT_VERSION = "00";
    var INVALID_VERSION = "ff";
    var INVALID_TRACE_ID = "00000000000000000000000000000000";
    var INVALID_SPAN_ID = "0000000000000000";
    var SAMPLED_FLAG = 0x01;
    function _isValid(value, len, invalidValue) {
        if (value && value[_DYN_LENGTH ] === len && value !== invalidValue) {
            return !!value.match(/^[\da-f]*$/i);
        }
        return false;
    }
    function _formatValue(value, len, defValue) {
        if (_isValid(value, len)) {
            return value;
        }
        return defValue;
    }
    function _formatFlags(value) {
        if (isNaN(value) || value < 0 || value > 255) {
            value = 0x01;
        }
        var result = value.toString(16);
        while (result[_DYN_LENGTH ] < 2) {
            result = "0" + result;
        }
        return result;
    }
    function createTraceParent(traceId, spanId, flags, version) {
        return {
            version: _isValid(version, 2, INVALID_VERSION) ? version : DEFAULT_VERSION,
            traceId: isValidTraceId(traceId) ? traceId : generateW3CId(),
            spanId: isValidSpanId(spanId) ? spanId : strLeft(generateW3CId(), 16),
            traceFlags: flags >= 0 && flags <= 0xFF ? flags : 1
        };
    }
    function parseTraceParent(value, selectIdx) {
        if (!value) {
            return null;
        }
        if (isArray(value)) {
            value = value[0] || "";
        }
        if (!value || !isString(value) || value[_DYN_LENGTH ] > 8192) {
            return null;
        }
        if (value[_DYN_INDEX_OF ](",") !== -1) {
            var values = value[_DYN_SPLIT ](",");
            value = values[selectIdx > 0 && values[_DYN_LENGTH ] > selectIdx ? selectIdx : 0];
        }
        var match = TRACE_PARENT_REGEX.exec(strTrim(value));
        if (!match ||
            match[1] === INVALID_VERSION ||
            match[2] === INVALID_TRACE_ID ||
            match[3] === INVALID_SPAN_ID) {
            return null;
        }
        return {
            version: (match[1] || STR_EMPTY$1)[_DYN_TO_LOWER_CASE ](),
            traceId: (match[2] || STR_EMPTY$1)[_DYN_TO_LOWER_CASE ](),
            spanId: (match[3] || STR_EMPTY$1)[_DYN_TO_LOWER_CASE ](),
            traceFlags: parseInt(match[4], 16)
        };
    }
    function isValidTraceId(value) {
        return _isValid(value, 32, INVALID_TRACE_ID);
    }
    function isValidSpanId(value) {
        return _isValid(value, 16, INVALID_SPAN_ID);
    }
    function isValidTraceParent(value) {
        if (!value ||
            !_isValid(value[_DYN_VERSION ], 2, INVALID_VERSION) ||
            !_isValid(value.traceId, 32, INVALID_TRACE_ID) ||
            !_isValid(value.spanId, 16, INVALID_SPAN_ID) ||
            !_isValid(_formatFlags(value[_DYN_TRACE_FLAGS ]), 2)) {
            return false;
        }
        return true;
    }
    function isSampledFlag(value) {
        if (isValidTraceParent(value)) {
            return (value[_DYN_TRACE_FLAGS ] & SAMPLED_FLAG) === SAMPLED_FLAG;
        }
        return false;
    }
    function formatTraceParent(value) {
        if (value) {
            var flags = _formatFlags(value[_DYN_TRACE_FLAGS ]);
            if (!_isValid(flags, 2)) {
                flags = "01";
            }
            var version = value[_DYN_VERSION ] || DEFAULT_VERSION;
            if (version !== "00" && version !== "ff") {
                version = DEFAULT_VERSION;
            }
            return "".concat(version.toLowerCase(), "-").concat(_formatValue(value.traceId, 32, INVALID_TRACE_ID).toLowerCase(), "-").concat(_formatValue(value.spanId, 16, INVALID_SPAN_ID).toLowerCase(), "-").concat(flags.toLowerCase());
        }
        return "";
    }
    function findW3cTraceParent(selectIdx) {
        var name = "traceparent";
        var traceParent = parseTraceParent(findMetaTag(name), selectIdx);
        if (!traceParent) {
            traceParent = parseTraceParent(findNamedServerTiming(name), selectIdx);
        }
        return traceParent;
    }
    function findAllScripts(doc) {
        var scripts = doc.getElementsByTagName("script");
        var result = [];
        arrForEach(scripts, function (script) {
            var src = script[_DYN_GET_ATTRIBUTE ]("src");
            if (src) {
                var crossOrigin = script[_DYN_GET_ATTRIBUTE ]("crossorigin");
                var async = script.hasAttribute("async") === true;
                var defer = script.hasAttribute("defer") === true;
                var referrerPolicy = script[_DYN_GET_ATTRIBUTE ]("referrerpolicy");
                var info = { url: src };
                if (crossOrigin) {
                    info.crossOrigin = crossOrigin;
                }
                if (async) {
                    info.async = async;
                }
                if (defer) {
                    info.defer = defer;
                }
                if (referrerPolicy) {
                    info.referrerPolicy = referrerPolicy;
                }
                result[_DYN_PUSH ](info);
            }
        });
        return result;
    }

    var pluginStateData = createElmNodeData("plugin");
    function _getPluginState(plugin) {
        return pluginStateData.get(plugin, "state", {}, true);
    }
    function initializePlugins(processContext, extensions) {
        var initPlugins = [];
        var lastPlugin = null;
        var proxy = processContext[_DYN_GET_NEXT ]();
        var pluginState;
        while (proxy) {
            var thePlugin = proxy[_DYN_GET_PLUGIN ]();
            if (thePlugin) {
                if (lastPlugin && lastPlugin[_DYN_SET_NEXT_PLUGIN ] && thePlugin[STR_PROCESS_TELEMETRY ]) {
                    lastPlugin[_DYN_SET_NEXT_PLUGIN ](thePlugin);
                }
                pluginState = _getPluginState(thePlugin);
                var isInitialized = !!pluginState[_DYN_IS_INITIALIZED ];
                if (thePlugin[_DYN_IS_INITIALIZED ]) {
                    isInitialized = thePlugin[_DYN_IS_INITIALIZED ]();
                }
                if (!isInitialized) {
                    initPlugins[_DYN_PUSH ](thePlugin);
                }
                lastPlugin = thePlugin;
                proxy = proxy[_DYN_GET_NEXT ]();
            }
        }
        arrForEach(initPlugins, function (thePlugin) {
            var core = processContext[STR_CORE ]();
            thePlugin[_DYN_INITIALIZE ](processContext.getCfg(), core, extensions, processContext[_DYN_GET_NEXT ]());
            pluginState = _getPluginState(thePlugin);
            if (!thePlugin[STR_CORE] && !pluginState[STR_CORE]) {
                pluginState[STR_CORE] = core;
            }
            pluginState[_DYN_IS_INITIALIZED ] = true;
            delete pluginState[_DYN_TEARDOWN ];
        });
    }
    function sortPlugins(plugins) {
        return plugins.sort(function (extA, extB) {
            var result = 0;
            if (extB) {
                var bHasProcess = extB[STR_PROCESS_TELEMETRY];
                if (extA[STR_PROCESS_TELEMETRY]) {
                    result = bHasProcess ? extA[STR_PRIORITY] - extB[STR_PRIORITY] : 1;
                }
                else if (bHasProcess) {
                    result = -1;
                }
            }
            else {
                result = extA ? 1 : -1;
            }
            return result;
        });
    }
    function unloadComponents(components, unloadCtx, unloadState, asyncCallback) {
        var idx = 0;
        function _doUnload() {
            while (idx < components[_DYN_LENGTH ]) {
                var component = components[idx++];
                if (component) {
                    var func = component._doUnload || component[_DYN__DO_TEARDOWN ];
                    if (isFunction(func)) {
                        if (func.call(component, unloadCtx, unloadState, _doUnload) === true) {
                            return true;
                        }
                    }
                }
            }
        }
        return _doUnload();
    }
    function createDistributedTraceContext(parentCtx) {
        var trace = {};
        return {
            getName: function () {
                return trace[_DYN_NAME ];
            },
            setName: function (newValue) {
                parentCtx && parentCtx.setName(newValue);
                trace[_DYN_NAME ] = newValue;
            },
            getTraceId: function () {
                return trace.traceId;
            },
            setTraceId: function (newValue) {
                parentCtx && parentCtx.setTraceId(newValue);
                if (isValidTraceId(newValue)) {
                    trace.traceId = newValue;
                }
            },
            getSpanId: function () {
                return trace.spanId;
            },
            setSpanId: function (newValue) {
                parentCtx && parentCtx.setSpanId(newValue);
                if (isValidSpanId(newValue)) {
                    trace.spanId = newValue;
                }
            },
            getTraceFlags: function () {
                return trace[_DYN_TRACE_FLAGS ];
            },
            setTraceFlags: function (newTraceFlags) {
                parentCtx && parentCtx.setTraceFlags(newTraceFlags);
                trace[_DYN_TRACE_FLAGS ] = newTraceFlags;
            }
        };
    }

    var strTelemetryPluginChain = "TelemetryPluginChain";
    var strHasRunFlags = "_hasRun";
    var strGetTelCtx = "_getTelCtx";
    var _chainId = 0;
    function _getNextProxyStart(proxy, core, startAt) {
        while (proxy) {
            if (proxy[_DYN_GET_PLUGIN ]() === startAt) {
                return proxy;
            }
            proxy = proxy[_DYN_GET_NEXT ]();
        }
        return createTelemetryProxyChain([startAt], core.config || {}, core);
    }
    function _createInternalContext(telemetryChain, dynamicHandler, core, startAt) {
        var _nextProxy = null;
        var _onComplete = [];
        if (!dynamicHandler) {
            dynamicHandler = createDynamicConfig({}, null, core[_DYN_LOGGER ]);
        }
        if (startAt !== null) {
            _nextProxy = startAt ? _getNextProxyStart(telemetryChain, core, startAt) : telemetryChain;
        }
        var context = {
            _next: _moveNext,
            ctx: {
                core: function () {
                    return core;
                },
                diagLog: function () {
                    return safeGetLogger(core, dynamicHandler.cfg);
                },
                getCfg: function () {
                    return dynamicHandler.cfg;
                },
                getExtCfg: _resolveExtCfg,
                getConfig: _getConfig,
                hasNext: function () {
                    return !!_nextProxy;
                },
                getNext: function () {
                    return _nextProxy;
                },
                setNext: function (nextPlugin) {
                    _nextProxy = nextPlugin;
                },
                iterate: _iterateChain,
                onComplete: _addOnComplete
            }
        };
        function _addOnComplete(onComplete, that) {
            var args = [];
            for (var _i = 2; _i < arguments.length; _i++) {
                args[_i - 2] = arguments[_i];
            }
            if (onComplete) {
                _onComplete[_DYN_PUSH ]({
                    func: onComplete,
                    self: !isUndefined(that) ? that : context.ctx,
                    args: args
                });
            }
        }
        function _moveNext() {
            var nextProxy = _nextProxy;
            _nextProxy = nextProxy ? nextProxy[_DYN_GET_NEXT ]() : null;
            if (!nextProxy) {
                var onComplete = _onComplete;
                if (onComplete && onComplete[_DYN_LENGTH ] > 0) {
                    arrForEach(onComplete, function (completeDetails) {
                        try {
                            completeDetails.func.call(completeDetails.self, completeDetails.args);
                        }
                        catch (e) {
                            _throwInternal(core[_DYN_LOGGER ], 2 , 73 , "Unexpected Exception during onComplete - " + dumpObj(e));
                        }
                    });
                    _onComplete = [];
                }
            }
            return nextProxy;
        }
        function _getExtCfg(identifier, createIfMissing) {
            var idCfg = null;
            var cfg = dynamicHandler.cfg;
            if (cfg && identifier) {
                var extCfg = cfg[STR_EXTENSION_CONFIG ];
                if (!extCfg && createIfMissing) {
                    extCfg = {};
                }
                cfg[STR_EXTENSION_CONFIG] = extCfg;
                extCfg = dynamicHandler.ref(cfg, STR_EXTENSION_CONFIG);
                if (extCfg) {
                    idCfg = extCfg[identifier];
                    if (!idCfg && createIfMissing) {
                        idCfg = {};
                    }
                    extCfg[identifier] = idCfg;
                    idCfg = dynamicHandler.ref(extCfg, identifier);
                }
            }
            return idCfg;
        }
        function _resolveExtCfg(identifier, defaultValues) {
            var newConfig = _getExtCfg(identifier, true);
            if (defaultValues) {
                objForEachKey(defaultValues, function (field, defaultValue) {
                    if (isNullOrUndefined(newConfig[field])) {
                        var cfgValue = dynamicHandler.cfg[field];
                        if (cfgValue || !isNullOrUndefined(cfgValue)) {
                            newConfig[field] = cfgValue;
                        }
                    }
                    _applyDefaultValue(dynamicHandler, newConfig, field, defaultValue);
                });
            }
            return dynamicHandler.setDf(newConfig, defaultValues);
        }
        function _getConfig(identifier, field, defaultValue) {
            if (defaultValue === void 0) { defaultValue = false; }
            var theValue;
            var extConfig = _getExtCfg(identifier, false);
            var rootConfig = dynamicHandler.cfg;
            if (extConfig && (extConfig[field] || !isNullOrUndefined(extConfig[field]))) {
                theValue = extConfig[field];
            }
            else if (rootConfig[field] || !isNullOrUndefined(rootConfig[field])) {
                theValue = rootConfig[field];
            }
            return (theValue || !isNullOrUndefined(theValue)) ? theValue : defaultValue;
        }
        function _iterateChain(cb) {
            var nextPlugin;
            while (!!(nextPlugin = context._next())) {
                var plugin = nextPlugin[_DYN_GET_PLUGIN ]();
                if (plugin) {
                    cb(plugin);
                }
            }
        }
        return context;
    }
    function createProcessTelemetryContext(telemetryChain, cfg, core, startAt) {
        var config = createDynamicConfig(cfg);
        var internalContext = _createInternalContext(telemetryChain, config, core, startAt);
        var context = internalContext.ctx;
        function _processNext(env) {
            var nextPlugin = internalContext._next();
            if (nextPlugin) {
                nextPlugin[STR_PROCESS_TELEMETRY ](env, context);
            }
            return !nextPlugin;
        }
        function _createNew(plugins, startAt) {
            if (plugins === void 0) { plugins = null; }
            if (isArray(plugins)) {
                plugins = createTelemetryProxyChain(plugins, config.cfg, core, startAt);
            }
            return createProcessTelemetryContext(plugins || context[_DYN_GET_NEXT ](), config.cfg, core, startAt);
        }
        context[_DYN_PROCESS_NEXT ] = _processNext;
        context[_DYN_CREATE_NEW ] = _createNew;
        return context;
    }
    function createProcessTelemetryUnloadContext(telemetryChain, core, startAt) {
        var config = createDynamicConfig(core.config);
        var internalContext = _createInternalContext(telemetryChain, config, core, startAt);
        var context = internalContext.ctx;
        function _processNext(unloadState) {
            var nextPlugin = internalContext._next();
            nextPlugin && nextPlugin[_DYN_UNLOAD ](context, unloadState);
            return !nextPlugin;
        }
        function _createNew(plugins, startAt) {
            if (plugins === void 0) { plugins = null; }
            if (isArray(plugins)) {
                plugins = createTelemetryProxyChain(plugins, config.cfg, core, startAt);
            }
            return createProcessTelemetryUnloadContext(plugins || context[_DYN_GET_NEXT ](), core, startAt);
        }
        context[_DYN_PROCESS_NEXT ] = _processNext;
        context[_DYN_CREATE_NEW ] = _createNew;
        return context;
    }
    function createProcessTelemetryUpdateContext(telemetryChain, core, startAt) {
        var config = createDynamicConfig(core.config);
        var internalContext = _createInternalContext(telemetryChain, config, core, startAt);
        var context = internalContext.ctx;
        function _processNext(updateState) {
            return context.iterate(function (plugin) {
                if (isFunction(plugin[_DYN_UPDATE ])) {
                    plugin[_DYN_UPDATE ](context, updateState);
                }
            });
        }
        function _createNew(plugins, startAt) {
            if (plugins === void 0) { plugins = null; }
            if (isArray(plugins)) {
                plugins = createTelemetryProxyChain(plugins, config.cfg, core, startAt);
            }
            return createProcessTelemetryUpdateContext(plugins || context[_DYN_GET_NEXT ](), core, startAt);
        }
        context[_DYN_PROCESS_NEXT ] = _processNext;
        context[_DYN_CREATE_NEW ] = _createNew;
        return context;
    }
    function createTelemetryProxyChain(plugins, config, core, startAt) {
        var firstProxy = null;
        var add = startAt ? false : true;
        if (isArray(plugins) && plugins[_DYN_LENGTH ] > 0) {
            var lastProxy_1 = null;
            arrForEach(plugins, function (thePlugin) {
                if (!add && startAt === thePlugin) {
                    add = true;
                }
                if (add && thePlugin && isFunction(thePlugin[STR_PROCESS_TELEMETRY ])) {
                    var newProxy = createTelemetryPluginProxy(thePlugin, config, core);
                    if (!firstProxy) {
                        firstProxy = newProxy;
                    }
                    if (lastProxy_1) {
                        lastProxy_1._setNext(newProxy);
                    }
                    lastProxy_1 = newProxy;
                }
            });
        }
        if (startAt && !firstProxy) {
            return createTelemetryProxyChain([startAt], config, core);
        }
        return firstProxy;
    }
    function createTelemetryPluginProxy(plugin, config, core) {
        var nextProxy = null;
        var hasProcessTelemetry = isFunction(plugin[STR_PROCESS_TELEMETRY ]);
        var hasSetNext = isFunction(plugin[_DYN_SET_NEXT_PLUGIN ]);
        var chainId;
        if (plugin) {
            chainId = plugin[_DYN_IDENTIFIER ] + "-" + plugin[STR_PRIORITY ] + "-" + _chainId++;
        }
        else {
            chainId = "Unknown-0-" + _chainId++;
        }
        var proxyChain = {
            getPlugin: function () {
                return plugin;
            },
            getNext: function () {
                return nextProxy;
            },
            processTelemetry: _processTelemetry,
            unload: _unloadPlugin,
            update: _updatePlugin,
            _id: chainId,
            _setNext: function (nextPlugin) {
                nextProxy = nextPlugin;
            }
        };
        function _getTelCtx() {
            var itemCtx;
            if (plugin && isFunction(plugin[strGetTelCtx])) {
                itemCtx = plugin[strGetTelCtx]();
            }
            if (!itemCtx) {
                itemCtx = createProcessTelemetryContext(proxyChain, config, core);
            }
            return itemCtx;
        }
        function _processChain(itemCtx, processPluginFn, name, details, isAsync) {
            var hasRun = false;
            var identifier = plugin ? plugin[_DYN_IDENTIFIER ] : strTelemetryPluginChain;
            var hasRunContext = itemCtx[strHasRunFlags];
            if (!hasRunContext) {
                hasRunContext = itemCtx[strHasRunFlags] = {};
            }
            itemCtx.setNext(nextProxy);
            if (plugin) {
                doPerf(itemCtx[STR_CORE ](), function () { return identifier + ":" + name; }, function () {
                    hasRunContext[chainId] = true;
                    try {
                        var nextId = nextProxy ? nextProxy._id : STR_EMPTY$1;
                        if (nextId) {
                            hasRunContext[nextId] = false;
                        }
                        hasRun = processPluginFn(itemCtx);
                    }
                    catch (error) {
                        var hasNextRun = nextProxy ? hasRunContext[nextProxy._id] : true;
                        if (hasNextRun) {
                            hasRun = true;
                        }
                        if (!nextProxy || !hasNextRun) {
                            _throwInternal(itemCtx[_DYN_DIAG_LOG ](), 1 , 73 , "Plugin [" + identifier + "] failed during " + name + " - " + dumpObj(error) + ", run flags: " + dumpObj(hasRunContext));
                        }
                    }
                }, details, isAsync);
            }
            return hasRun;
        }
        function _processTelemetry(env, itemCtx) {
            itemCtx = itemCtx || _getTelCtx();
            function _callProcessTelemetry(itemCtx) {
                if (!plugin || !hasProcessTelemetry) {
                    return false;
                }
                var pluginState = _getPluginState(plugin);
                if (pluginState[_DYN_TEARDOWN ] || pluginState[STR_DISABLED]) {
                    return false;
                }
                if (hasSetNext) {
                    plugin[_DYN_SET_NEXT_PLUGIN ](nextProxy);
                }
                plugin[STR_PROCESS_TELEMETRY ](env, itemCtx);
                return true;
            }
            if (!_processChain(itemCtx, _callProcessTelemetry, "processTelemetry", function () { return ({ item: env }); }, !(env.sync))) {
                itemCtx[_DYN_PROCESS_NEXT ](env);
            }
        }
        function _unloadPlugin(unloadCtx, unloadState) {
            function _callTeardown() {
                var hasRun = false;
                if (plugin) {
                    var pluginState = _getPluginState(plugin);
                    var pluginCore = plugin[STR_CORE] || pluginState[STR_CORE ];
                    if (plugin && (!pluginCore || pluginCore === unloadCtx.core()) && !pluginState[_DYN_TEARDOWN ]) {
                        pluginState[STR_CORE ] = null;
                        pluginState[_DYN_TEARDOWN ] = true;
                        pluginState[_DYN_IS_INITIALIZED ] = false;
                        if (plugin[_DYN_TEARDOWN ] && plugin[_DYN_TEARDOWN ](unloadCtx, unloadState) === true) {
                            hasRun = true;
                        }
                    }
                }
                return hasRun;
            }
            if (!_processChain(unloadCtx, _callTeardown, "unload", function () { }, unloadState.isAsync)) {
                unloadCtx[_DYN_PROCESS_NEXT ](unloadState);
            }
        }
        function _updatePlugin(updateCtx, updateState) {
            function _callUpdate() {
                var hasRun = false;
                if (plugin) {
                    var pluginState = _getPluginState(plugin);
                    var pluginCore = plugin[STR_CORE] || pluginState[STR_CORE ];
                    if (plugin && (!pluginCore || pluginCore === updateCtx.core()) && !pluginState[_DYN_TEARDOWN ]) {
                        if (plugin[_DYN_UPDATE ] && plugin[_DYN_UPDATE ](updateCtx, updateState) === true) {
                            hasRun = true;
                        }
                    }
                }
                return hasRun;
            }
            if (!_processChain(updateCtx, _callUpdate, "update", function () { }, false)) {
                updateCtx[_DYN_PROCESS_NEXT ](updateState);
            }
        }
        return objFreeze(proxyChain);
    }
    var ProcessTelemetryContext = /** @class */ (function () {
        function ProcessTelemetryContext(pluginChain, config, core, startAt) {
            var _self = this;
            var context = createProcessTelemetryContext(pluginChain, config, core, startAt);
            proxyFunctions(_self, context, objKeys(context));
        }
        return ProcessTelemetryContext;
    }());

    function createUnloadHandlerContainer() {
        var handlers = [];
        function _addHandler(handler) {
            if (handler) {
                handlers[_DYN_PUSH ](handler);
            }
        }
        function _runHandlers(unloadCtx, unloadState) {
            arrForEach(handlers, function (handler) {
                try {
                    handler(unloadCtx, unloadState);
                }
                catch (e) {
                    _throwInternal(unloadCtx[_DYN_DIAG_LOG ](), 2 , 73 , "Unexpected error calling unload handler - " + dumpObj(e));
                }
            });
            handlers = [];
        }
        return {
            add: _addHandler,
            run: _runHandlers
        };
    }

    var _maxHooks;
    var _hookAddMonitor;
    function _testHookMaxUnloadHooksCb(maxHooks, addMonitor) {
        _maxHooks = maxHooks;
        _hookAddMonitor = addMonitor;
    }
    function createUnloadHookContainer() {
        var _hooks = [];
        function _doUnload(logger) {
            var oldHooks = _hooks;
            _hooks = [];
            arrForEach(oldHooks, function (fn) {
                try {
                    (fn.rm || fn.remove).call(fn);
                }
                catch (e) {
                    _throwInternal(logger, 2 , 73 , "Unloading:" + dumpObj(e));
                }
            });
            if (_maxHooks && oldHooks[_DYN_LENGTH ] > _maxHooks) {
                _hookAddMonitor ? _hookAddMonitor("doUnload", oldHooks) : _throwInternal(null, 1 , 48 , "Max unload hooks exceeded. An excessive number of unload hooks has been detected.");
            }
        }
        function _addHook(hooks) {
            if (hooks) {
                arrAppend(_hooks, hooks);
                if (_maxHooks && _hooks[_DYN_LENGTH ] > _maxHooks) {
                    _hookAddMonitor ? _hookAddMonitor("Add", _hooks) : _throwInternal(null, 1 , 48 , "Max unload hooks exceeded. An excessive number of unload hooks has been detected.");
                }
            }
        }
        return {
            run: _doUnload,
            add: _addHook
        };
    }

    var _a$1;
    var strGetPlugin = "getPlugin";
    var defaultValues = (_a$1 = {},
        _a$1[STR_EXTENSION_CONFIG] = { isVal: isNotNullOrUndefined, v: {} },
        _a$1);
    var BaseTelemetryPlugin = /** @class */ (function () {
        function BaseTelemetryPlugin() {
            var _self = this;
            var _isinitialized;
            var _rootCtx;
            var _nextPlugin;
            var _unloadHandlerContainer;
            var _hookContainer;
            _initDefaults();
            dynamicProto(BaseTelemetryPlugin, _self, function (_self) {
                _self[_DYN_INITIALIZE ] = function (config, core, extensions, pluginChain) {
                    _setDefaults(config, core, pluginChain);
                    _isinitialized = true;
                };
                _self[_DYN_TEARDOWN ] = function (unloadCtx, unloadState) {
                    var core = _self[STR_CORE ];
                    if (!core || (unloadCtx && core !== unloadCtx[STR_CORE ]())) {
                        return;
                    }
                    var result;
                    var unloadDone = false;
                    var theUnloadCtx = unloadCtx || createProcessTelemetryUnloadContext(null, core, _nextPlugin && _nextPlugin[strGetPlugin] ? _nextPlugin[strGetPlugin]() : _nextPlugin);
                    var theUnloadState = unloadState || {
                        reason: 0 ,
                        isAsync: false
                    };
                    function _unloadCallback() {
                        if (!unloadDone) {
                            unloadDone = true;
                            _unloadHandlerContainer.run(theUnloadCtx, unloadState);
                            _hookContainer.run(theUnloadCtx[_DYN_DIAG_LOG ]());
                            if (result === true) {
                                theUnloadCtx[_DYN_PROCESS_NEXT ](theUnloadState);
                            }
                            _initDefaults();
                        }
                    }
                    if (!_self[_DYN__DO_TEARDOWN ] || _self[_DYN__DO_TEARDOWN ](theUnloadCtx, theUnloadState, _unloadCallback) !== true) {
                        _unloadCallback();
                    }
                    else {
                        result = true;
                    }
                    return result;
                };
                _self[_DYN_UPDATE ] = function (updateCtx, updateState) {
                    var core = _self[STR_CORE ];
                    if (!core || (updateCtx && core !== updateCtx[STR_CORE ]())) {
                        return;
                    }
                    var result;
                    var updateDone = false;
                    var theUpdateCtx = updateCtx || createProcessTelemetryUpdateContext(null, core, _nextPlugin && _nextPlugin[strGetPlugin] ? _nextPlugin[strGetPlugin]() : _nextPlugin);
                    var theUpdateState = updateState || {
                        reason: 0
                    };
                    function _updateCallback() {
                        if (!updateDone) {
                            updateDone = true;
                            _setDefaults(theUpdateCtx.getCfg(), theUpdateCtx.core(), theUpdateCtx[_DYN_GET_NEXT ]());
                        }
                    }
                    if (!_self._doUpdate || _self._doUpdate(theUpdateCtx, theUpdateState, _updateCallback) !== true) {
                        _updateCallback();
                    }
                    else {
                        result = true;
                    }
                    return result;
                };
                proxyFunctionAs(_self, "_addUnloadCb", function () { return _unloadHandlerContainer; }, "add");
                proxyFunctionAs(_self, "_addHook", function () { return _hookContainer; }, "add");
                objDefine(_self, "_unloadHooks", { g: function () { return _hookContainer; } });
            });
            _self[_DYN_DIAG_LOG ] = function (itemCtx) {
                return _getTelCtx(itemCtx)[_DYN_DIAG_LOG ]();
            };
            _self[_DYN_IS_INITIALIZED ] = function () {
                return _isinitialized;
            };
            _self.setInitialized = function (isInitialized) {
                _isinitialized = isInitialized;
            };
            _self[_DYN_SET_NEXT_PLUGIN ] = function (next) {
                _nextPlugin = next;
            };
            _self[_DYN_PROCESS_NEXT ] = function (env, itemCtx) {
                if (itemCtx) {
                    itemCtx[_DYN_PROCESS_NEXT ](env);
                }
                else if (_nextPlugin && isFunction(_nextPlugin[STR_PROCESS_TELEMETRY ])) {
                    _nextPlugin[STR_PROCESS_TELEMETRY ](env, null);
                }
            };
            _self._getTelCtx = _getTelCtx;
            function _getTelCtx(currentCtx) {
                if (currentCtx === void 0) { currentCtx = null; }
                var itemCtx = currentCtx;
                if (!itemCtx) {
                    var rootCtx = _rootCtx || createProcessTelemetryContext(null, {}, _self[STR_CORE ]);
                    if (_nextPlugin && _nextPlugin[strGetPlugin]) {
                        itemCtx = rootCtx[_DYN_CREATE_NEW ](null, _nextPlugin[strGetPlugin]);
                    }
                    else {
                        itemCtx = rootCtx[_DYN_CREATE_NEW ](null, _nextPlugin);
                    }
                }
                return itemCtx;
            }
            function _setDefaults(config, core, pluginChain) {
                createDynamicConfig(config, defaultValues, safeGetLogger(core));
                if (!pluginChain && core) {
                    pluginChain = core[_DYN_GET_PROCESS_TEL_CONT2 ]()[_DYN_GET_NEXT ]();
                }
                var nextPlugin = _nextPlugin;
                if (_nextPlugin && _nextPlugin[strGetPlugin]) {
                    nextPlugin = _nextPlugin[strGetPlugin]();
                }
                _self[STR_CORE ] = core;
                _rootCtx = createProcessTelemetryContext(pluginChain, config, core, nextPlugin);
            }
            function _initDefaults() {
                _isinitialized = false;
                _self[STR_CORE ] = null;
                _rootCtx = null;
                _nextPlugin = null;
                _hookContainer = createUnloadHookContainer();
                _unloadHandlerContainer = createUnloadHandlerContainer();
            }
        }
        BaseTelemetryPlugin.__ieDyn=1;
        return BaseTelemetryPlugin;
    }());

    function _addInitializer(_initializers, id, telemetryInitializer) {
        var theInitializer = {
            id: id,
            fn: telemetryInitializer
        };
        arrAppend(_initializers, theInitializer);
        var handler = {
            remove: function () {
                arrForEach(_initializers, function (initializer, idx) {
                    if (initializer.id === theInitializer.id) {
                        _initializers[_DYN_SPLICE ](idx, 1);
                        return -1;
                    }
                });
            }
        };
        return handler;
    }
    function _runInitializers(_initializers, item, logger) {
        var doNotSendItem = false;
        var telemetryInitializersCount = _initializers[_DYN_LENGTH ];
        for (var i = 0; i < telemetryInitializersCount; ++i) {
            var telemetryInitializer = _initializers[i];
            if (telemetryInitializer) {
                try {
                    if (telemetryInitializer.fn[_DYN_APPLY ](null, [item]) === false) {
                        doNotSendItem = true;
                        break;
                    }
                }
                catch (e) {
                    _throwInternal(logger, 2 , 64 , "Telemetry initializer failed: " + getExceptionName(e), { exception: dumpObj(e) }, true);
                }
            }
        }
        return !doNotSendItem;
    }
    var TelemetryInitializerPlugin = /** @class */ (function (_super) {
        __extendsFn(TelemetryInitializerPlugin, _super);
        function TelemetryInitializerPlugin() {
            var _this = _super.call(this) || this;
            _this.identifier = "TelemetryInitializerPlugin";
            _this.priority = 199;
            var _id;
            var _initializers;
            _initDefaults();
            dynamicProto(TelemetryInitializerPlugin, _this, function (_self, _base) {
                _self.addTelemetryInitializer = function (telemetryInitializer) {
                    return _addInitializer(_initializers, _id++, telemetryInitializer);
                };
                _self[STR_PROCESS_TELEMETRY ] = function (item, itemCtx) {
                    if (_runInitializers(_initializers, item, itemCtx ? itemCtx[_DYN_DIAG_LOG ]() : _self[_DYN_DIAG_LOG ]())) {
                        _self[_DYN_PROCESS_NEXT ](item, itemCtx);
                    }
                };
                _self[_DYN__DO_TEARDOWN ] = function () {
                    _initDefaults();
                };
            });
            function _initDefaults() {
                _id = 0;
                _initializers = [];
            }
            return _this;
        }
        TelemetryInitializerPlugin.__ieDyn=1;
        return TelemetryInitializerPlugin;
    }(BaseTelemetryPlugin));

    var _a;
    var strValidationError = "Plugins must provide initialize method";
    var strNotificationManager = "_notificationManager";
    var strSdkUnloadingError = "SDK is still unloading...";
    var strSdkNotInitialized = "SDK is not initialized";
    var maxInitQueueSize = 100;
    var maxInitTimeout = 50000;
    var defaultConfig = objDeepFreeze((_a = {
            cookieCfg: {}
        },
        _a[STR_EXTENSIONS] = { rdOnly: true, ref: true, v: [] },
        _a[STR_CHANNELS] = { rdOnly: true, ref: true, v: [] },
        _a[STR_EXTENSION_CONFIG] = { ref: true, v: {} },
        _a[STR_CREATE_PERF_MGR] = UNDEFINED_VALUE,
        _a.loggingLevelConsole = 0 ,
        _a.diagnosticLogInterval = UNDEFINED_VALUE,
        _a));
    function _createPerfManager(core, notificationMgr) {
        return new PerfManager(notificationMgr);
    }
    function _validateExtensions(logger, channelPriority, allExtensions) {
        var coreExtensions = [];
        var channels = [];
        var extPriorities = {};
        arrForEach(allExtensions, function (ext) {
            if (isNullOrUndefined(ext) || isNullOrUndefined(ext[_DYN_INITIALIZE ])) {
                throwError(strValidationError);
            }
            var extPriority = ext[STR_PRIORITY ];
            var identifier = ext[_DYN_IDENTIFIER ];
            if (ext && extPriority) {
                if (!isNullOrUndefined(extPriorities[extPriority])) {
                    _warnToConsole(logger, "Two extensions have same priority #" + extPriority + " - " + extPriorities[extPriority] + ", " + identifier);
                }
                else {
                    extPriorities[extPriority] = identifier;
                }
            }
            if (!extPriority || extPriority < channelPriority) {
                coreExtensions[_DYN_PUSH ](ext);
            }
            else {
                channels[_DYN_PUSH ](ext);
            }
        });
        return {
            core: coreExtensions,
            channels: channels
        };
    }
    function _isPluginPresent(thePlugin, plugins) {
        var exists = false;
        arrForEach(plugins, function (plugin) {
            if (plugin === thePlugin) {
                exists = true;
                return -1;
            }
        });
        return exists;
    }
    function _deepMergeConfig(details, target, newValues, merge) {
        if (newValues) {
            objForEachKey(newValues, function (key, value) {
                if (merge) {
                    if (isPlainObject(value) && isPlainObject(target[key])) {
                        _deepMergeConfig(details, target[key], value, merge);
                    }
                }
                if (merge && isPlainObject(value) && isPlainObject(target[key])) {
                    _deepMergeConfig(details, target[key], value, merge);
                }
                else {
                    details.set(target, key, value);
                }
            });
        }
    }
    function _findWatcher(listeners, newWatcher) {
        var theListener = null;
        var idx = -1;
        arrForEach(listeners, function (listener, lp) {
            if (listener.w === newWatcher) {
                theListener = listener;
                idx = lp;
                return -1;
            }
        });
        return { i: idx, l: theListener };
    }
    function _addDelayedCfgListener(listeners, newWatcher) {
        var theListener = _findWatcher(listeners, newWatcher).l;
        if (!theListener) {
            theListener = {
                w: newWatcher,
                rm: function () {
                    var fnd = _findWatcher(listeners, newWatcher);
                    if (fnd.i !== -1) {
                        listeners[_DYN_SPLICE ](fnd.i, 1);
                    }
                }
            };
            listeners[_DYN_PUSH ](theListener);
        }
        return theListener;
    }
    function _registerDelayedCfgListener(config, listeners, logger) {
        arrForEach(listeners, function (listener) {
            var unloadHdl = onConfigChange(config, listener.w, logger);
            delete listener.w;
            listener.rm = function () {
                unloadHdl.rm();
            };
        });
    }
    function _initDebugListener(configHandler, unloadContainer, notificationManager, debugListener) {
        unloadContainer.add(configHandler[_DYN_WATCH ](function (details) {
            var disableDbgExt = details.cfg.disableDbgExt;
            if (disableDbgExt === true && debugListener) {
                notificationManager[_DYN_REMOVE_NOTIFICATION_0 ](debugListener);
                debugListener = null;
            }
            if (notificationManager && !debugListener && disableDbgExt !== true) {
                debugListener = getDebugListener(details.cfg);
                notificationManager[_DYN_ADD_NOTIFICATION_LIS1 ](debugListener);
            }
        }));
        return debugListener;
    }
    function _createUnloadHook(unloadHook) {
        return objDefine({
            rm: function () {
                unloadHook.rm();
            }
        }, "toJSON", { v: function () { return "aicore::onCfgChange<" + JSON.stringify(unloadHook) + ">"; } });
    }
    var AppInsightsCore = /** @class */ (function () {
        function AppInsightsCore() {
            var _configHandler;
            var _isInitialized;
            var _logger;
            var _eventQueue;
            var _notificationManager;
            var _perfManager;
            var _cfgPerfManager;
            var _cookieManager;
            var _pluginChain;
            var _configExtensions;
            var _channelConfig;
            var _channels;
            var _isUnloading;
            var _telemetryInitializerPlugin;
            var _internalLogsEventName;
            var _evtNamespace;
            var _unloadHandlers;
            var _hookContainer;
            var _debugListener;
            var _traceCtx;
            var _instrumentationKey;
            var _cfgListeners;
            var _extensions;
            var _pluginVersionStringArr;
            var _pluginVersionString;
            var _activeStatus;
            var _endpoint;
            var _initInMemoMaxSize;
            var _isStatusSet;
            var _initTimer;
            var _internalLogPoller;
            var _internalLogPollerListening;
            var _forceStopInternalLogPoller;
            dynamicProto(AppInsightsCore, this, function (_self) {
                _initDefaults();
                _self["_getDbgPlgTargets"] = function () {
                    return [_extensions, _eventQueue];
                };
                _self[_DYN_IS_INITIALIZED ] = function () { return _isInitialized; };
                _self.activeStatus = function () { return _activeStatus; };
                _self._setPendingStatus = function () {
                    _activeStatus = 3 ;
                };
                _self[_DYN_INITIALIZE ] = function (config, extensions, logger, notificationManager) {
                    if (_isUnloading) {
                        throwError(strSdkUnloadingError);
                    }
                    if (_self[_DYN_IS_INITIALIZED ]()) {
                        throwError("Core cannot be initialized more than once");
                    }
                    _configHandler = createDynamicConfig(config, defaultConfig, logger || _self[_DYN_LOGGER ], false);
                    config = _configHandler.cfg;
                    _addUnloadHook(_configHandler[_DYN_WATCH ](function (details) {
                        var rootCfg = details.cfg;
                        _initInMemoMaxSize = rootCfg.initInMemoMaxSize || maxInitQueueSize;
                        _handleIKeyEndpointPromises(rootCfg);
                        var extCfg = details.ref(details.cfg, STR_EXTENSION_CONFIG);
                        objForEachKey(extCfg, function (key) {
                            details.ref(extCfg, key);
                        });
                    }));
                    _notificationManager = notificationManager;
                    _debugListener = _initDebugListener(_configHandler, _hookContainer, _notificationManager && _self[_DYN_GET_NOTIFY_MGR ](), _debugListener);
                    _initPerfManager();
                    _self[_DYN_LOGGER ] = logger;
                    var cfgExtensions = config[STR_EXTENSIONS ];
                    _configExtensions = [];
                    _configExtensions[_DYN_PUSH ].apply(_configExtensions, __spreadArrayFn(__spreadArrayFn([], extensions, false), cfgExtensions));
                    _channelConfig = config[STR_CHANNELS ];
                    _initPluginChain(null);
                    if (!_channels || _channels[_DYN_LENGTH ] === 0) {
                        throwError("No " + STR_CHANNELS + " available");
                    }
                    if (_channelConfig && _channelConfig[_DYN_LENGTH ] > 1) {
                        var teeController = _self[_DYN_GET_PLUGIN ]("TeeChannelController");
                        if (!teeController || !teeController.plugin) {
                            _throwInternal(_logger, 1 , 28 , "TeeChannel required");
                        }
                    }
                    _registerDelayedCfgListener(config, _cfgListeners, _logger);
                    _cfgListeners = null;
                    _isInitialized = true;
                    if (_activeStatus === ActiveStatus.ACTIVE) {
                        _releaseQueues();
                    }
                };
                _self.getChannels = function () {
                    var controls = [];
                    if (_channels) {
                        arrForEach(_channels, function (channel) {
                            controls[_DYN_PUSH ](channel);
                        });
                    }
                    return objFreeze(controls);
                };
                _self.track = function (telemetryItem) {
                    doPerf(_self[STR_GET_PERF_MGR ](), function () { return "AppInsightsCore:track"; }, function () {
                        if (telemetryItem === null) {
                            _notifyInvalidEvent(telemetryItem);
                            throwError("Invalid telemetry item");
                        }
                        if (!telemetryItem[_DYN_NAME ] && isNullOrUndefined(telemetryItem[_DYN_NAME ])) {
                            _notifyInvalidEvent(telemetryItem);
                            throwError("telemetry name required");
                        }
                        telemetryItem.iKey = telemetryItem.iKey || _instrumentationKey;
                        telemetryItem.time = telemetryItem.time || toISOString(new Date());
                        telemetryItem.ver = telemetryItem.ver || "4.0";
                        if (!_isUnloading && _self[_DYN_IS_INITIALIZED ]() && _activeStatus === ActiveStatus.ACTIVE) {
                            _createTelCtx()[_DYN_PROCESS_NEXT ](telemetryItem);
                        }
                        else if (_activeStatus !== ActiveStatus.INACTIVE) {
                            if (_eventQueue[_DYN_LENGTH ] <= _initInMemoMaxSize) {
                                _eventQueue[_DYN_PUSH ](telemetryItem);
                            }
                        }
                    }, function () { return ({ item: telemetryItem }); }, !(telemetryItem.sync));
                };
                _self[_DYN_GET_PROCESS_TEL_CONT2 ] = _createTelCtx;
                _self[_DYN_GET_NOTIFY_MGR ] = function () {
                    if (!_notificationManager) {
                        _notificationManager = new NotificationManager(_configHandler.cfg);
                        _self[strNotificationManager] = _notificationManager;
                    }
                    return _notificationManager;
                };
                _self[_DYN_ADD_NOTIFICATION_LIS1 ] = function (listener) {
                    _self.getNotifyMgr()[_DYN_ADD_NOTIFICATION_LIS1 ](listener);
                };
                _self[_DYN_REMOVE_NOTIFICATION_0 ] = function (listener) {
                    if (_notificationManager) {
                        _notificationManager[_DYN_REMOVE_NOTIFICATION_0 ](listener);
                    }
                };
                _self.getCookieMgr = function () {
                    if (!_cookieManager) {
                        _cookieManager = createCookieMgr(_configHandler.cfg, _self[_DYN_LOGGER ]);
                    }
                    return _cookieManager;
                };
                _self.setCookieMgr = function (cookieMgr) {
                    if (_cookieManager !== cookieMgr) {
                        runTargetUnload(_cookieManager, false);
                        _cookieManager = cookieMgr;
                    }
                };
                _self[STR_GET_PERF_MGR ] = function () {
                    return _perfManager || _cfgPerfManager || getGblPerfMgr();
                };
                _self.setPerfMgr = function (perfMgr) {
                    _perfManager = perfMgr;
                };
                _self.eventCnt = function () {
                    return _eventQueue[_DYN_LENGTH ];
                };
                _self.releaseQueue = function () {
                    if (_isInitialized && _eventQueue[_DYN_LENGTH ] > 0) {
                        var eventQueue = _eventQueue;
                        _eventQueue = [];
                        if (_activeStatus === 2 ) {
                            arrForEach(eventQueue, function (event) {
                                event.iKey = event.iKey || _instrumentationKey;
                                _createTelCtx()[_DYN_PROCESS_NEXT ](event);
                            });
                        }
                        else {
                            _throwInternal(_logger, 2 , 20 , "core init status is not active");
                        }
                    }
                };
                _self.pollInternalLogs = function (eventName) {
                    _internalLogsEventName = eventName || null;
                    _forceStopInternalLogPoller = false;
                    _internalLogPoller && _internalLogPoller[_DYN_CANCEL ]();
                    return _startLogPoller(true);
                };
                function _handleIKeyEndpointPromises(theConfig) {
                    var ikey = theConfig.instrumentationKey;
                    var endpointUrl = theConfig.endpointUrl;
                    if (_activeStatus !== 3 ) {
                        if (isNullOrUndefined(ikey)) {
                            _instrumentationKey = null;
                            _activeStatus = ActiveStatus.INACTIVE;
                            var msg = "Please provide instrumentation key";
                            if (!_isInitialized) {
                                throwError(msg);
                            }
                            else {
                                _throwInternal(_logger, 1 , 100 , msg);
                                _releaseQueues();
                            }
                            return;
                        }
                        var promises = [];
                        if (isPromiseLike(ikey)) {
                            promises[_DYN_PUSH ](ikey);
                            _instrumentationKey = null;
                        }
                        else {
                            _instrumentationKey = ikey;
                        }
                        if (isPromiseLike(endpointUrl)) {
                            promises[_DYN_PUSH ](endpointUrl);
                            _endpoint = null;
                        }
                        else {
                            _endpoint = endpointUrl;
                        }
                        if (promises[_DYN_LENGTH ]) {
                            _waitForInitPromises(theConfig, promises);
                        }
                        else {
                            _setStatus();
                        }
                    }
                }
                function _waitForInitPromises(theConfig, promises) {
                    _isStatusSet = false;
                    _activeStatus = 3 ;
                    var initTimeout = isNotNullOrUndefined(theConfig.initTimeOut) ? theConfig.initTimeOut : maxInitTimeout;
                    var allPromises = createSyncAllSettledPromise(promises);
                    if (_initTimer) {
                        _initTimer[_DYN_CANCEL ]();
                    }
                    _initTimer = scheduleTimeout(function () {
                        _initTimer = null;
                        if (!_isStatusSet) {
                            _setStatus();
                        }
                    }, initTimeout);
                    doAwaitResponse(allPromises, function (response) {
                        try {
                            if (_isStatusSet) {
                                return;
                            }
                            if (!response.rejected) {
                                var values = response[_DYN_VALUE ];
                                if (values && values[_DYN_LENGTH ]) {
                                    var ikeyRes = values[0];
                                    _instrumentationKey = ikeyRes && ikeyRes[_DYN_VALUE ];
                                    if (values[_DYN_LENGTH ] > 1) {
                                        var endpointRes = values[1];
                                        _endpoint = endpointRes && endpointRes[_DYN_VALUE ];
                                    }
                                }
                                if (_instrumentationKey) {
                                    theConfig.instrumentationKey = _instrumentationKey;
                                    theConfig.endpointUrl = _endpoint;
                                }
                            }
                            _setStatus();
                        }
                        catch (e) {
                            if (!_isStatusSet) {
                                _setStatus();
                            }
                        }
                    });
                }
                function _setStatus() {
                    _isStatusSet = true;
                    if (isNullOrUndefined(_instrumentationKey)) {
                        _activeStatus = ActiveStatus.INACTIVE;
                        _throwInternal(_logger, 1 , 112 , "ikey can't be resolved from promises");
                    }
                    else {
                        _activeStatus = ActiveStatus.ACTIVE;
                    }
                    _releaseQueues();
                }
                function _releaseQueues() {
                    if (_isInitialized) {
                        _self.releaseQueue();
                        _self.pollInternalLogs();
                    }
                }
                function _startLogPoller(alwaysStart) {
                    if ((!_internalLogPoller || !_internalLogPoller[_DYN_ENABLED ]) && !_forceStopInternalLogPoller) {
                        var shouldStart = alwaysStart || (_logger && _logger.queue[_DYN_LENGTH ] > 0);
                        if (shouldStart) {
                            if (!_internalLogPollerListening) {
                                _internalLogPollerListening = true;
                                _addUnloadHook(_configHandler[_DYN_WATCH ](function (details) {
                                    var interval = details.cfg.diagnosticLogInterval;
                                    if (!interval || !(interval > 0)) {
                                        interval = 10000;
                                    }
                                    var isRunning = false;
                                    if (_internalLogPoller) {
                                        isRunning = _internalLogPoller[_DYN_ENABLED ];
                                        _internalLogPoller[_DYN_CANCEL ]();
                                    }
                                    _internalLogPoller = createTimeout(_flushInternalLogs, interval);
                                    _internalLogPoller.unref();
                                    _internalLogPoller[_DYN_ENABLED ] = isRunning;
                                }));
                            }
                            _internalLogPoller[_DYN_ENABLED ] = true;
                        }
                    }
                    return _internalLogPoller;
                }
                _self[_DYN_STOP_POLLING_INTERNA3 ] = function () {
                    _forceStopInternalLogPoller = true;
                    _internalLogPoller && _internalLogPoller[_DYN_CANCEL ]();
                    _flushInternalLogs();
                };
                proxyFunctions(_self, function () { return _telemetryInitializerPlugin; }, ["addTelemetryInitializer"]);
                _self[_DYN_UNLOAD ] = function (isAsync, unloadComplete, cbTimeout) {
                    if (isAsync === void 0) { isAsync = true; }
                    if (!_isInitialized) {
                        throwError(strSdkNotInitialized);
                    }
                    if (_isUnloading) {
                        throwError(strSdkUnloadingError);
                    }
                    var unloadState = {
                        reason: 50 ,
                        isAsync: isAsync,
                        flushComplete: false
                    };
                    var result;
                    if (isAsync && !unloadComplete) {
                        result = createPromise(function (resolve) {
                            unloadComplete = resolve;
                        });
                    }
                    var processUnloadCtx = createProcessTelemetryUnloadContext(_getPluginChain(), _self);
                    processUnloadCtx[_DYN_ON_COMPLETE ](function () {
                        _hookContainer.run(_self[_DYN_LOGGER ]);
                        doUnloadAll([_cookieManager, _notificationManager, _logger], isAsync, function () {
                            _initDefaults();
                            unloadComplete && unloadComplete(unloadState);
                        });
                    }, _self);
                    function _doUnload(flushComplete) {
                        unloadState.flushComplete = flushComplete;
                        _isUnloading = true;
                        _unloadHandlers.run(processUnloadCtx, unloadState);
                        _self[_DYN_STOP_POLLING_INTERNA3 ]();
                        processUnloadCtx[_DYN_PROCESS_NEXT ](unloadState);
                    }
                    _flushInternalLogs();
                    if (!_flushChannels(isAsync, _doUnload, 6 , cbTimeout)) ;
                    return result;
                };
                _self[_DYN_GET_PLUGIN ] = _getPlugin;
                _self.addPlugin = function (plugin, replaceExisting, isAsync, addCb) {
                    if (!plugin) {
                        addCb && addCb(false);
                        _logOrThrowError(strValidationError);
                        return;
                    }
                    var existingPlugin = _getPlugin(plugin[_DYN_IDENTIFIER ]);
                    if (existingPlugin && !replaceExisting) {
                        addCb && addCb(false);
                        _logOrThrowError("Plugin [" + plugin[_DYN_IDENTIFIER ] + "] is already loaded!");
                        return;
                    }
                    var updateState = {
                        reason: 16
                    };
                    function _addPlugin(removed) {
                        _configExtensions[_DYN_PUSH ](plugin);
                        updateState.added = [plugin];
                        _initPluginChain(updateState);
                        addCb && addCb(true);
                    }
                    if (existingPlugin) {
                        var removedPlugins_1 = [existingPlugin.plugin];
                        var unloadState = {
                            reason: 2 ,
                            isAsync: !!isAsync
                        };
                        _removePlugins(removedPlugins_1, unloadState, function (removed) {
                            if (!removed) {
                                addCb && addCb(false);
                            }
                            else {
                                updateState.removed = removedPlugins_1;
                                updateState.reason |= 32 ;
                                _addPlugin();
                            }
                        });
                    }
                    else {
                        _addPlugin();
                    }
                };
                _self.updateCfg = function (newConfig, mergeExisting) {
                    if (mergeExisting === void 0) { mergeExisting = true; }
                    var updateState;
                    if (_self[_DYN_IS_INITIALIZED ]()) {
                        updateState = {
                            reason: 1 ,
                            cfg: _configHandler.cfg,
                            oldCfg: deepExtend({}, _configHandler.cfg),
                            newConfig: deepExtend({}, newConfig),
                            merge: mergeExisting
                        };
                        newConfig = updateState.newConfig;
                        var cfg = _configHandler.cfg;
                        newConfig[STR_EXTENSIONS ] = cfg[STR_EXTENSIONS ];
                        newConfig[STR_CHANNELS ] = cfg[STR_CHANNELS ];
                    }
                    _configHandler._block(function (details) {
                        var theConfig = details.cfg;
                        _deepMergeConfig(details, theConfig, newConfig, mergeExisting);
                        if (!mergeExisting) {
                            objForEachKey(theConfig, function (key) {
                                if (!objHasOwn(newConfig, key)) {
                                    details.set(theConfig, key, UNDEFINED_VALUE);
                                }
                            });
                        }
                        details.setDf(theConfig, defaultConfig);
                    }, true);
                    _configHandler.notify();
                    if (updateState) {
                        _doUpdate(updateState);
                    }
                };
                _self.evtNamespace = function () {
                    return _evtNamespace;
                };
                _self.flush = _flushChannels;
                _self.getTraceCtx = function (createNew) {
                    if (!_traceCtx) {
                        _traceCtx = createDistributedTraceContext();
                    }
                    return _traceCtx;
                };
                _self.setTraceCtx = function (traceCtx) {
                    _traceCtx = traceCtx || null;
                };
                _self.addUnloadHook = _addUnloadHook;
                proxyFunctionAs(_self, "addUnloadCb", function () { return _unloadHandlers; }, "add");
                _self.onCfgChange = function (handler) {
                    var unloadHook;
                    if (!_isInitialized) {
                        unloadHook = _addDelayedCfgListener(_cfgListeners, handler);
                    }
                    else {
                        unloadHook = onConfigChange(_configHandler.cfg, handler, _self[_DYN_LOGGER ]);
                    }
                    return _createUnloadHook(unloadHook);
                };
                _self.getWParam = function () {
                    return (hasDocument() || !!_configHandler.cfg.enableWParam) ? 0 : -1;
                };
                function _setPluginVersions() {
                    var thePlugins = {};
                    _pluginVersionStringArr = [];
                    var _addPluginVersions = function (plugins) {
                        if (plugins) {
                            arrForEach(plugins, function (plugin) {
                                if (plugin[_DYN_IDENTIFIER ] && plugin[_DYN_VERSION ] && !thePlugins[plugin.identifier]) {
                                    var ver = plugin[_DYN_IDENTIFIER ] + "=" + plugin[_DYN_VERSION ];
                                    _pluginVersionStringArr[_DYN_PUSH ](ver);
                                    thePlugins[plugin.identifier] = plugin;
                                }
                            });
                        }
                    };
                    _addPluginVersions(_channels);
                    if (_channelConfig) {
                        arrForEach(_channelConfig, function (channels) {
                            _addPluginVersions(channels);
                        });
                    }
                    _addPluginVersions(_configExtensions);
                }
                function _initDefaults() {
                    _isInitialized = false;
                    _configHandler = createDynamicConfig({}, defaultConfig, _self[_DYN_LOGGER ]);
                    _configHandler.cfg[_DYN_LOGGING_LEVEL_CONSOL4 ] = 1 ;
                    objDefine(_self, "config", {
                        g: function () { return _configHandler.cfg; },
                        s: function (newValue) {
                            _self.updateCfg(newValue, false);
                        }
                    });
                    objDefine(_self, "pluginVersionStringArr", {
                        g: function () {
                            if (!_pluginVersionStringArr) {
                                _setPluginVersions();
                            }
                            return _pluginVersionStringArr;
                        }
                    });
                    objDefine(_self, "pluginVersionString", {
                        g: function () {
                            if (!_pluginVersionString) {
                                if (!_pluginVersionStringArr) {
                                    _setPluginVersions();
                                }
                                _pluginVersionString = _pluginVersionStringArr.join(";");
                            }
                            return _pluginVersionString || STR_EMPTY$1;
                        }
                    });
                    objDefine(_self, "logger", {
                        g: function () {
                            if (!_logger) {
                                _logger = new DiagnosticLogger(_configHandler.cfg);
                                _configHandler[_DYN_LOGGER ] = _logger;
                            }
                            return _logger;
                        },
                        s: function (newLogger) {
                            _configHandler[_DYN_LOGGER ] = newLogger;
                            if (_logger !== newLogger) {
                                runTargetUnload(_logger, false);
                                _logger = newLogger;
                            }
                        }
                    });
                    _self[_DYN_LOGGER ] = new DiagnosticLogger(_configHandler.cfg);
                    _extensions = [];
                    var cfgExtensions = _self.config[STR_EXTENSIONS ] || [];
                    cfgExtensions.splice(0, cfgExtensions[_DYN_LENGTH ]);
                    arrAppend(cfgExtensions, _extensions);
                    _telemetryInitializerPlugin = new TelemetryInitializerPlugin();
                    _eventQueue = [];
                    runTargetUnload(_notificationManager, false);
                    _notificationManager = null;
                    _perfManager = null;
                    _cfgPerfManager = null;
                    runTargetUnload(_cookieManager, false);
                    _cookieManager = null;
                    _pluginChain = null;
                    _configExtensions = [];
                    _channelConfig = null;
                    _channels = null;
                    _isUnloading = false;
                    _internalLogsEventName = null;
                    _evtNamespace = createUniqueNamespace("AIBaseCore", true);
                    _unloadHandlers = createUnloadHandlerContainer();
                    _traceCtx = null;
                    _instrumentationKey = null;
                    _hookContainer = createUnloadHookContainer();
                    _cfgListeners = [];
                    _pluginVersionString = null;
                    _pluginVersionStringArr = null;
                    _forceStopInternalLogPoller = false;
                    _internalLogPoller = null;
                    _internalLogPollerListening = false;
                    _activeStatus = 0 ;
                    _endpoint = null;
                    _initInMemoMaxSize = null;
                    _isStatusSet = false;
                    _initTimer = null;
                }
                function _createTelCtx() {
                    var theCtx = createProcessTelemetryContext(_getPluginChain(), _configHandler.cfg, _self);
                    theCtx[_DYN_ON_COMPLETE ](_startLogPoller);
                    return theCtx;
                }
                function _initPluginChain(updateState) {
                    var theExtensions = _validateExtensions(_self[_DYN_LOGGER ], ChannelControllerPriority, _configExtensions);
                    _pluginChain = null;
                    _pluginVersionString = null;
                    _pluginVersionStringArr = null;
                    _channels = (_channelConfig || [])[0] || [];
                    _channels = sortPlugins(arrAppend(_channels, theExtensions[STR_CHANNELS ]));
                    var allExtensions = arrAppend(sortPlugins(theExtensions[STR_CORE ]), _channels);
                    _extensions = objFreeze(allExtensions);
                    var cfgExtensions = _self.config[STR_EXTENSIONS ] || [];
                    cfgExtensions.splice(0, cfgExtensions[_DYN_LENGTH ]);
                    arrAppend(cfgExtensions, _extensions);
                    var rootCtx = _createTelCtx();
                    if (_channels && _channels[_DYN_LENGTH ] > 0) {
                        initializePlugins(rootCtx[_DYN_CREATE_NEW ](_channels), allExtensions);
                    }
                    initializePlugins(rootCtx, allExtensions);
                    if (updateState) {
                        _doUpdate(updateState);
                    }
                }
                function _getPlugin(pluginIdentifier) {
                    var theExt = null;
                    var thePlugin = null;
                    var channelHosts = [];
                    arrForEach(_extensions, function (ext) {
                        if (ext[_DYN_IDENTIFIER ] === pluginIdentifier && ext !== _telemetryInitializerPlugin) {
                            thePlugin = ext;
                            return -1;
                        }
                        if (ext.getChannel) {
                            channelHosts[_DYN_PUSH ](ext);
                        }
                    });
                    if (!thePlugin && channelHosts[_DYN_LENGTH ] > 0) {
                        arrForEach(channelHosts, function (host) {
                            thePlugin = host.getChannel(pluginIdentifier);
                            if (!thePlugin) {
                                return -1;
                            }
                        });
                    }
                    if (thePlugin) {
                        theExt = {
                            plugin: thePlugin,
                            setEnabled: function (enabled) {
                                _getPluginState(thePlugin)[STR_DISABLED] = !enabled;
                            },
                            isEnabled: function () {
                                var pluginState = _getPluginState(thePlugin);
                                return !pluginState[_DYN_TEARDOWN ] && !pluginState[STR_DISABLED];
                            },
                            remove: function (isAsync, removeCb) {
                                if (isAsync === void 0) { isAsync = true; }
                                var pluginsToRemove = [thePlugin];
                                var unloadState = {
                                    reason: 1 ,
                                    isAsync: isAsync
                                };
                                _removePlugins(pluginsToRemove, unloadState, function (removed) {
                                    if (removed) {
                                        _initPluginChain({
                                            reason: 32 ,
                                            removed: pluginsToRemove
                                        });
                                    }
                                    removeCb && removeCb(removed);
                                });
                            }
                        };
                    }
                    return theExt;
                }
                function _getPluginChain() {
                    if (!_pluginChain) {
                        var extensions = (_extensions || []).slice();
                        if (arrIndexOf(extensions, _telemetryInitializerPlugin) === -1) {
                            extensions[_DYN_PUSH ](_telemetryInitializerPlugin);
                        }
                        _pluginChain = createTelemetryProxyChain(sortPlugins(extensions), _configHandler.cfg, _self);
                    }
                    return _pluginChain;
                }
                function _removePlugins(thePlugins, unloadState, removeComplete) {
                    if (thePlugins && thePlugins[_DYN_LENGTH ] > 0) {
                        var unloadChain = createTelemetryProxyChain(thePlugins, _configHandler.cfg, _self);
                        var unloadCtx = createProcessTelemetryUnloadContext(unloadChain, _self);
                        unloadCtx[_DYN_ON_COMPLETE ](function () {
                            var removed = false;
                            var newConfigExtensions = [];
                            arrForEach(_configExtensions, function (plugin, idx) {
                                if (!_isPluginPresent(plugin, thePlugins)) {
                                    newConfigExtensions[_DYN_PUSH ](plugin);
                                }
                                else {
                                    removed = true;
                                }
                            });
                            _configExtensions = newConfigExtensions;
                            _pluginVersionString = null;
                            _pluginVersionStringArr = null;
                            var newChannelConfig = [];
                            if (_channelConfig) {
                                arrForEach(_channelConfig, function (queue, idx) {
                                    var newQueue = [];
                                    arrForEach(queue, function (channel) {
                                        if (!_isPluginPresent(channel, thePlugins)) {
                                            newQueue[_DYN_PUSH ](channel);
                                        }
                                        else {
                                            removed = true;
                                        }
                                    });
                                    newChannelConfig[_DYN_PUSH ](newQueue);
                                });
                                _channelConfig = newChannelConfig;
                            }
                            removeComplete && removeComplete(removed);
                            _startLogPoller();
                        });
                        unloadCtx[_DYN_PROCESS_NEXT ](unloadState);
                    }
                    else {
                        removeComplete(false);
                    }
                }
                function _flushInternalLogs() {
                    if (_logger && _logger.queue) {
                        var queue = _logger.queue.slice(0);
                        _logger.queue[_DYN_LENGTH ] = 0;
                        arrForEach(queue, function (logMessage) {
                            var item = {
                                name: _internalLogsEventName ? _internalLogsEventName : "InternalMessageId: " + logMessage[_DYN_MESSAGE_ID ],
                                iKey: _instrumentationKey,
                                time: toISOString(new Date()),
                                baseType: _InternalLogMessage.dataType,
                                baseData: { message: logMessage[_DYN_MESSAGE ] }
                            };
                            _self.track(item);
                        });
                    }
                }
                function _flushChannels(isAsync, callBack, sendReason, cbTimeout) {
                    var waiting = 1;
                    var doneIterating = false;
                    var cbTimer = null;
                    cbTimeout = cbTimeout || 5000;
                    function doCallback() {
                        waiting--;
                        if (doneIterating && waiting === 0) {
                            cbTimer && cbTimer[_DYN_CANCEL ]();
                            cbTimer = null;
                            callBack && callBack(doneIterating);
                            callBack = null;
                        }
                    }
                    if (_channels && _channels[_DYN_LENGTH ] > 0) {
                        var flushCtx = _createTelCtx()[_DYN_CREATE_NEW ](_channels);
                        flushCtx.iterate(function (plugin) {
                            if (plugin.flush) {
                                waiting++;
                                var handled_1 = false;
                                if (!plugin.flush(isAsync, function () {
                                    handled_1 = true;
                                    doCallback();
                                }, sendReason)) {
                                    if (!handled_1) {
                                        if (isAsync && cbTimer == null) {
                                            cbTimer = scheduleTimeout(function () {
                                                cbTimer = null;
                                                doCallback();
                                            }, cbTimeout);
                                        }
                                        else {
                                            doCallback();
                                        }
                                    }
                                }
                            }
                        });
                    }
                    doneIterating = true;
                    doCallback();
                    return true;
                }
                function _initPerfManager() {
                    var prevCfgPerfMgr;
                    _addUnloadHook(_configHandler[_DYN_WATCH ](function (details) {
                        var enablePerfMgr = details.cfg.enablePerfMgr;
                        if (enablePerfMgr) {
                            var createPerfMgr = details.cfg[STR_CREATE_PERF_MGR ];
                            if ((prevCfgPerfMgr !== createPerfMgr) || !prevCfgPerfMgr) {
                                if (!createPerfMgr) {
                                    createPerfMgr = _createPerfManager;
                                }
                                getSetValue(details.cfg, STR_CREATE_PERF_MGR, createPerfMgr);
                                prevCfgPerfMgr = createPerfMgr;
                                _cfgPerfManager = null;
                            }
                            if (!_perfManager && !_cfgPerfManager && isFunction(createPerfMgr)) {
                                _cfgPerfManager = createPerfMgr(_self, _self[_DYN_GET_NOTIFY_MGR ]());
                            }
                        }
                        else {
                            _cfgPerfManager = null;
                            prevCfgPerfMgr = null;
                        }
                    }));
                }
                function _doUpdate(updateState) {
                    var updateCtx = createProcessTelemetryUpdateContext(_getPluginChain(), _self);
                    updateCtx[_DYN_ON_COMPLETE ](_startLogPoller);
                    if (!_self._updateHook || _self._updateHook(updateCtx, updateState) !== true) {
                        updateCtx[_DYN_PROCESS_NEXT ](updateState);
                    }
                }
                function _logOrThrowError(message) {
                    var logger = _self[_DYN_LOGGER ];
                    if (logger) {
                        _throwInternal(logger, 2 , 73 , message);
                        _startLogPoller();
                    }
                    else {
                        throwError(message);
                    }
                }
                function _notifyInvalidEvent(telemetryItem) {
                    var manager = _self[_DYN_GET_NOTIFY_MGR ]();
                    if (manager) {
                        manager[STR_EVENTS_DISCARDED ]([telemetryItem], 2 );
                    }
                }
                function _addUnloadHook(hooks) {
                    _hookContainer.add(hooks);
                }
            });
        }
        AppInsightsCore.__ieDyn=1;
        return AppInsightsCore;
    }());

    function parseResponse(response, diagLog) {
        try {
            if (response && response !== "") {
                var result = getJSON().parse(response);
                if (result && result[_DYN_ITEMS_RECEIVED ] && result[_DYN_ITEMS_RECEIVED ] >= result.itemsAccepted &&
                    result.itemsReceived - result.itemsAccepted === result.errors[_DYN_LENGTH ]) {
                    return result;
                }
            }
        }
        catch (e) {
            _throwInternal(diagLog, 1 , 43 , "Cannot parse the response. " + (e[_DYN_NAME ] || dumpObj(e)), {
                response: response
            });
        }
        return null;
    }

    var STR_EMPTY = "";
    var STR_NO_RESPONSE_BODY = "NoResponseBody";
    var _noResponseQs = "&" + STR_NO_RESPONSE_BODY + "=true";
    var STR_POST_METHOD = "POST";
    var SenderPostManager = /** @class */ (function () {
        function SenderPostManager() {
            var _syncFetchPayload = 0;
            var _enableSendPromise;
            var _isInitialized;
            var _diagLog;
            var _isOneDs;
            var _onCompleteFuncs;
            var _disableCredentials;
            var _fetchCredentials;
            var _fallbackInst;
            var _disableXhr;
            var _disableBeacon;
            var _disableBeaconSync;
            var _disableFetchKeepAlive;
            var _addNoResponse;
            var _timeoutWrapper;
            dynamicProto(SenderPostManager, this, function (_self, _base) {
                var _sendCredentials = true;
                _initDefaults();
                _self[_DYN_INITIALIZE ] = function (config, diagLog) {
                    _diagLog = diagLog;
                    if (_isInitialized) {
                        _throwInternal(_diagLog, 1 , 28 , "Sender is already initialized");
                    }
                    _self.SetConfig(config);
                    _isInitialized = true;
                };
                _self["_getDbgPlgTargets"] = function () {
                    return [_isInitialized, _isOneDs, _disableCredentials, _enableSendPromise];
                };
                _self.SetConfig = function (config) {
                    try {
                        _onCompleteFuncs = config.senderOnCompleteCallBack || {};
                        _disableCredentials = !!config.disableCredentials;
                        _fetchCredentials = config.fetchCredentials;
                        _isOneDs = !!config.isOneDs;
                        _enableSendPromise = !!config.enableSendPromise;
                        _disableXhr = !!config.disableXhr;
                        _disableBeacon = !!config.disableBeacon;
                        _disableBeaconSync = !!config.disableBeaconSync;
                        _timeoutWrapper = config.timeWrapper;
                        _addNoResponse = !!config.addNoResponse;
                        _disableFetchKeepAlive = !!config.disableFetchKeepAlive;
                        _fallbackInst = { sendPOST: _xhrSender };
                        if (!_isOneDs) {
                            _sendCredentials = false;
                        }
                        if (_disableCredentials) {
                            var location_1 = getLocation();
                            if (location_1 && location_1.protocol && location_1.protocol[_DYN_TO_LOWER_CASE ]() === "file:") {
                                _sendCredentials = false;
                            }
                        }
                        return true;
                    }
                    catch (e) {
                    }
                    return false;
                };
                _self.getSyncFetchPayload = function () {
                    return _syncFetchPayload;
                };
                _self.getSenderInst = function (transports, sync) {
                    if (transports && transports[_DYN_LENGTH ]) {
                        return _getSenderInterface(transports, sync);
                    }
                    return null;
                };
                _self.getFallbackInst = function () {
                    return _fallbackInst;
                };
                _self[_DYN__DO_TEARDOWN ] = function (unloadCtx, unloadState) {
                    _initDefaults();
                };
                _self.preparePayload = function (callback, zipPayload, payload, isSync) {
                    if (!zipPayload || isSync || !payload[_DYN_DATA ]) {
                        callback(payload);
                        return;
                    }
                    try {
                        var csStream = getInst("CompressionStream");
                        if (!isFunction(csStream)) {
                            callback(payload);
                            return;
                        }
                        var body = new ReadableStream({
                            start: function (controller) {
                                controller.enqueue(isString(payload[_DYN_DATA ]) ? new TextEncoder().encode(payload[_DYN_DATA ]) : payload[_DYN_DATA ]);
                                controller.close();
                            }
                        });
                        var compressedStream = body.pipeThrough(new csStream("gzip"));
                        var reader_1 = compressedStream.getReader();
                        var chunks_1 = [];
                        var totalLength_1 = 0;
                        var callbackCalled_1 = false;
                        doAwaitResponse(reader_1.read(), function processChunk(response) {
                            if (!callbackCalled_1 && !response.rejected) {
                                var result = response[_DYN_VALUE ];
                                if (!result.done) {
                                    chunks_1[_DYN_PUSH ](result[_DYN_VALUE ]);
                                    totalLength_1 += result.value[_DYN_LENGTH ];
                                    return doAwaitResponse(reader_1.read(), processChunk);
                                }
                                var combined = new Uint8Array(totalLength_1);
                                var offset = 0;
                                for (var _i = 0, chunks_2 = chunks_1; _i < chunks_2.length; _i++) {
                                    var chunk = chunks_2[_i];
                                    combined.set(chunk, offset);
                                    offset += chunk[_DYN_LENGTH ];
                                }
                                payload[_DYN_DATA ] = combined;
                                payload[_DYN_HEADERS ]["Content-Encoding"] = "gzip";
                                payload._chunkCount = chunks_1[_DYN_LENGTH ];
                            }
                            if (!callbackCalled_1) {
                                callbackCalled_1 = true;
                                callback(payload);
                            }
                        });
                        return reader_1;
                    }
                    catch (error) {
                        callback(payload);
                        return;
                    }
                };
                function _onSuccess(res, onComplete) {
                    _doOnComplete(onComplete, 200, {}, res);
                }
                function _onError(message, onComplete) {
                    _throwInternal(_diagLog, 2 , 26 , "Failed to send telemetry.", { message: message });
                    _doOnComplete(onComplete, 400, {});
                }
                function _onNoPayloadUrl(onComplete) {
                    _onError("No endpoint url is provided for the batch", onComplete);
                }
                function _getSenderInterface(transports, syncSupport) {
                    var transportType = 0 ;
                    var sendPostFunc = null;
                    var lp = 0;
                    while (sendPostFunc == null && lp < transports[_DYN_LENGTH ]) {
                        transportType = transports[lp];
                        if (!_disableXhr && transportType === 1 ) {
                            if (useXDomainRequest()) {
                                sendPostFunc = _xdrSender;
                            }
                            else if (isXhrSupported()) {
                                sendPostFunc = _xhrSender;
                            }
                        }
                        else if (transportType === 2  && isFetchSupported(syncSupport) && (!syncSupport || !_disableFetchKeepAlive)) {
                            sendPostFunc = _doFetchSender;
                        }
                        else if (transportType === 3  && isBeaconsSupported() && (syncSupport ? !_disableBeaconSync : !_disableBeacon)) {
                            sendPostFunc = _beaconSender;
                        }
                        lp++;
                    }
                    if (sendPostFunc) {
                        return {
                            _transport: transportType,
                            _isSync: syncSupport,
                            sendPOST: sendPostFunc
                        };
                    }
                    return null;
                }
                function _doOnComplete(oncomplete, status, headers, response) {
                    try {
                        oncomplete && oncomplete(status, headers, response);
                    }
                    catch (e) {
                    }
                }
                function _doBeaconSend(payload, oncomplete) {
                    var nav = getNavigator();
                    var url = payload[_DYN_URL_STRING ];
                    if (!url) {
                        _onNoPayloadUrl(oncomplete);
                        return true;
                    }
                    url = payload[_DYN_URL_STRING ] + (_addNoResponse ? _noResponseQs : STR_EMPTY);
                    var data = payload[_DYN_DATA ];
                    var plainTextBatch = _isOneDs ? data : new Blob([data], { type: "text/plain;charset=UTF-8" });
                    var queued = nav.sendBeacon(url, plainTextBatch);
                    return queued;
                }
                function _beaconSender(payload, oncomplete, sync) {
                    var data = payload[_DYN_DATA ];
                    try {
                        if (data) {
                            if (!_doBeaconSend(payload, oncomplete)) {
                                var onRetry = _onCompleteFuncs && _onCompleteFuncs.beaconOnRetry;
                                if (onRetry && isFunction(onRetry)) {
                                    onRetry(payload, oncomplete, _doBeaconSend);
                                }
                                else {
                                    _fallbackInst && _fallbackInst.sendPOST(payload, oncomplete, true);
                                    _throwInternal(_diagLog, 2 , 40 , ". " + "Failed to send telemetry with Beacon API, retried with normal sender.");
                                }
                            }
                            else {
                                _onSuccess(STR_EMPTY, oncomplete);
                            }
                        }
                    }
                    catch (e) {
                        _isOneDs && _warnToConsole(_diagLog, "Failed to send telemetry using sendBeacon API. Ex:" + dumpObj(e));
                        _doOnComplete(oncomplete, _isOneDs ? 0 : 400, {}, STR_EMPTY);
                    }
                    return;
                }
                function _xhrSender(payload, oncomplete, sync) {
                    var thePromise;
                    var resolveFunc;
                    var rejectFunc;
                    var headers = payload[_DYN_HEADERS ] || {};
                    if (!sync && _enableSendPromise) {
                        thePromise = createPromise(function (resolve, reject) {
                            resolveFunc = resolve;
                            rejectFunc = reject;
                        });
                    }
                    if (_isOneDs && sync && payload.disableXhrSync) {
                        sync = false;
                    }
                    var endPointUrl = payload[_DYN_URL_STRING ];
                    if (!endPointUrl) {
                        _onNoPayloadUrl(oncomplete);
                        resolveFunc && resolveFunc(false);
                        return;
                    }
                    var xhr = openXhr(STR_POST_METHOD, endPointUrl, _sendCredentials, true, sync, payload[_DYN_TIMEOUT ]);
                    if (!_isOneDs) {
                        xhr.setRequestHeader("Content-type", "application/json");
                    }
                    arrForEach(objKeys(headers), function (headerName) {
                        xhr.setRequestHeader(headerName, headers[headerName]);
                    });
                    xhr.onreadystatechange = function () {
                        if (!_isOneDs) {
                            _doOnReadyFunc(xhr);
                            if (xhr.readyState === 4) {
                                resolveFunc && resolveFunc(true);
                            }
                        }
                    };
                    xhr.onload = function () {
                        if (_isOneDs) {
                            _doOnReadyFunc(xhr);
                        }
                    };
                    function _doOnReadyFunc(xhr) {
                        var onReadyFunc = _onCompleteFuncs && _onCompleteFuncs.xhrOnComplete;
                        var onReadyFuncExist = onReadyFunc && isFunction(onReadyFunc);
                        if (onReadyFuncExist) {
                            onReadyFunc(xhr, oncomplete, payload);
                        }
                        else {
                            var response = getResponseText(xhr);
                            _doOnComplete(oncomplete, xhr[_DYN_STATUS ], _getAllResponseHeaders(xhr, _isOneDs), response);
                        }
                    }
                    xhr.onerror = function (event) {
                        _doOnComplete(oncomplete, _isOneDs ? xhr[_DYN_STATUS ] : 400, _getAllResponseHeaders(xhr, _isOneDs), _isOneDs ? STR_EMPTY : formatErrorMessageXhr(xhr));
                        rejectFunc && rejectFunc(event);
                    };
                    xhr.ontimeout = function () {
                        _doOnComplete(oncomplete, _isOneDs ? xhr[_DYN_STATUS ] : 500, _getAllResponseHeaders(xhr, _isOneDs), _isOneDs ? STR_EMPTY : formatErrorMessageXhr(xhr));
                        resolveFunc && resolveFunc(false);
                    };
                    xhr.send(payload[_DYN_DATA ]);
                    return thePromise;
                }
                function _doFetchSender(payload, oncomplete, sync) {
                    var _a;
                    var endPointUrl = payload[_DYN_URL_STRING ];
                    var batch = payload[_DYN_DATA ];
                    var plainTextBatch = _isOneDs ? batch : new Blob([batch], { type: "application/json" });
                    var thePromise;
                    var resolveFunc;
                    var rejectFunc;
                    var requestHeaders = new Headers();
                    var batchLength = batch[_DYN_LENGTH ];
                    var ignoreResponse = false;
                    var responseHandled = false;
                    var headers = payload[_DYN_HEADERS ] || {};
                    var init = (_a = {
                            method: STR_POST_METHOD,
                            body: plainTextBatch
                        },
                        _a[DisabledPropertyName] = true
                    ,
                        _a);
                    if (payload.headers && objKeys(payload.headers)[_DYN_LENGTH ] > 0) {
                        arrForEach(objKeys(headers), function (headerName) {
                            requestHeaders.append(headerName, headers[headerName]);
                        });
                        init[_DYN_HEADERS ] = requestHeaders;
                    }
                    if (_fetchCredentials) {
                        init.credentials = _fetchCredentials;
                    }
                    else if (_sendCredentials && _isOneDs) {
                        init.credentials = "include";
                    }
                    if (sync) {
                        init.keepalive = true;
                        _syncFetchPayload += batchLength;
                        if (_isOneDs) {
                            if (payload["_sendReason"] === 2 ) {
                                ignoreResponse = true;
                                if (_addNoResponse) {
                                    endPointUrl += _noResponseQs;
                                }
                            }
                        }
                        else {
                            ignoreResponse = true;
                        }
                    }
                    var request = new Request(endPointUrl, init);
                    try {
                        request[DisabledPropertyName] = true;
                    }
                    catch (e) {
                    }
                    if (!sync && _enableSendPromise) {
                        thePromise = createPromise(function (resolve, reject) {
                            resolveFunc = resolve;
                            rejectFunc = reject;
                        });
                    }
                    if (!endPointUrl) {
                        _onNoPayloadUrl(oncomplete);
                        resolveFunc && resolveFunc(false);
                        return;
                    }
                    function _handleError(res, statusCode) {
                        if (statusCode) {
                            _doOnComplete(oncomplete, _isOneDs ? 0 : statusCode, {}, _isOneDs ? STR_EMPTY : res);
                        }
                        else {
                            _doOnComplete(oncomplete, _isOneDs ? 0 : 400, {}, _isOneDs ? STR_EMPTY : res);
                        }
                    }
                    function _onFetchComplete(response, payload, value) {
                        var status = response[_DYN_STATUS ];
                        var onCompleteFunc = _onCompleteFuncs.fetchOnComplete;
                        if (onCompleteFunc && isFunction(onCompleteFunc)) {
                            onCompleteFunc(response, oncomplete, value || STR_EMPTY, payload);
                        }
                        else {
                            _doOnComplete(oncomplete, status, {}, value || STR_EMPTY);
                        }
                    }
                    try {
                        doAwaitResponse(fetch(_isOneDs ? endPointUrl : request, _isOneDs ? init : null), function (result) {
                            if (sync) {
                                _syncFetchPayload -= batchLength;
                                batchLength = 0;
                            }
                            if (!responseHandled) {
                                responseHandled = true;
                                if (!result.rejected) {
                                    var response_1 = result[_DYN_VALUE ];
                                    try {
                                        if (!_isOneDs && !response_1.ok) {
                                            if (response_1[_DYN_STATUS ]) {
                                                _handleError(response_1.statusText, response_1[_DYN_STATUS ]);
                                            }
                                            else {
                                                _handleError(response_1.statusText, 499);
                                            }
                                            resolveFunc && resolveFunc(false);
                                        }
                                        else {
                                            if (_isOneDs && !response_1.body) {
                                                _onFetchComplete(response_1, null, STR_EMPTY);
                                                resolveFunc && resolveFunc(true);
                                            }
                                            else {
                                                doAwaitResponse(response_1.text(), function (resp) {
                                                    _onFetchComplete(response_1, payload, resp[_DYN_VALUE ]);
                                                    resolveFunc && resolveFunc(true);
                                                });
                                            }
                                        }
                                    }
                                    catch (e) {
                                        if (response_1 && response_1[_DYN_STATUS ]) {
                                            _handleError(dumpObj(e), response_1[_DYN_STATUS ]);
                                        }
                                        else {
                                            _handleError(dumpObj(e), 499);
                                        }
                                        rejectFunc && rejectFunc(e);
                                    }
                                }
                                else {
                                    _handleError(result.reason && result.reason[_DYN_MESSAGE ], 499);
                                    rejectFunc && rejectFunc(result.reason);
                                }
                            }
                        });
                    }
                    catch (e) {
                        if (!responseHandled) {
                            _handleError(dumpObj(e), 499);
                            rejectFunc && rejectFunc(e);
                        }
                    }
                    if (ignoreResponse && !responseHandled) {
                        responseHandled = true;
                        _doOnComplete(oncomplete, 200, {});
                        resolveFunc && resolveFunc(true);
                    }
                    if (_isOneDs && !responseHandled && payload[_DYN_TIMEOUT ] > 0) {
                        _timeoutWrapper && _timeoutWrapper.set(function () {
                            if (!responseHandled) {
                                responseHandled = true;
                                _doOnComplete(oncomplete, 500, {});
                                resolveFunc && resolveFunc(true);
                            }
                        }, payload[_DYN_TIMEOUT ]);
                    }
                    return thePromise;
                }
                function _xdrSender(payload, oncomplete, sync) {
                    var _window = getWindow();
                    var xdr = new XDomainRequest();
                    var data = payload[_DYN_DATA ];
                    xdr.onload = function () {
                        var response = getResponseText(xdr);
                        var onloadFunc = _onCompleteFuncs && _onCompleteFuncs.xdrOnComplete;
                        if (onloadFunc && isFunction(onloadFunc)) {
                            onloadFunc(xdr, oncomplete, payload);
                        }
                        else {
                            _doOnComplete(oncomplete, 200, {}, response);
                        }
                    };
                    xdr.onerror = function () {
                        _doOnComplete(oncomplete, 400, {}, _isOneDs ? STR_EMPTY : formatErrorMessageXdr(xdr));
                    };
                    xdr.ontimeout = function () {
                        _doOnComplete(oncomplete, 500, {});
                    };
                    xdr.onprogress = function () { };
                    var hostingProtocol = _window && _window.location && _window.location.protocol || "";
                    var endpoint = payload[_DYN_URL_STRING ];
                    if (!endpoint) {
                        _onNoPayloadUrl(oncomplete);
                        return;
                    }
                    if (!_isOneDs && endpoint.lastIndexOf(hostingProtocol, 0) !== 0) {
                        var msg = "Cannot send XDomain request. The endpoint URL protocol doesn't match the hosting page protocol.";
                        _throwInternal(_diagLog, 2 , 40 , ". " + msg);
                        _onError(msg, oncomplete);
                        return;
                    }
                    var endpointUrl = _isOneDs ? endpoint : endpoint[_DYN_REPLACE ](/^(https?:)/, "");
                    xdr.open(STR_POST_METHOD, endpointUrl);
                    if (payload[_DYN_TIMEOUT ]) {
                        xdr[_DYN_TIMEOUT ] = payload[_DYN_TIMEOUT ];
                    }
                    xdr.send(data);
                    if (_isOneDs && sync) {
                        _timeoutWrapper && _timeoutWrapper.set(function () {
                            xdr.send(data);
                        }, 0);
                    }
                    else {
                        xdr.send(data);
                    }
                }
                function _initDefaults() {
                    _syncFetchPayload = 0;
                    _isInitialized = false;
                    _enableSendPromise = false;
                    _diagLog = null;
                    _isOneDs = null;
                    _onCompleteFuncs = null;
                    _disableCredentials = null;
                    _fetchCredentials = null;
                    _fallbackInst = null;
                    _disableXhr = false;
                    _disableBeacon = false;
                    _disableBeaconSync = false;
                    _disableFetchKeepAlive = false;
                    _addNoResponse = false;
                    _timeoutWrapper = null;
                }
            });
        }
        SenderPostManager.__ieDyn=1;
        return SenderPostManager;
    }());

    var strOnPrefix = "on";
    var strAttachEvent = "attachEvent";
    var strAddEventHelper = "addEventListener";
    var strDetachEvent = "detachEvent";
    var strRemoveEventListener = "removeEventListener";
    var strEvents = "events";
    var strVisibilityChangeEvt = "visibilitychange";
    var strPageHide = "pagehide";
    var strPageShow = "pageshow";
    var strUnload = "unload";
    var strBeforeUnload = "beforeunload";
    var strPageHideNamespace = createUniqueNamespace("aiEvtPageHide");
    var strPageShowNamespace = createUniqueNamespace("aiEvtPageShow");
    var rRemoveEmptyNs = /\.[\.]+/g;
    var rRemoveTrailingEmptyNs = /[\.]+$/;
    var _guid = 1;
    var elmNodeData = createElmNodeData("events");
    var eventNamespace = /^([^.]*)(?:\.(.+)|)/;
    function _normalizeNamespace(name) {
        if (name && name[_DYN_REPLACE ]) {
            return name[_DYN_REPLACE ](/^[\s\.]+|(?=[\s\.])[\.\s]+$/g, STR_EMPTY$1);
        }
        return name;
    }
    function _getEvtNamespace(eventName, evtNamespace) {
        if (evtNamespace) {
            var theNamespace_1 = STR_EMPTY$1;
            if (isArray(evtNamespace)) {
                theNamespace_1 = STR_EMPTY$1;
                arrForEach(evtNamespace, function (name) {
                    name = _normalizeNamespace(name);
                    if (name) {
                        if (name[0] !== ".") {
                            name = "." + name;
                        }
                        theNamespace_1 += name;
                    }
                });
            }
            else {
                theNamespace_1 = _normalizeNamespace(evtNamespace);
            }
            if (theNamespace_1) {
                if (theNamespace_1[0] !== ".") {
                    theNamespace_1 = "." + theNamespace_1;
                }
                eventName = (eventName || STR_EMPTY$1) + theNamespace_1;
            }
        }
        var parsedEvent = (eventNamespace.exec(eventName || STR_EMPTY$1) || []);
        return {
            type: parsedEvent[1],
            ns: ((parsedEvent[2] || STR_EMPTY$1).replace(rRemoveEmptyNs, ".").replace(rRemoveTrailingEmptyNs, STR_EMPTY$1)[_DYN_SPLIT ](".").sort()).join(".")
        };
    }
    function __getRegisteredEvents(target, eventName, evtNamespace) {
        var theEvents = [];
        var eventCache = elmNodeData.get(target, strEvents, {}, false);
        var evtName = _getEvtNamespace(eventName, evtNamespace);
        objForEachKey(eventCache, function (evtType, registeredEvents) {
            arrForEach(registeredEvents, function (value) {
                if (!evtName[_DYN_TYPE ] || evtName[_DYN_TYPE ] === value[_DYN_EVT_NAME ][_DYN_TYPE ]) {
                    if (!evtName.ns || evtName.ns === evtName.ns) {
                        theEvents[_DYN_PUSH ]({
                            name: value.evtName[_DYN_TYPE ] + (value[_DYN_EVT_NAME ].ns ? "." + value[_DYN_EVT_NAME ].ns : STR_EMPTY$1),
                            handler: value.handler
                        });
                    }
                }
            });
        });
        return theEvents;
    }
    function _getRegisteredEvents(target, evtName, addDefault) {
        if (addDefault === void 0) { addDefault = true; }
        var aiEvts = elmNodeData.get(target, strEvents, {}, addDefault);
        var registeredEvents = aiEvts[evtName];
        if (!registeredEvents) {
            registeredEvents = aiEvts[evtName] = [];
        }
        return registeredEvents;
    }
    function _doDetach(obj, evtName, handlerRef, useCapture) {
        if (obj && evtName && evtName[_DYN_TYPE ]) {
            if (obj[strRemoveEventListener]) {
                obj[strRemoveEventListener](evtName[_DYN_TYPE ], handlerRef, useCapture);
            }
            else if (obj[strDetachEvent]) {
                obj[strDetachEvent](strOnPrefix + evtName[_DYN_TYPE ], handlerRef);
            }
        }
    }
    function _doAttach(obj, evtName, handlerRef, useCapture) {
        var result = false;
        if (obj && evtName && evtName[_DYN_TYPE ] && handlerRef) {
            if (obj[strAddEventHelper]) {
                obj[strAddEventHelper](evtName[_DYN_TYPE ], handlerRef, useCapture);
                result = true;
            }
            else if (obj[strAttachEvent]) {
                obj[strAttachEvent](strOnPrefix + evtName[_DYN_TYPE ], handlerRef);
                result = true;
            }
        }
        return result;
    }
    function _doUnregister(target, events, evtName, unRegFn) {
        var idx = events[_DYN_LENGTH ];
        while (idx--) {
            var theEvent = events[idx];
            if (theEvent) {
                if (!evtName.ns || evtName.ns === theEvent[_DYN_EVT_NAME ].ns) {
                    if (!unRegFn || unRegFn(theEvent)) {
                        _doDetach(target, theEvent[_DYN_EVT_NAME ], theEvent.handler, theEvent.capture);
                        events[_DYN_SPLICE ](idx, 1);
                    }
                }
            }
        }
    }
    function _unregisterEvents(target, evtName, unRegFn) {
        if (evtName[_DYN_TYPE ]) {
            _doUnregister(target, _getRegisteredEvents(target, evtName[_DYN_TYPE ]), evtName, unRegFn);
        }
        else {
            var eventCache = elmNodeData.get(target, strEvents, {});
            objForEachKey(eventCache, function (evtType, events) {
                _doUnregister(target, events, evtName, unRegFn);
            });
            if (objKeys(eventCache)[_DYN_LENGTH ] === 0) {
                elmNodeData.kill(target, strEvents);
            }
        }
    }
    function mergeEvtNamespace(theNamespace, namespaces) {
        var newNamespaces;
        if (namespaces) {
            if (isArray(namespaces)) {
                newNamespaces = [theNamespace].concat(namespaces);
            }
            else {
                newNamespaces = [theNamespace, namespaces];
            }
            newNamespaces = (_getEvtNamespace("xx", newNamespaces).ns)[_DYN_SPLIT ](".");
        }
        else {
            newNamespaces = theNamespace;
        }
        return newNamespaces;
    }
    function eventOn(target, eventName, handlerRef, evtNamespace, useCapture) {
        if (useCapture === void 0) { useCapture = false; }
        var result = false;
        if (target) {
            try {
                var evtName = _getEvtNamespace(eventName, evtNamespace);
                result = _doAttach(target, evtName, handlerRef, useCapture);
                if (result && elmNodeData.accept(target)) {
                    var registeredEvent = {
                        guid: _guid++,
                        evtName: evtName,
                        handler: handlerRef,
                        capture: useCapture
                    };
                    _getRegisteredEvents(target, evtName.type)[_DYN_PUSH ](registeredEvent);
                }
            }
            catch (e) {
            }
        }
        return result;
    }
    function eventOff(target, eventName, handlerRef, evtNamespace, useCapture) {
        if (useCapture === void 0) { useCapture = false; }
        if (target) {
            try {
                var evtName_1 = _getEvtNamespace(eventName, evtNamespace);
                var found_1 = false;
                _unregisterEvents(target, evtName_1, function (regEvent) {
                    if ((evtName_1.ns && !handlerRef) || regEvent.handler === handlerRef) {
                        found_1 = true;
                        return true;
                    }
                    return false;
                });
                if (!found_1) {
                    _doDetach(target, evtName_1, handlerRef, useCapture);
                }
            }
            catch (e) {
            }
        }
    }
    function attachEvent(obj, eventNameWithoutOn, handlerRef, useCapture) {
        if (useCapture === void 0) { useCapture = false; }
        return eventOn(obj, eventNameWithoutOn, handlerRef, null, useCapture);
    }
    function detachEvent(obj, eventNameWithoutOn, handlerRef, useCapture) {
        if (useCapture === void 0) { useCapture = false; }
        eventOff(obj, eventNameWithoutOn, handlerRef, null, useCapture);
    }
    function addEventHandler(eventName, callback, evtNamespace) {
        var result = false;
        var w = getWindow();
        if (w) {
            result = eventOn(w, eventName, callback, evtNamespace);
            result = eventOn(w["body"], eventName, callback, evtNamespace) || result;
        }
        var doc = getDocument();
        if (doc) {
            result = eventOn(doc, eventName, callback, evtNamespace) || result;
        }
        return result;
    }
    function removeEventHandler(eventName, callback, evtNamespace) {
        var w = getWindow();
        if (w) {
            eventOff(w, eventName, callback, evtNamespace);
            eventOff(w["body"], eventName, callback, evtNamespace);
        }
        var doc = getDocument();
        if (doc) {
            eventOff(doc, eventName, callback, evtNamespace);
        }
    }
    function _addEventListeners(events, listener, excludeEvents, evtNamespace) {
        var added = false;
        if (listener && events && events[_DYN_LENGTH ] > 0) {
            arrForEach(events, function (name) {
                if (name) {
                    if (!excludeEvents || arrIndexOf(excludeEvents, name) === -1) {
                        added = addEventHandler(name, listener, evtNamespace) || added;
                    }
                }
            });
        }
        return added;
    }
    function addEventListeners(events, listener, excludeEvents, evtNamespace) {
        var added = false;
        if (listener && events && isArray(events)) {
            added = _addEventListeners(events, listener, excludeEvents, evtNamespace);
            if (!added && excludeEvents && excludeEvents[_DYN_LENGTH ] > 0) {
                added = _addEventListeners(events, listener, null, evtNamespace);
            }
        }
        return added;
    }
    function removeEventListeners(events, listener, evtNamespace) {
        if (events && isArray(events)) {
            arrForEach(events, function (name) {
                if (name) {
                    removeEventHandler(name, listener, evtNamespace);
                }
            });
        }
    }
    function addPageUnloadEventListener(listener, excludeEvents, evtNamespace) {
        return addEventListeners([strBeforeUnload, strUnload, strPageHide], listener, excludeEvents, evtNamespace);
    }
    function removePageUnloadEventListener(listener, evtNamespace) {
        removeEventListeners([strBeforeUnload, strUnload, strPageHide], listener, evtNamespace);
    }
    function addPageHideEventListener(listener, excludeEvents, evtNamespace) {
        function _handlePageVisibility(evt) {
            var doc = getDocument();
            if (listener && doc && doc.visibilityState === "hidden") {
                listener(evt);
            }
        }
        var newNamespaces = mergeEvtNamespace(strPageHideNamespace, evtNamespace);
        var pageUnloadAdded = _addEventListeners([strPageHide], listener, excludeEvents, newNamespaces);
        if (!excludeEvents || arrIndexOf(excludeEvents, strVisibilityChangeEvt) === -1) {
            pageUnloadAdded = _addEventListeners([strVisibilityChangeEvt], _handlePageVisibility, excludeEvents, newNamespaces) || pageUnloadAdded;
        }
        if (!pageUnloadAdded && excludeEvents) {
            pageUnloadAdded = addPageHideEventListener(listener, null, evtNamespace);
        }
        return pageUnloadAdded;
    }
    function removePageHideEventListener(listener, evtNamespace) {
        var newNamespaces = mergeEvtNamespace(strPageHideNamespace, evtNamespace);
        removeEventListeners([strPageHide], listener, newNamespaces);
        removeEventListeners([strVisibilityChangeEvt], null, newNamespaces);
    }
    function addPageShowEventListener(listener, excludeEvents, evtNamespace) {
        function _handlePageVisibility(evt) {
            var doc = getDocument();
            if (listener && doc && doc.visibilityState === "visible") {
                listener(evt);
            }
        }
        var newNamespaces = mergeEvtNamespace(strPageShowNamespace, evtNamespace);
        var pageShowAdded = _addEventListeners([strPageShow], listener, excludeEvents, newNamespaces);
        pageShowAdded = _addEventListeners([strVisibilityChangeEvt], _handlePageVisibility, excludeEvents, newNamespaces) || pageShowAdded;
        if (!pageShowAdded && excludeEvents) {
            pageShowAdded = addPageShowEventListener(listener, null, evtNamespace);
        }
        return pageShowAdded;
    }
    function removePageShowEventListener(listener, evtNamespace) {
        var newNamespaces = mergeEvtNamespace(strPageShowNamespace, evtNamespace);
        removeEventListeners([strPageShow], listener, newNamespaces);
        removeEventListeners([strVisibilityChangeEvt], null, newNamespaces);
    }

    var LoggingSeverity = ( /* @__PURE__ */createEnumStyle({
        DISABLED: 0 ,
        CRITICAL: 1 ,
        WARNING: 2 ,
        DEBUG: 3
    }));

    var aiInstrumentHooks = "_aiHooks";
    var cbNames = [
        "req", "rsp", "hkErr", "fnErr"
    ];
    function _arrLoop(arr, fn) {
        if (arr) {
            for (var lp = 0; lp < arr[_DYN_LENGTH ]; lp++) {
                if (fn(arr[lp], lp)) {
                    break;
                }
            }
        }
    }
    function _doCallbacks(hooks, callDetails, cbArgs, hookCtx, type) {
        if (type >= 0  && type <= 2 ) {
            _arrLoop(hooks, function (hook, idx) {
                var cbks = hook.cbks;
                var cb = cbks[cbNames[type]];
                if (cb) {
                    callDetails.ctx = function () {
                        var ctx = hookCtx[idx] = (hookCtx[idx] || {});
                        return ctx;
                    };
                    try {
                        cb[_DYN_APPLY ](callDetails.inst, cbArgs);
                    }
                    catch (err) {
                        var orgEx = callDetails.err;
                        try {
                            var hookErrorCb = cbks[cbNames[2 ]];
                            if (hookErrorCb) {
                                callDetails.err = err;
                                hookErrorCb[_DYN_APPLY ](callDetails.inst, cbArgs);
                            }
                        }
                        catch (e) {
                        }
                        finally {
                            callDetails.err = orgEx;
                        }
                    }
                }
            });
        }
    }
    function _createFunctionHook(aiHook) {
        return function () {
            var funcThis = this;
            var orgArgs = arguments;
            var hooks = aiHook.h;
            var funcArgs = {
                name: aiHook.n,
                inst: funcThis,
                ctx: null,
                set: _replaceArg
            };
            var hookCtx = [];
            var cbArgs = _createArgs([funcArgs], orgArgs);
            funcArgs.evt = getInst("event");
            function _createArgs(target, theArgs) {
                _arrLoop(theArgs, function (arg) {
                    target[_DYN_PUSH ](arg);
                });
                return target;
            }
            function _replaceArg(idx, value) {
                orgArgs = _createArgs([], orgArgs);
                orgArgs[idx] = value;
                cbArgs = _createArgs([funcArgs], orgArgs);
            }
            _doCallbacks(hooks, funcArgs, cbArgs, hookCtx, 0 );
            var theFunc = aiHook.f;
            if (theFunc) {
                try {
                    funcArgs.rslt = theFunc[_DYN_APPLY ](funcThis, orgArgs);
                }
                catch (err) {
                    funcArgs.err = err;
                    _doCallbacks(hooks, funcArgs, cbArgs, hookCtx, 3 );
                    throw err;
                }
            }
            _doCallbacks(hooks, funcArgs, cbArgs, hookCtx, 1 );
            return funcArgs.rslt;
        };
    }
    function _getOwner(target, name, checkPrototype, checkParentProto) {
        var owner = null;
        if (target) {
            if (objHasOwnProperty(target, name)) {
                owner = target;
            }
            else if (checkPrototype) {
                owner = _getOwner(_getObjProto(target), name, checkParentProto, false);
            }
        }
        return owner;
    }
    function InstrumentProto(target, funcName, callbacks) {
        if (target) {
            return InstrumentFunc(target[strShimPrototype], funcName, callbacks, false);
        }
        return null;
    }
    function InstrumentProtos(target, funcNames, callbacks) {
        if (target) {
            return InstrumentFuncs(target[strShimPrototype], funcNames, callbacks, false);
        }
        return null;
    }
    function _createInstrumentHook(owner, funcName, fn, callbacks) {
        var aiHook = fn && fn[aiInstrumentHooks];
        if (!aiHook) {
            aiHook = {
                i: 0,
                n: funcName,
                f: fn,
                h: []
            };
            var newFunc = _createFunctionHook(aiHook);
            newFunc[aiInstrumentHooks] = aiHook;
            owner[funcName] = newFunc;
        }
        var theHook = {
            id: aiHook.i,
            cbks: callbacks,
            rm: function () {
                var id = this.id;
                _arrLoop(aiHook.h, function (hook, idx) {
                    if (hook.id === id) {
                        aiHook.h[_DYN_SPLICE ](idx, 1);
                        return 1;
                    }
                });
            }
        };
        aiHook.i++;
        aiHook.h[_DYN_PUSH ](theHook);
        return theHook;
    }
    function InstrumentFunc(target, funcName, callbacks, checkPrototype, checkParentProto) {
        if (checkPrototype === void 0) { checkPrototype = true; }
        if (target && funcName && callbacks) {
            var owner = _getOwner(target, funcName, checkPrototype, checkParentProto);
            if (owner) {
                var fn = owner[funcName];
                if (typeof fn === strShimFunction) {
                    return _createInstrumentHook(owner, funcName, fn, callbacks);
                }
            }
        }
        return null;
    }
    function InstrumentFuncs(target, funcNames, callbacks, checkPrototype, checkParentProto) {
        if (checkPrototype === void 0) { checkPrototype = true; }
        var hooks = null;
        _arrLoop(funcNames, function (funcName) {
            var hook = InstrumentFunc(target, funcName, callbacks, checkPrototype, checkParentProto);
            if (hook) {
                if (!hooks) {
                    hooks = [];
                }
                hooks[_DYN_PUSH ](hook);
            }
        });
        return hooks;
    }
    function InstrumentEvent(target, evtName, callbacks, checkPrototype, checkParentProto) {
        if (target && evtName && callbacks) {
            var owner = _getOwner(target, evtName, checkPrototype, checkParentProto) || target;
            if (owner) {
                return _createInstrumentHook(owner, evtName, owner[evtName], callbacks);
            }
        }
        return null;
    }

    exports.ActiveStatus = ActiveStatus;
    exports.AppInsightsCore = AppInsightsCore;
    exports.BaseTelemetryPlugin = BaseTelemetryPlugin;
    exports.BatchDiscardedReason = BatchDiscardedReason;
    exports.DiagnosticLogger = DiagnosticLogger;
    exports.EventsDiscardedReason = EventsDiscardedReason;
    exports.InstrumentEvent = InstrumentEvent;
    exports.InstrumentFunc = InstrumentFunc;
    exports.InstrumentFuncs = InstrumentFuncs;
    exports.InstrumentProto = InstrumentProto;
    exports.InstrumentProtos = InstrumentProtos;
    exports.LoggingSeverity = LoggingSeverity;
    exports.MinChannelPriorty = MinChannelPriorty;
    exports.NotificationManager = NotificationManager;
    exports.PerfEvent = PerfEvent;
    exports.PerfManager = PerfManager;
    exports.ProcessTelemetryContext = ProcessTelemetryContext;
    exports.SenderPostManager = SenderPostManager;
    exports.Undefined = Undefined;
    exports._InternalLogMessage = _InternalLogMessage;
    exports.__getRegisteredEvents = __getRegisteredEvents;
    exports._appendHeader = _appendHeader;
    exports._getAllResponseHeaders = _getAllResponseHeaders;
    exports._logInternalMessage = _logInternalMessage;
    exports._testHookMaxUnloadHooksCb = _testHookMaxUnloadHooksCb;
    exports._throwInternal = _throwInternal;
    exports._warnToConsole = _warnToConsole;
    exports.addEventHandler = addEventHandler;
    exports.addEventListeners = addEventListeners;
    exports.addPageHideEventListener = addPageHideEventListener;
    exports.addPageShowEventListener = addPageShowEventListener;
    exports.addPageUnloadEventListener = addPageUnloadEventListener;
    exports.areCookiesSupported = areCookiesSupported;
    exports.arrForEach = arrForEach;
    exports.arrIndexOf = arrIndexOf;
    exports.arrMap = arrMap;
    exports.arrReduce = arrReduce;
    exports.asString = asString;
    exports.attachEvent = attachEvent;
    exports.blockDynamicConversion = blockDynamicConversion;
    exports.cfgDfBlockPropValue = cfgDfBlockPropValue;
    exports.cfgDfBoolean = cfgDfBoolean;
    exports.cfgDfFunc = cfgDfFunc;
    exports.cfgDfMerge = cfgDfMerge;
    exports.cfgDfSet = cfgDfSet;
    exports.cfgDfString = cfgDfString;
    exports.cfgDfValidate = cfgDfValidate;
    exports.convertAllHeadersToMap = convertAllHeadersToMap;
    exports.createClassFromInterface = createClassFromInterface;
    exports.createCookieMgr = createCookieMgr;
    exports.createCustomDomEvent = createCustomDomEvent;
    exports.createDynamicConfig = createDynamicConfig;
    exports.createEnumStyle = createEnumStyle;
    exports.createProcessTelemetryContext = createProcessTelemetryContext;
    exports.createTraceParent = createTraceParent;
    exports.createUniqueNamespace = createUniqueNamespace;
    exports.createUnloadHandlerContainer = createUnloadHandlerContainer;
    exports.createUnloadHookContainer = createUnloadHookContainer;
    exports.createValueMap = createValueMap;
    exports.dateNow = utcNow;
    exports.deepFreeze = objDeepFreeze;
    exports.detachEvent = detachEvent;
    exports.dispatchEvent = dispatchEvent;
    exports.doPerf = doPerf;
    exports.doUnloadAll = doUnloadAll;
    exports.dumpObj = dumpObj;
    exports.eventOff = eventOff;
    exports.eventOn = eventOn;
    exports.fieldRedaction = fieldRedaction;
    exports.findAllScripts = findAllScripts;
    exports.findMetaTag = findMetaTag;
    exports.findNamedServerTiming = findNamedServerTiming;
    exports.findW3cTraceParent = findW3cTraceParent;
    exports.forceDynamicConversion = forceDynamicConversion;
    exports.formatErrorMessageXdr = formatErrorMessageXdr;
    exports.formatErrorMessageXhr = formatErrorMessageXhr;
    exports.formatTraceParent = formatTraceParent;
    exports.generateW3CId = generateW3CId;
    exports.getConsole = getConsole;
    exports.getCrypto = getCrypto;
    exports.getDebugExt = getDebugExt;
    exports.getDebugListener = getDebugListener;
    exports.getDocument = getDocument;
    exports.getDynamicConfigHandler = getDynamicConfigHandler;
    exports.getExceptionName = getExceptionName;
    exports.getGblPerfMgr = getGblPerfMgr;
    exports.getGlobal = getGlobal;
    exports.getGlobalInst = getInst;
    exports.getHistory = getHistory;
    exports.getIEVersion = getIEVersion;
    exports.getJSON = getJSON;
    exports.getLocation = getLocation;
    exports.getMsCrypto = getMsCrypto;
    exports.getNavigator = getNavigator;
    exports.getPerformance = getPerformance;
    exports.getResponseText = getResponseText;
    exports.getSetValue = getSetValue;
    exports.getWindow = getWindow;
    exports.hasDocument = hasDocument;
    exports.hasHistory = hasHistory;
    exports.hasJSON = hasJSON;
    exports.hasNavigator = hasNavigator;
    exports.hasOwnProperty = objHasOwnProperty;
    exports.hasWindow = hasWindow;
    exports.initializePlugins = initializePlugins;
    exports.isArray = isArray;
    exports.isBeaconsSupported = isBeaconsSupported;
    exports.isBoolean = isBoolean;
    exports.isDate = isDate;
    exports.isError = isError;
    exports.isFeatureEnabled = isFeatureEnabled;
    exports.isFetchSupported = isFetchSupported;
    exports.isFunction = isFunction;
    exports.isIE = isIE;
    exports.isNotNullOrUndefined = isNotNullOrUndefined;
    exports.isNotTruthy = isNotTruthy;
    exports.isNotUndefined = isNotUndefined;
    exports.isNullOrUndefined = isNullOrUndefined;
    exports.isNumber = isNumber;
    exports.isObject = isObject;
    exports.isReactNative = isReactNative;
    exports.isSafari = isSafari;
    exports.isSampledFlag = isSampledFlag;
    exports.isString = isString;
    exports.isSymbol = isSymbol;
    exports.isTruthy = isTruthy;
    exports.isTypeof = isTypeof;
    exports.isUndefined = isUndefined;
    exports.isValidSpanId = isValidSpanId;
    exports.isValidTraceId = isValidTraceId;
    exports.isValidTraceParent = isValidTraceParent;
    exports.isXhrSupported = isXhrSupported;
    exports.mergeEvtNamespace = mergeEvtNamespace;
    exports.mwcRandom32 = mwcRandom32;
    exports.mwcRandomSeed = mwcRandomSeed;
    exports.newGuid = newGuid;
    exports.newId = newId;
    exports.normalizeJsName = normalizeJsName;
    exports.objDefineAccessors = objDefineAccessors;
    exports.objExtend = objExtend;
    exports.objForEachKey = objForEachKey;
    exports.objFreeze = objFreeze;
    exports.objKeys = objKeys;
    exports.objSeal = objSeal;
    exports.objToString = objToString;
    exports.onConfigChange = onConfigChange;
    exports.openXhr = openXhr;
    exports.optimizeObject = optimizeObject;
    exports.parseResponse = parseResponse;
    exports.parseTraceParent = parseTraceParent;
    exports.perfNow = perfNow;
    exports.prependTransports = prependTransports;
    exports.proxyAssign = proxyAssign;
    exports.proxyFunctionAs = proxyFunctionAs;
    exports.proxyFunctions = proxyFunctions;
    exports.random32 = random32;
    exports.randomValue = randomValue;
    exports.removeEventHandler = removeEventHandler;
    exports.removeEventListeners = removeEventListeners;
    exports.removePageHideEventListener = removePageHideEventListener;
    exports.removePageShowEventListener = removePageShowEventListener;
    exports.removePageUnloadEventListener = removePageUnloadEventListener;
    exports.runTargetUnload = runTargetUnload;
    exports.safeGetCookieMgr = safeGetCookieMgr;
    exports.safeGetLogger = safeGetLogger;
    exports.sendCustomEvent = sendCustomEvent;
    exports.setEnableEnvMocks = setEnableEnvMocks;
    exports.setGblPerfMgr = setGblPerfMgr;
    exports.setValue = setValue;
    exports.sortPlugins = sortPlugins;
    exports.strContains = strContains;
    exports.strEndsWith = strEndsWith;
    exports.strFunction = strShimFunction;
    exports.strObject = strShimObject;
    exports.strPrototype = strShimPrototype;
    exports.strStartsWith = strStartsWith;
    exports.strTrim = strTrim;
    exports.strUndefined = strShimUndefined;
    exports.throwAggregationError = throwAggregationError;
    exports.throwError = throwError;
    exports.toISOString = toISOString;
    exports.uaDisallowsSameSiteNone = uaDisallowsSameSiteNone;
    exports.unloadComponents = unloadComponents;
    exports.useXDomainRequest = useXDomainRequest;

}));
//# sourceMappingURL=applicationinsights-core-js.js.map
