Global Sustainable Development Congress 2025
",d+"
"))),g},C=function(){t=e.getService("config"),ee(t.getServiceConfig("domCapture")||{})},{init:function(){t=e.getService("config"),T||ee(t.getServiceConfig("domCapture")||{})},destroy:function(){t.unsubscribe("configupdated",C),l&&(l.disconnect(),l=null),p&&Element.prototype.attachShadow===H&&(Element.prototype.attachShadow=p,p=null),T=!1,D&&Object.defineProperty(Document.prototype,"adoptedStyleSheets",D),M&&Object.defineProperty(Document.prototype,"styleSheets",M),k&&Object.defineProperty(ShadowRoot.prototype,"adoptedStyleSheets",k),P&&Object.defineProperty(ShadowRoot.prototype,"styleSheets",P),CSSStyleSheet.prototype.insertRuleOriginal&&(CSSStyleSheet.prototype.insertRule=CSSStyleSheet.prototype.insertRuleOriginal),CSSStyleSheet.prototype.deleteRuleOriginal&&(CSSStyleSheet.prototype.deleteRule=CSSStyleSheet.prototype.deleteRuleOriginal),CSSStyleSheet.prototype.replaceSyncOriginal&&(CSSStyleSheet.prototype.replaceSync=CSSStyleSheet.prototype.replaceSyncOriginal),CSSStyleSheet.prototype.replaceOriginal&&(CSSStyleSheet.prototype.replace=CSSStyleSheet.prototype.replaceOriginal),CSSStyleSheet.prototype.publishOwnership&&delete CSSStyleSheet.prototype.publishOwnership,CSSStyleSheet.prototype.removeOwnership&&delete CSSStyleSheet.prototype.removeOwnership,CSSStyleSheet.prototype.updateOwner&&delete CSSStyleSheet.prototype.updateOwner},observeWindow:function(e){e&&(I.getValue(i,"options.captureFrames",!1)||e===window)&&-1===I.indexOf(d,e)&&(d.push(e),l&&L&&l.observe(e.document,u))},captureDOM:function(e,t){let n,o,r,a=null,s=0;if(!T||I.isIE&&document.documentMode<10)return a;if(t=I.mixin({},i.options,t),e=e||window.document,!S||!c||v||t.forceFullDOM){if(l&&l.disconnect(),a=de(e,t),a.fullDOM=!0,a.forced=!(!v&&!t.forceFullDOM),S=!0,l)for(n=0,o=d.length;nt.maxLength&&(a={errorCode:101,error:"Captured length ("+s+") exceeded limit ("+t.maxLength+")."})),a}}})),TLT.addService("encoder",(function(e){"use strict";let t={},n=null,o=null,i=!1;function r(e){t=e,n.subscribe("configupdated",o),i=!0}return o=function(){n=e.getService("config"),r(n.getServiceConfig("encoder")||{})},{init:function(){n=e.getService("config"),i||r(n.getServiceConfig("encoder")||{})},destroy:function(){n.unsubscribe("configupdated",o),i=!1},encode:function(n,o){let i;const r={data:null,encoding:null,error:null};if("string"!=typeof n&&!n||!o)return r.error="Invalid "+(n?"type":"data")+" parameter.",r;const a=function(n){let o=null;return n?(o=t[n],o&&"string"==typeof o.encode&&(o.encode=e.utils.access(o.encode)),o):o}(o);if(!a)return r.error="Specified encoder ("+o+") not found.",r;if("function"!=typeof a.encode)return r.error="Configured encoder ("+o+") 'encode' method is not a function.",r;try{i=a.encode(n)}catch(e){return r.error="Exception "+(e.name?e.name+" - ":"")+(e.message||e),r}return i&&null!==e.utils.getValue(i,"buffer",null)?(r.data=i.buffer,r.encoding=a.defaultEncoding,r):(r.error="Encoder ("+o+") returned an invalid result.",r)}}})),TLT.addService("message",(function(e){"use strict";const t=e.utils,n=e.getTabId(),o=[];let i=0,r=0;const a=e.getStartTime(),s=window.performance&&performance.timeOrigin&&performance.timeOriginl&&(t=e),t}function X(e){let t="";if(delete e.timestamp,this.type=e.type,this.offset=U(),2===e.type&&"LOAD"===e.screenview.type?(o.push(U()),this.screenviewOffset=0):o.length?(this.screenviewOffset=U()-o[o.length-1],2===e.type&&"UNLOAD"===e.screenview.type&&o.pop()):this.screenviewOffset=0,this.type)for(t in this.count=r+=1,this.fromWeb=!0,e)Object.prototype.hasOwnProperty.call(e,t)&&(this[t]=e[t])}function z(e,n,o){let i=S.PVC_MASK_BASIC;return"string"!=typeof n?n:(e?e.maskType===S.PVC_MASK_EMPTY.maskType?i=S.PVC_MASK_EMPTY:e.maskType===S.PVC_MASK_BASIC.maskType?i=S.PVC_MASK_BASIC:e.maskType===S.PVC_MASK_TYPE.maskType?i=S.PVC_MASK_TYPE:e.maskType===S.PVC_MASK_CUSTOM.maskType&&(i="string"==typeof e.maskFunction?t.access(e.maskFunction):e.maskFunction,"function"!=typeof i&&(i=S.PVC_MASK_BASIC)):i=S.PVC_MASK_BASIC,i(n,o))}function _(e,t){let n;if(e&&t)for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&("value"===n?t[n]=z(e,t[n]):delete t[n])}function q(e,n){return-1!==t.matchTarget(e,n)}function H(e,t){let n,o=null;if(!(e&&e.maskAttributes&&t&&t.attributes))return o;if("function"==typeof e.maskAttributes)try{o=e.maskAttributes(t.id,t.attributes)}catch(e){}else for(n in o=t.attributes,t.attributes)Object.prototype.hasOwnProperty.call(t.attributes,n)&&(o[n]=z(e,t.attributes[n]));return o}function W(e){let n,o,i,r,a=!1;if(!e||!e.currState&&!e.prevState&&!e.attributes||!e.id)return e;const s=e.prevState,l=e.currState;for(n=0,o=w.length;n=0;n-=1)r=v[n],"object"==typeof r.pattern?r.cRegex=new RegExp(r.pattern.regex,r.pattern.flags):v.splice(n,1)}return t.isiOS?90===Math.abs(P)&&(M=k,M=I):(M=I,D=k),S.PVC_MASK_EMPTY=function(e){return""},S.PVC_MASK_BASIC=function(e){return"string"!=typeof e?"":e.length?"XXXXX":""},S.PVC_MASK_TYPE=function(e){let n,o,i="";if("string"!=typeof e)return i;const r=e.split("");for(n=0,o=r.length;nl.hitCount+1&&delete V[a])}}(e.domCapture),B(new X(e))},wrapMessages:function(o){i+=1;const r={messageVersion:"13.0.0.0",serialNumber:i,sessions:[{id:e.getPageId(),tabId:n,startTime:s,timezoneOffset:c,messages:o,clientEnvironment:{webEnvironment:{libVersion:"6.4.70",buildNote:p.buildNote||"",domain:y,page:h,referrer:document.referrer,mouseMovement:e.isMousemovementDetected(),screen:{devicePixelRatio:E,deviceWidth:M,deviceHeight:D,deviceToolbarHeight:j,width:N,height:R,orientation:P}}}}]},a=r.sessions[0].clientEnvironment.webEnvironment;return a.screen.orientationMode=t.getOrientationMode(a.screen.orientation),m&&(a.priorPage={page:b,terminationReason:m}),r},getCurrentOffset:U}})),TLT.addService("serializer",(function(e){"use strict";let t=e.getService("config"),n={},o={},i=null,r=!1;const a={json:void 0!==window.JSON?{serialize:window.JSON.stringify,parse:window.JSON.parse}:{}};function s(t,n,o){let i,r,a;for(i=0,r=(t=t||[]).length;it?localStorage.removeItem(e):o=n[1]),o}function w(e,t){if(!localStorage||!e)return;t=t||y();const n=Date.now()+s;return localStorage.setItem(e,n+"|"+t),b(e)}function v(){return a}function S(u){if(a=[],l=h.getValue(u,"sessionIDUsesCookie",!0),c=h.getValue(u,"sessionIDUsesStorage",!1),u.tlAppKey&&(o=u.tlAppKey,a.push({name:"X-Tealeaf-SaaS-AppKey",value:o})),u.visitorCookieName&&(d=u.visitorCookieName),u.wcxCookieName&&(f=u.wcxCookieName),t=h.getCookieValue(f),t&&a.push({name:"X-WCXSID",value:t}),u.sessionizationCookieName&&(p=u.sessionizationCookieName),c){s=h.getValue(u,"sessionIDStorageTTL",6e5);try{n=b(p)}catch(e){c=!1}}if(!n&&l&&(n=h.getCookieValue(p)),!n)if(t)p=f,n=t;else{if(c)try{n=w(p)}catch(e){c=!1}!n&&l&&(n=function(){const e=y(),t=!!r.secureTLTSID,n=r.samesite;return h.setCookie(p,e,void 0,void 0,void 0,t,n),h.getCookieValue(p)}())}e.setSessionCookieInfo(p,n);const m=void 0!==u?.disableTLTDID&&u.disableTLTDID;!1===m&&(i=h.getCookieValue(g),i&&void 0!==i||(i=y()),h.setCookie(g,i,31536e3,void 0,void 0,false,"Lax")),n||(n="Check7UIC7Cookie7Configuration77"),a.push({name:"X-Tealeaf-SaaS-TLTSID",value:n}),!1===m&&a.push({name:"X-Tealeaf-TLTDID",value:i}),a.length&&TLT.registerBridgeCallbacks([{enabled:!0,cbType:"addRequestHeaders",cbFunction:v}])}function T(e){let t,n,o,i=!1;const a=r.appCookieWhitelist;if(!a||!a.length)return i;for(t=0,n=a.length;t=0)try{a=decodeURIComponent(i.substring(0,n))}catch(e){a=i.substring(0,n)}if(s=i.substring(n+1),T(a))try{c[a]=decodeURIComponent(s)}catch(e){c[a]=s}}u&&!c[d]&&(c[d]=u),e.post({type:14,cookies:c})}}())}}})),TLT&&"function"==typeof TLT.addModule&&TLT.addModule("dataLayer",(function(e){"use strict";let t,n,o=!1,i=!0,r="",a=[],s=0,l=0;const c=e.utils,u=new Set;function d(e,t){let n,o,i,r=-1;if(!e||!t)return r;for(n=0,o=t.length;n5&&!o||t>10)return"Serialization error: Exceeds nesting limit (5) or (10) for a permitted property."}else t=1;for(r in e)if(Object.prototype.hasOwnProperty.call(e,r)&&!(d(r,l)>=0)){if(1===t&&(o="",r in u&&(o=r)),!i&&!o||t>5&&o&&r!==u[o][t-1]&&n.rootProperties[o][t-1])continue;switch(a=e[r],typeof a){case"object":if(a instanceof Node)a.nodeName?(s[r]=a.nodeName.toLowerCase(),a.id&&(s[r]+="#"+a.id)):s[r]="DOMNode: unknown";else if(a instanceof Window)s[r]="DOMWindow: "+a.location.href;else try{s[r]=f(a,t,n,o)}catch(e){s[r]="Serialization error: "+e.message}break;case"function":case"undefined":break;default:n&&n.privacyPatterns&&(a=c.applyPrivacyPatterns(a,n.privacyPatterns)),s[r]=a}}return s}function p(e){let t=null;if(!e)return t;switch(typeof e){case"string":t=c.access(e);break;case"object":t=e;break;case"function":try{t=e()}catch(e){}}return t}function g(){let e,t;if(o)for(t=0;t=0)){let e=p(a[t].dataObject);if(!e)return;const n=a[t].rules;if(n&&(i=void 0===n.includeEverything||n.includeEverything,n.privacyPatterns))for(let e=n.privacyPatterns.length-1;e>=0;e-=1){const t=n.privacyPatterns[e];"object"==typeof t.pattern?t.cRegex=new RegExp(t.pattern.regex,t.pattern.flags):n.privacyPatterns.splice(e,1)}e instanceof Array?(e=e.filter((e=>{if(n&&n.filter)for(const t of n.filter){let n,o;const i=t.matchProperty,r=t.matchValue;let a=!1;return"[object Arguments]"===Object.prototype.toString.call(e)?(n=e[0],o=e[1],a=!0):(n=e[t.matchProperty],o=t.matchValue),h(e,n,o,i,r,a)}return!0})).map((e=>f(e,0,n))),e.forEach((function(e){y(e)}))):y(f(e,0,n)),i=!0}}function h(e,t,n,o,i,r){if(r){if("string"==typeof t&&"string"==typeof o&&"string"==typeof n&&"string"==typeof i&&t===o&&n===i)return!0;if("string"==typeof t&&"string"==typeof o&&"object"==typeof n&&(null===i||""===i||void 0===i)&&t===o)return!0;if("string"==typeof t&&"string"==typeof o&&"string"==typeof n&&"object"==typeof i&&"object"==typeof i){return new RegExp(i).test(n)}if("string"==typeof t&&"object"==typeof o&&"string"==typeof t&&(null===i||""===i||void 0===i)){return new RegExp(o).test(t)}}else{if("string"==typeof t&&"string"==typeof n&&t===n)return!0;if(!("string"!=typeof t||"string"!=typeof o||"object"!=typeof e||null!==n&&""!==n&&void 0!==n||null!==i&&""!==i&&void 0!==i)&&Object.prototype.hasOwnProperty.call(e,o))return!0;if("string"==typeof t&&"string"==typeof o&&"object"==typeof e&&"object"==typeof i){return new RegExp(i).test(e[o])}if("object"==typeof o&&"object"==typeof e&&(null===i||""===i||void 0===i)){const t=Object.keys(e);for(const e of t){if(new RegExp(o).test(e))return!0}}}return!1}function y(t){if(!t)return;let n;try{n=JSON.stringify(t)}catch(e){n=Object.keys(t).map((e=>`${e}=${t[e]}`)).join("_")}if(u.has(n))return;n&&u.add(n);const o={type:19,dataLayer:t};e.post(o)}function m(e,t){return setTimeout((function(){l>=t.length-1?g():(l=t.length,m(e,t))}),e)}function b(e){let t;if(e&&e.dataObject&&"string"==typeof e.dataObject){t=e.dataObject.replace(/\window\./,"");const n=window[t];if(n)w(n,"window['"+e+"']");else{if(s+=300,s>5e4)return;setTimeout((function(){b(e)}),300)}}else{if(!e||!Array.isArray(e.dataObject)&&"object"!=typeof e.dataObject)return;w(e,"trackObj as object")}}function w(e,t){if(e)if(Array.isArray(e))e.oldPush=Array.prototype.push,e.push=function(t){e.onPush(t),e.oldPush(t)},e.onPush=function(t){l=e.length-1,n&&clearTimeout(n),n=setTimeout((function(){m(25,e)}),300)};else if("object"==typeof e&&!Array.isArray(e)&&null!==e){new Proxy(e,{set:function(e,t,n){return g(),!0}})&&g()}}return{init:function(){if(t=e.getConfig(),o=!0,a=[],t.dataObjects){a=t.dataObjects;for(const e of a)if(e.rules&&e.rules.permittedProperties){const t=e.rules.permittedProperties;e.rules.rootProperties={};for(let n=0;n=r("hoverThreshold")){for(this.hoverDuration=Math.min(this.hoverDuration,r("hoverThresholdMax")),a=!0,function(n,o){const i=t.getValue(n,"webEvent.target",{}),r=t.getValue(i,"element.tagName")||"",a="input"===r.toLowerCase()?t.getValue(i,"element.type"):"",s=t.getTlType(i),l={type:9,event:{hoverDuration:n.hoverDuration,hoverToClick:t.getValue(o,"hoverToClick")},target:{id:i.id||"",idType:i.idType||"",name:i.name||"",tlType:s,type:r,subType:a,position:{width:t.getValue(i,"element.offsetWidth",0),height:t.getValue(i,"element.offsetHeight",0),relXY:n.relXY}}};l.target.id&&(i.accessibility&&(l.target.accessibility=i.accessibility),i.attributes&&(l.target.attributes=i.attributes),e.post(l))}(this,{hoverToClick:!!o});void 0!==s&&l++=i&&t.clog("Overstat process() hit iterations limit")}else this.dispose(o);return a},this.clone=function(){const e=new d(this.domNode,this.gridX,this.gridY);return e.parentKey=this.parentKey,e}}function f(e,n,o){const r=function(e){if(e&&e.position)return{x:e.position.x,y:e.position.y};const n=(e=a(e))&&e.getBoundingClientRect?e.getBoundingClientRect():null;let o=0,r=0,l=o,u=r,d=0,f=0,p=c(e),g=0;for(n?(o=n.left,r=n.top):e&&(o=e.offsetLeft,r=e.offsetHeight);p&&g++=i&&t.clog("Overstat calculateNodeOffset() hit iterations limit"),isNaN(o)&&(o=0),isNaN(r)&&(r=0),{x:o,y:r}}(e=a(e));let l=n-r.x,u=o-r.y;return isFinite(l)||(l=0),isFinite(u)||(u=0),{x:l,y:u}}function p(e,t,n){const o=(e=a(e)).getBoundingClientRect?e.getBoundingClientRect():null,i=o?o.width:e.offsetWidth,s=o?o.height:e.offsetHeight,l=i&&i>0?Math.max(i/r("gridCellMaxX"),r("gridCellMinWidth")):r("gridCellMinWidth"),c=s&&s>0?Math.max(s/r("gridCellMaxY"),r("gridCellMinHeight")):r("gridCellMinHeight");let u=Math.min(Math.floor(t/l),r("gridCellMaxX")),d=Math.min(Math.floor(n/c),r("gridCellMaxY"));const f=i>0?t/i:0,p=s>0?n/s:0;let g="";var h,y;return isFinite(u)||(u=0),isFinite(d)||(d=0),h=f,y=p,g=(h=Math.floor(1e4*Math.min(Math.max(h,0),1))/1e4)+","+Math.floor(1e4*Math.min(Math.max(y,0),1))/1e4,{x:u,y:d,relXY:g}}function g(e){let o=e;let r=null,a=!1,s=0;const l={};for(l[e.getKey()]=!0;void 0!==o&&s++=i&&t.clog("Overstat cleanupHoverEvents() hit iterations limit"),o=n[o.parentKey];for(r in n)Object.prototype.hasOwnProperty.call(n,r)&&!l[r]&&(o=n[r],o&&(a?o.dispose():a=o.process()))}function h(e,o,i){if(o||(o=e.target),s(o))return null;if(t.isiOS||t.isAndroid)return null;let r,a,l,y,m,b,w;return u(o)?l=h(e,c(o),i):(r=f(o,e.position.x,e.position.y),a=p(o,r.x,r.y),l=new d(o,a.x,a.y,e),l.relXY=a.relXY,y=l.getKey(),n[y]?l=n[y]:n[y]=l,l.update(),i||(w=c(o),w&&(b=h(e,w,!0),null!==b&&(m=b.getKey(),y=l.getKey(),y!==m&&(l.parentKey=m))),g(l))),l}function y(e){(function(e,n){let o=0;if(!n||n===e)return!1;for(n=l(n);!s(n)&&o++=i&&t.clog("Overstat isChildOf() hit iterations limit"),!1})((e=function(e){return e.nativeEvent&&(e=e.nativeEvent),e}(e)).target,e.relatedTarget)||function(e,t){let o=null,i=null,r=!1;for(i in n)Object.prototype.hasOwnProperty.call(n,i)&&(o=n[i],o&&o.domNode===e&&o.getKey()!==t&&(r?o.dispose():r=o.process()))}(e.target)}function m(o){if(t.getValue(o,"target.id"))switch(o.type){case"mousemove":h(o);break;case"mouseout":y(o);break;case"click":!function(e){let t=null,o=null,i=!1;for(o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t=n[o],t&&(i?t.dispose():i=t.process(!0)))}();break;case"submit":e.performFormCompletion(!0)}}return{init:function(){},destroy:function(){let e;for(e in n)Object.prototype.hasOwnProperty.call(n,e)&&(n[e].dispose(),delete n[e])},onevent:function(e){"object"==typeof e&&e.type&&m(e)},onmessage:function(e){},createHoverEvent:function(e,t,n,o){return new d(e,t,n,o)},cleanupHoverEvents:g,eventMap:n}})),TLT&&"function"==typeof TLT.addModule&&TLT.addModule("performance",(function(e){"use strict";const t={loadReceived:!1,unloadReceived:!1,perfEventSent:!1};let n,o=null,i=null,r={},a=0;const s=e.utils,l="https:"===window.location.protocol;let c,u,d=[],f=0;const p={enabled:!1,resourceTypes:[],blacklist:[]};function g(i,r){let l,c,u;const d={type:7,performance:{}};let f,p;if(!i||t.perfEventSent)return;const g=i.performance||{},h=g.timing,y=g.navigation;if(h){if(!h.loadEventStart&&!r)return;d.performance.timing=function(e){let t=0,n="",o=0;const i={};if(!e||"object"!=typeof e||!e.navigationStart)return{};for(n in t=e.navigationStart,e)(Object.prototype.hasOwnProperty.call(e,n)||"number"==typeof e[n])&&(o=e[n],i[n]="number"==typeof o&&o&&"navigationStart"!==n?o-t:o);return i}(h),d.performance.timing.renderTime=function(e){let t,n,o=0;return e&&(t=e.responseEnd>0&&e.responseEndt&&(o=n-t)),o}(h)}else{if(!n.calculateRenderTime)return;d.performance.timing={renderTime:a,calculated:!0}}const m=d.performance.timing;if(n.renderTimeThreshold&&m.renderTime>n.renderTimeThreshold&&(m.invalidRenderTime=m.renderTime,delete m.renderTime),g.getEntriesByType)for(f=g.getEntriesByType("paint"),l=0,c=f.length;l0&&(m[p.name]=Math.round(p.startTime));if(!m["first-paint"]&&m.msFirstPaint&&(m["first-paint"]=m.msFirstPaint,delete m.msFirstPaint),y){switch(y.type){case 0:u="NAVIGATE";break;case 1:u="RELOAD";break;case 2:u="BACKFORWARD";break;default:u="UNKNOWN"}d.performance.navigation={type:u,redirectCount:y.redirectCount}}e.post(d),t.perfEventSent=!0,o&&(clearInterval(o),o=null)}function h(t){let n;const o=u.blacklist;let i,r,a;if(!t||!t.name)return;const s=t.name,c=t.initiatorType;if(l&&0===s.indexOf("http:")&&d.push(s),!(Object.prototype.hasOwnProperty.call(u,"maxAlerts")&&f>=u.maxAlerts||Object.prototype.hasOwnProperty.call(u,"threshold")&&t.duration0&&-1===u.resourceTypes.indexOf(c))){for(r=!1,n=0;nn&&!a&&(a=t.timestamp-n)}(r),t.perfEventSent||o||(o=setInterval((function(){e.isInitialized()&&g(window)}),s.getValue(n,"delay",2e3))),function(){if(!u.enabled||"function"!=typeof window.PerformanceObserver)return;c=new window.PerformanceObserver((function(e,t){s.forEach(e.getEntries(),h)}));const e=window.performance.getEntriesByType("resource");setTimeout((function(){s.forEach(e,h)})),c.observe({entryTypes:["resource"]})}();break;case"screenview_load":!function(){if(!n||!n.pageExperience||!n.pageExperience.enabled)return;y();const e=n.pageExperience.api;e.getCLS(b),e.getLCP(b),e.getFID(b),i=setTimeout(m,3e5)}(),t.perfEventSent||g(window);break;case"screenview_unload":default:break;case"unload":t.unloadReceived=!0,m(),t.perfEventSent||g(window)}},onmessage:function(e){}}})),TLT.addModule("replay",(function(e){"use strict";const t=e.utils;let n=0;let o={},i=null,r=[],a=!0,s=null,l=null,c=0,u=null;const d=(new Date).getTime();let f=null;const p="root";let g,h=null,y=null,m=null,b=null,w={inFocus:!1},v=null,S=e.getConfig()||{};const T=t.getValue(S,"viewPortWidthHeightLimit",1e4);let O=1,x=1;const C={},E=t.getValue(S,"mousemove")||{},L=t.getValue(S,"tab",!1),I=E.sampleRate,k=E.ignoreRadius;let P=null,M={},D=0;let j=0,N=[],R="visible"===document.visibilityState;const A=[],V=[],F=[];function U(e){let t=!1,n=null;if("object"!=typeof e||!e.type)return t;switch(e.type.toLowerCase()){case"input":n="|"+(e.subType||"")+"|",t=-1!=="|button|image|submit|reset|".indexOf(n.toLowerCase());break;case"select":case"textarea":break;default:t=!0}return t}function X(e){let t=e.type;const n=e.target;if(t="string"==typeof t?t.toLowerCase():"unknown","blur"===t&&(t="focusout"),"change"===t)if("INPUT"===n.type)switch(n.subType){case"text":case"date":case"time":t=n.subType+"Change";break;default:t="valueChange"}else t="TEXTAREA"===n.type?"textChange":"valueChange";return t}function z(e,t,n){let o,i,r;if(document.querySelector(e))return!0;for(o=0;o=0&&(r.timerId=window.setTimeout((function(){!function(t){let n,o,i;for(n=0;n=1e3&&(t=!0);const n={type:18,mousemove:{elements:F.slice(0),data:V.slice(0),config:{ignoreRadius:E.ignoreRadius,sampleRate:E.sampleRate},limitReached:t,maxInactivity:j}};e.post(n),F.length=0,V.length=0,M={},j=0}()),y}function W(e){let n=null;const o=t.getValue(e,"webEvent.target",{}),i=o.type,r=o.subType||"",a=t.getTlType(o),s=function(e){const t=[];for(e=e.parentNode;e;)t.push(e),e=e.parentNode;return t}(t.getValue(o,"element")),l=t.getValue(e,"webEvent.subType",null),c={timestamp:t.getValue(e,"webEvent.timestamp",0),type:4,target:{id:o.id||"",idType:o.idType,name:o.name,tlType:a,type:i,position:{width:t.getValue(o,"size.width"),height:t.getValue(o,"size.height")},currState:e.currState||null},event:{tlEvent:X(t.getValue(e,"webEvent")),type:t.getValue(e,"webEvent.type","UNKNOWN")}};return o.accessibility&&(c.target.accessibility=o.accessibility),o.attributes&&(c.target.attributes=o.attributes),r&&(c.target.subType=r),"number"==typeof e.dwell&&e.dwell>0&&(c.target.dwell=e.dwell),"number"==typeof e.visitedCount&&(c.target.visitedCount=e.visitedCount),void 0!==e.prevState&&(c.prevState=e.prevState),l&&(c.event.subType=l),n=function(e){return t.some(e,(function(e){const n=t.getTagName(e);return"a"===n||"button"===n?e:null}))}(s),c.target.isParentLink=!!n,n&&(n.href&&(c.target.currState=c.target.currState||{},c.target.currState.href=c.target.currState.href||n.href),n.value&&(c.target.currState=c.target.currState||{},c.target.currState.value=c.target.currState.value||n.value),(n.innerText||n.textContent)&&(c.target.currState=c.target.currState||{},c.target.currState.innerText=t.trim(c.target.currState.innerText||n.innerText||n.textContent))),t.isUndefOrNull(c.target.currState)&&delete c.target.currState,t.isUndefOrNull(c.target.name)&&delete c.target.name,c}function B(t){e.post(t)}function K(t){let n,o,i,r,a;const s={mouseout:!0,mouseover:!0},l=[],c=t.length;for(n=0;n0&&e.viewPortHeight0&&e.viewPortWidthd.pageHeight&&(d.viewPortY=d.pageHeight-d.viewPortHeight),d.viewPortY<0&&(d.viewPortY=0);const f=d.viewPortWidth?c/d.viewPortWidth:1;return d.deviceScale=f.toFixed(3),d.viewTime=0,y&&m&&(d.viewTime=m.getTime()-y.getTime()),"scroll"===e.type&&(d.viewPortXStart=l.clientState.viewPortX,d.viewPortYStart=l.clientState.viewPortY),u}(e),"scroll"===e.type||"resize"===e.type?(Z.timeoutId&&window.clearTimeout(Z.timeoutId),Z.timeoutId=window.setTimeout(Z,t.getValue(S,"scrollTimeout",2e3))):"touchstart"===e.type||"load"===e.type?s&&(x=parseFloat(s.clientState.deviceScale)):"touchend"===e.type&&s&&(O=parseFloat(s.clientState.deviceScale),Z()),"load"!==e.type&&"unload"!==e.type||("unload"===e.type&&d&&(n=t.clone(s),n.clientState.event="attention",n.clientState.viewTime=(new Date).getTime()-d),Z(),n&&(s=n,Z())),s}function te(e){const n={},o=t.getValue(e,"nativeEvent.rotation",0)||t.getValue(e,"nativeEvent.touches[0].webkitRotationAngle",0);let i=null;const r={type:4,event:{type:"touchend"},target:{id:t.getValue(e,"target.id"),idType:t.getValue(e,"target.idType")}};2===t.getValue(e,"nativeEvent.changedTouches.length",0)+t.getValue(e,"nativeEvent.touches.length",0)&&(ee(e),i={rotation:o?o.toFixed(2):0,scale:O?O.toFixed(2):1},i.pinch=function(){let e;const t=O-x;return e=isNaN(t)?"INVALID":t<0?"CLOSE":t>0?"OPEN":"NONE",e}(),n.scale=x?x.toFixed(2):1,r.target.prevState=n,r.target.currState=i,B(r))}function ne(t){let n,o,i=null;for(n in C)Object.prototype.hasOwnProperty.call(C,n)&&(o=C[n].exception,o.repeats>1&&(i={type:6,exception:o},e.post(i)));r&&K(r),m=new Date,ee(t),g!==p&&e.normalizeUrl(location.hash,2)!==g||TLT.logScreenviewUnload(g)}function oe(){g=t.getValue(S,"forceRootScreenview",!1)?p:e.normalizeUrl(location.hash,2)||p}return{init:function(){r=[]},destroy:function(){J(i),r=[],Z.timeoutId&&(window.clearTimeout(Z.timeoutId),Z.timeoutId=0)},onevent:function(a){let s,l,u=null,d=null;if("object"==typeof a&&a.type){if(!function(e,n){const o=["type","name","target.id"];let i,r,a=null,s=!0,l=0,c=0,u=0;if(!e||!n||"object"!=typeof e||"object"!=typeof n)return!1;for(i=0,r=o.length;s&&i10)&&(s=!1))),s}(a,f)){switch(f=a,u=t.getValue(a,"target.id"),o[u]||(o[u]={}),function(e,n){let i=!1;const a=r.length,s=a?r[a-1]:null;if(!s)return i;const l=s.target.id;l!==e&&"selectList"!==s.target.tltype&&("focus"!==n.type&&"click"!==n.type&&"change"!==n.type&&"blur"!==n.type&&"unload"!==n.type||(J(l),i=!0)),l===e&&("click"===n.type&&o[e].processedClick||"change"===n.type&&o[e].processedChange||"pointerup"===n.type&&o[e].processedClick&&t.getValue(n.target,"state.disabled",!1))&&(J(l,null,!0),i=!0)}(u,a),a.type){case"hashchange":break;case"focus":Q(u,a);break;case"blur":J(u,a);break;case"pointerdown":case"pointerup":$(u,a);break;case"click":G(u,a);break;case"change":!function(e,n){Q(e,n);const i=r[r.length-1];i.event.type="change",i.event.tlEvent=X(n),i.target.currState=n.target.state,o[e].prevState&&(i.target.prevState=o[e].prevState,"boolean"==typeof i.target.currState.checked&&(i.target.prevState.checked=!i.target.currState.checked)),o[e].webEvent=n,o[e].processedChange=!0,-1!==t.matchTarget(N,n.target)&&J(e,n)}(u,a);break;case"orientationchange":!function(e){const o=e.orientation;B({type:4,event:{type:"orientationchange"},target:{prevState:{orientation:n,orientationMode:t.getOrientationMode(n)},currState:{orientation:o,orientationMode:t.getOrientationMode(o)}}}),n=o}(a);break;case"touchstart":!function(e){2===t.getValue(e,"nativeEvent.touches.length",0)&&ee(e)}(a);break;case"touchend":te(a);break;case"loadWithFrames":TLT.logScreenviewLoad("rootWithFrames");break;case"load":n=a.orientation,y=new Date,("number"!=typeof t.getOrientationAngle()||t.isAndroid)&&(l=window.screen.width>window.screen.height?90:0,s=t.getOrientationAngle(),Math.abs(s)===l||180===s&&0===l||270===s&&90===l||(t.isLandscapeZeroDegrees=!0,180===Math.abs(s)||0===Math.abs(s)?n=90:90!==Math.abs(s)&&270!==Math.abs(s)||(n=0))),setTimeout((function(){e.isInitialized()&&ee(a)}),100),oe(),TLT.logScreenviewLoad(g);break;case"screenview_load":h=new Date,function(){let e;for(e in o)Object.prototype.hasOwnProperty.call(o,e)&&(o[e].visitedCount=0)}(),d=H("load",null,a.name);break;case"screenview_unload":d=H("unload",null,a.name);break;case"resize":case"scroll":m||(m=new Date),b=new Date,ee(a);break;case"unload":ne(a);break;case"mousemove":!function(n){let o,i,r,a=0,s=0;if(!E.enabled||Object.prototype.hasOwnProperty.call(window,"ontouchstart"))return;if(D>=1e3)return;const l={element:{id:n.target.id,idType:n.target.idType},x:n.position.x,y:n.position.y,offset:e.getCurrentOffset()};if(null!==P){if(a=l.offset-P.offset,I&&ar?i:r,k&&sj&&(j=a)}const c=JSON.stringify(l.element);o=M[c],void 0===o&&(F.push(l.element),o=F.length-1,M[c]=o);const u=t.getValue(n,"target.position.relXY").split(",");V.push([o,u[0],u[1],l.offset]),D+=1,P=l}(a);break;case"error":!function(n){let o;const i=t.getValue(n,"nativeEvent.message");let r=t.getValue(n,"nativeEvent.filename","");const a=t.getValue(n,"nativeEvent.lineno",-1),s=t.getValue(n,"nativeEvent.error");if("string"==typeof i){if(r&&(r=e.normalizeUrl(r,6)),o=s&&s.stack?s.stack.toString():(i+" "+r+" "+a).toString(),C[o])C[o].exception.repeats=C[o].exception.repeats+1;else{const t={type:6,exception:{description:i,url:r,line:a}};e.post(t),C[o]={exception:{description:i,url:r,line:a,repeats:1}}}c+=1}}(a);break;case"visibilitychange":!function(e){const t="visible"===document.visibilityState,n={type:4,event:{type:"visibilitychange"},target:{prevState:{visible:R},currState:{visible:t}}},o=H(e.type,e.target);o&&(n.dcid=o),B(n),R=t}(a),L&&(!1===R&&TLT?(ne(a),TLT.flushAll(),TLT.updatePageId()):(g||oe(),g!==p&&e.normalizeUrl(location.hash,2)!==g||TLT.logScreenviewLoad(g)));break;default:!function(e){const n={type:4,event:{tlEvent:X(e),type:e.type},target:{id:t.getValue(e,"target.id"),idType:t.getValue(e,"target.idType"),currState:t.getValue(e,"target.state")}},o=H(e.type,e.target);o&&(n.dcid=o),B(n)}(a)}return i=u,d}f=a}},onmessage:function(){}}})); // eslint-disable-line
/*!
- Use Chrome snippet to determine if Shadow DOM, Dynamic Styles, or iframes need to be captured
- Test replay by injecting the UIC
- Audit PII on site and in replay
- Build privacy rules and privacy patterns
- Use "::OPTIONAL::" code if required (to exclude pages, to support multiple app keys)
- Validate privacy is working
*/
// --------------------------------------------------------------------------------------
// ------------------------------------------------------- flushQueue custom module -----
// --------------------------------------------------------------------------------------
// Triggers TLT.flushAll on visibilitychange. Use with iOS tuning at end of config.
TLT.addModule("flushQueue", function () {
return {
onevent: function (webEvent) {
if (webEvent) {
switch (webEvent.type) {
case "visibilitychange":
TLT.flushAll();
break;
default:
break;
}
}
}
};
});
// --------------------------------------------------------------------------------------
// ---------------------------------------------------------- Tealeaf configuration -----
// --------------------------------------------------------------------------------------
(function () {
"use strict";
var config,
TLT = window.TLT;
if (TLT.utils.isLegacyIE) {
if (console) {
console.warn("This version of the UIC does not support Internet Explorer 8.");
console.info("Applications requiring Internet Explorer 8 (or below) support should use UIC 5.2.0");
}
TLT.terminationReason = "Unsupported browser";
return;
}
config = {
core: {
buildNote: "THE 2024-04-15",
blockedElements: [],
ieExcludedLinks: ["a[href*=\"javascript:void\"]", "input[onclick*='javascript:']"],
blockedUserAgents: [
{ regex: "(Google|Bing|Face|DuckDuck|Yandex|Exa)bot|spider|archiver", flags: "i" },
"PhantomJS"
],
inactivityTimeout: 1000 * 60 * 29, // 29 minutes
modules: {
replay: {
events: [
{ name: "change", attachToShadows: true, recurseFrames: true },
{ name: "click", recurseFrames: true },
{ name: "dblclick", recurseFrames: true },
{ name: "contextmenu", recurseFrames: true },
{ name: "pointerdown", recurseFrames: true },
{ name: "pointerup", recurseFrames: true },
{ name: "hashchange", target: window },
{ name: "focus", recurseFrames: true },
{ name: "blur", recurseFrames: true },
{ name: "load", target: window },
{ name: "unload", target: window },
{ name: "resize", target: window },
{ name: "scroll", target: window },
{ name: "mousemove", recurseFrames: true },
{ name: "orientationchange", target: window },
{ name: "touchend" },
{ name: "touchstart" },
{ name: "error", target: window },
{ name: "visibilitychange" }
]
},
flushQueue: {
events: []
},
overstat: {
enabled: true,
events: [
{ name: "click", recurseFrames: true },
{ name: "mousemove", recurseFrames: true },
{ name: "mouseout", recurseFrames: true },
{ name: "submit", recurseFrames: true }
]
},
performance: {
enabled: true,
events: [
{ name: "load", target: window },
{ name: "unload", target: window }
]
},
dataLayer: {
enabled: false,
events: [
{ name: "load", target: window },
{ name: "unload", target: window }
]
},
TLCookie: {
enabled: true
}
},
// Normalize URL, path, or fragment
// normalization: {},
// Share session identifier with other libraries
// sessionData: {},
screenviewAutoDetect: true,
framesBlacklist: []
},
services: {
queue: {
asyncReqOnUnload: true,
queues: [{
qid: "DEFAULT",
endpoint: "https://lib-eu-1.brilliantcollector.com/collector/collectorPost",
maxEvents: 30,
timerInterval: 30000,
maxSize: 300000,
checkEndpoint: true,
endpointCheckTimeout: 3000,
encoder: "gzip"
}]
},
message: {
privacy: [{
targets: ["input[type=password]"], // Mask all password fields
maskType: 2 // Mask with XXXXX
},
{
// Un-mask ONLY the following fields, which are very unlikely to contain PII
exclude: true,
targets: [
"input[type=hidden]",
"input[type=radio]",
"input[type=checkbox]",
"input[type=submit]",
"input[type=button]",
"input[type=search]"
],
maskAttributes: true,
maskType: 2
}
],
privacyPatterns: []
},
encoder: {
gzip: {
encode: "window.pako.gzip",
defaultEncoding: "gzip"
}
},
domCapture: {
diffEnabled: true,
// Options are set to these defaults:
//
// maxMutations: 100 // If this threshold is reached, the full DOM is captured instead of a diff
// maxLength: 1000000 // If this threshold is reached, the DOM snapshot will not be sent
// captureShadowDOM: false // Enable ONLY if app is using shadown DOM. Also set allowHitSplit to false in org properties.
// captureFrames: false // Enable ONLY if child frames/iframes need to be captured for replay
// captureDynamicStyles: false // Enable ONLY if dynamic/constructable/CSSOM styles are present
// captureHREFStyles: false // Enable ONLY if all styles need to be inserted inline (e.g if CSS files unreachable)
// removeScripts: true // Disable ONLY if script tags need to be preserved
// removeComments: true // Disable ONLY if comments need to be preserved
// discardBase64: 0 // Not present by default! Discard all base64 encoded inline image data that exceeds N characters.
// captureStyle: true // Disable to remove inline CSS. Reduces the size of the DOM snapshots, but may affect replay.
// keepImports: false // Enable to honor the "import" link type, a now deprecated and Chrome specific feature
//
// Override as needed below:
options: {
maxLength: 7000000,
captureDynamicStyles: true
}
},
browser: {
normalizeTargetToParentLink: true,
}
},
modules: {
overstat: {
hoverThreshold: 3000
},
performance: {
calculateRenderTime: true,
renderTimeThreshold: 600000,
performanceAlert: {
enabled: true,
threshold: 3000,
maxAlerts: 100,
resourceTypes: ["script", "img", "css", "xmlhttprequest", "fetch", "iframe", "beacon"],
blacklist: [{ regex: "brilliantcollector\\.com" }]
},
},
replay: {
domCapture: {
enabled: true,
screenviewBlacklist: [],
triggers: [
{ event: "change" },
{ event: "click" },
{ event: "dblclick" },
{ event: "contextmenu" },
{ event: "visibilitychange" },
{
event: "load",
fullDOMCapture: true,
delay: 300
}
]
},
mousemove: {
enabled: false,
sampleRate: 200,
ignoreRadius: 3
}
},
dataLayer: {
dataObjects: [
{
dataObject: "window.dataLayer",
rules: {
screenviewBlocklist: [],
propertyBlocklist: ["gtm.element"],
permittedProperties: [],
includeEverything: true
}
}
]
},
TLCookie: {
appCookieWhitelist: [{ regex: ".*" }],
tlAppKey: "359bdc335927442995bc24c41eed73c0" // EU-1/THEWUI/Prod
}
}
};
// ----------------------------------------------------------------------------------
// ------------------------------------------------------- Alternate IE Configs -----
// ----------------------------------------------------------------------------------
if (TLT.utils.isIE) {
// Disable DOM Capture and Ajax Monitor in IE9
if (document.documentMode === 9) {
config.modules.replay.domCapture.enabled = false;
config.modules.ajaxListener.enabled = false;
}
// Disable DOM Diff, limit DOM Capture triggers in IE10
if (document.documentMode === 10) {
config.services.domCapture.diffEnabled = false;
config.modules.replay.domCapture.triggers = [
{ event: "click", targets: ["a", "a *", "button", "button *"] },
{ event: "change" },
{ event: "load", delay: 100 }
];
}
}
// ----------------------------------------------------------------------------------
// ----------------------------------------------------- Android and iOS Tuning -----
// ----------------------------------------------------------------------------------
if (TLT.utils.isiOS || TLT.utils.isAndroid) {
(function () {
var uaMatch;
// Reduce batch size, increase frequency, increase endpoint timeout
config.services.queue.queues[0].maxEvents = 10;
config.services.queue.queues[0].maxSize = 10000;
config.services.queue.queues[0].timerInterval = 10000;
config.services.queue.queues[0].endpointCheckTimeout = 10000;
if (TLT.utils.isiOS) {
// Disable Beacon in iOS 12 and earlier due to Safari on iOS bug
uaMatch = window.navigator.userAgent.match(/OS (\d+)_/);
if (uaMatch && uaMatch[1] < 13) {
config.services.queue.useBeacon = false;
}
// Flush queue on visibilitychange as unload is not a reliable trigger in iOS.
if (config.core.modules.flushQueue && config.core.modules.flushQueue.events) {
config.core.modules.flushQueue.events.push({ name: "visibilitychange" });
} else {
console.log("Tealeaf Error: include the flushQueue module!");
}
}
}());
}
// ----------------------------------------------------------------------------------
// -------------------------------------------------------- Cross Domain TLTSID -----
// ----------------------------------------------------------------------------------
(function () {
var domains = [
"www.timeshighereducation.com",
"www.timeshighered-events.com"
],
cookieName = "TLTSID",
secureTLTSID = config.modules.TLCookie.secureTLTSID || false,
queryStringValue,
cookieValue,
url,
i,
kvp,
eventPath,
target,
onclickCode,
hash;
if (domains.length) {
queryStringValue = TLT.utils.getQueryStringValue(cookieName);
cookieValue = TLT.utils.getCookieValue(cookieName);
if (queryStringValue) {
if (queryStringValue !== cookieValue) {
TLT.utils.setCookie(cookieName, queryStringValue, undefined, undefined, undefined, secureTLTSID);
cookieValue = queryStringValue;
}
url = window.location.href;
kvp = cookieName + "=" + queryStringValue;
url = url.replace("?" + kvp, "");
url = url.replace("&" + kvp, "");
window.history.pushState({ withoutTLTSID: url }, "", url);
}
if (cookieValue) {
kvp = cookieName + "=" + cookieValue;
document.addEventListener("mouseup", function (event) {
if (!event.target.hostname) {
if (typeof event.composedPath === "function") {
eventPath = event.composedPath();
if (eventPath && eventPath.length) {
target = eventPath[0];
for (i = 0; i < eventPath.length; i++) {
if (TLT.utils.getTagName(eventPath[i]) === "a") {
target = eventPath[i];
break;
}
}
}
}
} else {
target = event.target;
}
if (window.location.hostname !== target.hostname
&& domains.indexOf(window.location.hostname) !== -1
&& domains.indexOf(target.hostname) !== -1
&& target.href
&& target.href.indexOf(kvp) === -1) {
onclickCode = target.getAttribute("onclick");
if (onclickCode && onclickCode.indexOf(kvp) === -1) {
url = target.href;
hash = url.split("#")[1];
url = url.split("#")[0];
if (url.split("?")[1] === "") {
url += kvp;
} else {
url = url.indexOf("?") !== -1 ? url + "&" + kvp : url + "?" + kvp;
}
url = hash ? url + "#" + hash : url;
onclickCode = onclickCode.replace(new RegExp(target.href, "g"), url);
target.setAttribute("onclick", onclickCode);
}
target.search += target.search ? "&" + kvp : "?" + kvp;
}
});
}
}
}());
// ----------------------------------------------------------------------------------
// ----------------------------------------------- Run AFTER UIC Initialization -----
// ----------------------------------------------------------------------------------
function afterInit() {
// ------------------------------------------------------------------------------
// ---------------------------------------------------- Restart TLT for SPA -----
// ------------------------------------------------------------------------------
(function () {
var origDestroy = window.TLT.destroy,
prevConfig;
// Check if document is active (visible and focused)
function checkVisibility() {
if (document.visibilityState === "visible" && document.hasFocus()) {
if (prevConfig && window.TLT && !TLT.isInitialized()) {
console.log("Restarting TLT");
TLT.init(prevConfig);
prevConfig = null;
}
window.removeEventListener("visibilitychange", checkVisibility);
window.removeEventListener("focus", checkVisibility);
}
}
// If termination reason was inactivity, set listener for active document
window.TLT.destroy = function (se, tr) {
if (tr === "inactivity") {
prevConfig = TLT.getConfig();
window.addEventListener("visibilitychange", checkVisibility);
window.addEventListener("focus", checkVisibility);
}
origDestroy.call(window.TLT, se, tr);
};
}());
}
window.TLT.init(config, afterInit);
}());