<!DOCTYPE html>
<html lang="en" dir="ltr" prefix="og: https://ogp.me/ns#">
<head>
<script type="text/javascript">;window.NREUM||(NREUM={});NREUM.init={distributed_tracing:{enabled:true},performance:{capture_measures:true},browser_consent_mode:{enabled:false},privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"],capture_payloads:'none'}};
;NREUM.loader_config={accountID:"7344970",trustKey:"26315",agentID:"772376670",licenseKey:"NRJS-857a1e7bc49a5710d05",applicationID:"772376670"};
;NREUM.info={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",licenseKey:"NRJS-857a1e7bc49a5710d05",applicationID:"772376670",sa:1};
;/*! For license information please see nr-loader-spa-1.313.1.min.js.LICENSE.txt */
(()=>{var e,t,r={384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>a,Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),o=r(1910);const a={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,o.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:a.beacon,errorBeacon:a.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>u,K7:()=>c,P3:()=>d,XX:()=>i,Yy:()=>a,df:()=>s,qY:()=>n,v4:()=>o});const n="events",i="jserrors",s="browser/blobs",o="rum",a="browser/logs",c={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},d={[c.pageViewEvent]:1,[c.pageViewTiming]:2,[c.metrics]:3,[c.jserrors]:4,[c.softNav]:5,[c.ajax]:6,[c.sessionTrace]:7,[c.sessionReplay]:8,[c.logging]:9,[c.genericEvents]:10},u={[c.pageViewEvent]:o,[c.pageViewTiming]:n,[c.ajax]:n,[c.softNav]:n,[c.metrics]:i,[c.jserrors]:i,[c.sessionTrace]:s,[c.sessionReplay]:s,[c.logging]:a,[c.genericEvents]:"ins"}},944:(e,t,r)=>{"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},993:(e,t,r)=>{"use strict";r.d(t,{A$:()=>s,ET:()=>o,TZ:()=>a,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},s={OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},o="log",a=n.K7.logging},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>a,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),o=r(2646);function a(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,a=i.i.handlers;if(s&&!s.aborted&&s.backlog&&a){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=a[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}).forEach(t=>{t[0]?.on&&t[0].context()instanceof o.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}s.isolatedBacklog||delete a[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],s=e[2];n.apply(i,s)}})}},1738:(e,t,r)=>{"use strict";r.d(t,{U:()=>f,Y:()=>l});var n=r(3241),i=r(9908),s=r(1863),o=r(944),a=r(3969),c=r(8362),d=r(860),u=r(4261);function l(e,t,r,s){const l=s||r;!l||l[e]&&l[e]!==c.d.prototype[e]||(l[e]=function(){(0,i.p)(a.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:u.Pl+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,o.R)(23,e)}})}function f(e,t,r,n,o){const a=e.info;null===r?delete a.jsAttributes[t]:a.jsAttributes[t]=r,(o||null===r)&&(0,i.p)(u.Pl+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},1741:(e,t,r)=>{"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e(i.$9,e,t)}start(){return this.#e(i.d3)}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},1910:(e,t,r)=>{"use strict";r.d(t,{i:()=>s});var n=r(944);const i=new Map;function s(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),s=t.includes("nrWrapper");return r||s||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},2555:(e,t,r)=>{"use strict";r.d(t,{D:()=>a,f:()=>o});var n=r(384),i=r(8122);const s={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function o(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}const a=e=>(0,i.a)(e,s)},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>o,H3:()=>n,g:()=>d,iL:()=>c,tS:()=>a,uh:()=>i,wk:()=>s});const n="NRBA",i="SESSION",s=144e5,o=18e5,a={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},d={OFF:0,FULL:1,ERROR:2}},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},2843:(e,t,r)=>{"use strict";r.d(t,{G:()=>s,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function s(e,t,r){(0,n.sp)("pagehide",e,t,r)}},3241:(e,t,r)=>{"use strict";r.d(t,{W:()=>s});var n=r(6154);const i="newrelic";function s(e={}){try{n.gm.dispatchEvent(new CustomEvent(i,{detail:e}))}catch(e){}}},3304:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(7836);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function s(e){try{return JSON.stringify(e,i())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},3333:(e,t,r)=>{"use strict";r.d(t,{$v:()=>u,TZ:()=>n,Xh:()=>c,Zp:()=>i,kd:()=>d,mq:()=>a,nf:()=>o,qN:()=>s});const n=r(860).K7.genericEvents,i=["auxclick","click","copy","keydown","paste","scrollend"],s=["focus","blur"],o=4,a=1e3,c=2e3,d=["PageAction","UserAction","BrowserPerformance"],u={RESOURCES:"experimental.resources",REGISTER:"register"}},3434:(e,t,r)=>{"use strict";r.d(t,{Jt:()=>o,YM:()=>u});var n=r(7836),i=r(5607),s=r(5732);const o="nr@original:".concat(i.W),a=50;var c=Object.prototype.hasOwnProperty,d=!1;function u(e,t,r){return e||(e=n.ee),i.inPlace=function(e,t,r,n,s,o){r||(r="");const a="-"===r.charAt(0);for(let c=0;c<t.length;c++){const d=t[c],u=e[d];f(u)||(e[d]=i(u,a?d+r:r,n,d,s,o))}},i.flag=o,i;function i(t,n,i,d,h,p){return f(t)?t:(n||(n=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach(function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})}),t}catch(e){l([e],r)}for(var n in e)c.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,c,f,g;let m,v;try{c=this,o=[...arguments],v=p?(0,s.$5)(r):[void 0],f="function"==typeof i?i(o,c):i||{}}catch(t){l([t,"",[o,c,d],f],e)}u(n+"start",[o,c,d,v],f,h);const y=performance.now();let b;try{return g=t.apply(c,o),b=performance.now(),g}catch(e){throw b=performance.now(),u(n+"err",[o,c,e,v],f,h),m=e,m}finally{const e=b-y,t={start:y,end:b,duration:e,isLongTask:e>=a,methodName:d,thrownError:m};t.isLongTask&&u("long-task",[t,c,v],f,h),u(n+"end",[o,c,g,v],f,h)}}}function u(r,n,i,s){if(!d||t){var o=d;d=!0;try{e.emit(r,n,i,t,s)}catch(t){l([t,r,n,i],e)}d=o}}}function l(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function f(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=o;var i=s.handlers={};function s(e,t,r,s){o(s||n.d,i,e,t,r)}function o(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var o=t[s]=t[s]||{};(o[r]=o[r]||[]).push([e,i])}},3738:(e,t,r)=>{"use strict";r.d(t,{He:()=>i,Kp:()=>a,Lc:()=>d,Rz:()=>u,TZ:()=>n,bD:()=>s,d3:()=>o,jx:()=>l,sl:()=>f,uP:()=>c});const n=r(860).K7.sessionTrace,i="bstResource",s="resource",o="-start",a="-end",c="fn"+o,d="fn"+a,u="pushState",l=1e3,f=3e4},3785:(e,t,r)=>{"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),o=r(3969),a=r(993);function c(e,t,r={},c=a.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(o.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)(a.ET,[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(a.p_).some(t=>t===e.toUpperCase().trim())}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function s(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>s,jT:()=>n,sp:()=>i})},3962:(e,t,r)=>{"use strict";r.d(t,{AM:()=>o,O2:()=>l,OV:()=>s,Qu:()=>f,TZ:()=>c,ih:()=>h,pP:()=>a,t1:()=>u,tC:()=>i,wD:()=>d});var n=r(860);const i=["click","keydown","submit"],s="popstate",o="api",a="initialPageLoad",c=n.K7.softNav,d=5e3,u=500,l={INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},f={INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},h={IP:"in progress",PF:"pending finish",FIN:"finished",CAN:"cancelled"}},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>a,rs:()=>i,xV:()=>o,z_:()=>s});const n=r(860).K7.metrics,i="sm",s="cm",o="storeSupportabilityMetrics",a="storeEventMetrics"},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},4261:(e,t,r)=>{"use strict";r.d(t,{$9:()=>u,BL:()=>c,CH:()=>p,Dl:()=>R,Fw:()=>w,PA:()=>v,Pl:()=>n,Pv:()=>x,Tb:()=>f,U2:()=>o,V1:()=>A,Wb:()=>T,bt:()=>b,cD:()=>y,d3:()=>E,dT:()=>d,eY:()=>g,fF:()=>h,hG:()=>s,hw:()=>i,k6:()=>a,nb:()=>m,o5:()=>l});const n="api-",i=n+"ixn-",s="addPageAction",o="addToTrace",a="addRelease",c="finished",d="interaction",u="log",l="noticeError",f="pauseReplay",h="recordCustomEvent",p="recordReplay",g="register",m="setApplicationVersion",v="setCurrentRouteName",y="setCustomAttribute",b="setErrorHandler",w="setPageViewName",R="setUserId",E="start",T="wrapLogger",A="measure",x="consent"},5205:(e,t,r)=>{"use strict";r.d(t,{j:()=>x});var n=r(384),i=r(1741);var s=r(2555),o=r(3333);const a=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var c=r(2614),d=r(944),u=r(8122);const l="[data-nr-mask]",f=e=>(0,u.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0},api:{register:{get enabled(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1}},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:c.wk,inactiveMs:c.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){a(t)?e.mask_selector="".concat(t,",").concat(l):""===t||null===t?e.mask_selector=l:(0,d.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){a(t)?e.block_selector+=",".concat(t):""!==t&&(0,d.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,d.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]}}})());var h=r(6154),p=r(9324);let g=0;const m={buildEnv:p.F3,distMethod:p.Xs,version:p.xv,originTime:h.WN},v={consented:!1},y={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||v.consented},set consented(e){v.consented=e},customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,harvester:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++g}},b=e=>{const t=(0,u.a)(e,y),r=Object.keys(m).reduce((e,t)=>(e[t]={value:m[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)},w=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};var R=r(7836),E=r(3241);const T={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},A=e=>(0,u.a)(e,T);function x(e,t={},r,o){let{init:a,info:c,loader_config:d,runtime:u={},exposed:l=!0}=t;if(!c){const e=(0,n.pV)();a=e.init,c=e.info,d=e.loader_config}e.init=f(a||{}),e.loader_config=A(d||{}),c.jsAttributes??={},h.bv&&(c.jsAttributes.isWorker=!0),e.info=(0,s.D)(c);const p=e.init;e.runtime??=b(u),p.proxy.assets&&w(p.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,n.pV)();Object.getOwnPropertyNames(i.W.prototype).forEach(r=>{const n=i.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let s=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return s?s(...t):n})})}(e),e.runtime.loaderType=r,e.ee=R.ee.get(e.agentIdentifier),e.exposed=l,(0,E.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.runtime.configured=!0)}},5270:(e,t,r)=>{"use strict";r.d(t,{Aw:()=>o,SR:()=>s,rF:()=>a});var n=r(384),i=r(7767);function s(e){return!!(0,n.dV)().o.MO&&(0,i.V)(e)&&!0===e?.session_trace.enabled}function o(e){return!0===e?.session_replay.preload&&s(e)}function a(e,t){try{if("string"==typeof t?.type){if("password"===t.type.toLowerCase())return"*".repeat(e?.length||0);if(void 0!==t?.dataset?.nrUnmask||t?.classList?.contains("nr-unmask"))return e}}catch(e){}return"string"==typeof e?e.replace(/[\S]/g,"*"):"*".repeat(e?.length||0)}},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,Qr:()=>c,sB:()=>a});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(s())return e();const r=(0,i.J)(e),o=setInterval(()=>{s()&&(clearInterval(o),r())},500);(0,n.sp)("load",r,t)}function a(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},5732:(e,t,r)=>{"use strict";r.d(t,{$5:()=>d,B5:()=>c,Ux:()=>o,YA:()=>a,fQ:()=>i,yx:()=>s});var n=r(7508);const i={MFE:"MFE",BA:"BA"};function s(e,t){if(!e||!t?.init.api.register.enabled)return[];const r=t.runtime.registeredEntities;return r?.filter(t=>t.metadata.timings?.asset?.endsWith(e)).map(e=>e.metadata.target)||[]}function o(e,t){if(!u(t))return{};const r=t.agentRef.runtime.appMetadata.agents[0].entityGuid;return e?e.attributes:{"entity.guid":r,appId:t.agentRef.info.applicationID}}function a(e,t){return c(e,t)?{"child.id":e.id,"child.type":e.type,...o(void 0,t)}:{}}function c(e,t){return!!e&&!!u(t)&&t.agentRef.init.api.register.duplicate_data_to_container}function d(e){if(!e?.init.api.register.enabled)return[void 0];const t=[];try{var r=(0,n.AZ)((0,n.QL)());let i=r.length-1;for(;r[i];)t.push(...s(r[i--],e))}catch(e){}return t.length||t.push(void 0),t}function u(e){return 2===e?.harvestEndpointVersion}},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>d,RI:()=>i,WN:()=>f,bv:()=>s,gm:()=>o,lR:()=>l,m:()=>c,mw:()=>a,sb:()=>u,zk:()=>h});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,s="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),o=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),a=Boolean("hidden"===o?.document?.visibilityState),c=""+o?.location,d=/iPad|iPhone|iPod/.test(o.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=o.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)(),h=()=>{const e=o?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<o.performance.now())return e}},6344:(e,t,r)=>{"use strict";r.d(t,{BB:()=>u,Qb:()=>l,TZ:()=>i,Ug:()=>o,Vh:()=>s,_s:()=>a,bc:()=>d,yP:()=>c});var n=r(2614);const i=r(860).K7.sessionReplay,s="errorDuringReplay",o=.12,a={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},c={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0},d={RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},u=5e3,l={API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},6774:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.jserrors},7295:(e,t,r)=>{"use strict";r.d(t,{Xv:()=>o,gX:()=>i,iW:()=>s});var n=[];function i(e){if(!e||s(e))return!1;if(0===n.length)return!0;if("*"===n[0].hostname)return!1;for(var t=0;t<n.length;t++){var r=n[t];if(r.hostname.test(e.hostname)&&r.pathname.test(e.pathname))return!1}return!0}function s(e){return void 0===e.hostname}function o(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;if("*"===r)return void(n=[{hostname:"*"}]);0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let s,o;i>0?(s=r.substring(0,i),o=r.substring(i)):(s=r,o="*");let[c]=s.split(":");n.push({hostname:a(c),pathname:a(o,!0)})}}function a(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},7485:(e,t,r)=>{"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},7508:(e,t,r)=>{"use strict";r.d(t,{AZ:()=>g,Qr:()=>b,QL:()=>m});var n=r(6154),i=r(1863),s=r(9119),o=r(7866);class a{dom=new c;performance=new c;constructor(e){this.url=e}get script(){const e=Math.max(this.dom.start,this.performance.end);return{start:e,end:Math.max(this.dom.end,this.performance.end,e)}}}class c{start=0;end=0;value=void 0}let d;try{d=g(m())[0]}catch(e){d=g(e)[0]}const u=e=>"script"===e.initiatorType||["link","fetch"].includes(e.initiatorType)&&e.name.endsWith(".js"),l=new Map;let f=[];function h(e){return l.get(e)}function p(e){const t=h(e);if(t)return t;const r=new a(e);if(l.set(e,r),l.size>1e3){const e=l.keys().next().value;l.delete(e)}return r}if(n.gm.MutationObserver&&n.gm.document){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if("SCRIPT"===e.nodeName&&e.src){const t=p((0,s.L)(e.src));t.dom.start=(0,i.t)(),t.dom.value=e;const r=()=>{t.dom.end=(0,i.t)()};["load","error"].forEach(t=>e.addEventListener(t,r,{once:!0}))}})})}).observe(n.gm.document,{childList:!0,subtree:!0})}if(n.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().filter(u).forEach(e=>{const t=p((0,s.L)(e.name));t.performance.start=Math.floor(e.startTime),t.performance.end=Math.floor(e.responseEnd),t.performance.value=e;const r=[];f.forEach(({test:t,addedAt:n},s)=>{(t(e)||(0,i.t)()-n>1e4)&&r.push(s)}),f=f.filter((e,t)=>!r.includes(t))})}).observe({type:"resource",buffered:!0})}function g(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(o.cn)||e.match(o.hB)||e.match(o.fL);if(r&&r[2])t.add((0,s.L)(r[2]));else{const r=e.match(/\(([^)]+\.js):\d+:\d+\)/)||e.match(/^\s+at\s+([^\s(]+\.js):\d+:\d+/);r&&r[1]&&t.add((0,s.L)(r[1]))}}return[...t]}function m(){let e;try{const t=Error.stackTraceLimit;Error.stackTraceLimit=50,e=(new Error).stack,Error.stackTraceLimit=t}catch(t){e=(new Error).stack}return e}function v(e,t){return(0,s.L)(e.name)===t}function y(e,t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType}function b(){const e={registeredAt:(0,i.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,scriptStart:0,scriptEnd:0,asset:void 0,type:"unknown"},t=m();if(!t)return e;const r=n.gm.performance?.getEntriesByType("navigation")?.[0]?.name||"";try{const o=g(t),a=(o.length>1?o.filter(e=>d!==e):o)[0];if(!a)return e;if(r.includes(a))return e.asset=(0,s.L)(r),e.type="inline",e;e.correlation=h(a);const c=e.correlation?.performance.value||performance.getEntriesByType("resource").find(e=>v(e,a));c?y(e,c):function(e){if(!e||!n.gm.document)return!1;try{const t=n.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,s.L)(r.href)===e)return!0}catch(e){}return!1}(a)&&(e.asset=a,e.type="preload",f.push({addedAt:(0,i.t)(),test:t=>!!v(t,a)&&(y(e,t),!0)})),Object.defineProperty(e,"scriptStart",{get:()=>e.correlation?.script.start||e.fetchEnd}),Object.defineProperty(e,"scriptEnd",{get:()=>e.correlation?.script.end||e.registeredAt})}catch(e){}return e}},7699:(e,t,r)=>{"use strict";r.d(t,{It:()=>s,KC:()=>a,No:()=>i,qh:()=>o});var n=r(860);const i=16e3,s=1e6,o="SESSION_ERROR",a={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0}},7767:(e,t,r)=>{"use strict";r.d(t,{V:()=>i});var n=r(6154);const i=e=>n.RI&&!0===e?.privacy.cookies_enabled},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>a,ee:()=>c});var n=r(384),i=r(8990),s=r(2646),o=r(5607);const a="nr@context:".concat(o.W),c=function e(t,r){var n={},o={},u={},l=!1;try{l=16===r.length&&d.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,s){!1!==s&&(s=!0);if(c.aborted&&!i)return;t&&s&&t.emit(e,r,n);var a=h(n);g(e).forEach(e=>{e.apply(a,r)});var d=v()[o[e]];d&&d.push([f,e,r,a]);return a},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{o[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[o[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof s.y?e:e?(0,i.I)(e,a,()=>new s.y(a)):new s.y(a)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=c)},7866:(e,t,r)=>{"use strict";r.d(t,{Nc:()=>s,cn:()=>a,fL:()=>i,h3:()=>n,hB:()=>o});const n=/function (.+?)\s*\(/,i=/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,s=/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,o=/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i},8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),s=0===Object.keys(r).length?e:r;for(let o in s)if(void 0!==e[o])try{if(null===e[o]){r[o]=null;continue}Array.isArray(e[o])&&Array.isArray(t[o])?r[o]=Array.from(new Set([...e[o],...t[o]])):e[o]instanceof Map||e[o]instanceof Set||e[o]instanceof Date||e[o]instanceof RegExp?r[o]=e[o]:"object"==typeof e[o]&&"object"==typeof t[o]?r[o]=i(e[o],t[o]):r[o]=e[o]}catch(e){r[o]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},8139:(e,t,r)=>{"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),o=r(6154);const a={},c=o.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e){var t=function(e){return(e||n.ee).get("events")}(e);if(a[t.debugId]++)return t;a[t.debugId]=1;var r=(0,i.YM)(t,!0);function f(e){r.inPlace(e,[d,u],"-",p)}function p(e,t){return e[1]}return"getPrototypeOf"in Object&&(o.RI&&h(document,f),c&&h(c.prototype,f),h(o.gm,f)),t.on(d+"-start",function(e,t){var n=e[1];if(null!==n&&("function"==typeof n||"object"==typeof n)&&"newrelic"!==e[0]){var i=(0,s.I)(n,l,function(){var e={object:function(){if("function"!=typeof n.handleEvent)return;return n.handleEvent.apply(n,arguments)},function:n}[typeof n];return e?r(e,"fn-",null,e.name||"anonymous"):n});this.wrapped=e[1]=i}}),t.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),t}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},8362:(e,t,r)=>{"use strict";r.d(t,{d:()=>s});var n=r(9566),i=r(1741);class s extends i.W{agentIdentifier=(0,n.LA)(16)}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},9119:(e,t,r)=>{"use strict";r.d(t,{L:()=>s});var n=/([^?#]*)[^#]*(#[^?]*|$).*/,i=/([^?#]*)().*/;function s(e,t){return e?e.replace(t?n:i,"$1$2"):e}},9300:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.ajax},9324:(e,t,r)=>{"use strict";r.d(t,{AJ:()=>o,F3:()=>i,Xs:()=>s,Yq:()=>a,xv:()=>n});const n="1.313.1",i="PROD",s="CDN",o="@newrelic/rrweb",a="1.1.0"},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>a,ZF:()=>c,bz:()=>o,el:()=>d});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function s(e,t){return e?15&e[t]:16*Math.random()|0}function o(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map(e=>"x"===e?s(t,r++).toString(16):"y"===e?(3&s()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const o=[];for(var a=0;a<e;a++)o.push(s(r,i++).toString(16));return o.join("")}function c(){return a(16)}function d(){return a(32)}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,s){s?(s.buffer([e],i),s.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var s=n[e]={exports:{}};return r[e](s,s.exports,i),s.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce((t,r)=>(i.f[r](e,t),t),[])),i.u=e=>({212:"nr-spa-compressor",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.313.1.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.313.1.PROD:",i.l=(r,n,s,o)=>{if(e[r])e[r].push(n);else{var a,c;if(void 0!==s)for(var d=document.getElementsByTagName("script"),u=0;u<d.length;u++){var l=d[u];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+s){a=l;break}}if(!a){c=!0;var f={478:"sha512-/9l9ZhNQoyI1Aj0GOsHHrbCo/rjGQPYuKrz+qTo7jMK0J2ZChW9rZIzC4rWZ3aDprAyy3ORdgy+LpBQTK97JQQ==",249:"sha512-a/Apw1AGPQLoLS3GcBGmuJMcF53T8GoREi+bouJiiUCw+tTH9GfJrNLU6xN83ClwBg3O+ZUMtOQ0j7kFOIs0Kg==",212:"sha512-2GhRYmZ19Tul2VVrSHZ5+Si0FDRyXu+4jsuNCPf+ui6g0gqwE3lgchmNA9bHOPs9IQ0gLUC1p48MDuV2lCGI2g=="};(a=document.createElement("script")).charset="utf-8",i.nc&&a.setAttribute("nonce",i.nc),a.setAttribute("data-webpack",t+s),a.src=r,0!==a.src.indexOf(window.location.origin+"/")&&(a.crossOrigin="anonymous"),f[o]&&(a.integrity=f[o])}e[r]=[n];var h=(t,n)=>{a.onerror=a.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],a.parentNode&&a.parentNode.removeChild(a),i&&i.forEach(e=>e(n)),t)return t(n)},p=setTimeout(h.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=h.bind(null,a.onerror),a.onload=h.bind(null,a.onload),c&&document.head.appendChild(a)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={38:0,788:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var s=new Promise((r,i)=>n=e[t]=[r,i]);r.push(n[2]=s);var o=i.p+i.u(t),a=new Error;i.l(o,r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var s=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;a.message="Loading chunk "+t+" failed: ("+s+": "+o+")",a.name="ChunkLoadError",a.type=s,a.request=o,n[1](a)}},"chunk-"+t,t)}};var t=(t,r)=>{var n,s,[o,a,c]=r,d=0;if(o.some(t=>0!==e[t])){for(n in a)i.o(a,n)&&(i.m[n]=a[n]);if(c)c(i)}for(t&&t(r);d<o.length;d++)s=o[d],i.o(e,s)&&e[s]&&e[s][0](),e[s]=0},r=self["webpackChunk:NRBA-1.313.1.PROD"]=self["webpackChunk:NRBA-1.313.1.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(8362),t=i(860);const r=Object.values(t.K7);var n=i(5205);var s=i(9908),o=i(1863),a=i(4261),c=i(1738);var d=i(1687),u=i(4234),l=i(5289),f=i(6154),h=i(944),p=i(5270),g=i(7767),m=i(6389),v=i(7699);class y extends u.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,m.J)(()=>{(0,d.Ak)(e,this.featureName),t()}))}):(0,d.Ak)(e,t)}importAggregator(e,t,r={}){if(this.featAggregate)return;const n=async()=>{let n;await this.deferred;try{if((0,g.V)(e.init)){const{setupAgentSession:t}=await i.e(478).then(i.bind(i,8766));n=t(e)}}catch(e){(0,h.R)(20,e),this.ee.emit("internal-error",[e]),(0,s.p)(v.qh,[e],void 0,this.featureName,this.ee)}try{if(!this.#t(this.featureName,n,e.init))return(0,d.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:i}=await t();this.featAggregate=new i(e,r),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,h.R)(34,e),this.abortHandler?.(),(0,d.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1),this.ee&&this.ee.abort()}};f.RI?(0,l.GG)(()=>n(),!0):n()}#t(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,p.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}}var b=i(6630),w=i(2614),R=i(3241);class E extends y{static featureName=b.T;constructor(e){var t;super(e,b.T),this.setupInspectionEvents(),t=e,(0,c.Y)(a.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,s.p)(a.Pl+a.Fw,[(0,o.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>i.e(478).then(i.bind(i,5839)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,R.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,l.sB)(t=>{e(t,"DOMContentLoaded")}),(0,l.GG)(t=>{e(t,"load")}),(0,l.Qr)(t=>{e(t,"navigate")}),this.ee.on(w.tS.UPDATE,(e,t)=>{(0,R.W)({type:"lifecycle",name:"session",data:t})})}}var T=i(384);class A extends e.d{constructor(e){var t;(super(),f.gm)?(this.features={},(0,T.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(E),(0,n.j)(this,e,e.loaderType||"agent"),t=this,(0,c.Y)(a.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,c.U)(t,e,r,a.cD,n);(0,h.R)(40,typeof r)}else(0,h.R)(39,typeof e)},t),function(e){(0,c.Y)(a.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,h.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,s.p)(a.Pl+"setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,c.U)(e,"enduser.id",t,a.Dl,!0)},e)}(this),function(e){(0,c.Y)(a.nb,function(t){if("string"==typeof t||null===t)return(0,c.U)(e,"application.version",t,a.nb,!1);(0,h.R)(42,typeof t)},e)}(this),function(e){(0,c.Y)(a.d3,function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,c.Y)(a.Pv,function(t=!0){if("boolean"==typeof t){if((0,s.p)(a.Pl+a.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum()})}}else(0,h.R)(65,typeof t)},e)}(this),this.run()):(0,h.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};return r.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),n=[...this.desiredFeatures];n.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),n.forEach(r=>{if(!e[r.featureName]&&r.featureName!==t.K7.pageViewEvent)return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,h.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,h.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,T.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var x=i(2843),S=i(782);class _ extends y{static featureName=S.T;constructor(e){super(e,S.T),f.RI&&((0,x.u)(()=>(0,s.p)("docHidden",[(0,o.t)()],void 0,S.T,this.ee),!0),(0,x.G)(()=>(0,s.p)("winPagehide",[(0,o.t)()],void 0,S.T,this.ee)),this.importAggregator(e,()=>i.e(478).then(i.bind(i,9917))))}}var O=i(3969);class P extends y{static featureName=O.TZ;constructor(e){super(e,O.TZ),this.importAggregator(e,()=>i.e(478).then(i.bind(i,6555)))}}var k=i(6774),N=i(3878),j=i(3304);class D{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,j.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function C(e){return M(e)?e:new D(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function L(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(M(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return C(e.reason)}const r=C(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function I(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new D(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return M(e.error)?e.error:C(e)}function M(e){return e instanceof Error&&!!e.stack}function B(e,r,n,i,a=(0,o.t)()){"string"==typeof e&&(e=new Error(e)),(0,s.p)("err",[e,a,!1,r,n.runtime.isRecording,void 0,i],void 0,t.K7.jserrors,n.ee),(0,s.p)("uaErr",[],void 0,t.K7.genericEvents,n.ee)}var H=i(5732),K=i(993),W=i(3785);function F(e,{customAttributes:t={},level:r=K.p_.INFO}={},n,i,s=(0,o.t)()){(0,W.R)(n.ee,e,t,r,!1,i,s)}function U(e,r,n,i,c=(0,o.t)()){(0,s.p)(a.Pl+a.hG,[c,e,r,i],void 0,t.K7.genericEvents,n.ee)}function V(e,r,n,i,c=(0,o.t)()){const{start:d,end:u,customAttributes:l}=r||{},f={customAttributes:l||{}};if("object"!=typeof f.customAttributes||"string"!=typeof e||0===e.length)return void(0,h.R)(57);const p=(e,t)=>null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(f.start=p(d,0),f.end=p(u,c),Number.isNaN(f.start)||Number.isNaN(f.end))(0,h.R)(57);else{if(f.duration=f.end-f.start,!(f.duration<0))return(0,s.p)(a.Pl+a.V1,[f,e,i],void 0,t.K7.genericEvents,n.ee),f;(0,h.R)(58)}}function z(e,r={},n,i,c=(0,o.t)()){(0,s.p)(a.Pl+a.fF,[c,e,r,i],void 0,t.K7.genericEvents,n.ee)}var G=i(7508),Y=i(9566);const Z=["name","id","type"],q=new Map([[U,"addPageAction"],[F,"log"],[V,"measure"],[B,"noticeError"],[z,"recordCustomEvent"]]),X={experimental:(0,m.J)(()=>(0,h.R)(54,"newrelic.register")),disabled:(0,m.J)(()=>(0,h.R)(55)),invalidTarget:(0,m.J)(e=>(0,h.R)(48,e)),deregistered:(0,m.J)(()=>(0,h.R)(68))};function Q(e){(0,c.Y)(a.eY,function(t){return J(e,t)},e)}function J(e,r){X.experimental(),r||={},r.instance=(0,Y.LA)(8),r.type=H.fQ.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={}),r.parent??={get id(){return e.runtime.appMetadata.agents[0].entityGuid},type:H.fQ.BA};const n=(0,G.Qr)(),i={};Object.prototype.hasOwnProperty.call(r,"attributes")||Object.defineProperty(r,"attributes",{get:()=>({...i,"source.id":r.id,"source.name":r.name,"source.type":r.type,"parent.type":r.parent?.type||H.fQ.BA,"parent.id":r.parent?.id})}),Object.entries(r.tags).forEach(([e,t])=>{Z.includes(e)||(i["source.".concat(e)]=t)});let a=()=>{};const c=e.runtime.registeredEntities,d=e=>{r.blocked=!0,a=e};function u(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501}e.init.api.register.enabled||d(X.disabled),u(r.id)&&u(r.name)||d(()=>X.invalidTarget(r));const l={addPageAction:(t,n={})=>m(U,[t,{...i,...n},e],r),deregister:()=>{p(),d(X.deregistered)},log:(t,n={})=>m(F,[t,{...n,customAttributes:{...i,...n.customAttributes||{}}},e],r),measure:(t,n={})=>m(V,[t,{...n,customAttributes:{...i,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>m(B,[t,{...i,...n},e],r),recordCustomEvent:(t,n={})=>m(z,[t,{...i,...n},e],r),setApplicationVersion:e=>g("application.version",e),setCustomAttribute:(e,t)=>g(e,t),setUserId:e=>g("enduser.id",e),metadata:{get customAttributes(){return i},target:r,timings:n}},f=()=>(r.blocked&&a(),r.blocked);function p(){if(n.reportedAt)return;n.reportedAt=(0,o.t)();const e=n.fetchEnd-n.fetchStart,t=n.scriptEnd-n.scriptStart;l.recordCustomEvent("MicroFrontEndTiming",{assetUrl:n.asset,assetType:n.type,timeAlive:n.reportedAt-n.registeredAt,timeToBeRequested:n.fetchStart,timeToExecute:t,timeToFetch:e,timeToLoad:e+t,timeToRegister:n.registeredAt})}f()||(c.push(l),(0,x.G)(p));const g=(e,t)=>{f()||(i[e]=t)},m=(r,n,i)=>{if(f()&&r!==J)return;const a=(0,o.t)(),c=q.get(r)||"unknown";(0,s.p)(O.xV,["API/register/".concat(c,"/called")],void 0,t.K7.metrics,e.ee);try{return r(...n,i,a)}catch(e){(0,h.R)(50,e)}};return l}class ee extends y{static featureName=k.T;constructor(e){var t;super(e,k.T),t=e,(0,c.Y)(a.o5,(e,r)=>B(e,r,t),t),function(e){(0,c.Y)(a.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,c.Y)(a.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Q(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,s.p)("ierr",[C(t),(0,o.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),f.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,s.p)("err",[L(t),(0,o.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,N.jT)(!1,this.removeOnAbort?.signal)),f.gm.addEventListener("error",t=>{this.abortHandler&&(0,s.p)("err",[I(t),(0,o.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,N.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#r,this.importAggregator(e,()=>i.e(478).then(i.bind(i,9377)))}#r(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var te=i(8990);let re=1;function ne(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===f.gm?0:(0,te.I)(e,"nr@id",function(){return re++})}function ie(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,j.A)(e).length}catch(e){return}}}var se=i(8139),oe=i(7836),ae=i(3434);const ce={},de=["open","send"];function ue(e,t){var r=e||oe.ee;const n=function(e){return(e||oe.ee).get("xhr")}(r);if(void 0===f.gm.XMLHttpRequest)return n;if(ce[n.debugId]++)return n;ce[n.debugId]=1,(0,se.u)(r);var i=(0,ae.YM)(n),s=f.gm.XMLHttpRequest,o=f.gm.MutationObserver,a=f.gm.Promise,c=f.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],l=[],p=f.gm.XMLHttpRequest=function(e){const r=new s(e),o=n.context(r);o.targets=(0,H.$5)(t);try{n.emit("new-xhr",[r],o),r.addEventListener(d,(a=o,function(){var e=this;e.readyState>3&&!a.resolved&&(a.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",w)}),(0,N.jT)(!1))}catch(e){(0,h.R)(15,e);try{n.emit("internal-error",[e])}catch(e){}}var a;return r};function g(e,t){i.inPlace(t,["onreadystatechange"],"fn-",w)}if(function(e,t){for(var r in e)t[r]=e[r]}(s,p),p.prototype=s.prototype,i.inPlace(p.prototype,de,"-xhr-",w),n.on("send-xhr-start",function(e,t){g(e,t),function(e){l.push(e),o&&(m?m.then(b):c?c(b):(v=-v,y.data=v))}(t)}),n.on("open-xhr-start",g),o){var m=a&&a.resolve();if(!c&&!a){var v=1,y=document.createTextNode(v);new o(b).observe(y,{characterData:!0})}}else r.on("fn-end",function(e){e[0]&&e[0].type===d||b()});function b(){for(var e=0;e<l.length;e++)g(0,l[e]);l.length&&(l=[])}function w(e,t){return t}return n}var le="fetch-",fe=le+"body-",he=["arrayBuffer","blob","json","text","formData"],pe=f.gm.Request,ge=f.gm.Response,me="prototype";const ve={};function ye(e,t){const r=function(e){return(e||oe.ee).get("fetch")}(e);if(!(pe&&ge&&f.gm.fetch))return r;if(ve[r.debugId]++)return r;function n(e,n,i){var s=e[n];"function"==typeof s&&(e[n]=function(){var e=[...arguments];const n={},o=(0,H.$5)(t);var a;r.emit(i+"before-start",[e],n),n[oe.P]&&n[oe.P].dt&&(a=n[oe.P].dt);var c=s.apply(this,e);return r.emit(i+"start",[e,a],c),c.then(function(e){return r.emit(i+"end",[null,e,o],c),e},function(e){throw r.emit(i+"end",[e,void 0,o],c),e})})}return ve[r.debugId]=1,he.forEach(e=>{n(pe[me],e,fe),n(ge[me],e,fe)}),n(f.gm,"fetch",le),r.on(le+"end",function(e,t,n){var i=this;if(i.targets=n||[void 0],t){var s=t.headers.get("content-length");null!==s&&(i.rxSize=s),r.emit(le+"done",[null,t],i)}else r.emit(le+"done",[e],i)}),r}var be=i(7485);class we{constructor(e){this.agentRef=e}generateTracePayload(e){const t=this.agentRef.loader_config;if(!this.shouldGenerateTrace(e)||!t)return null;var r=(t.accountID||"").toString()||null,n=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!n)return null;var s=(0,Y.ZF)(),o=(0,Y.el)(),a=Date.now(),c={spanId:s,traceId:o,timestamp:a};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(c.traceContextParentHeader=this.generateTraceContextParentHeader(s,o),c.traceContextStateHeader=this.generateTraceContextStateHeader(s,a,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(c.newrelicHeader=this.generateTraceHeader(s,o,a,r,n,i)),c}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,s){if(!("function"==typeof f.gm?.btoa))return null;var o={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(o.d.tk=s),btoa((0,j.A)(o))}shouldGenerateTrace(e){return this.agentRef.init?.distributed_tracing?.enabled&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1;const r=this.agentRef.init?.distributed_tracing;if(e.sameOrigin)t=!0;else if(r?.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,be.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}excludeNewrelicHeader(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.cors_use_tracecontext_headers}}var Re=i(9300),Ee=i(7295);function Te(e){return"string"==typeof e?e:e instanceof(0,T.dV)().o.REQ?e.url:f.gm?.URL&&e instanceof URL?e.href:void 0}var Ae=["load","error","abort","timeout"],xe=Ae.length,Se=(0,T.dV)().o.REQ,_e=(0,T.dV)().o.XHR;const Oe="X-NewRelic-App-Data";class Pe extends y{static featureName=Re.T;constructor(e){super(e,Re.T),this.dt=new we(e),this.handler=(e,t,r,n)=>(0,s.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};f.gm?.performance?.getEntriesByType("resource").forEach(r=>{if(r.initiatorType in e&&0!==r.responseStatus){const n={status:r.responseStatus},i={rxSize:r.transferSize,duration:Math.floor(r.duration),cbTime:0};ke(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}ye(this.ee,e),ue(this.ee,e),function(e,r,n,i){function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=T,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},t.latestLongtaskEnd=0,e.addEventListener("load",function(r){x(t,e)},(0,N.jT)(!1)),f.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,N.jT)(!1))}function c(e){this.params={method:e[0]},ke(this,e[1]),this.metrics={}}function d(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var n=i.generateTracePayload(this.parsedOrigin);if(n){var s=!1;n.newrelicHeader&&(r.setRequestHeader("newrelic",n.newrelicHeader),s=!0),n.traceContextParentHeader&&(r.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&r.setRequestHeader("tracestate",n.traceContextStateHeader),s=!0),s&&(this.dt=n)}}function u(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=ie(i);a&&(n.txSize=a)}this.startTime=(0,o.t)(),this.body=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit("internal-error",[e])}catch(e){}}};for(var c=0;c<xe;c++)t.addEventListener(Ae[c],this.listener,(0,N.jT)(!1))}function l(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function h(e,t){var r=""+ne(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+ne(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function g(){this.endTime=(0,o.t)()}function m(e,t){t instanceof _e&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function v(e,t){t instanceof _e&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function y(e,t,r){t instanceof _e&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,o.t)()))}function b(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,o.t)()-this.xhrCbStart,this.onload,t],t)}function w(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&f.RI&&(t=""+f.gm.location.href):e[0]&&e[0].url?t=e[0].url:f.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,be.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var n=i.generateTracePayload(this.parsedOrigin);if(n&&(n.newrelicHeader||n.traceContextParentHeader))if(e[0]&&e[0].headers)a(e[0].headers,n)&&(this.dt=n);else{var s={};for(var o in r)s[o]=r[o];s.headers=new Headers(r.headers||{}),a(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function a(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function R(e,t){this.params={},this.metrics={},this.startTime=(0,o.t)(),this.dt=t;let[r,n={}]=e;ke(this,Te(r));const i=(""+(r&&r instanceof Se&&r.method||n.method||"GET")).toUpperCase();this.params.method=i,this.body=n.body,this.txSize=ie(n.body)||0}function E(e,t){if(this.endTime=(0,o.t)(),this.params||(this.params={}),(0,Ee.iW)(this.params))return;let r;this.params.status=t?t.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(r=+this.rxSize);const n={txSize:this.txSize,rxSize:r,duration:(0,o.t)()-this.startTime},i=[this.params,n,this.startTime,this.endTime,"fetch"];this.targets.forEach(e=>A(i,this,e))}function T(e){const t=this.params,r=this.metrics;if(this.ended)return;this.ended=!0;for(let t=0;t<xe;t++)e.removeEventListener(Ae[t],this.listener,!1);if(t.aborted)return;if((0,Ee.iW)(t))return;r.duration=(0,o.t)()-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):x(this,e),r.cbTime=this.cbTime;const n=[t,r,this.startTime,this.endTime,"xhr"];this.targets.forEach(e=>A(n,this,e))}function A(e,r,i){n("xhr",[...e,i],r,t.K7.ajax)}function x(e,n){e.params.status=n.status;var i=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?ie(e.response):"text"===r||""===r||void 0===r?ie(e.responseText):void 0}(n,e.lastSize);if(i&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(Oe)>=0){var o=n.getResponseHeader(Oe);o&&((0,s.p)(O.rs,["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=o.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",c),r.on("open-xhr-end",d),r.on("send-xhr-start",u),r.on("xhr-cb-time",l),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",g),r.on("addEventListener-end",m),r.on("removeEventListener-end",v),r.on("fn-end",b),r.on("fetch-before-start",w),r.on("fetch-start",R),r.on("fn-start",y),r.on("fetch-done",E)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>i.e(478).then(i.bind(i,3845)))}}function ke(e,t){var r=(0,be.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}const Ne={},je=["pushState","replaceState"];function De(e){const t=function(e){return(e||oe.ee).get("history")}(e);return!f.RI||Ne[t.debugId]++||(Ne[t.debugId]=1,(0,ae.YM)(t).inPlace(window.history,je,"-")),t}var Ce=i(3738);function Le(e){(0,c.Y)(a.BL,function(r=Date.now()){const n=r-f.WN;n<0&&(0,h.R)(62,r),(0,s.p)(O.XG,[a.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:a.BL,start:r,origin:"nr"}),(0,s.p)(a.Pl+a.hG,[n,a.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:Ie,bD:Me,d3:Be,Kp:He,TZ:Ke,Lc:We,uP:Fe,Rz:Ue}=Ce;class Ve extends y{static featureName=Ke;constructor(e){var r;super(e,Ke),r=e,(0,c.Y)(a.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const n={n:e.name,s:e.start-f.WN,e:(e.end||e.start)-f.WN,o:e.origin||"",t:"api"};n.s<0||n.e<0||n.e<n.s?(0,h.R)(61,{start:n.s,end:n.e}):(0,s.p)("bstApi",[n],void 0,t.K7.sessionTrace,r.ee)},r),Le(e);if(!(0,g.V)(e.init))return void this.deregisterDrain();const n=this.ee;let d;De(n),this.eventsEE=(0,se.u)(n),this.eventsEE.on(Fe,function(e,t){this.bstStart=(0,o.t)()}),this.eventsEE.on(We,function(e,r){(0,s.p)("bst",[e[0],r,this.bstStart,(0,o.t)()],void 0,t.K7.sessionTrace,n)}),n.on(Ue+Be,function(e){this.time=(0,o.t)(),this.startPath=location.pathname+location.hash}),n.on(Ue+He,function(e){(0,s.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,n)});try{d=new PerformanceObserver(e=>{const r=e.getEntries();(0,s.p)(Ie,[r],void 0,t.K7.sessionTrace,n)}),d.observe({type:Me,buffered:!0})}catch(e){}this.importAggregator(e,()=>i.e(478).then(i.bind(i,6974)),{resourceObserver:d})}}var ze=i(6344);class Ge extends y{static featureName=ze.TZ;#n;recorder;constructor(e){var r;let n;super(e,ze.TZ),r=e,(0,c.Y)(a.CH,function(){(0,s.p)(a.CH,[],void 0,t.K7.sessionReplay,r.ee)},r),function(e){(0,c.Y)(a.Tb,function(){(0,s.p)(a.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);try{n=JSON.parse(localStorage.getItem("".concat(w.H3,"_").concat(w.uh)))}catch(e){}(0,p.SR)(e.init)&&this.ee.on(a.CH,()=>this.#i()),this.#s(n)&&this.importRecorder().then(e=>{e.startRecording(ze.Qb.PRELOAD,n?.sessionReplayMode)}),this.importAggregator(this.agentRef,()=>i.e(478).then(i.bind(i,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,s.p)(ze.Vh,[e],void 0,this.featureName,this.ee))})}#s(e){return e&&(e.sessionReplayMode===w.g.FULL||e.sessionReplayMode===w.g.ERROR)||(0,p.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#n??=Promise.all([i.e(478),i.e(249)]).then(i.bind(i,4866)).then(({Recorder:e})=>(this.recorder=new e(this),this.recorder)).catch(e=>{throw this.ee.emit("internal-error",[e]),this.blocked=!0,e}),this.#n)}#i(){this.blocked||(this.featAggregate?this.featAggregate.mode!==w.g.FULL&&this.featAggregate.initializeRecording(w.g.FULL,!0,ze.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(ze.Qb.API,w.g.FULL)}))}}var Ye=i(3962);class Ze extends y{static featureName=Ye.TZ;constructor(e){if(super(e,Ye.TZ),function(e){const r=e.ee.get("tracer");function n(){}(0,c.Y)(a.dT,function(e){return(new n).get("object"==typeof e?e:{})},e);const i=n.prototype={createTracer:function(n,i){var a={},c=this,d="function"==typeof i;return(0,s.p)(O.xV,["API/createTracer/called"],void 0,t.K7.metrics,e.ee),function(){if(r.emit((d?"":"no-")+"fn-start",[(0,o.t)(),c,d],a),d)try{return i.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw r.emit("fn-err",[arguments,this,t],a),t}finally{r.emit("fn-end",[(0,o.t)()],a)}}}};["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach(r=>{c.Y.apply(this,[r,function(){return(0,s.p)(a.hw+r,[performance.now(),...arguments],this,t.K7.softNav,e.ee),this},e,i])}),(0,c.Y)(a.PA,function(){(0,s.p)(a.hw+"routeName",[performance.now(),...arguments],void 0,t.K7.softNav,e.ee)},e)}(e),!f.RI||!(0,T.dV)().o.MO)return;const r=De(this.ee);try{this.removeOnAbort=new AbortController}catch(e){}Ye.tC.forEach(e=>{(0,N.sp)(e,e=>{l(e)},!0,this.removeOnAbort?.signal)});const n=()=>(0,s.p)("newURL",[(0,o.t)(),""+window.location],void 0,this.featureName,this.ee);r.on("pushState-end",n),r.on("replaceState-end",n),(0,N.sp)(Ye.OV,e=>{l(e),(0,s.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)},!0,this.removeOnAbort?.signal);let d=!1;const u=new((0,T.dV)().o.MO)((e,t)=>{d||(d=!0,requestAnimationFrame(()=>{(0,s.p)("newDom",[(0,o.t)()],void 0,this.featureName,this.ee),d=!1}))}),l=(0,m.s)(e=>{"loading"!==document.readyState&&((0,s.p)("newUIEvent",[e],void 0,this.featureName,this.ee),u.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0}))},100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),u.disconnect(),this.abortHandler=void 0},this.importAggregator(e,()=>i.e(478).then(i.bind(i,4393)),{domObserver:u})}}var qe=i(3333),Xe=i(9119);const $e={},Qe=new Set;function Je(e){return"string"==typeof e?{type:"string",size:(new TextEncoder).encode(e).length}:e instanceof ArrayBuffer?{type:"ArrayBuffer",size:e.byteLength}:e instanceof Blob?{type:"Blob",size:e.size}:e instanceof DataView?{type:"DataView",size:e.byteLength}:ArrayBuffer.isView(e)?{type:"TypedArray",size:e.byteLength}:{type:"unknown",size:0}}class et{constructor(e,t){this.timestamp=(0,o.t)(),this.currentUrl=(0,Xe.L)(window.location.href),this.socketId=(0,Y.LA)(8),this.requestedUrl=(0,Xe.L)(e),this.requestedProtocols=Array.isArray(t)?t.join(","):t||"",this.openedAt=void 0,this.protocol=void 0,this.extensions=void 0,this.binaryType=void 0,this.messageOrigin=void 0,this.messageCount=0,this.messageBytes=0,this.messageBytesMin=0,this.messageBytesMax=0,this.messageTypes=void 0,this.sendCount=0,this.sendBytes=0,this.sendBytesMin=0,this.sendBytesMax=0,this.sendTypes=void 0,this.closedAt=void 0,this.closeCode=void 0,this.closeReason="unknown",this.closeWasClean=void 0,this.connectedDuration=0,this.hasErrors=void 0}}class tt extends y{static featureName=qe.TZ;constructor(e){super(e,qe.TZ);const r=e.init.feature_flags.includes("websockets"),n=!e.init.feature_flags.includes("no_spv"),d=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.performance.resources.enabled,e.init.user_actions.enabled,r,n];var u;let l;if(u=e,(0,c.Y)(a.hG,(e,t)=>U(e,t,u),u),function(e){(0,c.Y)(a.fF,(t,r)=>z(t,r,e),e)}(e),Le(e),Q(e),function(e){(0,c.Y)(a.V1,(t,r)=>V(t,r,e),e)}(e),this.removeOnAbort=new AbortController,this.abortHandler=()=>{this.removeOnAbort.abort(),this.abortHandler=void 0},r){const h=function(e){if(!(0,T.dV)().o.WS)return e;const t=e.get("websockets");if($e[t.debugId]++)return t;$e[t.debugId]=1,(0,x.G)(()=>{const e=(0,o.t)();Qe.forEach(r=>{r.nrData.closedAt=e,r.nrData.closeCode=1001,r.nrData.closeReason="Page navigating away",r.nrData.closeWasClean=!1,r.nrData.openedAt&&(r.nrData.connectedDuration=e-r.nrData.openedAt),t.emit("ws",[r.nrData],r)})});class r extends WebSocket{static name="WebSocket";static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return r.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new et(e[0],e[1]),this.addEventListener("open",()=>{this.nrData.openedAt=(0,o.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),Qe.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=Je(e.data);this.nrData.messageOrigin??=(0,Xe.L)(e.origin),this.nrData.messageCount++,this.nrData.messageBytes+=r,this.nrData.messageBytesMin=Math.min(this.nrData.messageBytesMin||1/0,r),this.nrData.messageBytesMax=Math.max(this.nrData.messageBytesMax,r),(this.nrData.messageTypes??"").includes(t)||(this.nrData.messageTypes=this.nrData.messageTypes?"".concat(this.nrData.messageTypes,",").concat(t):t)}),this.addEventListener("close",e=>{this.nrData.closedAt=(0,o.t)(),this.nrData.closeCode=e.code,e.reason&&(this.nrData.closeReason=e.reason),this.nrData.closeWasClean=e.wasClean,this.nrData.connectedDuration=this.nrData.closedAt-this.nrData.openedAt,Qe.delete(this),t.emit("ws",[this.nrData],this)})}addEventListener(e,t,...r){const n=this,i="function"==typeof t?function(...e){try{return t.apply(this,e)}catch(e){throw n.#o(e),e}}:t?.handleEvent?{handleEvent:function(...e){try{return t.handleEvent.apply(t,e)}catch(e){throw n.#o(e),e}}}:t;return super.addEventListener(e,i,...r)}send(e){if(this.readyState===WebSocket.OPEN){const{type:t,size:r}=Je(e);this.nrData.sendCount++,this.nrData.sendBytes+=r,this.nrData.sendBytesMin=Math.min(this.nrData.sendBytesMin||1/0,r),this.nrData.sendBytesMax=Math.max(this.nrData.sendBytesMax,r),(this.nrData.sendTypes??"").includes(t)||(this.nrData.sendTypes=this.nrData.sendTypes?"".concat(this.nrData.sendTypes,",").concat(t):t)}try{return super.send(e)}catch(e){throw this.#o(e),e}}close(...e){try{super.close(...e)}catch(e){throw this.#o(e),e}}}return f.gm.WebSocket=r,t}(this.ee);h.on("ws",e=>{(0,s.p)("ws-complete",[e],void 0,this.featureName,this.ee)})}if(n&&f.gm.addEventListener("securitypolicyviolation",e=>{(0,s.p)("spv",[e],void 0,t.K7.genericEvents,this.ee)},(0,N.jT)(!1,this.removeOnAbort.signal)),f.RI){if(ye(this.ee,e),ue(this.ee,e),l=De(this.ee),e.init.user_actions.enabled){function p(t){const r=(0,be.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function g(){l.emit("navChange")}qe.Zp.forEach(e=>(0,N.sp)(e,e=>(0,s.p)("ua",[e],void 0,this.featureName,this.ee),!0)),qe.qN.forEach(e=>{const t=(0,m.s)(e=>{(0,s.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,N.sp)(e,t)}),f.gm.addEventListener("error",()=>{(0,s.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,N.jT)(!1,this.removeOnAbort.signal)),this.ee.on("open-xhr-start",(e,r)=>{p(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,s.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)},(0,N.jT)(void 0,this.removeOnAbort.signal))}),this.ee.on("fetch-start",e=>{e.length>=1&&!p(Te(e[0]))&&(0,s.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),l.on("pushState-end",g),l.on("replaceState-end",g),window.addEventListener("hashchange",g,(0,N.jT)(!0,this.removeOnAbort.signal)),window.addEventListener("popstate",g,(0,N.jT)(!0,this.removeOnAbort.signal))}if(e.init.performance.resources.enabled&&f.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{(0,s.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)})}).observe({type:"resource",buffered:!0})}}d.some(e=>e)?this.importAggregator(e,()=>i.e(478).then(i.bind(i,8019))):this.deregisterDrain()}}var rt=i(2646);const nt=new Map;function it(e,t,r,n,i=!0,s){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,h.R)(29);const o=function(e){return(e||oe.ee).get("logger")}(e),a=(0,ae.YM)(o,void 0,s),c=new rt.y(oe.P);c.level=n.level,c.customAttributes=n.customAttributes,c.autoCaptured=i;const d=t[r]?.[ae.Jt]||t[r];return nt.set(d,c),a.inPlace(t,[r],"wrap-logger-",()=>nt.get(d),void 0,!0),o}var st=i(1910);class ot extends y{static featureName=K.TZ;constructor(e){var t;super(e,K.TZ),t=e,(0,c.Y)(a.$9,(e,r)=>F(e,r,t),t),function(e){(0,c.Y)(a.Wb,(t,r,{customAttributes:n={},level:i=K.p_.INFO}={})=>{it(e.ee,t,r,{customAttributes:n,level:i},!1,e)},e)}(e),Q(e);const r=this.ee;["log","error","warn","info","debug","trace"].forEach(t=>{(0,st.i)(f.gm.console[t]),it(r,f.gm.console,t,{level:"log"===t?"info":t},void 0,e)}),this.ee.on("wrap-logger-end",function([e],t,n,i=[]){const{level:s,customAttributes:o,autoCaptured:a}=this;i.forEach(t=>{(0,W.R)(r,e,o,s,a,t)})}),this.importAggregator(e,()=>i.e(478).then(i.bind(i,5288)))}}new A({features:[Pe,E,_,Ve,Ge,P,ee,tt,ot,Ze],loaderType:"spa"})})()})();
</script>
<meta charset="utf-8" />
<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}</script>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-M4K5J4FK');
</script>
<style>/* @see https://github.com/aFarkas/lazysizes#broken-image-symbol */.js img.lazyload:not([src]) { visibility: hidden; }/* @see https://github.com/aFarkas/lazysizes#automatically-setting-the-sizes-attribute */.js img.lazyloaded[data-sizes=auto] { display: block; width: 100%; }</style>
<meta name="description" content="" />
<link rel="canonical" href="https://posit.co/blog/shiny-server-pro-1-5-4" />
<meta property="og:site_name" content="Posit" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://posit.co/blog/shiny-server-pro-1-5-4" />
<meta property="og:title" content="Shiny Server (Pro) 1.5.4" />
<meta property="og:description" content="" />
<meta property="article:author" content="Alan Dipert" />
<meta property="article:publisher" content="positpbc" />
<meta property="article:tag" content="Commercial enterprise offerings" />
<meta property="article:published_time" content="Tue, 09/12/2017 - 12:00" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:description" content="" />
<meta name="twitter:title" content="Shiny Server (Pro) 1.5.4" />
<meta name="twitter:site" content="@posit_pbc" />
<meta name="twitter:site:id" content="235261861" />
<meta name="Generator" content="Drupal 11 (https://www.drupal.org)" />
<meta name="MobileOptimized" content="width" />
<meta name="HandheldFriendly" content="true" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script type="application/ld+json">{
"@context": "https://schema.org",
"@graph": [
{
"@type": "BlogPosting",
"@id": "https://posit.co/blog/shiny-server-pro-1-5-4#blogposting",
"headline": "Shiny Server (Pro) 1.5.4",
"name": "Shiny Server (Pro) 1.5.4",
"datePublished": "2017-09-12",
"dateModified": "2026-04-13",
"author": {
"@type": "Person",
"@id": "Alan Dipert",
"name": "Alan Dipert",
"logo": {
"@type": "ImageObject",
"url": "https://posit.co/sites/default/files/migrate/speakers/2023/02/alan-dipert.png"
}
},
"publisher": {
"@type": "Organization",
"@id": "https://posit.co/#org",
"name": "Posit",
"url": "https://posit.co",
"logo": {
"@type": "ImageObject",
"url": "https://posit.co/themes/custom/kinetic/logo.svg"
}
},
"mainEntityOfPage": "https://posit.co/blog/shiny-server-pro-1-5-4/#webpage"
},
{
"@type": "Organization",
"@id": "https://posit.co",
"sameAs": [
"https://www.youtube.com/@PositPBC",
"https://www.facebook.com/positpbc",
"https://fosstodon.org/@posit",
"https://www.instagram.com/posit.pbc/",
"https://www.linkedin.com/company/posit-software/",
"https://bsky.app/profile/posit.co"
],
"url": "https://posit.co",
"name": "Posit",
"logo": {
"@type": "ImageObject",
"url": "https://posit.co/themes/custom/kinetic/logo.svg"
}
},
{
"@type": "WebPage",
"@id": "https://posit.co/blog/shiny-server-pro-1-5-4/#webpage",
"publisher": {
"@type": "Organization",
"@id": "https://posit.co/#org",
"name": "Posit",
"url": "https://posit.co"
},
"inLanguage": "English"
}
]
}</script>
<link href="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/quarto-html/tippy.scoped.css" rel="stylesheet" />
<link href="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/quarto-html/quarto-syntax-highlighting-587c61ba64f3a5504c4d52d930310e48.scoped.css" rel="stylesheet" />
<link href="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/bootstrap/bootstrap-icons.scoped.css" rel="stylesheet" />
<link href="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/bootstrap/bootstrap-d6a003b94517c951b2d65075d42fb01b.min.scoped.css" rel="stylesheet" />
<link role="doc-noteref" />
<style>@scope (.quarto-content) {
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
}</style>
<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/clipboard/clipboard.min.js"></script>
<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/quarto-html/quarto.js" type="module"></script>
<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/quarto-html/tabsets/tabsets.js" type="module"></script>
<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/quarto-html/axe/axe-check.js" type="module"></script>
<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/quarto-html/popper.min.js"></script>
<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/quarto-html/tippy.umd.min.js"></script>
<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/quarto-html/anchor.min.js"></script>
<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-4/index_files/libs/bootstrap/bootstrap.min.js"></script>
<script type="application/javascript">window.document.addEventListener("DOMContentLoaded", function (event) {
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {
placement: 'right',
icon: icon
};
anchorJS.add('.anchored');
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {
return true;
}
}
return false;
}
const onCopySuccess = function(e) {
// button target
const button = e.trigger;
// don't keep focus
button.blur();
// flash "checked"
button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copied!");
let tooltip;
if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copied!");
tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual",
customClass: "code-copy-button-tooltip",
offset: [0, -8]});
tooltip.show();
}
setTimeout(function() {
if (tooltip) {
tooltip.hide();
button.removeAttribute("data-bs-title");
button.removeAttribute("data-bs-toggle");
button.removeAttribute("data-bs-placement");
}
button.setAttribute("title", currentTitle);
button.classList.remove('code-copy-button-checked');
}, 1000);
// clear code selection
e.clearSelection();
}
const getTextToCopy = function(trigger) {
const outerScaffold = trigger.parentElement.cloneNode(true);
const codeEl = outerScaffold.querySelector('code');
for (const childEl of codeEl.children) {
if (isCodeAnnotation(childEl)) {
childEl.remove();
}
}
return codeEl.innerText;
}
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
text: getTextToCopy
});
clipboard.on('success', onCopySuccess);
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
text: getTextToCopy,
container: window.document.getElementById('quarto-embedded-source-code-modal')
});
clipboardModal.on('success', onCopySuccess);
}
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
var mailtoRegex = new RegExp(/^mailto:/);
var filterRegex = new RegExp('/' + window.location.host + '/');
var isInternal = (href) => {
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
}
// Inspect non-navigation links and adorn them if external
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
for (var i=0; i<links.length; i++) {
const link = links[i];
if (!isInternal(link.href)) {
// undo the damage that might have been done by quarto-nav.js in the case of
// links that we want to consider external
if (link.dataset.originalHref !== undefined) {
link.href = link.dataset.originalHref;
}
}
}
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
const config = {
allowHTML: true,
maxWidth: 500,
delay: 100,
arrow: false,
appendTo: function(el) {
return el.parentElement;
},
interactive: true,
interactiveBorder: 10,
theme: 'quarto',
placement: 'bottom-start',
};
if (contentFn) {
config.content = contentFn;
}
if (onTriggerFn) {
config.onTrigger = onTriggerFn;
}
if (onUntriggerFn) {
config.onUntrigger = onUntriggerFn;
}
window.tippy(el, config);
}
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
for (var i=0; i<noterefs.length; i++) {
const ref = noterefs[i];
tippyHover(ref, function() {
// use id or data attribute instead here
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
try { href = new URL(href).hash; } catch {}
const id = href.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note) {
return note.innerHTML;
} else {
return "";
}
});
}
const xrefs = window.document.querySelectorAll('a.quarto-xref');
const processXRef = (id, note) => {
// Strip column container classes
const stripColumnClz = (el) => {
el.classList.remove("page-full", "page-columns");
if (el.children) {
for (const child of el.children) {
stripColumnClz(child);
}
}
}
stripColumnClz(note)
if (id === null || id.startsWith('sec-')) {
// Special case sections, only their first couple elements
const container = document.createElement("div");
if (note.children && note.children.length > 2) {
container.appendChild(note.children[0].cloneNode(true));
for (let i = 1; i < note.children.length; i++) {
const child = note.children[i];
if (child.tagName === "P" && child.innerText === "") {
continue;
} else {
container.appendChild(child.cloneNode(true));
break;
}
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(container);
}
return container.innerHTML
} else {
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
return note.innerHTML;
}
} else {
// Remove any anchor links if they are present
const anchorLink = note.querySelector('a.anchorjs-link');
if (anchorLink) {
anchorLink.remove();
}
if (window.Quarto?.typesetMath) {
window.Quarto.typesetMath(note);
}
if (note.classList.contains("callout")) {
return note.outerHTML;
} else {
return note.innerHTML;
}
}
}
for (var i=0; i<xrefs.length; i++) {
const xref = xrefs[i];
tippyHover(xref, undefined, function(instance) {
instance.disable();
let url = xref.getAttribute('href');
let hash = undefined;
if (url.startsWith('#')) {
hash = url;
} else {
try { hash = new URL(url).hash; } catch {}
}
if (hash) {
const id = hash.replace(/^#\/?/, "");
const note = window.document.getElementById(id);
if (note !== null) {
try {
const html = processXRef(id, note.cloneNode(true));
instance.setContent(html);
} finally {
instance.enable();
instance.show();
}
} else {
// See if we can fetch this
fetch(url.split('#')[0])
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.getElementById(id);
if (note !== null) {
const html = processXRef(id, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
} else {
// See if we can fetch a full url (with no hash to target)
// This is a special case and we should probably do some content thinning / targeting
fetch(url)
.then(res => res.text())
.then(html => {
const parser = new DOMParser();
const htmlDoc = parser.parseFromString(html, "text/html");
const note = htmlDoc.querySelector('main.content');
if (note !== null) {
// This should only happen for chapter cross references
// (since there is no id in the URL)
// remove the first header
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
note.children[0].remove();
}
const html = processXRef(null, note);
instance.setContent(html);
}
}).finally(() => {
instance.enable();
instance.show();
});
}
}, function(instance) {
});
}
let selectedAnnoteEl;
const selectorForAnnotation = ( cell, annotation) => {
let cellAttr = 'data-code-cell="' + cell + '"';
let lineAttr = 'data-code-annotation="' + annotation + '"';
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
return selector;
}
const selectCodeLines = (annoteEl) => {
const doc = window.document;
const targetCell = annoteEl.getAttribute("data-target-cell");
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
const lineIds = lines.map((line) => {
return targetCell + "-" + line;
})
let top = null;
let height = null;
let parent = null;
if (lineIds.length > 0) {
//compute the position of the single el (top and bottom and make a div)
const el = window.document.getElementById(lineIds[0]);
top = el.offsetTop;
height = el.offsetHeight;
parent = el.parentElement.parentElement;
if (lineIds.length > 1) {
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
height = bottom - top;
}
if (top !== null && height !== null && parent !== null) {
// cook up a div (if necessary) and position it
let div = window.document.getElementById("code-annotation-line-highlight");
if (div === null) {
div = window.document.createElement("div");
div.setAttribute("id", "code-annotation-line-highlight");
div.style.position = 'absolute';
parent.appendChild(div);
}
div.style.top = top - 2 + "px";
div.style.height = height + 4 + "px";
div.style.left = 0;
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
if (gutterDiv === null) {
gutterDiv = window.document.createElement("div");
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
gutterDiv.style.position = 'absolute';
const codeCell = window.document.getElementById(targetCell);
const gutter = codeCell.querySelector('.code-annotation-gutter');
gutter.appendChild(gutterDiv);
}
gutterDiv.style.top = top - 2 + "px";
gutterDiv.style.height = height + 4 + "px";
}
selectedAnnoteEl = annoteEl;
}
};
const unselectCodeLines = () => {
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
elementsIds.forEach((elId) => {
const div = window.document.getElementById(elId);
if (div) {
div.remove();
}
});
selectedAnnoteEl = undefined;
};
// Handle positioning of the toggle
window.addEventListener(
"resize",
throttle(() => {
elRect = undefined;
if (selectedAnnoteEl) {
selectCodeLines(selectedAnnoteEl);
}
}, 10)
);
function throttle(fn, ms) {
let throttle = false;
let timer;
return (...args) => {
if(!throttle) { // first call gets through
fn.apply(this, args);
throttle = true;
} else { // all the others get throttled
if(timer) clearTimeout(timer); // cancel #2
timer = setTimeout(() => {
fn.apply(this, args);
timer = throttle = false;
}, ms);
}
};
}
// Attach click handler to the DT
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
for (const annoteDlNode of annoteDls) {
annoteDlNode.addEventListener('click', (event) => {
const clickedEl = event.target;
if (clickedEl !== selectedAnnoteEl) {
unselectCodeLines();
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
if (activeEl) {
activeEl.classList.remove('code-annotation-active');
}
selectCodeLines(clickedEl);
clickedEl.classList.add('code-annotation-active');
} else {
// Unselect the line
unselectCodeLines();
clickedEl.classList.remove('code-annotation-active');
}
});
}
const findCites = (el) => {
const parentEl = el.parentElement;
if (parentEl) {
const cites = parentEl.dataset.cites;
if (cites) {
return {
el,
cites: cites.split(' ')
};
} else {
return findCites(el.parentElement)
}
} else {
return undefined;
}
};
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
for (var i=0; i<bibliorefs.length; i++) {
const ref = bibliorefs[i];
const citeInfo = findCites(ref);
if (citeInfo) {
tippyHover(citeInfo.el, function() {
var popup = window.document.createElement('div');
citeInfo.cites.forEach(function(cite) {
var citeDiv = window.document.createElement('div');
citeDiv.classList.add('hanging-indent');
citeDiv.classList.add('csl-entry');
var biblioDiv = window.document.getElementById('ref-' + cite);
if (biblioDiv) {
citeDiv.innerHTML = biblioDiv.innerHTML;
}
popup.appendChild(citeDiv);
});
return popup.innerHTML;
});
}
}
});</script>
<link rel="icon" href="/themes/custom/kinetic/favicon.ico" type="image/vnd.microsoft.icon" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="preload" as="style" type="text/css" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400..700&family=Source+Code+Pro:wght@400..600&display=swap" crossorigin />
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400..700&family=Source+Code+Pro:wght@400..600&display=swap" crossorigin />
<script>window.a2a_config=window.a2a_config||{};a2a_config.callbacks=[];a2a_config.overlays=[];a2a_config.templates={};</script>
<title>Shiny Server (Pro) 1.5.4 | Posit</title>
<link rel="stylesheet" media="all" href="/sites/default/files/css/css_a7LL9m99Hc-iNxHBgqXJ88lzordXZldgJUs0YJy1WWo.css?delta=0&language=en&theme=kinetic&include=eJx9TFsOwiAQvBCUIzULjLgKrGG3Pm5vYqt_-DOTeSYZCEnaTTq66XLlDuPkfaxSXJqluUXfxfjEiYyl67x6EjGMeV4qZ8zjMyj_mzf0zdvgUr6tPLYb1YUu9HSZtbEqx4q1QZUK1kgjTHx33IZIip84-KePgToFjXRWo-eaNjVp6-6EnfzAHVSdvtTQ9s8746Hhg0uTvFW8ATjulT0" />
<link rel="stylesheet" media="all" href="/themes/custom/kinetic/source/01-base/global/css/temp.pcss.css?tj9gxp" />
<link rel="stylesheet" media="all" href="/themes/custom/kinetic/dist/assets/global.css?tj9gxp" />
<link rel="stylesheet" media="all" href="/sites/default/files/css/css_DYccwU0TqLbhlkG76rCftlXiM-RUn28UY_GBhjKGsA0.css?delta=3&language=en&theme=kinetic&include=eJx9TFsOwiAQvBCUIzULjLgKrGG3Pm5vYqt_-DOTeSYZCEnaTTq66XLlDuPkfaxSXJqluUXfxfjEiYyl67x6EjGMeV4qZ8zjMyj_mzf0zdvgUr6tPLYb1YUu9HSZtbEqx4q1QZUK1kgjTHx33IZIip84-KePgToFjXRWo-eaNjVp6-6EnfzAHVSdvtTQ9s8746Hhg0uTvFW8ATjulT0" />
<script src="//pages.rstudio.net/js/forms2/js/forms2.min.js"></script>
<script src="//munchkin.marketo.net/munchkin.js"></script>
</head>
<body class="dmb-notification path-node page-node-type-blog">
<a href="#main-content" class="visually-hidden focusable skip-link">
Skip to main content
</a>
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-M4K5J4FK" height="0" width="0" style="display:none;visibility:hidden;"></iframe>
</noscript>
<div class="dialog-off-canvas-main-canvas" data-off-canvas-main-canvas>
<div class="region region-top-bar">
<div id="block-kinetic-dmbnotificationsblock" class="block block-dismissible-message-bar block-dmb-notifications-block">
<div></div>
<div class="dmb-notifications surface-dark bg-blue-600 text-white relative z-1">
<div class="glide" data-behavior-name="kineticDmbNotifications" data-autoplay="false">
<div class="glide__track" data-glide-el="track" aria-roledescription="carousel">
<div class="dmb-notifications-ajax-wrapper glide__slides items-center"></div>
</div>
<div class="glide__arrows" data-glide-el="controls">
<button class="glide__arrow glide__arrow--left" data-glide-dir="<">prev</button>
<button class="glide__arrow glide__arrow--right" data-glide-dir=">">next</button>
</div>
</div>
</div>
</div>
</div>
<div class="layout-container">
<div class="search-reveal__blur" aria-hidden="true"></div>
<header data-component-id="kinetic:header" class="surface-dark" role="banner" id="paragon-header">
<div class="header-top d-none menu:block pt-10">
<div
class="container container-default flex justify-end items-center relative z-1000">
<nav role="navigation" aria-labelledby="block-kinetic-utilitymenu-menu" id="block-kinetic-utilitymenu" class="block block-menu navigation menu--utility-menu">
<span class="visually-hidden" id="block-kinetic-utilitymenu-menu">Utility Menu</span>
<ul data-region="header" class="menu menu-level-0">
<li class="menu-item menu-item--expanded menu-item--default">
<a href="/" tabindex="0" class="dropdown-trigger" aria-label="Expand About" aria-expanded="false" data-drupal-link-system-path="<front>">About</a>
<div class="menu-dropdown">
<div class="dropdown-content surface-light menu:bg-white menu:rounded-2xl menu:p-10 text-gray-200">
<h3 class="text-[24px] leading-[1.25] text-blue-600 font-semibold d-none menu:block menu:mb-8">About</h3>
<ul class="menu menu-level-1">
<li class="menu-item menu-item--default">
<div class="text-formatted">
<span><strong>We help the world make sense of data</strong></span><br>
<span>Open-source software for data science, research, and communication. Built to serve knowledge creators for the next century.</span>
</div>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>About us</span>
<ul class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/about" data-drupal-link-system-path="node/646">Company & Mission</a>
</li>
<li class="menu-item menu-item--default">
<a href="/about/careers" data-drupal-link-system-path="node/656">Careers</a>
</li>
<li class="menu-item menu-item--default">
<a href="/about/pbc-report" data-drupal-link-system-path="node/651">PBC Report</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://conf.posit.co/2026" target="_blank">posit::conf</a>
</li>
<li class="menu-item menu-item--default">
<a href="/about/eula" data-drupal-link-system-path="node/746">Legal terms</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://trust.posit.co/" target="_blank">Trust Center</a>
</li>
</ul>
</li>
<li class="menu-item menu-item--featured">
<div class="media aspect-361/258 mb-4 rounded-2xl overflow-hidden cover-image">
<div class="media media--type-image media--view-mode-menu-teaser h-[inherit] [&_img]:rounded-xl [&_img]:mx-auto">
<picture>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-04/nav-conf-feat.png.webp?itok=GVma2UAJ 1x, /sites/default/files/styles/medium_hq/public/image/2026-04/nav-conf-feat.png.webp?itok=Wj6o8Jt9 2x" media="all and (min-width: 640px)" type="image/webp" width="480" height="400"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-04/nav-conf-feat.png.webp?itok=7IgfI_yx 1x, /sites/default/files/styles/large_hq/public/image/2026-04/nav-conf-feat.png.webp?itok=Htj9X7aG 2x" type="image/webp" width="640" height="534"/>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-04/nav-conf-feat.png?itok=c9XS-3LK 1x, /sites/default/files/styles/medium_hq/public/image/2026-04/nav-conf-feat.png?itok=39bew5lY 2x" media="all and (min-width: 640px)" type="image/png" width="480" height="400"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-04/nav-conf-feat.png?itok=_X_2IqGM 1x, /sites/default/files/styles/large_hq/public/image/2026-04/nav-conf-feat.png?itok=lkEN7x0E 2x" type="image/png" width="640" height="534"/>
<img loading="lazy" width="640" height="534" src="/sites/default/files/styles/small_hq/public/image/2026-04/nav-conf-feat.png?itok=_X_2IqGM" alt="posit::conf(2026) graphic" />
</picture>
</div>
</div>
<h4 class="h4 text-blue-600 font-bold mb-2 leading-[1.33]">
Registration for posit::conf(2026) is open!
</h4>
<div class="description text-gray-200 text-base leading-[1.25] mb-3"><div class="text-formatted">
<span>Discover how the R and Python communities are bringing a human touch to the tools that solve real-world problems and drive meaningful progress.</span>
</div>
</div>
<div class="title"><a href="https://conf.posit.co/2026/">Learn More</a></div>
</li>
</ul>
</div>
</div>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<a href="/" tabindex="0" class="dropdown-trigger" aria-label="Expand Partners" aria-expanded="false" data-drupal-link-system-path="<front>">Partners</a>
<div class="menu-dropdown">
<div class="dropdown-content surface-light menu:bg-white menu:rounded-2xl menu:p-10 text-gray-200">
<h3 class="text-[24px] leading-[1.25] text-blue-600 font-semibold d-none menu:block menu:mb-8">Partners</h3>
<ul class="menu menu-level-1">
<li class="menu-item menu-item--expanded menu-item--default">
<span>Data Platforms</span>
<ul class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/solutions/snowflake" data-drupal-link-system-path="node/706">Snowflake</a>
</li>
<li class="menu-item menu-item--default">
<a href="/solutions/databricks" data-drupal-link-system-path="node/676">Databricks</a>
</li>
<li class="menu-item menu-item--default">
<a href="/solutions/aws" data-drupal-link-system-path="node/671">Amazon Sagemaker</a>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>Cloud Platforms</span>
<ul class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/solutions/aws" data-drupal-link-system-path="node/671">Amazon Web Services</a>
</li>
<li class="menu-item menu-item--default">
<a href="/solutions/google-cloud" data-drupal-link-system-path="node/891">Google Cloud Platform</a>
</li>
<li class="menu-item menu-item--default">
<a href="/solutions/azure-ml" data-drupal-link-system-path="node/731">Microsoft Azure</a>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>Channel Partners</span>
<ul class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/partners" data-drupal-link-system-path="node/721">Partner Program</a>
<div class="description text-gray-200 text-[12px] leading-[1.33]"><div class="text-formatted">
<span>Partner programs, include standard resellers, managed service providers, and professional services.</span>
</div>
</div>
</li>
<li class="menu-item menu-item--default">
<a href="https://pages.posit.co/partner-deal-registration.html">Deal Registration</a>
<div class="description text-gray-200 text-[12px] leading-[1.33]"><div class="text-formatted">
<span>For current Posit Resellers to register new deals. </span>
</div>
</div>
</li>
</ul>
</li>
</ul>
</div>
</div>
</li>
<li class="menu-item menu-item--default">
<a href="https://docs.posit.co/ide/user/#rstudio-ide-oss-downloads" target="_blank" class="download" tabindex="0">Download RStudio</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://positron.posit.co/download.html" target="_blank" class="download" tabindex="0">Download Positron</a>
</li>
</ul>
</nav>
</div>
</div>
<div class="py-4">
<div class="container container-default flex items-center justify-between relative z-10">
<a href="/" title="Home" rel="home">
<svg xmlns="http://www.w3.org/2000/svg" width="173" height="47" viewbox="0 0 173 47" fill="#fff" aria-hidden="true">
<path d="M95.3059 11.4601C103.091 11.4601 108.58 16.7509 108.58 24.0999C108.58 31.4488 103.093 36.6944 95.3059 36.6944C87.5184 36.6944 82.1248 31.4036 82.1248 24.0999C82.1248 16.7961 87.5184 11.4601 95.3059 11.4601ZM95.3059 30.3746C99.0124 30.3746 101.545 28.0328 101.545 24.0999C101.545 20.1669 98.7307 17.78 95.3059 17.78C91.8811 17.78 89.1604 20.074 89.1604 24.0999C89.1604 27.6589 91.6473 30.3746 95.3059 30.3746Z"/>
<path d="M138.498 1.50592C140.703 1.50592 142.298 3.08212 142.298 5.16281C142.298 7.34892 140.703 8.92261 138.498 8.92261C136.107 8.92261 134.651 7.34892 134.651 5.16281C134.651 2.97671 136.245 1.50592 138.498 1.50592ZM135.073 11.9194H141.875V36.2652H135.073V11.9194Z"/>
<path d="M144.945 11.9194H149.59V6.25462H156.391V11.9194H163.741V18.2393H156.391V26.1504C156.391 29.0995 157.048 30.224 158.878 30.224C160.473 30.224 161.74 29.6618 163.052 28.6327L166.518 32.9196C164.828 34.6991 161.551 36.5438 158.222 36.5438C153.11 36.5438 149.592 33.7805 149.592 28.1634V18.2368H144.948V11.9169L144.945 11.9194Z"/>
<path d="M131.553 14.8961C129.886 13.2998 126.428 11.2367 121.517 11.2367C114.524 11.2367 110.411 14.1231 110.411 18.8567C110.411 26.2031 122.133 26.3813 124.902 28.0027C125.402 28.2813 125.699 28.6703 125.52 29.2351C125 30.864 118.429 31.6596 113.584 26.9837L109.631 31.6872C111.391 34.0139 115.274 36.7446 121.573 36.7446C127.424 36.7446 132.483 34.3778 132.483 28.9841C132.483 24.1475 127.97 22.2024 123.956 21.0629C122.815 20.7492 121.711 20.4907 120.755 20.2346C119.174 19.8306 117.054 19.3763 117.393 18.1966C118.01 16.0532 125.063 17.396 127.53 19.6498L131.56 14.8986L131.553 14.8961Z"/>
<path d="M55.644 11.9771H62.4559V13.2446C63.7232 12.0725 66.0266 11.4626 67.9074 11.4626C75.3303 11.4626 79.937 16.5752 79.937 23.7987C79.937 31.0221 75.1443 36.7421 67.7188 36.7421C65.3703 36.7421 63.2078 36.3682 62.4559 35.5223V45.7476H55.644V11.9771ZM62.4559 20.5584V28.3441C63.2078 29.4685 64.8523 30.4072 66.7784 30.4072C70.5854 30.4072 72.8862 28.0153 72.8862 24.3107C72.8862 19.9962 70.7262 17.7925 67.1531 17.7925C64.8975 17.7925 63.3486 18.917 62.4559 20.5584Z"/>
<path d="M9.89983 19.1931L11.914 18.297L21.0216 14.2461L23.0081 13.3626L45.0103 3.57156V15.3805L36.1139 19.1931L34.1022 18.297L43.4035 14.3088V6.05885L24.9946 14.2461L23.0081 15.1321L13.9382 19.1654L11.9265 20.0615L5.50945 22.9152V25.0335L11.8285 27.8471L13.8401 28.7431L23.1489 32.8819L25.1253 33.7604L43.4035 41.8924V33.5546L34.2003 29.6116L36.2144 28.7155L45.0103 32.4854V44.3772L23.1565 34.6539L21.1825 33.7755L11.8159 29.6116L9.80176 28.7155L3.90015 26.0877V21.8636L9.89983 19.1931Z"/>
<path d="M25.0573 23.9317L34.0895 20.0615L32.0754 19.1654L20.9536 23.9317L32.1735 28.7431L34.1851 27.8471L25.0573 23.9317Z"/>
<path d="M11.8284 27.8471L13.84 28.7431L23.008 24.8127L20.9561 23.9317L11.8284 27.8471Z"/>
<path d="M13.9381 19.1654L11.9265 20.0615L20.9562 23.9317L23.0081 23.0532L13.9381 19.1654Z"/>
<path d="M36.1138 19.1931L34.1022 18.297L24.9945 14.2461L23.008 13.3626L1.00586 3.57156V15.3805L9.89977 19.1931L11.9139 18.297L2.61265 14.3088V6.05885L21.0216 14.2461L23.008 15.1321L32.078 19.1654L34.0896 20.0615L40.5067 22.9152V25.0335L34.1877 27.8471L32.176 28.7431L22.8672 32.8819L20.8908 33.7604L2.61265 41.8924V33.5546L11.8158 29.6116L9.8017 28.7155L1.00586 32.4854V44.3772L22.8597 34.6539L24.8336 33.7755L34.2002 29.6116L36.2144 28.7155L42.116 26.0877V21.8636L36.1138 19.1931Z"/>
<path d="M171.149 14.0202C171.149 15.2375 170.191 16.1912 168.947 16.1912C167.702 16.1912 166.731 15.235 166.731 14.0202C166.731 12.8054 167.714 11.8742 168.947 11.8742C170.179 11.8742 171.149 12.8305 171.149 14.0202ZM167.282 14.0202C167.282 14.9764 167.988 15.7344 168.959 15.7344C169.93 15.7344 170.599 14.9764 170.599 14.0327C170.599 13.089 169.905 12.3059 168.947 12.3059C167.988 12.3059 167.282 13.079 167.282 14.0202ZM168.607 15.1446H168.109V12.9987C168.305 12.9585 168.582 12.9334 168.934 12.9334C169.341 12.9334 169.525 12.9987 169.681 13.0915C169.799 13.1819 169.889 13.3526 169.889 13.5634C169.889 13.7993 169.706 13.9825 169.444 14.0603V14.0854C169.653 14.1632 169.771 14.3214 169.837 14.6075C169.902 14.9338 169.942 15.0643 169.995 15.1446H169.457C169.392 15.0668 169.351 14.871 169.286 14.6226C169.246 14.3866 169.115 14.2812 168.841 14.2812H168.605V15.1446H168.607ZM168.62 13.9273H168.856C169.13 13.9273 169.354 13.837 169.354 13.6136C169.354 13.4178 169.211 13.2873 168.896 13.2873C168.765 13.2873 168.672 13.2998 168.622 13.3124V13.9273H168.62Z"/>
</svg>
</a>
<div class="header__desktop d-none menu:flex items-center gap-[20px]">
<nav role="navigation" aria-labelledby="block-kinetic-main-menu-menu" id="block-kinetic-main-menu" class="block block-menu navigation menu--main">
<span class="visually-hidden" id="block-kinetic-main-menu-menu">Main navigation</span>
<ul data-region="header" class="menu menu-level-0">
<li class="menu-item menu-item--expanded">
<button tabindex="0" class="dropdown-trigger" aria-label="Expand Solutions" aria-expanded="false" type="button">Solutions</button>
<div class="menu-dropdown">
<div class="dropdown-content surface-light menu:bg-white menu:rounded-2xl menu:p-10 text-gray-200">
<h3 class="text-[24px] leading-[1.25] text-blue-600 font-semibold d-none menu:block menu:mb-8">Solutions</h3>
<ul data-count="4" class="menu menu-level-1">
<li class="menu-item menu-item--expanded menu-item--default">
<span>By Team</span>
<ul data-count="7" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/solutions/data-scientists" data-drupal-link-system-path="node/1161">Data Scientists</a>
</li>
<li class="menu-item menu-item--default">
<a href="/solutions/data-science-leaders" data-drupal-link-system-path="node/1166">Data Science Leaders</a>
</li>
<li class="menu-item menu-item--default">
<a href="/solutions/it-leaders" data-drupal-link-system-path="node/1171">IT Leaders</a>
</li>
<li class="menu-item menu-item--default">
<a href="/solutions/business-leaders" data-drupal-link-system-path="node/716">Business Leaders</a>
</li>
<li class="menu-item menu-item--simple">
<a href="http://academy.posit.co/" target="_blank">Posit Academy Apprenticeship</a>
<div class="menu_link_content menu-link-contentmain view-mode-simple menu-dropdown menu-dropdown-2 menu-type-simple">
</div>
</li>
<li class="menu-item menu-item--simple">
<a href="/solutions/ai" data-drupal-link-system-path="node/1231">AI FOR DATA PEOPLE</a>
<div class="menu_link_content menu-link-contentmain view-mode-simple menu-dropdown menu-dropdown-2 menu-type-simple">
</div>
</li>
<li class="menu-item menu-item--simple">
<a href="/solutions" data-drupal-link-system-path="node/271">Explore All Solutions</a>
<div class="menu_link_content menu-link-contentmain view-mode-simple menu-dropdown menu-dropdown-2 menu-type-simple">
</div>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>By industry</span>
<ul data-count="4" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/solutions/financial-services" data-drupal-link-system-path="node/261">Financial Services</a>
</li>
<li class="menu-item menu-item--default">
<a href="/solutions/insurance" data-drupal-link-system-path="node/896">Insurance</a>
</li>
<li class="menu-item menu-item--default">
<a href="/solutions/pharma" data-drupal-link-system-path="node/906">Pharma</a>
</li>
<li class="menu-item menu-item--default">
<a href="/solutions/public-sector" data-drupal-link-system-path="node/901">Public Sector</a>
</li>
</ul>
</li>
<li class="menu-item menu-item--default">
</li>
<li class="menu-item menu-item--featured">
<div class="media aspect-361/258 mb-4 rounded-2xl overflow-hidden cover-image">
<div class="media media--type-image media--view-mode-menu-teaser h-[inherit] [&_img]:rounded-xl [&_img]:mx-auto">
<picture>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-04/nav-pinterest-feat.png.webp?itok=P1kmdm55 1x, /sites/default/files/styles/medium_hq/public/image/2026-04/nav-pinterest-feat.png.webp?itok=1Ckcj4tk 2x" media="all and (min-width: 640px)" type="image/webp" width="480" height="401"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-04/nav-pinterest-feat.png.webp?itok=oGW6WRq0 1x, /sites/default/files/styles/large_hq/public/image/2026-04/nav-pinterest-feat.png.webp?itok=c5MXTBVu 2x" type="image/webp" width="600" height="501"/>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-04/nav-pinterest-feat.png?itok=Ba-bngWD 1x, /sites/default/files/styles/medium_hq/public/image/2026-04/nav-pinterest-feat.png?itok=N-kmibpH 2x" media="all and (min-width: 640px)" type="image/png" width="480" height="401"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-04/nav-pinterest-feat.png?itok=BzI58ESP 1x, /sites/default/files/styles/large_hq/public/image/2026-04/nav-pinterest-feat.png?itok=PeHsxZvw 2x" type="image/png" width="600" height="501"/>
<img loading="lazy" width="600" height="501" src="/sites/default/files/styles/small_hq/public/image/2026-04/nav-pinterest-feat.png?itok=BzI58ESP" alt="pinterest customer story featured image" />
</picture>
</div>
</div>
<h4 class="h4 text-blue-600 font-bold mb-2 leading-[1.33]">
Securing Insights Without Compromise
</h4>
<div class="description text-gray-200 text-base leading-[1.25] mb-3"> Pinterest's People Analytics team eliminated risky PII downloads by connecting Posit Workbench directly to Snowflake. This resulted in stronger security, faster collaboration, and advanced statistical modeling for deeper insights. Read how they modernized their workflow.
</div>
<div class="title"><a href="/about/customer-stories/pinterest">Learn More</a></div>
</li>
</ul>
</div>
</div>
</li>
<li class="menu-item menu-item--expanded">
<button tabindex="0" class="dropdown-trigger" aria-label="Expand Products" aria-expanded="false" type="button">Products</button>
<div class="menu-dropdown">
<div class="dropdown-content surface-light menu:bg-white menu:rounded-2xl menu:p-10 text-gray-200">
<h3 class="text-[24px] leading-[1.25] text-blue-600 font-semibold d-none menu:block menu:mb-8">Products</h3>
<ul data-count="3" class="menu menu-level-1">
<li class="menu-item menu-item--expanded menu-item--default">
<span>Analyze</span>
<ul data-count="7" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/products/enterprise/workbench" data-drupal-link-system-path="node/156">Posit Workbench</a>
<div class="description text-gray-200 text-[12px] leading-[1.33]"> Maintain control with centralized management
</div>
</li>
<li class="menu-item menu-item--default">
<a href="https://posit.co/products/ide/positron">Positron Pro</a>
<div class="description text-gray-200 text-[12px] leading-[1.33]"> A secure, governed, and scalable data science editor, delivered through Posit Workbench
</div>
</li>
<li class="menu-item menu-item--default">
<a href="/products/ai" data-drupal-link-system-path="node/216">Posit AI for RStudio</a>
<div class="description text-gray-200 text-[12px] leading-[1.33]"> Activate a specialized agent directly in RStudio, transforming your IDE into a powerful collaborator for data analysis.
</div>
</li>
<li class="menu-item menu-item--default">
<a href="/products/enterprise/cloud" data-drupal-link-system-path="node/191">Posit Cloud</a>
<div class="description text-gray-200 text-[12px] leading-[1.33]"> Code in RStudio or Jupyter Notebooks and easily share
</div>
</li>
<li class="menu-item menu-item--simple">
<a href="/products/enterprise/team" data-drupal-link-system-path="node/981">Explore Posit Team Suite</a>
<div class="menu_link_content menu-link-contentmain view-mode-simple menu-dropdown menu-dropdown-2 menu-type-simple">
</div>
</li>
<li class="menu-item menu-item--simple">
<a href="/products" data-drupal-link-system-path="node/1001">All products</a>
<div class="menu_link_content menu-link-contentmain view-mode-simple menu-dropdown menu-dropdown-2 menu-type-simple">
</div>
</li>
<li class="menu-item menu-item--simple">
<a href="/pricing" data-drupal-link-system-path="node/1046">Get Pricing</a>
<div class="menu_link_content menu-link-contentmain view-mode-simple menu-dropdown menu-dropdown-2 menu-type-simple">
</div>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>Publish</span>
<ul data-count="3" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/products/enterprise/connect" data-drupal-link-system-path="node/161">Posit Connect</a>
<div class="description text-gray-200 text-[12px] leading-[1.33]"> Share and update dynamic data insights and applications
</div>
</li>
<li class="menu-item menu-item--default">
<a href="/products/enterprise/connect-cloud" data-drupal-link-system-path="node/1006">Posit Connect Cloud</a>
<div class="description text-gray-200 text-[12px] leading-[1.33]"> Quickly publish and share Python and R work
</div>
</li>
<li class="menu-item menu-item--default">
<a href="https://www.shinyapps.io/?_gl=1*2w6ctu*_ga*MjAzNTYzNjYyLjE3Njk0NTQ1MTU.*_ga_2C0WZ1JHG0*czE3NzIyMjUwMzUkbzk0JGcxJHQxNzcyMjI3NjAxJGo2MCRsMCRoMA.." target="_blank">shinyapps.io</a>
<div class="description text-gray-200 text-[12px] leading-[1.33]"> Share your Shiny applications online
</div>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>Govern</span>
<ul data-count="2" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/products/enterprise/package-manager" data-drupal-link-system-path="node/166">Posit Package Manager</a>
<div class="description text-gray-200 text-[12px] leading-[1.33]"> Distribute and manage secure, scalable, package repositories for Python and R
</div>
</li>
<li class="menu-item menu-item--default">
<a href="/products/enterprise/public-package-manager" data-drupal-link-system-path="node/1026">Public Package Manager</a>
<div class="description text-gray-200 text-[12px] leading-[1.33]"> Discover and install Python and R packages from CRAN, PyPl and Bioconductor
</div>
</li>
</ul>
</li>
</ul>
</div>
</div>
</li>
<li class="menu-item menu-item--expanded">
<button tabindex="0" class="dropdown-trigger" aria-label="Expand Open Source" aria-expanded="false" type="button">Open Source</button>
<div class="menu-dropdown">
<div class="dropdown-content surface-light menu:bg-white menu:rounded-2xl menu:p-10 text-gray-200">
<h3 class="text-[24px] leading-[1.25] text-blue-600 font-semibold d-none menu:block menu:mb-8">Open Source</h3>
<ul data-count="4" class="menu menu-level-1">
<li class="menu-item menu-item--expanded menu-item--default">
<span>Analyze & Explore</span>
<ul data-count="4" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/products/ide/positron" data-drupal-link-system-path="node/151">Positron</a>
</li>
<li class="menu-item menu-item--default">
<a href="/products/open-source/rstudio" data-drupal-link-system-path="node/696">RStudio IDE</a>
</li>
<li class="menu-item menu-item--simple">
<a href="https://docs.posit.co/ide/user/#rstudio-ide-oss-downloads" target="_blank">Download rstudio</a>
<div class="menu_link_content menu-link-contentmain view-mode-simple menu-dropdown menu-dropdown-2 menu-type-simple">
</div>
</li>
<li class="menu-item menu-item--simple">
<a href="https://positron.posit.co/download.html">Download Positron</a>
<div class="menu_link_content menu-link-contentmain view-mode-simple menu-dropdown menu-dropdown-2 menu-type-simple">
</div>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>About Open Source</span>
<ul data-count="4" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="https://opensource.posit.co/people/" target="_blank">People</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://opensource.posit.co/about/r/" target="_blank">Our R work</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://opensource.posit.co/about/python/" target="_blank">Our Python work</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://opensource.posit.co/about/ai/" target="_blank">Our AI work</a>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>Open Source resources</span>
<ul data-count="6" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="https://opensource.posit.co/blog/" target="_blank">Open Source blog</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://opensource.posit.co/software/" target="_blank">Open Source software</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://opensource.posit.co/resources/cheatsheets/" target="_blank">Cheatsheets</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://opensource.posit.co/resources/videos/" target="_blank">Open Source videos</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://opensource.posit.co/events/" target="_blank">Open Source events</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://github.com/posit-dev" target="_blank">GitHub</a>
</li>
</ul>
</li>
<li class="menu-item menu-item--featured">
<div class="media aspect-361/258 mb-4 rounded-2xl overflow-hidden cover-image">
<div class="media media--type-image media--view-mode-menu-teaser h-[inherit] [&_img]:rounded-xl [&_img]:mx-auto">
<picture>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-04/os-drpdwn-featureimg-laptop.png.webp?itok=R7-D-OJK 1x, /sites/default/files/styles/medium_hq/public/image/2026-04/os-drpdwn-featureimg-laptop.png.webp?itok=p1NGWVXw 2x" media="all and (min-width: 640px)" type="image/webp" width="383" height="295"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-04/os-drpdwn-featureimg-laptop.png.webp?itok=-XeDSJMF 1x, /sites/default/files/styles/large_hq/public/image/2026-04/os-drpdwn-featureimg-laptop.png.webp?itok=lBlKQvOE 2x" type="image/webp" width="383" height="295"/>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-04/os-drpdwn-featureimg-laptop.png?itok=ZyXXXuV1 1x, /sites/default/files/styles/medium_hq/public/image/2026-04/os-drpdwn-featureimg-laptop.png?itok=kFPqZa7a 2x" media="all and (min-width: 640px)" type="image/png" width="383" height="295"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-04/os-drpdwn-featureimg-laptop.png?itok=cT9UJTq5 1x, /sites/default/files/styles/large_hq/public/image/2026-04/os-drpdwn-featureimg-laptop.png?itok=OWCLd1iQ 2x" type="image/png" width="383" height="295"/>
<img loading="lazy" width="383" height="295" src="/sites/default/files/styles/small_hq/public/image/2026-04/os-drpdwn-featureimg-laptop.png?itok=cT9UJTq5" alt="Open Source Website featured image" />
</picture>
</div>
</div>
<h4 class="h4 text-blue-600 font-bold mb-2 leading-[1.33]">
Open Source is in Our DNA
</h4>
<div class="description text-gray-200 text-base leading-[1.25] mb-3"> We believe data science software should be free and open for everyone. Check out our latest open-source initiatives and libraries.
</div>
<div class="title"><a href="https://opensource.posit.co/">Visit our Open Source website</a></div>
</li>
</ul>
</div>
</div>
</li>
<li class="menu-item menu-item--expanded">
<button tabindex="0" class="dropdown-trigger" aria-label="Expand Customers" aria-expanded="false" type="button">Customers</button>
<div class="menu-dropdown">
<div class="dropdown-content surface-light menu:bg-white menu:rounded-2xl menu:p-10 text-gray-200">
<h3 class="text-[24px] leading-[1.25] text-blue-600 font-semibold d-none menu:block menu:mb-8">Customers</h3>
<ul data-count="3" class="menu menu-level-1">
<li class="menu-item menu-item--expanded menu-item--default">
<span>By Team</span>
<ul data-count="5" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/about/customer-stories?teams%5B6%5D=6&search_api_fulltext=#explore-all-stories" data-drupal-link-query="{"search_api_fulltext":"","teams":{"6":"6"}}" data-drupal-link-system-path="node/661">Data Scientists</a>
</li>
<li class="menu-item menu-item--default">
<a href="/about/customer-stories?teams%5B11%5D=11&search_api_fulltext=#explore-all-stories" data-drupal-link-query="{"search_api_fulltext":"","teams":{"11":"11"}}" data-drupal-link-system-path="node/661">Data Science Leaders</a>
</li>
<li class="menu-item menu-item--default">
<a href="/about/customer-stories?teams%5B16%5D=16&search_api_fulltext=#explore-all-stories" data-drupal-link-query="{"search_api_fulltext":"","teams":{"16":"16"}}" data-drupal-link-system-path="node/661">IT Leaders</a>
</li>
<li class="menu-item menu-item--default">
<a href="/about/customer-stories?teams%5B21%5D=21&search_api_fulltext=#explore-all-stories" data-drupal-link-query="{"search_api_fulltext":"","teams":{"21":"21"}}" data-drupal-link-system-path="node/661">Business Leaders</a>
</li>
<li class="menu-item menu-item--simple">
<a href="/about/customer-stories" data-drupal-link-system-path="node/661">View all teams</a>
<div class="menu_link_content menu-link-contentmain view-mode-simple menu-dropdown menu-dropdown-2 menu-type-simple">
</div>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>By Industry</span>
<ul data-count="5" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/about/customer-stories?field_industries%5B31%5D=31&search_api_fulltext=#explore-all-stories" data-drupal-link-query="{"field_industries":{"31":"31"},"search_api_fulltext":""}" data-drupal-link-system-path="node/661">Financial Services</a>
</li>
<li class="menu-item menu-item--default">
<a href="/about/customer-stories?field_industries%5B46%5D=46&search_api_fulltext=#explore-all-stories" data-drupal-link-query="{"field_industries":{"46":"46"},"search_api_fulltext":""}" data-drupal-link-system-path="node/661">Insurance</a>
</li>
<li class="menu-item menu-item--default">
<a href="/about/customer-stories?field_industries%5B36%5D=36&search_api_fulltext=#explore-all-stories" data-drupal-link-query="{"field_industries":{"36":"36"},"search_api_fulltext":""}" data-drupal-link-system-path="node/661">Pharma</a>
</li>
<li class="menu-item menu-item--default">
<a href="/about/customer-stories?field_industries%5B26%5D=26&search_api_fulltext=#explore-all-stories" data-drupal-link-query="{"field_industries":{"26":"26"},"search_api_fulltext":""}" data-drupal-link-system-path="node/661">Public Sector</a>
</li>
<li class="menu-item menu-item--simple">
<a href="/about/customer-stories" data-drupal-link-system-path="node/661">View all industries</a>
<div class="menu_link_content menu-link-contentmain view-mode-simple menu-dropdown menu-dropdown-2 menu-type-simple">
</div>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>Customer Resources</span>
<ul data-count="1" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/support" data-drupal-link-system-path="node/691">Support</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</li>
<li class="menu-item menu-item--expanded">
<a href="/" tabindex="0" class="dropdown-trigger" aria-label="Expand Resources" aria-expanded="false" data-drupal-link-system-path="<front>">Resources</a>
<div class="menu-dropdown">
<div class="dropdown-content surface-light menu:bg-white menu:rounded-2xl menu:p-10 text-gray-200">
<h3 class="text-[24px] leading-[1.25] text-blue-600 font-semibold d-none menu:block menu:mb-8">Resources</h3>
<ul data-count="5" class="menu menu-level-1">
<li class="menu-item menu-item--expanded menu-item--default">
<span>Featured Resources</span>
<ul data-count="5" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/content-library" data-drupal-link-system-path="node/596">Content library</a>
</li>
<li class="menu-item menu-item--default">
<a href="/demo-gallery" data-drupal-link-system-path="node/701">Demo gallery</a>
</li>
<li class="menu-item menu-item--default">
<a href="/blog" data-drupal-link-system-path="node/1176">Blog</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://posit.co/videos?type%5B241%5D=241&type%5B136%5D=136&type%5B131%5D=131&type%5B246%5D=246&search_api_fulltext=&sort_by=date">Videos</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://opensource.posit.co/resources/cheatsheets/" target="_blank">Cheatsheets</a>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>Education & Events</span>
<ul data-count="5" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/events" data-drupal-link-system-path="node/601">Events</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://posit.co/content-library?type%5B246%5D=246&search_api_fulltext=&sort_by=date">Webinars</a>
</li>
<li class="menu-item menu-item--default">
<a href="/data-science-hangout" data-drupal-link-system-path="node/611">Data Science Hangouts</a>
</li>
<li class="menu-item menu-item--default">
<a href="/thetestset" data-drupal-link-system-path="node/46">The Test Set : Podcast</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://conf.posit.co/2026/" target="_blank">posit::conf</a>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>Support</span>
<ul data-count="3" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="/support" data-drupal-link-system-path="node/691">Enterprise support</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://forum.posit.co/?_gl=1*1tp4i8c*_ga*MjAzNTYzNjYyLjE3Njk0NTQ1MTU.*_ga_2C0WZ1JHG0*czE3NzE2MDYxOTYkbzcxJGcxJHQxNzcxNjA2NTc0JGo2MCRsMCRoMA.." target="_blank">Community forum</a>
</li>
<li class="menu-item menu-item--default">
<a href="https://support.posit.co/hc/en-us?_gl=1*oetol6*_ga*MjAzNTYzNjYyLjE3Njk0NTQ1MTU.*_ga_2C0WZ1JHG0*czE3NzE2MDYxOTYkbzcxJGcxJHQxNzcxNjA2NTc0JGo2MCRsMCRoMA.." target="_blank">Knowledge base</a>
</li>
</ul>
</li>
<li class="menu-item menu-item--expanded menu-item--default">
<span>Documentation</span>
<ul data-count="1" class="menu menu-level-2">
<li class="menu-item menu-item--default">
<a href="https://docs.posit.co/" target="_blank">Documentation</a>
</li>
</ul>
</li>
<li class="menu-item menu-item--featured">
<div class="media aspect-361/258 mb-4 rounded-2xl overflow-hidden cover-image">
<div class="media media--type-image media--view-mode-menu-teaser h-[inherit] [&_img]:rounded-xl [&_img]:mx-auto">
<picture>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-05/pst-acad-launch-blog-1920x1080.png.webp?itok=jUxPyh2Z 1x, /sites/default/files/styles/medium_hq/public/image/2026-05/pst-acad-launch-blog-1920x1080.png.webp?itok=xzUL_X7y 2x" media="all and (min-width: 640px)" type="image/webp" width="480" height="270"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-05/pst-acad-launch-blog-1920x1080.png.webp?itok=DpXKQIDR 1x, /sites/default/files/styles/large_hq/public/image/2026-05/pst-acad-launch-blog-1920x1080.png.webp?itok=kVr7zo17 2x" type="image/webp" width="640" height="360"/>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-05/pst-acad-launch-blog-1920x1080.png?itok=V9t_Swzo 1x, /sites/default/files/styles/medium_hq/public/image/2026-05/pst-acad-launch-blog-1920x1080.png?itok=RV4xZ1P8 2x" media="all and (min-width: 640px)" type="image/png" width="480" height="270"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-05/pst-acad-launch-blog-1920x1080.png?itok=IZ80uf82 1x, /sites/default/files/styles/large_hq/public/image/2026-05/pst-acad-launch-blog-1920x1080.png?itok=u9eoUewf 2x" type="image/png" width="640" height="360"/>
<img loading="lazy" width="640" height="360" src="/sites/default/files/styles/small_hq/public/image/2026-05/pst-acad-launch-blog-1920x1080.png?itok=IZ80uf82" alt="Posit Academy logo" />
</picture>
</div>
</div>
<h4 class="h4 text-blue-600 font-bold mb-2 leading-[1.33]">
Introducing Posit Academy
</h4>
<div class="description text-gray-200 text-base leading-[1.25] mb-3"> Discover the brand-new Posit Academy, a free data science learning platform where you can instantly access everything from self-paced courses to premium, mentor-led apprenticeships to elevate your career!
</div>
<div class="title"><a href="https://academy.posit.co/" target="_blank">Check it out</a></div>
</li>
</ul>
</div>
</div>
</li>
</ul>
</nav>
<nav role="navigation" aria-labelledby="block-kinetic-ctamenu-menu" id="block-kinetic-ctamenu" class="block block-menu navigation menu--cta-menu">
<span class="visually-hidden" id="block-kinetic-ctamenu-menu">CTA menu</span>
<ul data-region="header" class="menu flex gap-2 items-center">
<li>
<a href="/schedule-a-call" pst-datalayer-event="cta_click" class="flex w-full btn-primary" data-drupal-link-system-path="node/316">Get started</a>
</li>
<li>
<a href="/demo-gallery" pst-datalayer-event="cta_click" class="flex w-full btn-secondary" data-drupal-link-system-path="node/701">Demo gallery</a>
</li>
</ul>
</nav>
<div class="search-header" data-search-header>
<div id="searchstax-header-input" class="search-header__input"></div>
<button class="search-reveal__trigger search-header__trigger" aria-label="Open Search" aria-controls="search-header-panel" aria-expanded="false">
<span class="search-reveal-icon flex after:icon-search/[20px] after:bg-blue-400 dark:after:bg-white" aria-hidden="true"></span>
</button>
<button type="button" class="search-header__close" aria-label="Close Search">
<span aria-hidden="true">×</span>
</button>
</div>
<div id="search-header-panel" class="search-header__panel" data-searchstax-page hidden>
<div class="container container-default">
<div class="search-header__results">
<aside id="searchstax-header-facets" class="search-header__facets"></aside>
<section class="search-header__main">
<div id="searchstax-header-feedback" class="search-header__feedback"></div>
<div id="searchstax-header-external-promotions-layout-container"></div>
<div id="searchstax-header-results" class="search-header__list"></div>
<div id="searchstax-header-pagination" class="search-header__pagination"></div>
</section>
</div>
</div>
</div>
</div>
<div
class="flex items-center gap-2 menu:d-none">
<button class="search-reveal__trigger" aria-label="Open Search" aria-controls="search-reveal-modal" aria-expanded="false">
<span class="flex after:icon-search/[20px] after:bg-blue-400 dark:after:bg-white" aria-hidden="true"></span>
</button>
<button class="kinetic-menu-trigger" aria-label="Open menu" aria-expanded="false" aria-controls="mobile-nav-wrapper">
<span></span>
</button>
</div>
</div>
</div>
<div id="mobile-nav-wrapper">
<div class='mobile-nav__inner'>
<div class='container container-default py-8'>
<div data-block-collector='mobile'></div>
</div>
</div>
</div>
</header>
<main role="main">
<a id="main-content" tabindex="-1"></a> <div class="layout-content">
<div class="region region-content">
<div data-drupal-messages-fallback class="hidden"></div>
<div id="block-kinetic-content" class="block block-system block-system-main-block block--kinetic">
<article class="node node--type-blog node--view-mode-full">
<style>
:root {
--kinetic-header-bg-color: var(--color-blue-250);
--kinetic-header-scrolled-bg: var(--color-blue-250);
}
</style>
<div data-component-id="kinetic:blog" class="py-10">
<div class="container container-default">
<nav class="breadcrumb" role="navigation" aria-labelledby="system-breadcrumb">
<h2 id="system-breadcrumb" class="visually-hidden">Breadcrumb</h2>
<ol class="flex flex-wrap text-xs leading-[1.33] text-blue-600-semi dark:text-[#FFFFFF9E] uppercase m-0 gap-1 font-semibold">
<li class="not-first:before:content-['>']">
<a class="text-inherit hover:underline" href="/blog">Blog</a>
</li>
</ol>
</nav>
<div class="flex flex-wrap gap-2 mt-5 md:mt-7">
<span class="inline-block uppercase px-2 py-1 rounded-lg text-base font-semibold bg-blue-50 text-blue-300"> Commercial enterprise offerings </span>
</div>
<h1 class="h2 mt-5 mb-5 md:mb-10">Shiny Server (Pro) 1.5.4</h1>
<div class="flex flex-col md:flex-row gap-5 md:justify-between md:items-start">
<div class="flex flex-wrap gap-5">
<div data-component-id="kinetic:person-simple" class="flex items-center gap-4 md:gap-5 text-blue-600">
<div class="w-[52px] h-[52px] rounded-md shrink-0 overflow-hidden [&_img]:cover">
<img loading="lazy" src="/sites/default/files/styles/small_square_hq_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&itok=cV1DIzbe" width="320" height="320" alt="Profile picture of Alan Dipert" class="image-style-small-square-hq-1-1" />
</div>
<div class="text-sm leading-[1.33]">Written by Alan Dipert</div>
</div>
</div>
<div class="shrink-0 before:icon-calendar/[20px] before:bg-blue-600 before:block flex items-center gap-2.5 text-blue-600-semi text-xs leading-[1.33] font-semibold"> 2017-09-12
</div>
</div>
<div class="mt-14 md:mt-10 w-full contain-image rounded-2xl overflow-hidden">
</div>
<div class="mt-10 md:mt-20 mb-20 md:mb-30 mx-auto max-w-[696px]">
<div class="text-formatted">
<div class="quarto-content"><p><a href="https://posit.co/products/open-source/shiny-server/">Shiny Server 1.5.4.869 and Shiny Server Pro 1.5.4.872 are now available.</a></p>
<p>Both the new Shiny Server and Shiny Server Pro releases include bug fixes and enhancements, and we recommend upgrading at your earliest convenience.</p>
<section id="shiny-server-1.5.4.869" class="level3">
<h3 class="anchored" data-anchor-id="shiny-server-1.5.4.869">Shiny Server 1.5.4.869</h3>
<ul>
<li><a href="https://docs.posit.co/shiny-server/#clickjacking-protection">Clickjacking protection</a> can now be enabled using the <code>frame_options</code> directive. This directive was already available in Shiny Server Pro, but is now available in Shiny Server as well.</li>
<li>A bug that caused <code>"Error: Can't set headers after they are sent."</code> to appear in error logs was fixed.</li>
<li>Several bugs in <code>license-manager</code> were fixed.</li>
</ul>
</section>
<section id="shiny-server-pro-1.5.4.872" class="level3">
<h3 class="anchored" data-anchor-id="shiny-server-pro-1.5.4.872">Shiny Server Pro 1.5.4.872</h3>
<ul>
<li>The “utilization scheduler” component, which manages the way requests are routed to R processes, has been significantly improved. It has been made more robust, and applications now respond more efficiently to increased load.</li>
<li><code>auth_pam</code>: The performance of multiple simultaneous logins was improved.</li>
<li><code>auth_ldap</code>: A bug was fixed that caused LDAP to return no groups when a username contained a backslash.</li>
</ul>
</section></div>
</div>
</div>
<div class="bg-blue-50 py-18 md:py-15 full-bleed">
<div class="container container-default">
<div class="flex flex-col gap-6 max-w-[1008px] xl:ml-[157px]">
<div data-component-id="kinetic:person-extended" class="p-4 flex flex-col md:flex-row gap-5 xl:gap-11 px-8 md:px-13 pt-12 pb-10.5 bg-off-white rounded-3xl text-black-100">
<div class="w-[107px] h-[107px] md:w-[178px] md:h-[178px] rounded-xl shrink-0 overflow-hidden [&_img]:cover">
<picture>
<source srcset="/sites/default/files/styles/medium_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&itok=m74AE6hd 1x, /sites/default/files/styles/large_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&itok=Q2FTUJE4 2x" media="all and (min-width: 640px)" type="image/png" width="480" height="480"/>
<source srcset="/sites/default/files/styles/x_small_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&itok=wjGCvil4 1x, /sites/default/files/styles/small_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&itok=jiynn8gN 2x" type="image/png" width="100" height="100"/>
<img loading="lazy" width="100" height="100" src="/sites/default/files/styles/x_small_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&itok=wjGCvil4" alt="Profile picture of Alan Dipert" />
</picture>
</div>
<div class="content">
<h3 class="h3 mb-3 md:mb-4 text-blue-600">Alan Dipert</h3>
<div class="text-base font-semibold text-blue-300"></div>
<div class="text-base leading-[1.75] mt-6"><div class="text-formatted">
<span>Alan is a software engineer on the Shiny team at RStudio. In the past, he’s helped build web applications, reporting pipelines, and many things between. When he’s not working, Alan likes to spend his time reading or being with his family.</span>
</div>
</div>
<div class="menu-social mt-7 [&_a]:after:!bg-blue-300 [&_a]:hover:after:!bg-blue-500">
<div data-component-id="kinetic:social-links" class="menu-social">
<ul class="menu--social">
<li class="x"> <a href="https://twitter.com/alandipert" rel="nofollow" target="_blank">https://twitter.com/alandipert</a> </li>
<li class="github"> <a href="https://github.com/alandipert" rel="nofollow" target="_blank">https://github.com/alandipert</a> </li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="views-element-container"><div class="view view-blogs view-id-blogs view-display-id-related_blogs js-view-dom-id-fcf5aa86ed6be961b12702902bf9c5b22bcdb5cef14a383c04e39114906fa052 my-13 md:my-30">
<div class="view-header md:mb-15">
<h2 class="h2">Related Content</h2>
</div>
<div class="view-content grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
<div class="views-row">
<article class="group relative cursor-pointer">
<div class="relative rounded-2xl overflow-hidden">
<div class="aspect-2/1 [&_>*]:h-full [&_img]:cover">
<picture>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-05/PST-Blog-MCPsOnConnect-v2%402x.png.webp?itok=i1RMuOnW 1x, /sites/default/files/styles/medium_hq/public/image/2026-05/PST-Blog-MCPsOnConnect-v2%402x.png.webp?itok=LxAEu_3I 2x" media="all and (min-width: 640px)" type="image/webp" width="480" height="270"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-05/PST-Blog-MCPsOnConnect-v2%402x.png.webp?itok=HLqF9_Vm 1x, /sites/default/files/styles/large_hq/public/image/2026-05/PST-Blog-MCPsOnConnect-v2%402x.png.webp?itok=5Tr9SwsQ 2x" type="image/webp" width="640" height="360"/>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-05/PST-Blog-MCPsOnConnect-v2%402x.png?itok=WVzXbM4q 1x, /sites/default/files/styles/medium_hq/public/image/2026-05/PST-Blog-MCPsOnConnect-v2%402x.png?itok=zMtn0e99 2x" media="all and (min-width: 640px)" type="image/png" width="480" height="270"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-05/PST-Blog-MCPsOnConnect-v2%402x.png?itok=Bhoce5j5 1x, /sites/default/files/styles/large_hq/public/image/2026-05/PST-Blog-MCPsOnConnect-v2%402x.png?itok=Kkh952Ld 2x" type="image/png" width="640" height="360"/>
<img loading="lazy" width="640" height="360" src="/sites/default/files/styles/small_hq/public/image/2026-05/PST-Blog-MCPsOnConnect-v2%402x.png?itok=Bhoce5j5" alt="MCP Servers on Connect" />
</picture>
</div>
</div>
<div class="mt-6">
<div class="mb-3">
<span class="inline-block uppercase px-2 py-1 rounded-lg text-base font-semibold bg-blue-50 text-blue-300"> Commercial enterprise offerings </span>
</div>
<div class="shrink-0 before:icon-calendar/[20px] before:bg-blue-600 before:block flex items-center gap-2.5 text-blue-600-semi text-xs leading-[1.33] font-semibold"> 2026-07-22
</div>
<h3 class="h3 mb-3 decoration-2 inline-block text-blue-600 dark:text-white group-hover:underline">
<a href="/blog/mcp-servers-on-connect-managing-credentials-and-access" aria-label="Read more" title="Read more" class="stretch"> MCP Servers on Connect: Managing credentials and access</a>
</h3>
<div class="text-blue-600-semi dark:text-blue-50">
<div class="text-formatted">
In Part 1, we covered what the Model Context Protocol (MCP) is, how we...
</div>
</div>
<div class="mt-4">
<span aria-hidden="true" class="uppercase text-base text-blue-500 font-display link-next group-hover:link-hover"> Read more </span>
</div>
</div>
</article>
</div>
<div class="views-row">
<article class="group relative cursor-pointer">
<div class="relative rounded-2xl overflow-hidden">
<div class="aspect-2/1 [&_>*]:h-full [&_img]:cover">
<picture>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-07/SF-pubsec-epidemiologists-Blog.png.webp?itok=Mq7VpNZY 1x, /sites/default/files/styles/medium_hq/public/image/2026-07/SF-pubsec-epidemiologists-Blog.png.webp?itok=MRVbZeWO 2x" media="all and (min-width: 640px)" type="image/webp" width="480" height="270"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-07/SF-pubsec-epidemiologists-Blog.png.webp?itok=8qvTZH9e 1x, /sites/default/files/styles/large_hq/public/image/2026-07/SF-pubsec-epidemiologists-Blog.png.webp?itok=hKRttHeG 2x" type="image/webp" width="640" height="360"/>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-07/SF-pubsec-epidemiologists-Blog.png?itok=or63Pwsk 1x, /sites/default/files/styles/medium_hq/public/image/2026-07/SF-pubsec-epidemiologists-Blog.png?itok=fn5H46_T 2x" media="all and (min-width: 640px)" type="image/png" width="480" height="270"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-07/SF-pubsec-epidemiologists-Blog.png?itok=mcMpHr6u 1x, /sites/default/files/styles/large_hq/public/image/2026-07/SF-pubsec-epidemiologists-Blog.png?itok=5bRWNjc2 2x" type="image/png" width="640" height="360"/>
<img loading="lazy" width="640" height="360" src="/sites/default/files/styles/small_hq/public/image/2026-07/SF-pubsec-epidemiologists-Blog.png?itok=mcMpHr6u" alt="Score a Disease Surveillance Model Inside Snowflake, Without Moving" />
</picture>
</div>
</div>
<div class="mt-6">
<div class="mb-3">
<span class="inline-block uppercase px-2 py-1 rounded-lg text-base font-semibold bg-blue-50 text-blue-300"> Commercial enterprise offerings </span>
</div>
<div class="shrink-0 before:icon-calendar/[20px] before:bg-blue-600 before:block flex items-center gap-2.5 text-blue-600-semi text-xs leading-[1.33] font-semibold"> 2026-07-06
</div>
<h3 class="h3 mb-3 decoration-2 inline-block text-blue-600 dark:text-white group-hover:underline">
<a href="/blog/score-a-disease-surveillance-model-inside-snowflake-without-moving-your-data" aria-label="Read more" title="Read more" class="stretch"> Score a Disease Surveillance Model Inside Snowflake, Without Moving</a>
</h3>
<div class="text-blue-600-semi dark:text-blue-50">
<div class="text-formatted">
Learn how public health teams run R and Python disease surveillance models inside Snowflake...
</div>
</div>
<div class="mt-4">
<span aria-hidden="true" class="uppercase text-base text-blue-500 font-display link-next group-hover:link-hover"> Read more </span>
</div>
</div>
</article>
</div>
<div class="views-row">
<article class="group relative cursor-pointer">
<div class="relative rounded-2xl overflow-hidden">
<div class="aspect-2/1 [&_>*]:h-full [&_img]:cover">
<picture>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-06/screenshot.jpg.webp?itok=4NiglUtk 1x, /sites/default/files/styles/medium_hq/public/image/2026-06/screenshot.jpg.webp?itok=g6ohj7pL 2x" media="all and (min-width: 640px)" type="image/webp" width="480" height="240"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-06/screenshot.jpg.webp?itok=29wclRw9 1x, /sites/default/files/styles/large_hq/public/image/2026-06/screenshot.jpg.webp?itok=y0G1ehEu 2x" type="image/webp" width="640" height="320"/>
<source srcset="/sites/default/files/styles/x_small_hq/public/image/2026-06/screenshot.jpg?itok=B3FZdhAq 1x, /sites/default/files/styles/medium_hq/public/image/2026-06/screenshot.jpg?itok=LlLqZjrF 2x" media="all and (min-width: 640px)" type="image/jpeg" width="480" height="240"/>
<source srcset="/sites/default/files/styles/small_hq/public/image/2026-06/screenshot.jpg?itok=m6iIZ4yw 1x, /sites/default/files/styles/large_hq/public/image/2026-06/screenshot.jpg?itok=Z5PrYDLX 2x" type="image/jpeg" width="640" height="320"/>
<img loading="lazy" width="640" height="320" src="/sites/default/files/styles/small_hq/public/image/2026-06/screenshot.jpg?itok=m6iIZ4yw" alt="Don't bring a spreadsheet to a data fight" />
</picture>
</div>
</div>
<div class="mt-6">
<div class="mb-3">
<span class="inline-block uppercase px-2 py-1 rounded-lg text-base font-semibold bg-blue-50 text-blue-300"> Positron and RStudio IDE </span>
</div>
<div class="shrink-0 before:icon-calendar/[20px] before:bg-blue-600 before:block flex items-center gap-2.5 text-blue-600-semi text-xs leading-[1.33] font-semibold"> 2026-06-18
</div>
<h3 class="h3 mb-3 decoration-2 inline-block text-blue-600 dark:text-white group-hover:underline">
<a href="/blog/dont-bring-spreadsheet-data-fight" aria-label="Read more" title="Read more" class="stretch"> Don't bring a spreadsheet to a data fight</a>
</h3>
<div class="text-blue-600-semi dark:text-blue-50">
<div class="text-formatted">
There's a moment every data analyst knows. The spreadsheet that used to be fast...
</div>
</div>
<div class="mt-4">
<span aria-hidden="true" class="uppercase text-base text-blue-500 font-display link-next group-hover:link-hover"> Read more </span>
</div>
</div>
</article>
</div>
</div>
</div>
</div>
</div>
</div>
</article>
</div>
</div>
</div>
</main>
<footer data-component-id="kinetic:footer" role="contentinfo" class="kinetic-footer bg-white">
<div class="container container-default pt-12 pb-14 xl:pt-15">
<div class="pb-10 md:pb-13">
<div class="flex justify-between items-center pb-8 md:pb-13 border-b-1 border-blue-50 mb-10 md:mb-13">
<div class="logo w-[168px] md:w-[176px] contain-image">
<svg width="176" height="48" viewBox="0 0 176 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="#fff" d="M0 0h176v47.904H0z"/><path d="M96.959 11.68c7.92 0 13.504 5.393 13.504 12.883S104.881 37.4 96.959 37.4c-7.923 0-13.41-5.393-13.41-12.837s5.487-12.882 13.41-12.882m0 19.279c3.77 0 6.346-2.387 6.346-6.396 0-4.008-2.862-6.441-6.346-6.441s-6.252 2.338-6.252 6.441c0 3.628 2.53 6.396 6.252 6.396M140.9 1.535c2.243 0 3.865 1.606 3.865 3.727 0 2.228-1.622 3.832-3.865 3.832-2.433 0-3.914-1.604-3.914-3.832s1.622-3.727 3.914-3.727m-3.484 10.614h6.919v24.814h-6.919zm10.043 0h4.725V6.375h6.919v5.774h7.478v6.441h-7.478v8.063c0 3.006.668 4.152 2.53 4.152 1.622 0 2.912-.573 4.247-1.622l3.525 4.37c-1.719 1.813-5.052 3.694-8.439 3.694-5.201 0-8.78-2.817-8.78-8.542V18.587h-4.725v-6.441zm-13.625 3.034c-1.696-1.627-5.213-3.73-10.209-3.73-7.115 0-11.3 2.942-11.3 7.766 0 7.488 11.926 7.67 14.743 9.322.509.284.811.68.629 1.256-.529 1.66-7.214 2.471-12.143-2.294l-4.022 4.794c1.791 2.37 5.741 5.154 12.149 5.154 5.953 0 11.1-2.412 11.1-7.91 0-4.93-4.592-6.912-8.675-8.073-1.161-.32-2.284-.583-3.256-.844-1.61-.412-3.766-.875-3.421-2.077.627-2.185 7.803-.817 10.312 1.48l4.101-4.842zM56.61 12.207h6.93V13.5c1.288-1.194 3.632-1.816 5.545-1.816 7.552 0 12.238 5.211 12.238 12.573 0 7.363-4.876 13.193-12.43 13.193-2.389 0-4.589-.382-5.354-1.244v10.422h-6.93zm6.93 8.747v7.935c.764 1.146 2.437 2.103 4.396 2.103 3.873 0 6.214-2.438 6.214-6.214 0-4.397-2.197-6.643-5.832-6.643-2.295 0-3.87 1.146-4.779 2.819" fill="#404041"/><path d="m10.071 19.562 2.05-.913 9.265-4.129 2.021-.9 22.384-9.98v12.036l-9.051 3.886-2.047-.913 9.463-4.065V6.175L25.428 14.52l-2.021.903-9.227 4.111-2.047.913-6.528 2.909v2.159l6.429 2.868 2.046.913 9.47 4.218 2.01.895 18.596 8.289V34.2l-9.363-4.02 2.05-.912 8.948 3.842v12.12l-22.233-9.91-2.008-.895-9.53-4.244-2.048-.913-6.004-2.679v-4.305z" fill="#ee6331"/><path d="m25.492 24.392 9.189-3.945-2.05-.913-11.314 4.858 11.414 4.904 2.047-.913z" fill="#ee6331"/><path d="m12.034 28.383 2.046.913 9.327-4.006-2.087-.898zm2.146-8.849-2.047.913 9.187 3.945 2.087-.895z" fill="#447099"/><path d="m36.74 19.562-2.047-.913-9.265-4.129-2.021-.9L1.023 3.64v12.036l9.048 3.886 2.05-.913-9.463-4.065V6.175l18.728 8.345 2.021.903 9.227 4.111 2.047.913 6.528 2.909v2.159l-6.428 2.868-2.047.913-9.47 4.218-2.011.895-18.595 8.289V34.2l9.363-4.02-2.05-.912-8.948 3.842v12.12l22.233-9.91 2.008-.895 9.53-4.244 2.048-.913 6.004-2.679v-4.305z" fill="#447099"/><path d="M174.117 14.29c0 1.24-.974 2.213-2.241 2.213-1.266 0-2.253-.975-2.253-2.213s1-2.187 2.253-2.187 2.241.974 2.241 2.187m-3.934 0c0 .974.719 1.747 1.706 1.747.988 0 1.668-.773 1.668-1.734 0-.962-.706-1.76-1.681-1.76-.974 0-1.693.788-1.693 1.747m1.348 1.146h-.507v-2.187c.2-.041.481-.067.839-.067.415 0 .602.067.76.161.12.092.213.266.213.481 0 .24-.187.427-.453.507v.025c.212.08.332.24.399.532.066.333.107.466.161.548h-.547c-.067-.08-.108-.279-.174-.532-.041-.24-.174-.348-.453-.348h-.241v.88zm.013-1.24h.24c.279 0 .507-.093.507-.32 0-.2-.146-.333-.466-.333-.133 0-.228.013-.279.025v.627z" fill="#404041"/></svg>
</div>
<div class="badge w-[75px] md:w-[105px] contain-image">
<svg width="105" height="51" viewBox="0 0 105 51" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path fill="#fff" d="M0 0h105v50.366H0z"/><mask id="b" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="105" height="51"><path d="M105 0H0v50.366h105z" fill="#fff"/></mask><g mask="url(#b)" fill="#383839"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.507.315c-3.04 0-5.559 2.376-5.686 5.398L0 44.433c-.158 3.226 2.439 5.933 5.686 5.933h39.466c3.246 0 5.843-2.692 5.685-5.934L49.032 5.713C48.889 2.691 46.387.315 43.346.315zm4.133 1.652c-3.785 0-6.841 3.038-6.841 6.8v27.386c0 3.762 3.056 6.8 6.841 6.8h27.557c3.77 0 6.841-3.038 6.841-6.8V8.767c0-3.762-3.056-6.8-6.841-6.8z"/><path fill-rule="evenodd" clip-rule="evenodd" d="m20.477 9.302 16.93 9.506h-24.04v-3.95h8.868zm9.835 24.553-16.93-9.506h24.041v3.95h-8.869z"/><path d="M57.695 34.815v-1.73h2.043c.411 0 .744-.127.982-.379q.38-.378.38-.991c0-.41-.127-.709-.38-.945-.254-.236-.586-.362-.982-.362h-2.043v-1.73h2.059c.712 0 1.33.125 1.868.377.539.252.935.598 1.236 1.054.285.457.443.976.443 1.59s-.143 1.165-.443 1.637a2.84 2.84 0 0 1-1.236 1.07c-.522.252-1.14.378-1.868.378h-2.06zm-1.52 2.802v-8.908h2.122v8.908zm8.266 0v-8.908h2.123V35.9h4.339v1.732H64.44zm7.84 0v-8.908h6.651v1.73h-4.53v1.732h2.915v1.732h-2.914v2.014h4.577v1.731h-6.7zm8.124 0v-8.908h3.025c.681 0 1.283.11 1.805.314q.808.307 1.378.898c.38.377.665.85.855 1.384.19.551.301 1.15.301 1.826s-.095 1.29-.3 1.858a4 4 0 0 1-.856 1.416 4 4 0 0 1-1.378.913c-.538.205-1.14.299-1.805.299zm2.122-1.731h.903c.46 0 .855-.11 1.172-.33a2 2 0 0 0 .728-.977c.175-.425.254-.897.254-1.464 0-.566-.08-1.023-.254-1.432a2 2 0 0 0-.728-.944c-.317-.22-.713-.33-1.172-.33h-.903zm9.724 1.873c-.792 0-1.488-.19-2.074-.583s-1.03-.928-1.362-1.62-.491-1.496-.491-2.409.158-1.731.49-2.408c.333-.693.792-1.244 1.394-1.621.618-.378 1.346-.583 2.202-.583s1.187.126 1.71.378a3.3 3.3 0 0 1 1.314 1.055c.349.456.539 1.038.57 1.715h-2.327a1.8 1.8 0 0 0-.396-1.007c-.222-.268-.523-.41-.919-.41a1.4 1.4 0 0 0-.966.347c-.27.22-.49.55-.65.976-.158.425-.237.944-.237 1.574s.08 1.133.238 1.574c.158.425.396.755.68.975.302.22.65.331 1.03.331s.586-.047.808-.126c.222-.094.443-.236.65-.41v-1.006l-1.189.063.064-1.748h3.215v3.29c-.38.52-.887.929-1.505 1.228-.602.299-1.346.44-2.233.44zm5.116-.142v-8.908h6.651v1.73h-4.53v1.732h2.915v1.732h-2.914v2.014h4.577v1.731h-6.7zM61.844 13.803c-1.172 0-2.217-.267-3.104-.818s-1.568-1.354-2.075-2.377c-.49-1.023-.728-2.25-.728-3.683s.237-2.66.728-3.698c.491-1.023 1.188-1.81 2.075-2.361s1.932-.819 3.104-.819 2.201.268 3.088.819q1.33.826 2.043 2.36c.491 1.024.744 2.251.744 3.7 0 1.447-.253 2.644-.744 3.682-.49 1.023-1.172 1.826-2.043 2.377-.887.55-1.916.818-3.088.818m0-2.565c.49 0 .95-.157 1.346-.488.396-.346.713-.834.934-1.464.238-.645.349-1.432.349-2.345s-.111-1.7-.349-2.345c-.237-.645-.538-1.133-.934-1.464a2.03 2.03 0 0 0-1.346-.488c-.507 0-.95.173-1.362.52-.396.33-.713.818-.934 1.463-.238.63-.349 1.417-.349 2.33s.11 1.7.349 2.345c.237.63.538 1.117.934 1.464a2.1 2.1 0 0 0 1.362.488zm9.629-1.842V6.831h3.04c.618 0 1.11-.189 1.473-.551.365-.378.555-.881.555-1.48 0-.598-.19-1.054-.555-1.416-.364-.362-.855-.535-1.472-.535h-3.041V.283h3.072c1.061 0 1.98.19 2.772.551s1.41.897 1.837 1.574.65 1.464.65 2.377-.223 1.747-.65 2.44-1.045 1.211-1.837 1.605c-.776.378-1.71.566-2.772.566zm-2.265 4.171V.283h3.168v13.3h-3.168zm12.131 0V.283h9.914V2.85h-6.746v2.565h4.355V7.98h-4.355v3.006h6.826v2.566h-9.978zm12.052 0V.283h4.023l3.738 9.412-.206-4.832V.283h2.977v13.3H99.9l-3.769-9.239.254 4.659v4.564H93.39M59.373 25.67c-.728 0-1.346-.14-1.868-.408-.523-.284-.919-.661-1.188-1.165-.27-.504-.412-1.102-.412-1.779h2.059c0 .535.11.929.348 1.228.238.283.602.41 1.077.41s.681-.08.903-.237a.86.86 0 0 0 .348-.708c0-.3-.079-.41-.253-.535-.158-.142-.38-.236-.665-.33a9 9 0 0 0-.903-.253c-.317-.078-.65-.189-.982-.299a3.5 3.5 0 0 1-.903-.472q-.403-.283-.665-.755-.237-.473-.237-1.18c0-.473.142-.945.412-1.339a3 3 0 0 1 1.156-.944c.49-.236 1.06-.346 1.726-.346s1.156.11 1.679.346c.522.22.934.55 1.25.992.317.44.492.976.508 1.605h-2.091a1.4 1.4 0 0 0-.222-.708 1.03 1.03 0 0 0-.49-.41 1.4 1.4 0 0 0-.618-.141c-.317 0-.586.079-.792.22-.222.142-.333.362-.333.646 0 .283.08.393.238.519.174.126.396.236.665.315.285.078.586.157.903.22.332.079.649.173.982.283q.498.165.902.473c.285.204.491.472.666.802.174.33.253.74.253 1.26 0 .519-.143.975-.444 1.369-.285.393-.68.708-1.203.928a4.35 4.35 0 0 1-1.742.347zm8.188 0c-.776 0-1.457-.172-2.059-.534-.586-.362-1.045-.897-1.362-1.574-.316-.677-.475-1.495-.475-2.424s.159-1.763.475-2.44c.333-.677.792-1.196 1.362-1.558.586-.362 1.283-.535 2.06-.535.775 0 1.456.173 2.042.535s1.03.881 1.362 1.558.491 1.48.491 2.44-.158 1.747-.49 2.424c-.318.677-.777 1.212-1.363 1.574s-1.267.535-2.043.535m0-1.699c.333 0 .618-.11.887-.33.27-.22.475-.551.618-.976.158-.425.221-.945.221-1.543s-.079-1.133-.221-1.542c-.159-.425-.365-.756-.618-.976a1.35 1.35 0 0 0-1.79.016c-.269.22-.475.535-.617.976-.159.424-.222.928-.222 1.542s.08 1.117.222 1.542c.158.425.364.74.617.976q.404.33.903.33zm8.235 1.7c-.776 0-1.425-.142-1.963-.41-.539-.283-.95-.66-1.236-1.164-.285-.488-.427-1.07-.427-1.731V16.73h2.09v5.635q0 .495.19.85c.127.236.301.424.539.55.237.126.507.19.823.19.317 0 .602-.064.824-.19.222-.141.412-.314.538-.55q.19-.355.19-.85V16.73h2.09v5.635c0 .66-.142 1.243-.427 1.73a3.04 3.04 0 0 1-1.235 1.166c-.539.267-1.188.409-1.964.409zm6.414-3.431v-1.7h1.996q.38 0 .665-.142a1 1 0 0 0 .444-.393 1.03 1.03 0 0 0 .158-.567.9.9 0 0 0-.159-.535.85.85 0 0 0-.395-.346 1.4 1.4 0 0 0-.586-.126H82.21v-1.7h2.123c.649 0 1.203.11 1.694.33.491.205.887.52 1.172.913.285.41.412.898.412 1.464 0 .567-.08.677-.254 1.023a2.7 2.7 0 0 1-.712.897 3.5 3.5 0 0 1-1.109.646q-.64.236-1.473.236h-1.868zm-1.504 3.29v-8.783h2.09v8.782zm4.814 0c0-.363-.063-.74-.206-1.118a4 4 0 0 0-.601-1.102 4.6 4.6 0 0 0-.95-.96 5 5 0 0 0-1.315-.693l2.312-.472c.491.236.919.535 1.283.866q.546.495.903 1.086c.237.393.427.787.538 1.196.111.41.174.803.174 1.18h-2.153zm6.842.14c-.792 0-1.489-.188-2.059-.55a3.8 3.8 0 0 1-1.346-1.59q-.475-1.038-.475-2.408c0-.913.158-1.731.475-2.408s.776-1.212 1.362-1.574c.586-.378 1.299-.567 2.106-.567.808 0 1.22.126 1.743.363.538.236.965.598 1.298 1.054.349.457.539 1.023.57 1.684h-2.28c-.048-.425-.174-.771-.412-1.023-.222-.267-.538-.393-.934-.393s-.65.11-.919.33c-.27.205-.491.535-.65.96-.158.425-.221.945-.221 1.558s.08 1.134.222 1.559c.158.425.348.74.602.96.269.22.554.33.886.33.333 0 .523-.047.729-.157s.38-.283.507-.504c.142-.22.221-.488.237-.787h2.28a3.6 3.6 0 0 1-.585 1.684 3.2 3.2 0 0 1-1.267 1.102q-.808.378-1.9.378zm4.957-.14v-8.783h6.557v1.7H99.41v1.7h2.882v1.7H99.41v1.982h4.513v1.7zM55.92 50.334l.444-5.839h1.172l.745 3.463.174 1.133.19-1.133.728-3.463h1.157l.443 5.84h-.887l-.19-3.652-.032-1.29-.253 1.29-.808 3.651h-.76l-.792-3.651-.237-1.306-.048 1.306-.19 3.651h-.871zm9.17 0v-5.839h4.213v.756h-3.326v1.684h2.297v.755h-2.297v1.905h3.358v.755h-4.26zm8.188 0 .444-5.839h1.172l.744 3.463.174 1.133.19-1.133.729-3.463h1.156l.443 5.84h-.886l-.19-3.652-.032-1.29-.254 1.29-.807 3.651h-.76l-.792-3.651-.238-1.306-.047 1.306-.19 3.651h-.871zm12.37-3.069q.307.095.57.283c.173.126.3.284.395.473s.159.409.159.676-.08.614-.254.866c-.158.252-.396.44-.697.582s-.665.205-1.077.205h-2.28v-5.84h2.185c.618 0 1.093.143 1.442.41.348.268.522.614.522 1.055s-.031.393-.11.582c-.08.173-.19.33-.333.456q-.214.188-.523.284zm-1.046-2.03H83.35v1.731h1.25c.333 0 .587-.078.777-.236s.3-.378.3-.645c0-.268-.094-.472-.3-.614-.19-.157-.46-.22-.776-.22zm-1.267 4.344h1.362c.348 0 .617-.079.808-.252.206-.173.3-.393.3-.677a.87.87 0 0 0-.316-.692c-.206-.158-.507-.236-.871-.236h-1.283zm7.776.755v-5.839h4.213v.756h-3.326v1.684h2.296v.755h-2.296v1.905h3.357v.755h-4.26zm9.344-2.455v-.755h1.488c.254 0 .46-.032.65-.11a1.1 1.1 0 0 0 .443-.347.89.89 0 0 0 .032-1.007.93.93 0 0 0-.38-.315 1.25 1.25 0 0 0-.554-.11h-1.679v-.756h1.679c.38 0 .728.063 1.029.205q.451.189.713.567c.174.251.253.55.253.897 0 .346-.047.44-.158.645a1.9 1.9 0 0 1-.444.567c-.19.157-.427.299-.697.393a2.8 2.8 0 0 1-.934.142h-1.441zm-.65 2.455v-5.839h.887v5.84zm3.39 0a2.7 2.7 0 0 0-.222-.77 3.3 3.3 0 0 0-.444-.74 3 3 0 0 0-.696-.646 5.4 5.4 0 0 0-.951-.55l.998-.221q.546.283.95.614.404.33.666.708c.174.252.316.504.411.771.095.268.159.535.19.819h-.902zm.934-9.538h-48.05v.535h48.05z"/></g></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h105v50.366H0z"/></clipPath></defs></svg>
</div>
</div>
<div>
<nav role="navigation" aria-labelledby="block-kinetic-footer-menu" id="block-kinetic-footer" class="block block-menu navigation menu--footer">
<span class="visually-hidden" id="block-kinetic-footer-menu">Footer menu</span>
<div class="footer-menu footer-accordion grid grid-cols-1 gap-8 md:gap-x-4 2xl:gap-x-10 xl:gap-y-21 md:grid-cols-4 xl:grid-cols-7">
<div class="ac" data-item="solutions">
<div class="ac-header">
<button class="ac-trigger font-semibold text-[16px] md:mb-8 uppercase text-blue-400 leading-[1.25] inline-block align-top" type="button">Solutions</button>
</div>
<div class="ac-panel flex flex-col gap-4 overflow-hidden md:overflow-visible md:!h-auto">
<div class="" data-item="financial-services">
<a href="/solutions/financial-services" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/261">Financial Services</a>
</div>
<div class="" data-item="insurance">
<a href="/solutions/insurance" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/896">Insurance</a>
</div>
<div class="" data-item="pharma">
<a href="/solutions/pharma" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/906">Pharma</a>
</div>
<div class="" data-item="public-sector">
<a href="/solutions/public-sector" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/901">Public sector</a>
</div>
<div class="" data-item="data-scientists">
<a href="/solutions/data-scientists" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/1161">Data Scientists</a>
</div>
<div class="" data-item="data-science-leaders">
<a href="/solutions/data-science-leaders" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/1166">Data Science Leaders</a>
</div>
<div class="" data-item="it-leaders">
<a href="/solutions/it-leaders" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/1171">IT Leaders</a>
</div>
<div class="" data-item="business-leaders">
<a href="/solutions/business-leaders" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/716">Business Leaders</a>
</div>
<div class="" data-item="posit-academy">
<a href="http://academy.posit.co/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Posit Academy</a>
</div>
<div class="" data-item="view-all">
<a href="/solutions" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/271">View all</a>
</div>
</div>
</div>
<div class="ac" data-item="products">
<div class="ac-header">
<button class="ac-trigger font-semibold text-[16px] md:mb-8 uppercase text-blue-400 leading-[1.25] inline-block align-top" type="button">Products</button>
</div>
<div class="ac-panel flex flex-col gap-4 overflow-hidden md:overflow-visible md:!h-auto">
<div class="" data-item="posit-workbench">
<a href="/products/enterprise/workbench" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/156">Posit Workbench</a>
</div>
<div class="" data-item="posit-connect">
<a href="/products/enterprise/connect" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/161">Posit Connect</a>
</div>
<div class="" data-item="posit-package-manager">
<a href="/products/enterprise/package-manager" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/166">Posit Package Manager</a>
</div>
<div class="" data-item="posit-cloud">
<a href="/products/enterprise/cloud" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/191">Posit Cloud</a>
</div>
<div class="" data-item="posit-connect-cloud">
<a href="/products/enterprise/connect-cloud" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/1006">Posit Connect Cloud</a>
</div>
<div class="" data-item="public-package-manager">
<a href="/products/enterprise/public-package-manager" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/1026">Public Package Manager</a>
</div>
<div class="" data-item="posit-ai-for-rstudio">
<a href="/products/ai" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/216">Posit AI for RStudio</a>
</div>
<div class="" data-item="get-pricing">
<a href="/pricing" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/1046">Get pricing</a>
</div>
</div>
</div>
<div class="ac" data-item="open-source">
<div class="ac-header">
<button class="ac-trigger font-semibold text-[16px] md:mb-8 uppercase text-blue-400 leading-[1.25] inline-block align-top" type="button">Open Source</button>
</div>
<div class="ac-panel flex flex-col gap-4 overflow-hidden md:overflow-visible md:!h-auto">
<div class="" data-item="positron">
<a href="/products/ide/positron" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/151">Positron</a>
</div>
<div class="" data-item="rstudio-ide">
<a href="/products/open-source/rstudio" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/696">RStudio IDE</a>
</div>
<div class="" data-item="rstudio-server">
<a href="/products/open-source/rstudio-server" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/1036">RStudio Server</a>
</div>
<div class="" data-item="r">
<a href="https://opensource.posit.co/about/r/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">R</a>
</div>
<div class="" data-item="python">
<a href="https://opensource.posit.co/about/python/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Python</a>
</div>
<div class="" data-item="ai">
<a href="https://opensource.posit.co/about/ai/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">AI</a>
</div>
<div class="" data-item="open-source-software">
<a href="https://opensource.posit.co/software/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Open Source Software</a>
</div>
<div class="" data-item="people">
<a href="https://opensource.posit.co/people/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">People</a>
</div>
<div class="" data-item="open-source-events">
<a href="https://opensource.posit.co/events/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Open Source events</a>
</div>
<div class="" data-item="cheatsheets">
<a href="https://opensource.posit.co/resources/cheatsheets/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Cheatsheets</a>
</div>
<div class="" data-item="open-source-videos">
<a href="https://opensource.posit.co/resources/videos/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Open Source videos</a>
</div>
<div class="" data-item="open-source-blog">
<a href="https://opensource.posit.co/blog/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Open Source blog</a>
</div>
</div>
</div>
<div class="ac" data-item="customers">
<div class="ac-header">
<button class="ac-trigger font-semibold text-[16px] md:mb-8 uppercase text-blue-400 leading-[1.25] inline-block align-top" type="button">Customers</button>
</div>
<div class="ac-panel flex flex-col gap-4 overflow-hidden md:overflow-visible md:!h-auto">
<div class="" data-item="financial-services">
<a href="/about/customer-stories?field_industries%5B31%5D=31&search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{"field_industries":{"31":"31"},"search_api_fulltext":""}" data-drupal-link-system-path="node/661">Financial Services</a>
</div>
<div class="" data-item="insurance">
<a href="/about/customer-stories?field_industries%5B46%5D=46&search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{"field_industries":{"46":"46"},"search_api_fulltext":""}" data-drupal-link-system-path="node/661">Insurance</a>
</div>
<div class="" data-item="pharma">
<a href="/about/customer-stories?field_industries%5B36%5D=36&search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{"field_industries":{"36":"36"},"search_api_fulltext":""}" data-drupal-link-system-path="node/661">Pharma</a>
</div>
<div class="" data-item="public-sector">
<a href="/about/customer-stories?field_industries%5B26%5D=26&search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{"field_industries":{"26":"26"},"search_api_fulltext":""}" data-drupal-link-system-path="node/661">Public sector</a>
</div>
<div class="" data-item="view-all">
<a href="/about/customer-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/661">View all</a>
</div>
</div>
</div>
<div class="ac" data-item="resources">
<div class="ac-header">
<button class="ac-trigger font-semibold text-[16px] md:mb-8 uppercase text-blue-400 leading-[1.25] inline-block align-top" type="button">Resources</button>
</div>
<div class="ac-panel flex flex-col gap-4 overflow-hidden md:overflow-visible md:!h-auto">
<div class="" data-item="blog">
<a href="/blog" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/1176">Blog</a>
</div>
<div class="" data-item="content-library">
<a href="/content-library" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/596">Content library</a>
</div>
<div class="" data-item="demo-gallery">
<a href="/demo-gallery" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/701">Demo gallery</a>
</div>
<div class="" data-item="videos">
<a href="/videos" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/606">Videos</a>
</div>
<div class="" data-item="events">
<a href="/events" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/601">Events</a>
</div>
<div class="" data-item="data-science-hangouts">
<a href="/data-science-hangout" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/611">Data Science Hangouts</a>
</div>
<div class="" data-item="the-test-set-podcast">
<a href="/thetestset" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/46">The Test Set: Podcast</a>
</div>
<div class="" data-item="positconf">
<a href="https://conf.posit.co/2026" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">posit::conf</a>
</div>
<div class="" data-item="documentation">
<a href="https://docs.posit.co/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Documentation</a>
</div>
<div class="" data-item="enterprise-support">
<a href="/support" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/691">Enterprise support</a>
</div>
<div class="" data-item="community-forum">
<a href="https://forum.posit.co/?_gl=1*1fjw5mc*_ga*MjAzNTYzNjYyLjE3Njk0NTQ1MTU.*_ga_2C0WZ1JHG0*czE3NzIyMjUwMzUkbzk0JGcxJHQxNzcyMjI3NjAxJGo2MCRsMCRoMA.." target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Community forum</a>
</div>
<div class="" data-item="knowledge-base">
<a href="https://support.posit.co/hc/en-us?_gl=1*1fjw5mc*_ga*MjAzNTYzNjYyLjE3Njk0NTQ1MTU.*_ga_2C0WZ1JHG0*czE3NzIyMjUwMzUkbzk0JGcxJHQxNzcyMjI3NjAxJGo2MCRsMCRoMA.." target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Knowledge base</a>
</div>
</div>
</div>
<div class="ac" data-item="partners">
<div class="ac-header">
<button class="ac-trigger font-semibold text-[16px] md:mb-8 uppercase text-blue-400 leading-[1.25] inline-block align-top" type="button">Partners</button>
</div>
<div class="ac-panel flex flex-col gap-4 overflow-hidden md:overflow-visible md:!h-auto">
<div class="" data-item="partner-program">
<a href="/partners" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/721">Partner Program</a>
</div>
<div class="" data-item="deal-registration">
<a href="https://pages.posit.co/partner-deal-registration.html" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Deal registration</a>
</div>
<div class="" data-item="snowflake">
<a href="/solutions/snowflake" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/706">Snowflake</a>
</div>
<div class="" data-item="databricks">
<a href="/solutions/databricks" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/676">Databricks</a>
</div>
<div class="" data-item="amazon-sagemaker">
<a href="/solutions/aws" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/671">Amazon Sagemaker</a>
</div>
<div class="" data-item="amazon-web-services">
<a href="/solutions/aws" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/671">Amazon Web Services</a>
</div>
<div class="" data-item="microsoft-azure">
<a href="/solutions/azure-ml" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/731">Microsoft Azure</a>
</div>
<div class="" data-item="google-cloud-platform">
<a href="/solutions/google-cloud" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/891">Google Cloud Platform</a>
</div>
</div>
</div>
<div class="ac" data-item="about">
<div class="ac-header">
<button class="ac-trigger font-semibold text-[16px] md:mb-8 uppercase text-blue-400 leading-[1.25] inline-block align-top" type="button">About</button>
</div>
<div class="ac-panel flex flex-col gap-4 overflow-hidden md:overflow-visible md:!h-auto">
<div class="" data-item="company--mission">
<a href="/about" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/646">Company & Mission</a>
</div>
<div class="" data-item="careers">
<a href="/about/careers" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/656">Careers</a>
</div>
<div class="" data-item="pbc-report">
<a href="/about/pbc-report" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/651">PBC Report</a>
</div>
<div class="" data-item="positconf">
<a href="https://conf.posit.co/2026/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">posit::conf</a>
</div>
<div class="" data-item="legal-terms">
<a href="/about/eula" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/746">Legal terms</a>
</div>
<div class="" data-item="stakeholder-policies">
<a href="/policy-center/lobbying-public-policy-engagement-policy" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/15301">Stakeholder Policies</a>
</div>
<div class="" data-item="trust-center">
<a href="https://trust.posit.co/" target="_blank" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top">Trust Center</a>
</div>
</div>
</div>
<div class="" data-item="contact-us">
<div class="ac-header">
<button class="ac-trigger font-semibold text-[16px] md:mb-8 uppercase text-blue-400 leading-[1.25] inline-block align-top" type="button">Contact Us</button>
</div>
<div class="flex gap-5 md:flex-col md:gap-6">
<div class="contacts flex flex-col gap-4 md:gap-6">
<div class="site_setting_entity">
<p class="address" translate="no"><span class="address-line1">250 Northern Ave</span><br>
<span class="address-line2">Suite 420</span><br>
<span class="locality">Boston</span>, <span class="administrative-area">MA</span> <span class="postal-code">02210</span><br>
<span class="country">United States</span></p>
</div>
<div class="site_setting_entity">
<a href="tel:844.448.1212">844.448.1212</a>
</div>
</div>
<div class="ac-panel flex flex-col gap-4 overflow-hidden md:overflow-visible md:!h-auto">
<div class="" data-item="contact-us">
<a href="/about/contact" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-system-path="node/321">Contact Us</a>
</div>
</div>
</div>
</div>
</div>
</nav>
</div>
</div>
<hr class="border-blue-50">
<div class="pt-8 flex flex-col gap-8 md:flex-row md:items-center md:justify-between">
<div class="utility">
<div class="copyright text-[14px] md:text-[16px] mb-5">
© 2026 Posit Software, PBC formerly RStudio, PBC
</div>
<nav role="navigation" aria-labelledby="block-kinetic-footerutility-menu" id="block-kinetic-footerutility" class="block block-menu navigation menu--footer-utility">
<span class="visually-hidden" id="block-kinetic-footerutility-menu">Footer Utility</span>
<ul class="menu">
<li class="menu-item">
<a href="/about/posit-service-terms-of-use" data-drupal-link-system-path="node/816">Terms & Conditions</a>
</li>
<li class="menu-item">
<a href="/about/privacy-policy" data-drupal-link-system-path="node/791">Privacy Policy</a>
</li>
</ul>
</nav>
</div>
<nav role="navigation" aria-labelledby="block-kinetic-social-menu" id="block-kinetic-social" class="block block-menu navigation menu--social">
<span class="visually-hidden" id="block-kinetic-social-menu">Follow Posit on socials</span>
<ul class="menu menu--social">
<li class="menu-item">
<a href="https://www.youtube.com/@PositPBC">Youtube</a>
</li>
<li class="menu-item">
<a href="https://pos.it/facebook">Facebook</a>
</li>
<li class="menu-item">
<a href="https://fosstodon.org/@posit">Mastodon</a>
</li>
<li class="menu-item">
<a href="https://pos.it/instagram">Instagram</a>
</li>
<li class="menu-item">
<a href="https://www.linkedin.com/company/posit-software/">Linkedin</a>
</li>
<li class="menu-item">
<a href="https://bsky.app/profile/posit.co">Bluesky</a>
</li>
</ul>
</nav>
</div>
</div>
</footer>
</div>
</div>
<div id="search-reveal-modal" class="search-reveal__modal" role="dialog" aria-modal="true" aria-label="Search" hidden>
<div class="search-reveal__blur" aria-hidden="true"></div>
<div class="search-reveal__dialog" data-searchstax-page>
<div class="search-reveal__header">
<div class="search-reveal__row">
<a href="/" title="Home" rel="home" class="search-reveal__branding d-none md:block">
<svg xmlns="http://www.w3.org/2000/svg" width="173" height="47" viewbox="0 0 173 47" fill="#fff" aria-hidden="true">
<path d="M95.3059 11.4601C103.091 11.4601 108.58 16.7509 108.58 24.0999C108.58 31.4488 103.093 36.6944 95.3059 36.6944C87.5184 36.6944 82.1248 31.4036 82.1248 24.0999C82.1248 16.7961 87.5184 11.4601 95.3059 11.4601ZM95.3059 30.3746C99.0124 30.3746 101.545 28.0328 101.545 24.0999C101.545 20.1669 98.7307 17.78 95.3059 17.78C91.8811 17.78 89.1604 20.074 89.1604 24.0999C89.1604 27.6589 91.6473 30.3746 95.3059 30.3746Z"/>
<path d="M138.498 1.50592C140.703 1.50592 142.298 3.08212 142.298 5.16281C142.298 7.34892 140.703 8.92261 138.498 8.92261C136.107 8.92261 134.651 7.34892 134.651 5.16281C134.651 2.97671 136.245 1.50592 138.498 1.50592ZM135.073 11.9194H141.875V36.2652H135.073V11.9194Z"/>
<path d="M144.945 11.9194H149.59V6.25462H156.391V11.9194H163.741V18.2393H156.391V26.1504C156.391 29.0995 157.048 30.224 158.878 30.224C160.473 30.224 161.74 29.6618 163.052 28.6327L166.518 32.9196C164.828 34.6991 161.551 36.5438 158.222 36.5438C153.11 36.5438 149.592 33.7805 149.592 28.1634V18.2368H144.948V11.9169L144.945 11.9194Z"/>
<path d="M131.553 14.8961C129.886 13.2998 126.428 11.2367 121.517 11.2367C114.524 11.2367 110.411 14.1231 110.411 18.8567C110.411 26.2031 122.133 26.3813 124.902 28.0027C125.402 28.2813 125.699 28.6703 125.52 29.2351C125 30.864 118.429 31.6596 113.584 26.9837L109.631 31.6872C111.391 34.0139 115.274 36.7446 121.573 36.7446C127.424 36.7446 132.483 34.3778 132.483 28.9841C132.483 24.1475 127.97 22.2024 123.956 21.0629C122.815 20.7492 121.711 20.4907 120.755 20.2346C119.174 19.8306 117.054 19.3763 117.393 18.1966C118.01 16.0532 125.063 17.396 127.53 19.6498L131.56 14.8986L131.553 14.8961Z"/>
<path d="M55.644 11.9771H62.4559V13.2446C63.7232 12.0725 66.0266 11.4626 67.9074 11.4626C75.3303 11.4626 79.937 16.5752 79.937 23.7987C79.937 31.0221 75.1443 36.7421 67.7188 36.7421C65.3703 36.7421 63.2078 36.3682 62.4559 35.5223V45.7476H55.644V11.9771ZM62.4559 20.5584V28.3441C63.2078 29.4685 64.8523 30.4072 66.7784 30.4072C70.5854 30.4072 72.8862 28.0153 72.8862 24.3107C72.8862 19.9962 70.7262 17.7925 67.1531 17.7925C64.8975 17.7925 63.3486 18.917 62.4559 20.5584Z"/>
<path d="M9.89983 19.1931L11.914 18.297L21.0216 14.2461L23.0081 13.3626L45.0103 3.57156V15.3805L36.1139 19.1931L34.1022 18.297L43.4035 14.3088V6.05885L24.9946 14.2461L23.0081 15.1321L13.9382 19.1654L11.9265 20.0615L5.50945 22.9152V25.0335L11.8285 27.8471L13.8401 28.7431L23.1489 32.8819L25.1253 33.7604L43.4035 41.8924V33.5546L34.2003 29.6116L36.2144 28.7155L45.0103 32.4854V44.3772L23.1565 34.6539L21.1825 33.7755L11.8159 29.6116L9.80176 28.7155L3.90015 26.0877V21.8636L9.89983 19.1931Z"/>
<path d="M25.0573 23.9317L34.0895 20.0615L32.0754 19.1654L20.9536 23.9317L32.1735 28.7431L34.1851 27.8471L25.0573 23.9317Z"/>
<path d="M11.8284 27.8471L13.84 28.7431L23.008 24.8127L20.9561 23.9317L11.8284 27.8471Z"/>
<path d="M13.9381 19.1654L11.9265 20.0615L20.9562 23.9317L23.0081 23.0532L13.9381 19.1654Z"/>
<path d="M36.1138 19.1931L34.1022 18.297L24.9945 14.2461L23.008 13.3626L1.00586 3.57156V15.3805L9.89977 19.1931L11.9139 18.297L2.61265 14.3088V6.05885L21.0216 14.2461L23.008 15.1321L32.078 19.1654L34.0896 20.0615L40.5067 22.9152V25.0335L34.1877 27.8471L32.176 28.7431L22.8672 32.8819L20.8908 33.7604L2.61265 41.8924V33.5546L11.8158 29.6116L9.8017 28.7155L1.00586 32.4854V44.3772L22.8597 34.6539L24.8336 33.7755L34.2002 29.6116L36.2144 28.7155L42.116 26.0877V21.8636L36.1138 19.1931Z"/>
<path d="M171.149 14.0202C171.149 15.2375 170.191 16.1912 168.947 16.1912C167.702 16.1912 166.731 15.235 166.731 14.0202C166.731 12.8054 167.714 11.8742 168.947 11.8742C170.179 11.8742 171.149 12.8305 171.149 14.0202ZM167.282 14.0202C167.282 14.9764 167.988 15.7344 168.959 15.7344C169.93 15.7344 170.599 14.9764 170.599 14.0327C170.599 13.089 169.905 12.3059 168.947 12.3059C167.988 12.3059 167.282 13.079 167.282 14.0202ZM168.607 15.1446H168.109V12.9987C168.305 12.9585 168.582 12.9334 168.934 12.9334C169.341 12.9334 169.525 12.9987 169.681 13.0915C169.799 13.1819 169.889 13.3526 169.889 13.5634C169.889 13.7993 169.706 13.9825 169.444 14.0603V14.0854C169.653 14.1632 169.771 14.3214 169.837 14.6075C169.902 14.9338 169.942 15.0643 169.995 15.1446H169.457C169.392 15.0668 169.351 14.871 169.286 14.6226C169.246 14.3866 169.115 14.2812 168.841 14.2812H168.605V15.1446H168.607ZM168.62 13.9273H168.856C169.13 13.9273 169.354 13.837 169.354 13.6136C169.354 13.4178 169.211 13.2873 168.896 13.2873C168.765 13.2873 168.672 13.2998 168.622 13.3124V13.9273H168.62Z"/>
</svg>
</a>
<div id="searchstax-modal-input" class="search-reveal__input-wrap"></div>
<button type="button" class="search-reveal__close" aria-label="Close Search">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
</button>
</div>
</div>
<div class="search-reveal__body">
<div class="mx-auto w-full max-w-[1248px] px-4 md:px-8">
<div class="mt-8 grid grid-cols-1 gap-8 lg:grid-cols-[280px_minmax(0,1fr)] lg:gap-12">
<aside id="searchstax-modal-facets" class="search-reveal__facets order-2 lg:order-1">
<div class="sticky top-28">
<div id="searchstax-facets-container"></div>
</div>
</aside>
<section class="search-reveal__main order-1 min-w-0 space-y-6 lg:order-2">
<div id="searchstax-modal-feedback" class="search-reveal__feedback"></div>
<div id="searchstax-modal-external-promotions-layout-container"></div>
<div id="searchstax-modal-results" class="search-reveal__results-list"></div>
<div id="searchstax-modal-pagination" class="search-reveal__results-pagination"></div>
</section>
</div>
</div>
</div>
<div class="search-reveal__footer">
<a href="https://status.rstudio.com" target="_blank" rel="noopener noreferrer">Status</a>
<a href="https://dailies.rstudio.com" target="_blank" rel="noopener noreferrer">Daily Builds</a>
</div>
</div>
<button type="button" class="search-reveal__mobile-filter" aria-label="Open filters">
Filters
</button>
</div>
<script type="application/json" data-drupal-selector="drupal-settings-json">{"path":{"baseUrl":"\/","pathPrefix":"","currentPath":"node\/7591","currentPathIsAdmin":false,"isFront":false,"currentLanguage":"en"},"pluralDelimiter":"\u0003","suppressDeprecationErrors":true,"ajaxPageState":{"libraries":"eJyFUUFywyAM_BCEQx7EyKA4qkFykZzGeX2d2slMZ2r3AtJqxa4Q5GwCPAfYgtOlCZtL0jAkqaMwsulpIEaj5H0HuceDcpF-v5pr51mMLpTASFj3qRcRw7Zf7wvlAx9XhHzUXpEnb436_og1YlNhj3dDzpj_JSrVsRy4UkkExRfi4WB0Q9CXK5ZWodADXSatpEpdwVhRFXqMHbSwgzs8xwptQJOAZ7-Fvk6crouS29RCt2i9k-1-59t76go85vA83KgWMxgUmHERf0Xuc6I0PAcL7-gvLBKTOUVo6aoG95gmNalxRQLxsnRevmjNlw1BWsz0-x0bseENoTid1bCuQ90IvzT8nCf4gPsvoEqeCn4Dk34onA","theme":"kinetic","theme_token":null},"ajaxTrustedUrl":[],"marketoForms":{"munchkinId":"709-NXN-706"},"lazy":{"lazysizes":{"lazyClass":"lazyload","loadedClass":"lazyloaded","loadingClass":"lazyloading","preloadClass":"lazypreload","errorClass":"lazyerror","autosizesClass":"lazyautosizes","srcAttr":"data-src","srcsetAttr":"data-srcset","sizesAttr":"data-sizes","minSize":40,"customMedia":[],"init":true,"expFactor":1.5,"hFac":0.80000000000000004,"loadMode":2,"loadHidden":true,"ricTimeout":0,"throttleDelay":125,"plugins":[]},"placeholderSrc":"","preferNative":false,"minified":true,"libraryPath":"\/libraries\/lazysizes"},"pstDatalayer":{"events":{"resource_download":"[pst-datalayer-event=\u0027resource_download\u0027]","cta_click":"[pst-datalayer-event=\u0027cta_click\u0027]","product_feature_click":"[pst-datalayer-event=\u0027product_feature_click\u0027]","code_copy":"[pst-datalayer-event=\u0027code_copy\u0027]"},"node":{"type":"blog","title":"Shiny Server (Pro) 1.5.4","tags":[]}},"searchstaxCustomSearch":{"searchUrl":"https:\/\/searchcloud-15-us-east-1.searchstax.com\/29847\/positwebprod-6523\/emselect","suggestUrl":"https:\/\/searchcloud-15-us-east-1.searchstax.com\/29847\/positwebprod-6523_suggester\/emsuggest","language":"en","trackApiKey":"4Nt0lzunaZqvyvgKcDs8LTJk1EmLnSJS4mHOXcr8fKA","analyticsBaseUrl":"https:\/\/analytics-us.searchstax.com","searchAuth":"c97c83d4408a086267ce4703b8c4a01318d96fbf","authType":"token","facets":[{"label":"Source","candidates":["source","ss_source"]},{"label":"Content Type","candidates":["content_type","ss_type"]},{"label":"Product","candidates":["product","ss_product"]},{"label":"Industry","candidates":["industry","ss_industry"]}]},"views":{"ajax_path":"\/views\/ajax","ajaxViews":{"views_dom_id:fcf5aa86ed6be961b12702902bf9c5b22bcdb5cef14a383c04e39114906fa052":{"view_name":"blogs","view_display_id":"related_blogs","view_args":"86\/7591","view_path":"\/node\/7591","view_base_path":null,"view_dom_id":"fcf5aa86ed6be961b12702902bf9c5b22bcdb5cef14a383c04e39114906fa052","pager_element":0}}},"dmbNotificationEntities":[{"content":"\n\n\n\n\n\u003Cdiv class=\u0022dmb-notification glide__slide flex justify-center items-center relative\u0022 dmb-notification-id=\u002266\u0022 dmb-cookie-expiration=\u0022365\u0022 dmb-auto-dismiss=\u00220\u0022 dmb-dismiss-time=\u002215\u0022 data-component-id=\u0022kinetic:dmb-notification\u0022\u003E\n \u003Cdiv class=\u0022dmb-notification-content min-h-[var(--dmb-height)] flex flex-row gap-[12px] xl:gap-[18px] justify-center items-center pl-[18px] pr-[52px] xl:px-42 py-2 [\u0026amp;_p]:text-white [\u0026amp;_.btn-primary]:btn-blue xl:text-center\u0022\u003E \n\n \u003Cdiv class=\u0022text-formatted\u0022\u003E\n \u003Cp\u003EIntroducing Posit Academy, our new home for hands-on learning is here.\u003C\/p\u003E\n \u003C\/div\u003E\n\n\n \n \n\n \n \n \n\n\n \u003Ca data-component-id=\u0022kinetic:button\u0022 data-component-variant=\u0022btn-primary\u0022 pst-datalayer-event=\u0022cta_click\u0022 target=\u0022_blank\u0022 aria-label=\u0022Opens in new tab\u0022 href=\u0022https:\/\/academy.posit.co\/\u0022 class=\u0022btn-primary [\u0026amp;_img]:h-8\u0022\u003ECheck It Out\u003C\/a\u003E\n\n\n \u003C\/div\u003E\n \n \u003Ca href=\u0022#\u0022 class=\u0022close-dmb-notification absolute top-[50%] right-3 translate-y-[-50%] after:icon-close\/[24px] after:bg-white after:block\u0022 aria-label=\u0022Close notification\u0022\u003E\u003C\/a\u003E\n\u003C\/div\u003E\n\n","startTime":"2026-07-13T13:00:00+00:00","endTime":"2026-09-30T13:00:00+00:00","contentTypes":[],"sitewide":"0","pathLimit":["\/","\/content-library","\/demo-gallery","\/blog","\/videos","\/data-science-leaders","\/data-scientists","\/announcing-expanded-posit-academy","\/products\/enterprise\/academy"],"excluded":[],"id":"66"},{"content":"\n\n\n\n\n\u003Cdiv class=\u0022dmb-notification glide__slide flex justify-center items-center relative\u0022 dmb-notification-id=\u002256\u0022 dmb-cookie-expiration=\u0022365\u0022 dmb-auto-dismiss=\u00220\u0022 dmb-dismiss-time=\u002215\u0022 data-component-id=\u0022kinetic:dmb-notification\u0022\u003E\n \u003Cdiv class=\u0022dmb-notification-content min-h-[var(--dmb-height)] flex flex-row gap-[12px] xl:gap-[18px] justify-center items-center pl-[18px] pr-[52px] xl:px-42 py-2 [\u0026amp;_p]:text-white [\u0026amp;_.btn-primary]:btn-blue xl:text-center\u0022\u003E \n\n \u003Cdiv class=\u0022text-formatted\u0022\u003E\n \u003Cp\u003EAI in RStudio is here.\u0026nbsp;\u003C\/p\u003E\n \u003C\/div\u003E\n\n\n \n \n\n \n \n \n\n\n \u003Ca data-component-id=\u0022kinetic:button\u0022 data-component-variant=\u0022btn-primary\u0022 pst-datalayer-event=\u0022cta_click\u0022 href=\u0022\/blog\/introducing-ai-in-rstudio\u0022 class=\u0022btn-primary [\u0026amp;_img]:h-8\u0022\u003ERead the announcement\u003C\/a\u003E\n\n\n \u003C\/div\u003E\n \n \u003Ca href=\u0022#\u0022 class=\u0022close-dmb-notification absolute top-[50%] right-3 translate-y-[-50%] after:icon-close\/[24px] after:bg-white after:block\u0022 aria-label=\u0022Close notification\u0022\u003E\u003C\/a\u003E\n\u003C\/div\u003E\n\n","startTime":"","endTime":"","contentTypes":[],"sitewide":"0","pathLimit":["\/products\/open-source\/rstudio","\/products\/open-source\/rstudio-server","\/download\/rstudio-server","\/download\/rstudio-desktop"],"excluded":[],"id":"56"},{"content":"\n\n\n\n\n\u003Cdiv class=\u0022dmb-notification glide__slide flex justify-center items-center relative\u0022 dmb-notification-id=\u002251\u0022 dmb-cookie-expiration=\u0022365\u0022 dmb-auto-dismiss=\u00220\u0022 dmb-dismiss-time=\u002215\u0022 data-component-id=\u0022kinetic:dmb-notification\u0022\u003E\n \u003Cdiv class=\u0022dmb-notification-content min-h-[var(--dmb-height)] flex flex-row gap-[12px] xl:gap-[18px] justify-center items-center pl-[18px] pr-[52px] xl:px-42 py-2 [\u0026amp;_p]:text-white [\u0026amp;_.btn-primary]:btn-blue xl:text-center\u0022\u003E \n\n \u003Cdiv class=\u0022text-formatted\u0022\u003E\n \u003Cp\u003EAnalyst Report: A blueprint for modern data science in highly regulated industries\u003C\/p\u003E\n \u003C\/div\u003E\n\n\n \n \n\n \n \n \n\n\n \u003Ca data-component-id=\u0022kinetic:button\u0022 data-component-variant=\u0022btn-primary\u0022 pst-datalayer-event=\u0022cta_click\u0022 href=\u0022\/about\/analyst-reports\/a-blueprint-for-modern-data-science\u0022 class=\u0022btn-primary [\u0026amp;_img]:h-8\u0022\u003ERead more\u003C\/a\u003E\n\n\n \u003C\/div\u003E\n \n \u003Ca href=\u0022#\u0022 class=\u0022close-dmb-notification absolute top-[50%] right-3 translate-y-[-50%] after:icon-close\/[24px] after:bg-white after:block\u0022 aria-label=\u0022Close notification\u0022\u003E\u003C\/a\u003E\n\u003C\/div\u003E\n\n","startTime":"","endTime":"","contentTypes":[],"sitewide":"0","pathLimit":["\/solutions\/banking"],"excluded":[],"id":"51"},{"content":"\n\n\n\n\n\u003Cdiv class=\u0022dmb-notification glide__slide flex justify-center items-center relative\u0022 dmb-notification-id=\u002246\u0022 dmb-cookie-expiration=\u0022365\u0022 dmb-auto-dismiss=\u00220\u0022 dmb-dismiss-time=\u002215\u0022 data-component-id=\u0022kinetic:dmb-notification\u0022\u003E\n \u003Cdiv class=\u0022dmb-notification-content min-h-[var(--dmb-height)] flex flex-row gap-[12px] xl:gap-[18px] justify-center items-center pl-[18px] pr-[52px] xl:px-42 py-2 [\u0026amp;_p]:text-white [\u0026amp;_.btn-primary]:btn-blue xl:text-center\u0022\u003E \n\n \u003Cdiv class=\u0022text-formatted\u0022\u003E\n \u003Cp\u003EOn-Demand Webinar: How Data Science is Revolutionizing Insurance\u003C\/p\u003E\n \u003C\/div\u003E\n\n\n \n \n\n \n \n \n\n\n \u003Ca data-component-id=\u0022kinetic:button\u0022 data-component-variant=\u0022btn-primary\u0022 pst-datalayer-event=\u0022cta_click\u0022 href=\u0022\/webinar\/how-data-science-is-revolutionizing-insurance\u0022 class=\u0022btn-primary [\u0026amp;_img]:h-8\u0022\u003EWatch now\u003C\/a\u003E\n\n\n \u003C\/div\u003E\n \n \u003Ca href=\u0022#\u0022 class=\u0022close-dmb-notification absolute top-[50%] right-3 translate-y-[-50%] after:icon-close\/[24px] after:bg-white after:block\u0022 aria-label=\u0022Close notification\u0022\u003E\u003C\/a\u003E\n\u003C\/div\u003E\n\n","startTime":"","endTime":"","contentTypes":[],"sitewide":"0","pathLimit":["\/use-cases\/insurance"],"excluded":[],"id":"46"},{"content":"\n\n\n\n\n\u003Cdiv class=\u0022dmb-notification glide__slide flex justify-center items-center relative\u0022 dmb-notification-id=\u002241\u0022 dmb-cookie-expiration=\u0022365\u0022 dmb-auto-dismiss=\u00220\u0022 dmb-dismiss-time=\u002215\u0022 data-component-id=\u0022kinetic:dmb-notification\u0022\u003E\n \u003Cdiv class=\u0022dmb-notification-content min-h-[var(--dmb-height)] flex flex-row gap-[12px] xl:gap-[18px] justify-center items-center pl-[18px] pr-[52px] xl:px-42 py-2 [\u0026amp;_p]:text-white [\u0026amp;_.btn-primary]:btn-blue xl:text-center\u0022\u003E \n\n \u003Cdiv class=\u0022text-formatted\u0022\u003E\n \u003Cp\u003EEBOOK: The Enterprise Guide to Scaling AI-powered Data Science with Posit + Snowflake\u003C\/p\u003E\n \u003C\/div\u003E\n\n\n \n \n\n \n \n \n\n\n \u003Ca data-component-id=\u0022kinetic:button\u0022 data-component-variant=\u0022btn-primary\u0022 pst-datalayer-event=\u0022cta_click\u0022 href=\u0022\/ebook\/the-enterprise-guide-to-scaling-ai-powered-data-science-with-posit-snowflake\u0022 class=\u0022btn-primary [\u0026amp;_img]:h-8\u0022\u003EGet the guide\u003C\/a\u003E\n\n\n \u003C\/div\u003E\n \n \u003Ca href=\u0022#\u0022 class=\u0022close-dmb-notification absolute top-[50%] right-3 translate-y-[-50%] after:icon-close\/[24px] after:bg-white after:block\u0022 aria-label=\u0022Close notification\u0022\u003E\u003C\/a\u003E\n\u003C\/div\u003E\n\n","startTime":"","endTime":"","contentTypes":[],"sitewide":"0","pathLimit":["\/use-cases\/snowflake"],"excluded":[],"id":"41"},{"content":"\n\n\n\n\n\u003Cdiv class=\u0022dmb-notification glide__slide flex justify-center items-center relative\u0022 dmb-notification-id=\u002236\u0022 dmb-cookie-expiration=\u0022365\u0022 dmb-auto-dismiss=\u00220\u0022 dmb-dismiss-time=\u002215\u0022 data-component-id=\u0022kinetic:dmb-notification\u0022\u003E\n \u003Cdiv class=\u0022dmb-notification-content min-h-[var(--dmb-height)] flex flex-row gap-[12px] xl:gap-[18px] justify-center items-center pl-[18px] pr-[52px] xl:px-42 py-2 [\u0026amp;_p]:text-white [\u0026amp;_.btn-primary]:btn-blue xl:text-center\u0022\u003E \n\n \u003Cdiv class=\u0022text-formatted\u0022\u003E\n \u003Cp\u003EEBOOK: Accelerate Compliant Clinical Trial Reporting with Open Source\u003C\/p\u003E\n \u003C\/div\u003E\n\n\n \n \n\n \n \n \n\n\n \u003Ca data-component-id=\u0022kinetic:button\u0022 data-component-variant=\u0022btn-primary\u0022 pst-datalayer-event=\u0022cta_click\u0022 href=\u0022\/ebook\/the-open-source-clinical-trial-reporting-playbook\u0022 class=\u0022btn-primary [\u0026amp;_img]:h-8\u0022\u003EGet the guide\u003C\/a\u003E\n\n\n \u003C\/div\u003E\n \n \u003Ca href=\u0022#\u0022 class=\u0022close-dmb-notification absolute top-[50%] right-3 translate-y-[-50%] after:icon-close\/[24px] after:bg-white after:block\u0022 aria-label=\u0022Close notification\u0022\u003E\u003C\/a\u003E\n\u003C\/div\u003E\n\n","startTime":"","endTime":"","contentTypes":[],"sitewide":"0","pathLimit":["\/use-cases\/pharma"],"excluded":[],"id":"36"},{"content":"\n\n\n\n\n\u003Cdiv class=\u0022dmb-notification glide__slide flex justify-center items-center relative\u0022 dmb-notification-id=\u002226\u0022 dmb-cookie-expiration=\u0022365\u0022 dmb-auto-dismiss=\u00220\u0022 dmb-dismiss-time=\u002215\u0022 data-component-id=\u0022kinetic:dmb-notification\u0022\u003E\n \u003Cdiv class=\u0022dmb-notification-content min-h-[var(--dmb-height)] flex flex-row gap-[12px] xl:gap-[18px] justify-center items-center pl-[18px] pr-[52px] xl:px-42 py-2 [\u0026amp;_p]:text-white [\u0026amp;_.btn-primary]:btn-blue xl:text-center\u0022\u003E \n\n \u003Cdiv class=\u0022text-formatted\u0022\u003E\n \u003Cp\u003EDigital Insurance Reprint: Building a data science culture that ships models and meets regulatory demands\u003C\/p\u003E\n \u003C\/div\u003E\n\n\n \n \n\n \n \n \n\n\n \u003Ca data-component-id=\u0022kinetic:button\u0022 data-component-variant=\u0022btn-primary\u0022 pst-datalayer-event=\u0022cta_click\u0022 href=\u0022\/ebook\/building-a-data-science-culture-that-ships-models-and-meets-regulatory-demands-reprint\u0022 class=\u0022btn-primary [\u0026amp;_img]:h-8\u0022\u003ERead more\u003C\/a\u003E\n\n\n \u003C\/div\u003E\n \n \u003Ca href=\u0022#\u0022 class=\u0022close-dmb-notification absolute top-[50%] right-3 translate-y-[-50%] after:icon-close\/[24px] after:bg-white after:block\u0022 aria-label=\u0022Close notification\u0022\u003E\u003C\/a\u003E\n\u003C\/div\u003E\n\n","startTime":"","endTime":"","contentTypes":[],"sitewide":"0","pathLimit":["\/use-cases\/insurance"],"excluded":[],"id":"26"},{"content":"\n\n\n\n\n\u003Cdiv class=\u0022dmb-notification glide__slide flex justify-center items-center relative\u0022 dmb-notification-id=\u002221\u0022 dmb-cookie-expiration=\u0022365\u0022 dmb-auto-dismiss=\u00220\u0022 dmb-dismiss-time=\u002215\u0022 data-component-id=\u0022kinetic:dmb-notification\u0022\u003E\n \u003Cdiv class=\u0022dmb-notification-content min-h-[var(--dmb-height)] flex flex-row gap-[12px] xl:gap-[18px] justify-center items-center pl-[18px] pr-[52px] xl:px-42 py-2 [\u0026amp;_p]:text-white [\u0026amp;_.btn-primary]:btn-blue xl:text-center\u0022\u003E \n\n \u003Cdiv class=\u0022text-formatted\u0022\u003E\n \u003Cp\u003EEBOOK: \u003Cspan\u003EThe Enterprise Guide for Data Scientists to Accelerate AI-driven Insights and Enhance Productivity.\u003C\/span\u003E\u003C\/p\u003E\n \u003C\/div\u003E\n\n\n \n \n\n \n \n \n\n\n \u003Ca data-component-id=\u0022kinetic:button\u0022 data-component-variant=\u0022btn-primary\u0022 pst-datalayer-event=\u0022cta_click\u0022 href=\u0022\/ebook\/the-enterprise-guide-to-scaling-ai-powered-data-science-with-posit-snowflake\u0022 class=\u0022btn-primary [\u0026amp;_img]:h-8\u0022\u003EGet the guide\u003C\/a\u003E\n\n\n \u003C\/div\u003E\n \n \u003Ca href=\u0022#\u0022 class=\u0022close-dmb-notification absolute top-[50%] right-3 translate-y-[-50%] after:icon-close\/[24px] after:bg-white after:block\u0022 aria-label=\u0022Close notification\u0022\u003E\u003C\/a\u003E\n\u003C\/div\u003E\n\n","startTime":"","endTime":"","contentTypes":[],"sitewide":"0","pathLimit":["\/use-cases\/databricks"],"excluded":[],"id":"21"},{"content":"\n\n\n\n\n\u003Cdiv class=\u0022dmb-notification glide__slide flex justify-center items-center relative\u0022 dmb-notification-id=\u002216\u0022 dmb-cookie-expiration=\u0022365\u0022 dmb-auto-dismiss=\u00220\u0022 dmb-dismiss-time=\u002215\u0022 data-component-id=\u0022kinetic:dmb-notification\u0022\u003E\n \u003Cdiv class=\u0022dmb-notification-content min-h-[var(--dmb-height)] flex flex-row gap-[12px] xl:gap-[18px] justify-center items-center pl-[18px] pr-[52px] xl:px-42 py-2 [\u0026amp;_p]:text-white [\u0026amp;_.btn-primary]:btn-blue xl:text-center\u0022\u003E \n\n \u003Cdiv class=\u0022text-formatted\u0022\u003E\n \u003Cp\u003Eposit::conf(2026) is coming to Houston, TX! Join us Sept 14\u201316.\u0026nbsp;\u003C\/p\u003E\n \u003C\/div\u003E\n\n\n \n \n\n \n \n \n\n\n \u003Ca data-component-id=\u0022kinetic:button\u0022 data-component-variant=\u0022btn-primary\u0022 pst-datalayer-event=\u0022cta_click\u0022 target=\u0022_blank\u0022 aria-label=\u0022Opens in new tab\u0022 href=\u0022https:\/\/conf.posit.co\/2026\/\u0022 class=\u0022btn-primary [\u0026amp;_img]:h-8\u0022\u003ERSVP Now\u003C\/a\u003E\n\n\n \u003C\/div\u003E\n \n \u003Ca href=\u0022#\u0022 class=\u0022close-dmb-notification absolute top-[50%] right-3 translate-y-[-50%] after:icon-close\/[24px] after:bg-white after:block\u0022 aria-label=\u0022Close notification\u0022\u003E\u003C\/a\u003E\n\u003C\/div\u003E\n\n","startTime":"2026-02-27T19:30:00+00:00","endTime":"2026-09-01T18:02:02+00:00","contentTypes":[],"sitewide":"1","pathLimit":[],"excluded":["\/solutions\/snowflake"],"id":"16"}],"dmbNotifications":{"dmb-notifications-ajax-wrapper":{"notificationWrapper":".dmb-notifications-ajax-wrapper","contentType":"blog","contentPath":"\/blog\/shiny-server-pro-1-5-4","notificationType":""}},"quicklink":{"admin_link_container_patterns":["#block-local-tasks-block a",".block-local-tasks-block a","#drupal-off-canvas a","#toolbar-administration a"],"ignore_admin_paths":true,"ignore_ajax_links":true,"ignore_file_ext":true,"total_request_limit":0,"concurrency_throttle_limit":0,"idle_wait_timeout":2000,"viewport_delay":0,"debug":false,"url_patterns_to_ignore":["user\/logout","#","\/admin","\/edit"]},"user":{"uid":0,"permissionsHash":"ef6b7bff0127ee27dc6103a2244e9436a0fef3f789573cfd9dea71b44f83eadc"}}</script>
<script src="https://unpkg.com/quicklink@2.3.0/dist/quicklink.umd.js"></script>
<script src="/core/assets/vendor/jquery/jquery.min.js?v=4.0.0"></script>
<script src="/sites/default/files/js/js_IiYV1biOIWp9MrKU0pupW6iyiKTjhUjA8KcwxvVQ9ww.js?scope=footer&delta=2&language=en&theme=kinetic&include=eJx9UEt2wzAIvJBkLXIgPSxhm1qCVOA0zumrNk5WdTcwDMMXcjYB3gMcYJiasLkkDUOSehVGNh1WYjRK3uc6ehajiRIYCeu5dBIxbOf5uVDG8_SCkP8rr8ibt0bz3FWZtJIqjQVjRVWYMY7Qwgnv8BIrtBVNAl78AX3dOC19gDuGhMO7Ao89_Bh3VYsZDArs2Nu_kPvcKK2FeA1v9BcXicmcIrS0qME9pk1Nanwygbh_jKH4Z9zPg9R3mM8rDmHDG0JxN8IvDb92gA-4fwPuhbqe"></script>
<script src="https://static.addtoany.com/menu/page.js" defer></script>
<script src="/sites/default/files/js/js_iDgkh5LVhg7OxqZKPS11Ic5T0J1YdZFFh-H6KnTRvSs.js?scope=footer&delta=4&language=en&theme=kinetic&include=eJx9UEt2wzAIvJBkLXIgPSxhm1qCVOA0zumrNk5WdTcwDMMXcjYB3gMcYJiasLkkDUOSehVGNh1WYjRK3uc6ehajiRIYCeu5dBIxbOf5uVDG8_SCkP8rr8ibt0bz3FWZtJIqjQVjRVWYMY7Qwgnv8BIrtBVNAl78AX3dOC19gDuGhMO7Ao89_Bh3VYsZDArs2Nu_kPvcKK2FeA1v9BcXicmcIrS0qME9pk1Nanwygbh_jKH4Z9zPg9R3mM8rDmHDG0JxN8IvDb92gA-4fwPuhbqe"></script>
<script src="/core/../themes/custom/kinetic/dist/assets/components/03-formations/footer/footer.es6.js-D-Ai5kOM.js?tj9gxp" type="module"></script>
<script src="/core/../themes/custom/kinetic/dist/assets/components/01-composites/glide/glide.es6.js-DCz3cCUC.js?tj9gxp" type="module"></script>
<script src="/sites/default/files/js/js_1xTL8NnizLNfmB-iTFEHnuQP-wV3-6cl6D-omX0qArs.js?scope=footer&delta=7&language=en&theme=kinetic&include=eJx9UEt2wzAIvJBkLXIgPSxhm1qCVOA0zumrNk5WdTcwDMMXcjYB3gMcYJiasLkkDUOSehVGNh1WYjRK3uc6ehajiRIYCeu5dBIxbOf5uVDG8_SCkP8rr8ibt0bz3FWZtJIqjQVjRVWYMY7Qwgnv8BIrtBVNAl78AX3dOC19gDuGhMO7Ao89_Bh3VYsZDArs2Nu_kPvcKK2FeA1v9BcXicmcIrS0qME9pk1Nanwygbh_jKH4Z9zPg9R3mM8rDmHDG0JxN8IvDb92gA-4fwPuhbqe"></script>
<script src="/core/../themes/custom/kinetic/dist/assets/components/03-formations/header/header.es6.js-D_KMiklV.js?tj9gxp" type="module"></script>
<script src="/core/../themes/custom/kinetic/dist/assets/components/00-elements/menu-trigger/menu-trigger.es6.js-DNsNvCMz.js?tj9gxp" type="module"></script>
<script src="/sites/default/files/js/js_RJ1fQwJFFCKKXw_812IKF75kByQsuPM4uFd8LwOn-eU.js?scope=footer&delta=10&language=en&theme=kinetic&include=eJx9UEt2wzAIvJBkLXIgPSxhm1qCVOA0zumrNk5WdTcwDMMXcjYB3gMcYJiasLkkDUOSehVGNh1WYjRK3uc6ehajiRIYCeu5dBIxbOf5uVDG8_SCkP8rr8ibt0bz3FWZtJIqjQVjRVWYMY7Qwgnv8BIrtBVNAl78AX3dOC19gDuGhMO7Ao89_Bh3VYsZDArs2Nu_kPvcKK2FeA1v9BcXicmcIrS0qME9pk1Nanwygbh_jKH4Z9zPg9R3mM8rDmHDG0JxN8IvDb92gA-4fwPuhbqe"></script>
<script src="/themes/custom/kinetic/dist/assets/global-js-0wm9L6tO.js?v=11.3.12" type="module"></script>
<script src="/sites/default/files/js/js_kSZ9B3RBuuzreqnLLC7m28Bi8dITZZJtlmOfojtvEVI.js?scope=footer&delta=12&language=en&theme=kinetic&include=eJx9UEt2wzAIvJBkLXIgPSxhm1qCVOA0zumrNk5WdTcwDMMXcjYB3gMcYJiasLkkDUOSehVGNh1WYjRK3uc6ehajiRIYCeu5dBIxbOf5uVDG8_SCkP8rr8ibt0bz3FWZtJIqjQVjRVWYMY7Qwgnv8BIrtBVNAl78AX3dOC19gDuGhMO7Ao89_Bh3VYsZDArs2Nu_kPvcKK2FeA1v9BcXicmcIrS0qME9pk1Nanwygbh_jKH4Z9zPg9R3mM8rDmHDG0JxN8IvDb92gA-4fwPuhbqe"></script>
</body>
</html>