git » homepage.git » commit 7725460

Preserve RStudio work at source quality

author Alan Dipert
2026-08-09 20:49:22 UTC
committer Alan Dipert
2026-08-09 20:49:22 UTC
parent 282767980fbefe6fc354dd4a9f3708f11a6e39d4

Preserve RStudio work at source quality

archive/techworks/SHA256SUMS +31 -0
archive/techworks/items/rstudio-integrating-react-shiny/captions.en.vtt +1799 -0
archive/techworks/items/rstudio-integrating-react-shiny/captions.headers +29 -0
archive/techworks/items/rstudio-integrating-react-shiny/original.ffprobe.json +32 -0
archive/techworks/items/rstudio-integrating-react-shiny/original.mp4 +3 -0
archive/techworks/items/rstudio-integrating-react-shiny/source.headers +54 -0
archive/techworks/items/rstudio-integrating-react-shiny/source.html +2729 -0
archive/techworks/items/rstudio-integrating-react-shiny/still.png +0 -0
archive/techworks/items/rstudio-integrating-react-shiny/wistia.headers +31 -0
archive/techworks/items/rstudio-integrating-react-shiny/wistia.json +1 -0
archive/techworks/items/rstudio-load-testing-shiny/original.ffprobe.json +32 -0
archive/techworks/items/rstudio-load-testing-shiny/original.mp4 +3 -0
archive/techworks/items/rstudio-load-testing-shiny/source.headers +16 -0
archive/techworks/items/rstudio-load-testing-shiny/source.html +2463 -0
archive/techworks/items/rstudio-load-testing-shiny/still.png +0 -0
archive/techworks/items/rstudio-load-testing-shiny/wistia.headers +31 -0
archive/techworks/items/rstudio-load-testing-shiny/wistia.json +1 -0
archive/techworks/items/rstudio-make-shiny-fast/original.ffprobe.json +32 -0
archive/techworks/items/rstudio-make-shiny-fast/original.mp4 +3 -0
archive/techworks/items/rstudio-make-shiny-fast/source.headers +54 -0
archive/techworks/items/rstudio-make-shiny-fast/source.html +2722 -0
archive/techworks/items/rstudio-make-shiny-fast/still.jpg +0 -0
archive/techworks/items/rstudio-make-shiny-fast/wistia.headers +31 -0
archive/techworks/items/rstudio-make-shiny-fast/wistia.json +1 -0
archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.headers +54 -0
archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.html +3276 -0
archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.headers +54 -0
archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.html +3272 -0
archive/techworks/items/rstudio-shiny-server-releases/author.headers +22 -0
archive/techworks/items/rstudio-shiny-server-releases/author.png +0 -0
archive/techworks/manifest.tsv +31 -0
md/TechWorks.md +2 -0
md/TechWorks/ShinyServer154.html +48 -0
md/TechWorks/ShinyServer156.html +46 -0
md/TechWorksArchive.md +2 -0

diff --git a/archive/techworks/SHA256SUMS b/archive/techworks/SHA256SUMS
index 3483a29..c307215 100644
--- a/archive/techworks/SHA256SUMS
+++ b/archive/techworks/SHA256SUMS
@@ -1,13 +1,18 @@
+011e0d9a2fe99efd195230d320a217e221cb640acef5537698e245fb3892724f  archive/techworks/items/rstudio-make-shiny-fast/original.ffprobe.json
 0262515e872a123dfe8d026dd00464f221a4c980261be636c5bfa557fa6872f8  md/TechWorks/media/video/vimeo-144997124.oembed.json
 03c08f2783b560406102e762f3763fc4ae31ffd75d13d941c01583ba85160cd3  md/TechWorks/authored/jlt/index.html
+05eadbd88559a3e786d88b11c9b92f248ef7fbc226de0d52239f585c2f7eed8b  md/TechWorks/ShinyServer154.html
 06b57f9625fa07b949d4620e81fe6ad739e6d77c23737af0ef616d9420e7e342  md/TechWorks/authored/wondr/posts/querying-trees-in-r.html
+08e4b9fc431b0b77df656df5989870b0c16af396fcb1dc09af96ce94b116143d  archive/techworks/items/rstudio-integrating-react-shiny/captions.en.vtt
 0adfe2c4588a6fc2f1fc39863924cc1a4a01c56c80c2e23982e3c79dee2b259a  md/TechWorks/media/video/xaxF5RDdVRE.mp4
 0e17f2b1f5a0e76d542824cc778049a830661f2f2b617d8eaa40c35c47121726  archive/techworks/items/2005-netbsd-workstation/linux-com-live.html
 0e8252a4757f6fe252b6a2122f0bc15a8818ef12cfa47164c70f4d99caab9433  md/TechWorks/authored/jlt/style.css
 1576ebf4bb6d964314fa18bb78a60efdf5c3b518b6a7ac69549cb2b9a63a7bef  archive/techworks/items/2019-ocrug-interview/2022-replay.headers
+15db67752d75ddcdb3faead339302cb38d88ba30d3d860d499c9ef9768c47290  archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.headers
 16c40b3f183bd656dda0303c53a56a85ec20e2426909b60b4b7904e920002208  md/TechWorks/flapjax-demo-b719782.tar.gz
 1e876de98c65f221e3b437892e93a5c1ef911b023e85e78975769e015d95152e  md/TechWorks/media/video/tSw3x0rVh88.info.json
 1e9951de2d98335c45976f7dce0b5429469343eab20a5c17e5d3ed597f1fd7b4  md/TechWorks/2018-12-17-CommonLispOrangeCombinator.pdf
+1ffaf85e002e59c2069268881878ee5b63a85ed26a930ae79d0dfb9ea1124afb  archive/techworks/items/rstudio-make-shiny-fast/source.html
 2058ab1dd1f4ce00ad2dc7df9c5bab0bb2fec352de7264bafb4066cf92d67cd5  archive/techworks/items/cognicast/111-cover.jpg
 2119a64870a684d6f0e67527129948096aab553aa08da38503200ec85f11c11f  archive/techworks/items/infoq-programming-with-values/source.headers
 227727c95169600d4f300d37f76215997bb343697679baf2025f2340b016b9c3  archive/techworks/items/clojurestream-s4-e19/soundcloud-2020.headers
@@ -18,6 +23,7 @@
 295dcd7f2ea293bb9e3bb46417d787a934e739739a98bccf7031276c6366a280  md/TechWorks/ocrug-2018-11-27-71dd0b1.tar.gz
 2a2b25998617233beb48a5e213dc22fe80a561f0d576c625beeb34f9feae1c4d  md/TechWorks/media/video/HGuTqsVh59w.mp4
 2fa46c61ffce23593ef18c65bdeea96bff452d233c0b75f348709ee58f85a040  md/TechWorks/media/video/wVXjExRiFy0.info.json
+301d5486cbfa0fa2ea20587884084cbc82f46785f0d650bc388d6e7b6d906fbe  archive/techworks/items/rstudio-load-testing-shiny/original.mp4
 33b3861b8d5deeb4596682207f44dbe534bcea015f25849d53f5d696c9decfec  archive/techworks/items/cognicast/052.html
 348263dc01b3b86799759f5bcbfce0afe32726a675580a520ddc7a39ca868d83  archive/techworks/items/cognicast/112-cover.jpg
 3499a6da9bdce3dd105c4f8faf8bdcb7310f3bc64deb09096c8f5937518e40cc  archive/techworks/items/infoq-programming-with-values/source.html
@@ -32,9 +38,12 @@
 3aad0c50ebc6588f3a86aa4dde39e312f72c80680a6781ea7afb52dfc9780499  md/TechWorks/media/video/wVXjExRiFy0.en.vtt
 3c2821ff1e6fd6306e4a47397a545248546faae0814fb1bb1ae1b44d1fe4109d  md/TechWorks/authored/wondr/style.css
 3ced799f7d1d7972530d496fd448c560d97e02f0654c266df205ebb20627e450  archive/techworks/items/2019-ocrug-interview/headshot.headers
+3e53dd7268fc07f4b2c65d3915fce2ab4c227f00e37ccef6a07467b334ce7455  archive/techworks/items/rstudio-make-shiny-fast/wistia.json
 438ca7957efe63073364b69b0fecb6385d7b9ddcc9efdc0943198847927401cb  archive/techworks/items/2005-netbsd-workstation/linux-com-live.warc.gz
 446379435661cd8a75647936a7b4ca130dfdfffb7e5fcc4f767aa11d2f922d13  md/TechWorks/2020-01-28-RStudio-Conf-Integration-Testing-ePoster.pdf
 4562fcd751a5331289d86e3f40eb67870160e637b88b8ff3be0cf33524a1bc5a  md/TechWorks/media/audio/cognicast-111.mp3
+48f8a2f70c107f2791976d16a9a8aaeab187504a87ca8ad9f7e18a4cf0de15b8  archive/techworks/items/rstudio-integrating-react-shiny/source.html
+491e8c06c61655acec516828ae148acbc14c4c108e0605f4937fcbbeae7cd4ef  archive/techworks/items/rstudio-load-testing-shiny/still.png
 49b6ec526b72e3c2a8655557e715b51ca8c999b2ebef8bad5a0efb19fc69b94c  md/TechWorks/media/video/44Q9ew9JH_U.en-orig.vtt
 49b6ec526b72e3c2a8655557e715b51ca8c999b2ebef8bad5a0efb19fc69b94c  md/TechWorks/media/video/44Q9ew9JH_U.en.vtt
 4a2815c9d0b1cf0de5cba85b0b1cf22944a910fb28de1f90afb1e9c50717d987  md/TechWorks/Dipert-FRP_in_ClojureScript_with_Javelin.pdf
@@ -42,14 +51,21 @@
 4bc7e11ed9b4041cbd374ef91f90aee394b10a93c463bd881b58eb41e47a9154  md/TechWorks/Dipert-ProgrammingWithValues.pdf
 4c5d6c5356688e57b2b1fdf7f99772903b113c7c3359f80ed8c58b17fe22d4a2  archive/techworks/items/clojurestream-s4-e19/soundcloud-cdx.json
 4cee7dddb59d50de9c253f43481e2ce8c4f9db06280cb2dd7fadba7f782c2eed  archive/techworks/items/2019-ocrug-interview/cdx.json
+4d1a8c2ba5ab3f962cabf7079fbe683fbc223b78e91c87da038f2069b49ef9a7  archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.html
 4fa2b18b4df657cc4fe0b1dcc61fac3a179bb7da636cf90c06de98b38efe7e6f  md/TechWorks/wombat-dbd34f4.tar.gz
+524effc3bebb5cf18cf08ddbc8cf3c05dcc3160bdd15687a791f1953b9c8d95c  archive/techworks/items/rstudio-integrating-react-shiny/original.ffprobe.json
 529d418b5641a4389c1f45381cd83410a773232b1abd98d5613f50b80d5faa03  archive/techworks/items/clojurestream-s4-e19/soundcloud-rss-2021.xml
 5330706e824804a97059a9ea78e04ec5b30f3b35cde21e51ca9c999fb9203854  md/TechWorks/media/video/bmHTFo2Rf2w.info.json
 53e30a56cab4e4c0e77bb34a6a9fb4ad9604ef15939726d992e0e8b581bf1b1d  archive/techworks/items/clojurestream-s4-e19/track-metadata.json
+572f5d65365c1e07e496613ab5014dfb4d9cdb6483425aa4eea21c046263f88a  archive/techworks/items/rstudio-make-shiny-fast/source.headers
 592cd602f71f74cafbafc385156eaa90e1af01eb24373d4d53cb07642c2451f3  archive/techworks/items/cognicast/111.headers
+5c3ad4d267d56d117cbfd4de702de2223a4bd2c57ca46727ed7213bf4cfe8742  archive/techworks/items/rstudio-load-testing-shiny/wistia.headers
 66326358232546ee1a467dc983d144d777d8f039f1b4377a140554fe3b527781  md/TechWorks/media/video/HGuTqsVh59w.en-orig.vtt
 66326358232546ee1a467dc983d144d777d8f039f1b4377a140554fe3b527781  md/TechWorks/media/video/HGuTqsVh59w.en.vtt
+7042815f96c300ca25ff9083eb34b6bd63fcb9e68d0892ec283acc07bd9c1f38  archive/techworks/items/rstudio-load-testing-shiny/original.ffprobe.json
+710b7267a79fe63ee5a3c776dc80d2ca27819149095349387aeb5772767388ac  md/TechWorks/ShinyServer156.html
 718dea32362c630c4756f539298cddfdc7cb3f941ebd25e303c55e174edd5aa3  md/TechWorks/media/video/44Q9ew9JH_U.webp
+72cdfd85e16cd5805fedada83623629eea48ced71b1bdc686e6f513fd7abfa78  archive/techworks/items/rstudio-integrating-react-shiny/original.mp4
 733ec4b8005a8be7d96d2ba7daf76263066c9d49c095a1fb6232e7638e4d6adc  md/TechWorks/media/video/infoq-programming-with-values.mp4
 7355773d7c4efd3beefc0b75481b20722d33b75c5fb13a2802850eb493a24837  archive/techworks/items/cognicast/052-cover.jpg
 73c7a51dec9b771029efe866ccdc013dfdd6807b98e64b853c85e91c2858fe41  archive/techworks/items/2005-netbsd-workstation/linux-com-live.headers
@@ -62,15 +78,21 @@
 7f3712a90c6a608ebdb452fcaf94272babd93a66a93b38c801ba19cfab126fd9  md/TechWorks/media/video/TcnzB2tB-8Q.en-orig.vtt
 7f3712a90c6a608ebdb452fcaf94272babd93a66a93b38c801ba19cfab126fd9  md/TechWorks/media/video/TcnzB2tB-8Q.en.vtt
 816f55d9c770f781381223768e01890064afa345992ed413fce9c5a841d4f8ce  archive/techworks/items/clojurestream-s4-e19/artwork-original.jpg
+82dd73f4495d57fa0a7235728f5bd6cc5c050acaa341cdc8c00b80d7760a25aa  archive/techworks/items/rstudio-load-testing-shiny/source.html
 83272bbfc8c1576d7695152609e9bad5ca2441b563405aa6f6da5ba147b73b7e  md/TechWorks/authored/wondr/index.html
 87dca0f7c7702bd05c05bc865756d988ff845f10d6e2acb287fe6dcab9b9341e  archive/techworks/items/clojurestream-s4-e19/audio-replay.headers
+89dc9b1d2ee6c37d3f3ba3892d648d3eb9e9b3c8f93727146eeb19e8d1d6967b  archive/techworks/items/rstudio-make-shiny-fast/still.jpg
+89fa28704da1fb2151177a109d7321e9168d3616f25fd0f429e4e7ac10bc11f9  archive/techworks/items/rstudio-make-shiny-fast/wistia.headers
 8bb253146b27ce8a8b08520b0064b0b34659b1460296ffcd69439c53a401ceab  md/TechWorks/authored/jlt/atom.xml
 8dad6ca17579e26ec0c9a1c09ef6a5d2e7a405bbd0f16e7d54f8e66c425c7909  archive/techworks/items/infoq-frp-javelin/video.ffprobe.json
+9115f3072d5134e05b08efcea45eb06d8de734fa4931f60250380c77fb9d0ee9  archive/techworks/items/rstudio-integrating-react-shiny/wistia.headers
 9156d187f09855a7d1d6fa026dec4956912ac1ce768edbefe721f6565a57f0ba  md/TechWorks/media/audio/clojurestream-s4-e19.mp3
 934c2bd9997b9e6603f28308b6fccf0a72d2e30c3bb422effbcf4224ee8d7282  md/TechWorks/gherkin-76dc034.tar.gz
 935c7f008b22184aa5f2c494c3b4f085adc4091e400fd616b31d57e23d5cc7ac  archive/techworks/items/2019-ocrug-interview/2019-original.html
 94d65c64f26cc5ba9bfd7377b2ffa8dd7bdb27a93db1cf47a33fc013283312a0  md/TechWorks/media/video/vimeo-144696304.oembed.json
+9545dbac6a9c02f1ec6cae11e0c61610a402746309531cf3f67de231dcf6ef3f  archive/techworks/items/rstudio-integrating-react-shiny/still.png
 9839ad172d31b2915e3eeb9cdf98830d4baf218fab8a5ff804ccedb17e6970d1  md/TechWorks/Cognicast111.html
+9840899887818adced5ce626826cc3941dd511312924cd7b77fd83c6d8cc1133  archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.html
 9b5b40432bc71b1da7aeb72a106c524136112e12be1da250e8b01a8d482a262b  md/TechWorks/media/video/tSw3x0rVh88.mp4
 9b5d26799ed7c9f6d78240a10c09f934444d393e506323b6e2320459f8474533  md/TechWorks/OCRUGInterview.html
 9bdd689419033e4120dad5da97c5da162614f4c13528a49f6e3955d692fed341  md/TechWorks/MyWorkstationOSNetBSD.html
@@ -79,17 +101,21 @@ a14dc4ce3d83b1688b13575405f6b2d725d508fa1551d8ebd0b5a81a0b9de46a  md/TechWorks/m
 a15dd034225897ddf87849d027c48c7d3ef0979b2bb17329172c5103e5b7e794  md/TechWorks/media/video/bmHTFo2Rf2w.en-orig.vtt
 a15dd034225897ddf87849d027c48c7d3ef0979b2bb17329172c5103e5b7e794  md/TechWorks/media/video/bmHTFo2Rf2w.en.vtt
 a36e25592798eb869f27aefea9fadaa00de5622ef5eb268edd335af69a03c36d  archive/techworks/items/cognicast/111.html
+a429d707d087867e6fcc7cead42c61dd0204e74e615e90599d56b3ba2357cbb8  archive/techworks/items/rstudio-integrating-react-shiny/captions.headers
 a4f289f053abcdb02ac7ff433f4f1aacf279e4470c999cb5e292c31a1f28f4e8  md/TechWorks/2015-04-20_ClojureWestBoot.pdf
 a73794c8dd4a4550f2098db3a854959449c0adf623ea4877d3dc13e959b7cacc  md/TechWorks/media/video/xaxF5RDdVRE.webp
 a7d709bd9848acd265ee0a8837f1045cc29522ec544467b1922d926bbab7a0a7  md/TechWorks/media/video/wVXjExRiFy0.mp4
 a85d3c8db5b8b03b215d958101912af1ed776c780ba1a4fcc5a05f1c7819beed  archive/techworks/items/cognicast/052.headers
 a906f29ababff5e39751e14dcd9e14f74545dd3571d5a0f5c41a3c7641af25d2  md/TechWorks/authored/jlt/code_highlight.css
 a906f29ababff5e39751e14dcd9e14f74545dd3571d5a0f5c41a3c7641af25d2  md/TechWorks/authored/wondr/code_highlight.css
+ab2d9ced7bb28bd15e591e765d6b057900460bfef92fb09bc44eae5e68dc0195  archive/techworks/items/rstudio-integrating-react-shiny/source.headers
 ac5b60c328ac78786f03d96cf889ec4b236f5f0b5aa984e5d318ff6c644cc044  archive/techworks/items/cognicast/112.headers
 ace070cf982b935b701a28b767194b82a59b2322986c065e7159aefdfab3dc58  md/TechWorks/media/audio/cognicast-052.mp3
+b2872d41daa107619377bd61c92289d562dc78ac69060a5c8bc5e89f817f0ee9  archive/techworks/items/rstudio-make-shiny-fast/original.mp4
 b329888a9c0e528192cb24eb4a5dd7644b0e0126d975a8329c5a49fe7b7c0e14  archive/techworks/items/2019-ocrug-interview/2022-replay.html
 b439b4b8993805b0163a467d8f18090e3044526ed7e50cd97bb5a32b09cbbc8a  md/TechWorks/media/video/HGuTqsVh59w.info.json
 b720141f594781805b58b0cf682a2aa6227d358df9b5ef27d1fd711737437ea9  archive/techworks/items/infoq-programming-with-values/audio.ffprobe.json
+b729a86e1f47a1d797082844e09495a5dab473d5e91b4ccf3973b7644b4a796d  archive/techworks/items/rstudio-shiny-server-releases/author.png
 c0b942c1ec79ed851fc8810fc224b3e357c01bce98f957bf63786f4e467a2ed8  md/TechWorks/media/video/TcnzB2tB-8Q.mp4
 c318fdba4c6c5caa69baefa238a7b6ecd94afefc8d2c8826a7931028d989fa51  md/TechWorks/media/video/bmHTFo2Rf2w.mp4
 c41eb86d39e4e8b46b3340d43b67ef62908132bb62cf81b8d8b66d6665ba5e55  md/TechWorks/media/audio/infoq-frp-javelin.mp3
@@ -97,10 +123,13 @@ c44f5ca43719a56aa8b4146dac88674026912bef67d01f7f7661184cd0b470b9  archive/techwo
 cbdb7e0a11b8566c73453ca401b7cc4ef9d2a424eff8d00dee4f1a6e435d89c3  md/TechWorks/media/SHA256SUMS
 cff200708de3e324faa0e5a7cd4fce4beaaa9100921c47ac4d81bcb698e151f6  md/TechWorks/media/audio/cognicast-112.mp3
 d04ff1f53296811517fd27fb2ed11b4092709558723c36d07f9719a9a4850ca4  md/TechWorks/media/video/bmHTFo2Rf2w.jpg
+d13182021b1963e5c6acfcee2e0d65081e914f5842b66ad7612d0f8d900cc9bf  archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.headers
 d18e8f815f977dec70111afd99457a3f488f516df3e0ffd05015d52b9a8ef05d  archive/techworks/items/infoq-frp-javelin/source.headers
 d3bc604551b9f39837f4d619d8b61c324b95e6e26afed30a291092bc8d975d02  md/TechWorks/authored/wondr/posts/package-development-windows.html
+d6c2893c17b5a2eae5f02674b42253a731cc6ee96fd1b8713d5a759811541590  archive/techworks/items/rstudio-load-testing-shiny/source.headers
 d7008a80eacfc904a8c51334564027aa12a579306f668685f3d9934c4ec3d4fc  archive/techworks/items/clojurestream-s4-e19/soundcloud-rss-2021.headers
 d82843df799752ff13fef3f75599bc683cf22ce5957590aa199a2bbbd018c315  md/TechWorks/authored/jlt/posts/collecting.html
+d86e150c967934e25e3c637f4cbf14322e2cfe9fe80aed75d5898dc7fb6f9af6  archive/techworks/items/rstudio-load-testing-shiny/wistia.json
 d977b0b3706d214f78878695dc9c7870d3ee78bc639f9f5b5774d051a8367df8  md/TechWorks/media/audio/infoq-programming-with-values.mp3
 d9feaebbf7dd5f8037be7b60226c1e773f304b479f331a2bea3c1a16338684d4  md/TechWorks/media/video/tSw3x0rVh88.en-orig.vtt
 d9feaebbf7dd5f8037be7b60226c1e773f304b479f331a2bea3c1a16338684d4  md/TechWorks/media/video/tSw3x0rVh88.en.vtt
@@ -109,10 +138,12 @@ dd9a11ba5b00ffa08f88a10dce60f10eb61ac83d5439f0a95e7637a8f76d084b  md/TechWorks/m
 e307e14633721e10ecdd576af6458d4b1409ddf6f9e42cf3daa4e15e7ffa9b8c  md/TechWorks/Cognicast112.html
 e5e57746ea11987744b1acacd6255d24951fddd939b57f1ceaf1b873a3b786bc  md/TechWorks/media/video/xaxF5RDdVRE.info.json
 e692d52425f09aa632a8c4605dbdb7674d515b20b662fff6fdf441a1f5e60dbf  archive/techworks/items/clojurestream-s4-e19/soundcloud-2020.html
+e755294547f5b9a19054d29eb837069fe8320fe0aa972872c94becdd8b7d8246  archive/techworks/items/rstudio-shiny-server-releases/author.headers
 ea6820d653957fcc86d231b37fab642418a9f8a8991003a30d2a4d70adbd6ce3  md/TechWorks/fast-shiny-da0ea10.tar.gz
 eb519fb5da6646d808dc1801803b3d8e35d5d90bf164775c10833cc43be9b340  md/TechWorks/authored/wondr/posts/shiny-inline-markdown.html
 ef306bbebe80ee481cf012cf446c563828d93902ee927b0a14dc86e60e7b5efc  md/TechWorks/authored/jlt/posts/collecting-macro-edition.html
 f413f0be7acdb4780a2698c2f1b363a5d656cb4b3635cd0352c30a4cd4f0be19  archive/techworks/items/infoq-frp-javelin/source.html
+f451fd97f3990482d1ab98a6fe1d335bceb30601b2114289e3937879a437d395  archive/techworks/items/rstudio-integrating-react-shiny/wistia.json
 f50e8de09c6a01a8ac8178eec634fb42151ecd83e9fa1de49ee76e862b8b0507  md/TechWorks/media/video/tSw3x0rVh88.jpg
 f878cc08851e69e0a757b86400729bbe6a3882e875a6330e4f178e58887e713a  archive/techworks/items/clojurestream-s4-e19/soundcloud-rss-cdx.json
 f93ac829f7ae73c768197eb4f47c634a38f123a1f7bacd3b4065927ac1c86c9a  md/TechWorks/media/video/44Q9ew9JH_U.mp4
diff --git a/archive/techworks/items/rstudio-integrating-react-shiny/captions.en.vtt b/archive/techworks/items/rstudio-integrating-react-shiny/captions.en.vtt
new file mode 100644
index 0000000..d0894c7
--- /dev/null
+++ b/archive/techworks/items/rstudio-integrating-react-shiny/captions.en.vtt
@@ -0,0 +1,1799 @@
+WEBVTT
+
+00:00:01.976 --> 00:00:02.964
+[FLOURISH]
+
+00:00:07.904 --> 00:00:09.880
+[APPLAUSE]
+
+00:00:14.340 --> 00:00:14.972
+Hi, everybody.
+
+00:00:14.972 --> 00:00:16.180
+Thank you so much for coming.
+
+00:00:16.180 --> 00:00:17.471
+I really, really appreciate it. I've
+
+00:00:17.471 --> 00:00:19.350
+been doing some very
+exciting work
+
+00:00:19.350 --> 00:00:22.480
+and I'm really even more excited
+to share it with you all today.
+
+00:00:22.480 --> 00:00:24.015
+So I'm Alan Dipert. I
+
+00:00:24.015 --> 00:00:25.170
+work at RStudio.
+
+00:00:25.170 --> 00:00:27.669
+Like Barrett, I'm
+on the Shiny team
+
+00:00:27.669 --> 00:00:30.210
+and I've had the pleasure over
+the past few months of working
+
+00:00:30.210 --> 00:00:35.410
+on this problem of integrating
+React, the JavaScript library,
+
+00:00:35.410 --> 00:00:35.910
+with Shiny.
+
+00:00:38.550 --> 00:00:41.670
+I believe that for quite
+some time people in the
+
+00:00:41.670 --> 00:00:43.920
+Shiny community have been
+interested in React and about ways
+
+00:00:43.920 --> 00:00:45.753
+to integrate it with
+Shiny, and so this work was
+
+00:00:45.753 --> 00:00:49.860
+initiated in an effort to
+bridge that gap somehow.
+
+00:00:49.860 --> 00:00:51.720
+And we've been at
+it for a few months
+
+00:00:51.720 --> 00:00:54.060
+and we have work to show,
+which is why I'm here
+
+00:00:54.060 --> 00:00:56.850
+and why I'm so excited.
+
+00:00:56.850 --> 00:00:59.970
+But some questions and
+problems remain unsolved,
+
+00:00:59.970 --> 00:01:02.550
+and that's sort of
+where you come in.
+
+00:01:02.550 --> 00:01:04.110
+So I would encourage
+you, if you're
+
+00:01:04.110 --> 00:01:05.820
+at all interested
+in any of this,
+
+00:01:05.820 --> 00:01:07.479
+to follow up with me afterwards.
+
+00:01:07.479 --> 00:01:09.270
+There may or may not
+be time for questions,
+
+00:01:09.270 --> 00:01:11.186
+but I'm always happy to
+talk about this stuff. And
+
+00:01:11.186 --> 00:01:13.899
+we can talk shop
+and
+
+00:01:13.899 --> 00:01:16.440
+discuss why you're interested in
+the context that you're interested in it in
+
+00:01:16.440 --> 00:01:19.260
+because I think that this could
+be the start of a really
+
+00:01:19.260 --> 00:01:22.890
+fun and exciting little niche
+thing in the Shiny ecosystem.
+
+00:01:22.890 --> 00:01:24.900
+So without further
+ado, let's start
+
+00:01:24.900 --> 00:01:31.910
+with a motivating problem, I
+guess, a problem slash demo.
+
+00:01:31.910 --> 00:01:36.890
+So like many of you, I'm online.
+
+00:01:36.890 --> 00:01:37.640
+I'm on the web.
+
+00:01:37.640 --> 00:01:38.669
+I surf the web.
+
+00:01:38.669 --> 00:01:40.460
+And you come across
+things that are awesome
+
+00:01:40.460 --> 00:01:42.140
+and the only
+problem with them is
+
+00:01:42.140 --> 00:01:43.730
+that they don't
+have an HTML widget
+
+00:01:43.730 --> 00:01:45.934
+or they're otherwise
+not accessible from R.
+
+00:01:45.934 --> 00:01:47.600
+So one of these things
+that I ran across
+
+00:01:47.600 --> 00:01:53.060
+was a React-based
+library called Mapbox GL.
+
+00:01:53.060 --> 00:01:54.560
+Mapbox is a company.
+
+00:01:54.560 --> 00:01:57.200
+They make a library
+called Mapbox GL, which
+
+00:01:57.200 --> 00:01:59.990
+is very similar to
+Leaflet, but it has
+
+00:01:59.990 --> 00:02:01.340
+some interesting properties.
+
+00:02:01.340 --> 00:02:03.985
+In particular, it's
+highly themeable.
+
+00:02:03.985 --> 00:02:06.110
+So let me show you some of
+the demos of this thing.
+
+00:02:08.639 --> 00:02:12.840
+So this is a very nice
+Leaflet-esque map.
+
+00:02:12.840 --> 00:02:17.430
+But of course, we can do
+heat maps, pretty fancy.
+
+00:02:17.430 --> 00:02:18.880
+And you can switch
+between these.
+
+00:02:18.880 --> 00:02:20.970
+The thing that's
+governing the colors
+
+00:02:20.970 --> 00:02:24.660
+of the roads and the city and
+county titles and stuff, that's
+
+00:02:24.660 --> 00:02:28.452
+all governed by one of
+these Mapbox style objects.
+
+00:02:28.452 --> 00:02:29.910
+And then on the
+left hand side here
+
+00:02:29.910 --> 00:02:32.980
+we've got the heap of
+JavaScript code involved
+
+00:02:32.980 --> 00:02:35.270
+in rendering that.
+
+00:02:35.270 --> 00:02:39.380
+Probably my most favorite
+one is the Superman mode one
+
+00:02:39.380 --> 00:02:44.000
+where you literally fly around.
+
+00:02:44.000 --> 00:02:45.630
+Right?
+
+00:02:45.630 --> 00:02:48.390
+So just to be clear,
+I didn't make this.
+
+00:02:48.390 --> 00:02:51.360
+But I think it's awesome and
+this is the kind of thing
+
+00:02:51.360 --> 00:02:53.790
+that I think gets
+me excited when
+
+00:02:53.790 --> 00:02:56.010
+I am able to use it from R.
+
+00:02:56.010 --> 00:03:03.510
+So what I did is in the
+course of not too long, maybe
+
+00:03:03.510 --> 00:03:05.960
+an hour or two, using
+the tools and I'm
+
+00:03:05.960 --> 00:03:09.240
+about to explain to you, I
+was able to make my own HTML
+
+00:03:09.240 --> 00:03:13.020
+widget that provides a subset
+of the functionality we just
+
+00:03:13.020 --> 00:03:16.890
+saw and delivers it to
+us as an R HTML widget.
+
+00:03:16.890 --> 00:03:19.920
+And so I became aware
+early in the conference
+
+00:03:19.920 --> 00:03:22.710
+that the most important thing
+to keep in mind about here
+
+00:03:22.710 --> 00:03:24.000
+in Austin are tacos.
+
+00:03:24.000 --> 00:03:27.900
+So there's this trending--
+has been trending.
+
+00:03:27.900 --> 00:03:29.691
+Someone named Caitlin Hudon--
+
+00:03:29.691 --> 00:03:31.440
+hope I got that right--
+who I haven't met,
+
+00:03:31.440 --> 00:03:33.240
+apparently posted
+on Twitter a list
+
+00:03:33.240 --> 00:03:34.500
+of her five favorite places.
+
+00:03:34.500 --> 00:03:36.810
+And then an RStudio
+person, Thomas Marchi
+
+00:03:36.810 --> 00:03:39.180
+made a Shiny dashboard
+using a Leaflet map,
+
+00:03:39.180 --> 00:03:42.150
+and I thought, hey, in keeping
+with the tradition of taco
+
+00:03:42.150 --> 00:03:45.180
+enthusiasm, I should make
+some kind of taco app.
+
+00:03:45.180 --> 00:03:47.430
+So here we are.
+
+00:03:47.430 --> 00:03:51.060
+I've got some taco joints
+loaded up into a data frame
+
+00:03:51.060 --> 00:03:53.370
+and I'm displaying them
+with a data table here.
+
+00:03:53.370 --> 00:03:59.190
+And then over here I've got taco
+locations with fork and knife
+
+00:03:59.190 --> 00:04:02.280
+sort of blurry little icons.
+
+00:04:02.280 --> 00:04:06.270
+And then probably the neatest
+but also most awkward thing
+
+00:04:06.270 --> 00:04:09.570
+I can do is I can filter
+this, and after a little bit
+
+00:04:09.570 --> 00:04:12.450
+of burping, it
+comes back and you
+
+00:04:12.450 --> 00:04:14.749
+can see that we filter
+what shows up on the map.
+
+00:04:14.749 --> 00:04:17.040
+So like I said, this was,
+like, an hour or two of work.
+
+00:04:17.040 --> 00:04:18.930
+Now, granted, I'm,
+like, the world's expert
+
+00:04:18.930 --> 00:04:22.290
+on this weird little library, so
+take that with a grain of salt.
+
+00:04:22.290 --> 00:04:26.882
+But like I said, I'm always
+happy to help you use it.
+
+00:04:26.882 --> 00:04:27.840
+So this is the promise.
+
+00:04:27.840 --> 00:04:29.880
+This is the kind of
+thing that I think
+
+00:04:29.880 --> 00:04:33.000
+we can do more of if we develop
+these tools that help us bridge
+
+00:04:33.000 --> 00:04:36.270
+the JavaScript ecosystem, in
+particular the React ecosystem
+
+00:04:36.270 --> 00:04:39.060
+with Shiny.
+
+00:04:39.060 --> 00:04:42.860
+I'll flip back into
+PowerPoint mode here.
+
+00:04:48.711 --> 00:04:49.210
+Oh, yeah.
+
+00:04:49.210 --> 00:04:52.395
+So there's some recordings in
+case there are internet issues.
+
+00:04:56.220 --> 00:04:59.520
+So this is the all of
+the JavaScript code
+
+00:04:59.520 --> 00:05:01.870
+that I needed to
+write in order to make
+
+00:05:01.870 --> 00:05:04.710
+go what I just showed you.
+
+00:05:04.710 --> 00:05:07.470
+If you know JavaScript and
+are familiar with React,
+
+00:05:07.470 --> 00:05:10.420
+you might have a slight grin
+or even a smile on your face.
+
+00:05:10.420 --> 00:05:12.900
+If you don't know JavaScript
+or don't know React,
+
+00:05:12.900 --> 00:05:15.120
+you might be a little
+worried at this point.
+
+00:05:15.120 --> 00:05:15.900
+But don't be.
+
+00:05:19.080 --> 00:05:22.200
+I can assure you that
+the things you see here
+
+00:05:22.200 --> 00:05:25.770
+can be learned fairly quickly
+and a big part of what
+
+00:05:25.770 --> 00:05:27.600
+we hope to do with
+this initiative
+
+00:05:27.600 --> 00:05:30.570
+is to build out not just the
+code to do that bridging that I
+
+00:05:30.570 --> 00:05:32.760
+mentioned, but also to
+build out the documentation
+
+00:05:32.760 --> 00:05:36.090
+and the recommendations
+around learning JavaScript,
+
+00:05:36.090 --> 00:05:39.060
+leveraging its ecosystem, and
+all those things that surround
+
+00:05:39.060 --> 00:05:43.620
+JavaScript development to make
+them more accessible to people
+
+00:05:43.620 --> 00:05:45.480
+who don't have that experience.
+
+00:05:45.480 --> 00:05:47.220
+So this is the extent
+of the code that
+
+00:05:47.220 --> 00:05:49.450
+does the adapting
+of the React library I
+
+00:05:49.450 --> 00:05:51.600
+just showed to Shiny world.
+
+00:05:51.600 --> 00:05:54.720
+And yeah, I think it's,
+like, 11 lines of code.
+
+00:05:54.720 --> 00:05:56.054
+I don't know.
+
+00:05:56.054 --> 00:05:57.720
+Is anyone surprised
+at how small this is
+
+00:05:57.720 --> 00:05:59.950
+or disgusted by how big it is?
+
+00:05:59.950 --> 00:06:01.581
+Show of hands.
+
+00:06:01.581 --> 00:06:03.050
+Hm, OK.
+
+00:06:03.050 --> 00:06:04.645
+[LAUGHTER]
+
+00:06:04.645 --> 00:06:07.020
+My meme game is usually very
+weak, but I put this one in.
+
+00:06:07.020 --> 00:06:09.360
+It seems they've gone
+well, so all right.
+
+00:06:09.360 --> 00:06:11.639
+So if you're the
+kind of person who
+
+00:06:11.639 --> 00:06:13.680
+would prefer to ignore me
+for the next 15 minutes
+
+00:06:13.680 --> 00:06:15.600
+and just start hacking,
+here are the URLs
+
+00:06:15.600 --> 00:06:16.780
+you need to know about.
+
+00:06:16.780 --> 00:06:19.350
+We have a GitHub
+organization, react-R,
+
+00:06:19.350 --> 00:06:22.010
+and that's what we call it
+because React without the dash
+
+00:06:22.010 --> 00:06:23.665
+r was taken.
+
+00:06:23.665 --> 00:06:25.540
+But if you go there,
+that's the organization.
+
+00:06:25.540 --> 00:06:27.150
+There are some
+example repos and then
+
+00:06:27.150 --> 00:06:29.640
+there's the React R library--
+
+00:06:29.640 --> 00:06:33.810
+excuse me, package repo
+itself, and there's also
+
+00:06:33.810 --> 00:06:37.260
+a link to various other pieces
+of tutorial documentation.
+
+00:06:37.260 --> 00:06:39.510
+At the bottom, that
+will take you directly
+
+00:06:39.510 --> 00:06:41.880
+to our tutorial,
+which as of right now
+
+00:06:41.880 --> 00:06:45.150
+is the best way to
+ramp up on this topic,
+
+00:06:45.150 --> 00:06:47.400
+particularly if you have
+a little bit of JavaScript
+
+00:06:47.400 --> 00:06:48.209
+background.
+
+00:06:48.209 --> 00:06:50.250
+But if you don't have that
+JavaScript background,
+
+00:06:50.250 --> 00:06:51.870
+the rest of the talk is for you.
+
+00:06:51.870 --> 00:06:55.590
+So we're going to
+talk about what
+
+00:06:55.590 --> 00:06:59.910
+React is, why it's interesting.
+
+00:06:59.910 --> 00:07:03.020
+We're going to discuss the core
+unit of composition in React,
+
+00:07:03.020 --> 00:07:05.790
+the component and how
+it's relevant to us.
+
+00:07:05.790 --> 00:07:08.730
+I'm going to introduce you
+further to this React R
+
+00:07:08.730 --> 00:07:11.910
+package, and then I'm going
+to describe at a high level
+
+00:07:11.910 --> 00:07:13.950
+the process I went through
+to make that widget.
+
+00:07:13.950 --> 00:07:15.824
+And then I'll talk a
+little bit about what we have in store
+
+00:07:15.824 --> 00:07:18.270
+for the future.
+
+00:07:18.270 --> 00:07:20.330
+So what is React?
+
+00:07:20.330 --> 00:07:26.070
+Well, it's a JavaScript library
+for making user interfaces.
+
+00:07:26.070 --> 00:07:29.820
+It was invented at
+Facebook around 2011.
+
+00:07:29.820 --> 00:07:32.280
+I believe they used
+it for the news feed.
+
+00:07:32.280 --> 00:07:34.290
+And then they bought
+Instagram and I think
+
+00:07:34.290 --> 00:07:36.720
+Instagram developed it further.
+
+00:07:36.720 --> 00:07:39.060
+And after Instagram had
+sort of refined the idea--
+
+00:07:39.060 --> 00:07:41.370
+or engineers at
+Instagram, rather--
+
+00:07:41.370 --> 00:07:43.694
+they did a wide
+open source release.
+
+00:07:43.694 --> 00:07:46.110
+So it's quite a mature-- even
+though it wasn't open source
+
+00:07:46.110 --> 00:07:48.690
+until 2013, it's still
+quite a mature library
+
+00:07:48.690 --> 00:07:51.900
+and has been used thoroughly.
+
+00:07:51.900 --> 00:07:55.230
+It supports a
+functional approach.
+
+00:07:55.230 --> 00:07:56.850
+I think if you know
+how to write R,
+
+00:07:56.850 --> 00:07:59.220
+you already know what the
+functional paradigm is.
+
+00:07:59.220 --> 00:08:00.914
+I won't elaborate
+on that, but that's
+
+00:08:00.914 --> 00:08:03.330
+another thing like React that's
+trending in the JavaScript
+
+00:08:03.330 --> 00:08:04.021
+ecosystem.
+
+00:08:04.021 --> 00:08:06.270
+But like I said, if you know
+R, you're sort of already
+
+00:08:06.270 --> 00:08:07.853
+on board, so I
+wouldn't worry too much about
+
+00:08:07.853 --> 00:08:11.730
+that paradigm or
+that word.
+
+00:08:11.730 --> 00:08:13.680
+And it's oriented
+around components.
+
+00:08:13.680 --> 00:08:15.420
+I mentioned that the
+unit of composition
+
+00:08:15.420 --> 00:08:18.510
+in a React-based
+application is a component.
+
+00:08:21.020 --> 00:08:25.220
+And finally, they invented
+a syntax called JSX
+
+00:08:25.220 --> 00:08:28.930
+that you can think of as a
+hybrid JavaScript and HTML
+
+00:08:28.930 --> 00:08:30.110
+syntax.
+
+00:08:30.110 --> 00:08:33.080
+And it really does make writing
+these kinds of applications
+
+00:08:33.080 --> 00:08:35.840
+quite a bit more concise.
+
+00:08:35.840 --> 00:08:40.840
+And we'll see some
+of that in a second.
+
+00:08:40.840 --> 00:08:45.980
+So I think you should care about
+this for one of two reasons.
+
+00:08:45.980 --> 00:08:48.700
+One, you did what I
+just
+
+00:08:48.700 --> 00:08:50.950
+demonstrated. You're on the internet,
+you saw something really cool,
+
+00:08:50.950 --> 00:08:54.080
+you found it, and nobody's
+made the HTML widget yet
+
+00:08:54.080 --> 00:08:56.550
+so you want to be
+the person to do it.
+
+00:08:56.550 --> 00:08:58.300
+That's a reason to be
+interested in React.
+
+00:08:58.300 --> 00:09:00.700
+It has a huge
+ecosystem with tons
+
+00:09:00.700 --> 00:09:03.160
+of things that deserve to
+have their own R wrappers.
+
+00:09:03.160 --> 00:09:06.250
+And I see if everyone in this
+class learns how to do this,
+
+00:09:06.250 --> 00:09:09.130
+maybe we could get a significant
+percentage for the React
+
+00:09:09.130 --> 00:09:11.645
+ecosystem into R.
+
+00:09:11.645 --> 00:09:14.020
+The other reason might be
+you're coming from a JavaScript
+
+00:09:14.020 --> 00:09:17.140
+development background, you
+have experience with React
+
+00:09:17.140 --> 00:09:20.290
+and you want to build
+a React-based library,
+
+00:09:20.290 --> 00:09:24.970
+and maybe adding it to R
+is an afterthought for you,
+
+00:09:24.970 --> 00:09:26.780
+or would be icing on top.
+
+00:09:26.780 --> 00:09:28.990
+So that's another reason
+to be interested in React,
+
+00:09:28.990 --> 00:09:31.932
+if you want to go
+deep on JavaScript.
+
+00:09:31.932 --> 00:09:33.640
+Oh, I should mention
+also that the reason
+
+00:09:33.640 --> 00:09:35.800
+to go deep on
+JavaScript with React,
+
+00:09:35.800 --> 00:09:39.580
+in particular, is it's just
+wildly, wildly, wildly popular
+
+00:09:39.580 --> 00:09:42.130
+and well supported by
+documentation and communities
+
+00:09:42.130 --> 00:09:45.000
+and so on.
+
+00:09:45.000 --> 00:09:47.310
+So React components,
+what are they?
+
+00:09:47.310 --> 00:09:51.280
+Very similar to
+HTML tags, honestly.
+
+00:09:51.280 --> 00:09:52.590
+I think of them as containers.
+
+00:09:52.590 --> 00:09:55.590
+They contain data
+hierarchically,
+
+00:09:55.590 --> 00:09:58.770
+so it's sort of a way
+to describe a tree.
+
+00:09:58.770 --> 00:10:02.520
+The big difference is that
+the HTML tags or elements
+
+00:10:02.520 --> 00:10:04.410
+are defined by a standard.
+
+00:10:04.410 --> 00:10:06.660
+The HTML5 standard is
+the most recent one.
+
+00:10:06.660 --> 00:10:09.330
+And there's a closed set
+of tags and closed set
+
+00:10:09.330 --> 00:10:11.030
+of behaviors for those tags.
+
+00:10:11.030 --> 00:10:12.780
+React components are
+different because you
+
+00:10:12.780 --> 00:10:15.480
+can define your own
+tags or components
+
+00:10:15.480 --> 00:10:18.150
+with their own behaviors that
+are specific to your library
+
+00:10:18.150 --> 00:10:21.270
+application.
+
+00:10:21.270 --> 00:10:22.770
+They contain something
+called props.
+
+00:10:22.770 --> 00:10:24.870
+You'll see this term
+in React documentation.
+
+00:10:24.870 --> 00:10:29.239
+Props are basically a mapping or
+a named list of keys to values,
+
+00:10:29.239 --> 00:10:31.530
+and then they can also contain
+other components, again,
+
+00:10:31.530 --> 00:10:33.540
+because they're hierarchical.
+
+00:10:33.540 --> 00:10:35.490
+And applications are
+formed by composing these
+
+00:10:35.490 --> 00:10:38.620
+into a tree of some kind.
+
+00:10:38.620 --> 00:10:41.530
+And then once you've finished
+composing your components,
+
+00:10:41.530 --> 00:10:44.140
+it's React's responsibility
+to take this user interface
+
+00:10:44.140 --> 00:10:46.030
+that you've described
+using React components
+
+00:10:46.030 --> 00:10:48.490
+and to display it
+efficiently in the browser.
+
+00:10:51.150 --> 00:10:53.870
+So this is sort of the
+minimum viable Hello
+
+00:10:53.870 --> 00:10:59.330
+World of React adapted from
+the Wikipedia page on React.
+
+00:10:59.330 --> 00:11:01.640
+There are four
+distinct code chunks.
+
+00:11:01.640 --> 00:11:04.670
+These wouldn't necessarily
+all appear in the same file.
+
+00:11:04.670 --> 00:11:07.989
+They could, but
+they don't have to.
+
+00:11:07.989 --> 00:11:09.530
+The first piece
+we're looking at here
+
+00:11:09.530 --> 00:11:10.910
+is the component definition.
+
+00:11:10.910 --> 00:11:13.700
+So a component is
+a JavaScript class
+
+00:11:13.700 --> 00:11:17.740
+and here I'm using
+newish JavaScript syntax.
+
+00:11:17.740 --> 00:11:19.985
+And class is in
+ES6, and so
+
+00:11:19.985 --> 00:11:21.110
+that's what we're looking at here.
+
+00:11:21.110 --> 00:11:23.320
+It is JavaScript.
+
+00:11:23.320 --> 00:11:26.900
+And we can see we're naming
+a component called Greeter.
+
+00:11:26.900 --> 00:11:29.840
+And then we can see that this
+component extends something
+
+00:11:29.840 --> 00:11:32.030
+else called React.Component.
+
+00:11:32.030 --> 00:11:33.800
+And what we're doing
+here is establishing
+
+00:11:33.800 --> 00:11:35.200
+a hierarchical relationship.
+
+00:11:35.200 --> 00:11:37.940
+We're saying this new class,
+Greeter, should inherit
+
+00:11:37.940 --> 00:11:41.000
+all the behavior of the
+superclass or parent class
+
+00:11:41.000 --> 00:11:43.430
+React.Component.
+
+00:11:43.430 --> 00:11:46.250
+There's only one required
+method, the render method,
+
+00:11:46.250 --> 00:11:48.960
+and that method needs
+to return something.
+
+00:11:48.960 --> 00:11:51.840
+And in this case, this
+looks like a syntax error,
+
+00:11:51.840 --> 00:11:52.700
+but it's not.
+
+00:11:52.700 --> 00:11:55.640
+We're in JSX, that special
+markup I mentioned,
+
+00:11:55.640 --> 00:11:58.520
+so we're in a world where
+there's a hybrid JavaScript
+
+00:11:58.520 --> 00:12:00.110
+Excel syntax at play.
+
+00:12:00.110 --> 00:12:01.610
+So what this is
+doing is effectively
+
+00:12:01.610 --> 00:12:04.640
+returning an instance of
+the H1 component, which
+
+00:12:04.640 --> 00:12:07.340
+is built into react.
+
+00:12:07.340 --> 00:12:10.340
+And then, finally, we're
+interpolated a value
+
+00:12:10.340 --> 00:12:12.600
+into that JSX expression.
+
+00:12:12.600 --> 00:12:16.737
+So if you've worked with glue or
+other languages that support--
+
+00:12:16.737 --> 00:12:18.320
+they call String
+interpolation, that's
+
+00:12:18.320 --> 00:12:19.570
+kind of what we're looking at. We're splicing
+
+00:12:19.570 --> 00:12:22.896
+data from one context
+into a template.
+
+00:12:22.896 --> 00:12:24.770
+And this kind of templating
+is another reason
+
+00:12:24.770 --> 00:12:27.560
+that JSX is so handy.
+
+00:12:27.560 --> 00:12:30.050
+Here's some more JSX where
+we're creating an instance
+
+00:12:30.050 --> 00:12:30.980
+of the Greeter class.
+
+00:12:30.980 --> 00:12:34.640
+You can see the less than sign.
+
+00:12:34.640 --> 00:12:36.650
+It says we're creating a tag.
+
+00:12:36.650 --> 00:12:39.500
+And greeting is
+equal to Hello World.
+
+00:12:39.500 --> 00:12:42.230
+This is the place where we
+assign those props I mentioned,
+
+00:12:42.230 --> 00:12:47.360
+that key value pairs associated
+with an instance of an element.
+
+00:12:47.360 --> 00:12:50.840
+And then, finally, we render
+the whole thing to the Dom.
+
+00:12:50.840 --> 00:12:51.980
+And the net effect--
+
+00:12:51.980 --> 00:12:53.729
+if you were to right
+click in your browser or look at the
+
+00:12:53.729 --> 00:12:55.880
+elements in the inspector,
+
+00:12:55.880 --> 00:12:57.710
+you would see there's
+a div called myApp
+
+00:12:57.710 --> 00:13:00.950
+with an H1 Hello World.
+
+00:13:00.950 --> 00:13:02.750
+Oops.
+
+00:13:02.750 --> 00:13:06.560
+So that's React in a
+very small nutshell.
+
+00:13:06.560 --> 00:13:08.390
+React R is a package
+that has been around
+
+00:13:08.390 --> 00:13:12.860
+since 2016 by a gentleman named
+Kent Russell, really nice guy.
+
+00:13:12.860 --> 00:13:14.840
+And his goal was
+to figure out ways
+
+00:13:14.840 --> 00:13:18.770
+to incorporate React and
+JSX into Shiny applications.
+
+00:13:18.770 --> 00:13:22.010
+And among other
+things, the package
+
+00:13:22.010 --> 00:13:25.370
+before we started working on
+it had React HTML dependencies,
+
+00:13:25.370 --> 00:13:28.580
+React and React Dom, and so
+it is the canonical place
+
+00:13:28.580 --> 00:13:32.690
+in the R package ecosystem
+where React stuff is currently
+
+00:13:32.690 --> 00:13:34.429
+being hung.
+
+00:13:34.429 --> 00:13:36.470
+He also did something
+really neat in his package.
+
+00:13:36.470 --> 00:13:38.930
+He embeds V8, the
+JavaScript engine,
+
+00:13:38.930 --> 00:13:43.610
+to support JSX tags or
+JSX strings inside R.
+
+00:13:43.610 --> 00:13:45.050
+It's pretty wild,
+but it basically
+
+00:13:45.050 --> 00:13:47.750
+means that you can write
+JSX without installing
+
+00:13:47.750 --> 00:13:49.040
+any JavaScript build tools.
+
+00:13:49.040 --> 00:13:51.331
+So that's a neat thing and
+Kent's done a lot with that.
+
+00:13:53.650 --> 00:13:56.360
+The enhancements that
+I'm demonstrating now
+
+00:13:56.360 --> 00:13:58.940
+have a more specific goal
+than the original package
+
+00:13:58.940 --> 00:14:03.620
+goal, which is to make HTML
+widgets, in particular, easier.
+
+00:14:03.620 --> 00:14:07.340
+And the idea to do this-- it
+was either Joe or JJ, somebody
+
+00:14:07.340 --> 00:14:09.320
+in our studio before
+me, identified
+
+00:14:09.320 --> 00:14:13.070
+a symmetry between React's API
+and the API of HTML widgets
+
+00:14:13.070 --> 00:14:15.380
+and thought, we have
+an opportunity here
+
+00:14:15.380 --> 00:14:17.825
+to bridge these two worlds
+in maybe an elegant
+
+00:14:17.825 --> 00:14:19.700
+way, or at least the way
+that would prevent people
+
+00:14:19.700 --> 00:14:22.490
+from writing lots of code.
+
+00:14:22.490 --> 00:14:24.740
+And the third goal is
+we want to, like I said,
+
+00:14:24.740 --> 00:14:28.070
+prescribe and support and
+document workflows and tool
+
+00:14:28.070 --> 00:14:30.380
+chains for those who are
+not as intimately familiar
+
+00:14:30.380 --> 00:14:34.930
+with the JavaScript ecosystem.
+
+00:14:34.930 --> 00:14:37.450
+So to make an HTML widget using
+everything I just told you
+
+00:14:37.450 --> 00:14:39.580
+about, you would first
+scaffold an R package
+
+00:14:39.580 --> 00:14:41.200
+with the usethis package.
+
+00:14:41.200 --> 00:14:42.550
+usethis, amazing package.
+
+00:14:42.550 --> 00:14:45.580
+It has a function in it
+called create_package
+
+00:14:45.580 --> 00:14:51.370
+and it will build out an
+empty skeletal package.
+
+00:14:51.370 --> 00:14:57.970
+Then you can call React R colon
+colon scaffold React widget
+
+00:14:57.970 --> 00:15:01.060
+while you're inside that package
+you just scaffolded, and it
+
+00:15:01.060 --> 00:15:05.560
+will populate with JavaScript
+build tool configurations
+
+00:15:05.560 --> 00:15:10.270
+that we will
+support and condone.
+
+00:15:10.270 --> 00:15:12.910
+And then, finally, you do need
+to install yarn and webpack
+
+00:15:12.910 --> 00:15:13.700
+on your machine.
+
+00:15:13.700 --> 00:15:16.547
+But once you do, then you
+can install these tools
+
+00:15:16.547 --> 00:15:18.130
+and they'll pick up
+that configuration
+
+00:15:18.130 --> 00:15:19.210
+we generated for you.
+
+00:15:19.210 --> 00:15:20.584
+And at the end of
+the day, you'll have a minimum
+
+00:15:20.584 --> 00:15:23.670
+viable working HTML widget with
+React in it.
+
+00:15:27.980 --> 00:15:31.310
+We do have some remaining
+work ahead of us.
+
+00:15:31.310 --> 00:15:35.840
+So I would prepare you, as you
+begin on your React journey,
+
+00:15:35.840 --> 00:15:38.030
+that there are some
+limitations currently.
+
+00:15:38.030 --> 00:15:40.430
+We haven't figured
+out a really nice way
+
+00:15:40.430 --> 00:15:43.880
+of sending data or really
+supporting widget authors
+
+00:15:43.880 --> 00:15:48.754
+to send data from the browser
+context to the R context.
+
+00:15:48.754 --> 00:15:50.670
+This is not impossible
+right now and, in fact,
+
+00:15:50.670 --> 00:15:54.860
+nothing I'm showing you was
+impossible before my talk
+
+00:15:54.860 --> 00:15:58.277
+because it really just was a
+factor of how much JavaScript
+
+00:15:58.277 --> 00:15:59.360
+you were willing to write.
+
+00:15:59.360 --> 00:16:03.410
+So this is a case where sending
+values from a React-based HTML
+
+00:16:03.410 --> 00:16:06.547
+widget to R, not impossible,
+but as of right
+
+00:16:06.547 --> 00:16:08.630
+now, you're going to need
+to write some JavaScript that
+
+00:16:08.630 --> 00:16:12.980
+relies on this existing Shiny
+feature on input change.
+
+00:16:12.980 --> 00:16:15.050
+We made some
+interesting prototypes
+
+00:16:15.050 --> 00:16:18.080
+to support this without
+additional JavaScript
+
+00:16:18.080 --> 00:16:20.510
+and I think these ideas
+hold some promise.
+
+00:16:20.510 --> 00:16:23.450
+So over the coming
+weeks, days, months,
+
+00:16:23.450 --> 00:16:25.179
+we're going to be
+iterating on that.
+
+00:16:25.179 --> 00:16:27.470
+And again, this is why it
+would be so awesome if you're
+
+00:16:27.470 --> 00:16:29.844
+interested in this to get
+involved and try it out and let us know
+
+00:16:29.844 --> 00:16:31.950
+what would feel natural
+to you
+
+00:16:31.950 --> 00:16:33.408
+because at the end
+of the day, this is all about
+
+00:16:33.408 --> 00:16:36.022
+supporting ease of use and
+accessibility.
+
+00:16:40.800 --> 00:16:43.110
+So that's all the
+material I have prepared.
+
+00:16:43.110 --> 00:16:45.160
+I think I'll have quite
+a few time for questions.
+
+00:16:45.160 --> 00:16:47.659
+I would like to make a special
+thanks to Kent Russell, who's been
+
+00:16:47.659 --> 00:16:49.650
+such a great package
+maintainer
+
+00:16:49.650 --> 00:16:51.810
+and maybe I could call him
+a friend at this point.
+
+00:16:51.810 --> 00:16:54.210
+Haven't met him in
+person, a lot of e-mails,
+
+00:16:54.210 --> 00:16:56.190
+but I hope he's cool with that.
+
+00:16:56.190 --> 00:16:57.270
+So thank you, Kent.
+
+00:16:57.270 --> 00:16:58.270
+Thank you all very much.
+
+00:16:58.270 --> 00:17:00.745
+[APPLAUSE]
+
+00:17:06.182 --> 00:17:07.640
+We do have some
+time for questions.
+
+00:17:07.640 --> 00:17:09.390
+So let me know and all
+throw you the-- ah.
+
+00:17:15.532 --> 00:17:16.530
+Throw it.
+
+00:17:16.530 --> 00:17:18.450
+Throw it?
+
+00:17:18.450 --> 00:17:20.390
+I'm going to bean somebody.
+
+00:17:20.390 --> 00:17:22.940
+Here you go.
+
+00:17:22.940 --> 00:17:23.730
+This how we do it?
+
+00:17:23.730 --> 00:17:25.319
+OK.
+
+00:17:25.319 --> 00:17:27.660
+It's funny when you go to a
+talk and it covers something
+
+00:17:27.660 --> 00:17:31.770
+that you already were
+dying to learn about.
+
+00:17:31.770 --> 00:17:32.760
+So thank you very much.
+
+00:17:32.760 --> 00:17:33.420
+Sure.
+
+00:17:33.420 --> 00:17:39.090
+However, the problem is that I
+have a similar mapping library
+
+00:17:39.090 --> 00:17:43.200
+sort of application,
+but it's from View.
+
+00:17:43.200 --> 00:17:49.560
+How-- not sure how
+to phrase this.
+
+00:17:49.560 --> 00:17:52.481
+How much work is it to
+create this React R package?
+
+00:17:52.481 --> 00:17:54.480
+And do you think it's
+very likely that something
+
+00:17:54.480 --> 00:17:56.340
+would be recreated for View?
+
+00:17:56.340 --> 00:17:58.740
+So first of all, great point.
+
+00:17:58.740 --> 00:18:00.510
+Second of all, we
+should hang out.
+
+00:18:00.510 --> 00:18:03.300
+Maybe we can be friends.
+
+00:18:03.300 --> 00:18:09.180
+Third, we think very highly
+of you within our studio.
+
+00:18:09.180 --> 00:18:11.820
+And I say that's kind
+of the collective
+
+00:18:11.820 --> 00:18:13.890
+because I don't have
+personal experience with it,
+
+00:18:13.890 --> 00:18:15.480
+but we have several
+experience reports
+
+00:18:15.480 --> 00:18:18.060
+internally of successes.
+
+00:18:18.060 --> 00:18:20.730
+We chose React initially because
+there was already an existing
+
+00:18:20.730 --> 00:18:23.220
+package and someone in the
+community we could work with
+
+00:18:23.220 --> 00:18:26.742
+on it, and because
+there-- it seems like--
+
+00:18:26.742 --> 00:18:28.200
+I could be wrong,
+but my impression
+
+00:18:28.200 --> 00:18:30.990
+is there are far more available
+libraries in React world
+
+00:18:30.990 --> 00:18:33.207
+than in View world
+as of this moment.
+
+00:18:33.207 --> 00:18:35.790
+I could be wrong about that, but
+that's kind of my impression.
+
+00:18:35.790 --> 00:18:36.780
+Is that on point?
+
+00:18:36.780 --> 00:18:37.280
+Or--
+
+00:18:37.280 --> 00:18:37.780
+Sure. No, I agree.
+
+00:18:37.780 --> 00:18:38.527
+My
+
+00:18:38.527 --> 00:18:44.266
+question, is it better
+[INAUDIBLE] View.
+
+00:18:44.266 --> 00:18:48.008
+My question is whether
+there's a massive amount of
+
+00:18:48.008 --> 00:18:50.270
+work [INAUDIBLE].
+
+00:18:50.270 --> 00:18:51.541
+Oh, no.
+
+00:18:51.541 --> 00:18:56.950
+--initially just building
+my own widget from 0.
+
+00:18:56.950 --> 00:18:58.300
+Right.
+
+00:18:58.300 --> 00:19:01.090
+So to answer that specific
+technical question,
+
+00:19:01.090 --> 00:19:06.850
+I think there are as few, if not
+fewer technical hurdles in View
+
+00:19:06.850 --> 00:19:07.930
+as there are on React.
+
+00:19:07.930 --> 00:19:11.440
+I mentioned the symmetry
+between HTML widgets and React.
+
+00:19:11.440 --> 00:19:13.619
+I believe there is that
+same symmetry based
+
+00:19:13.619 --> 00:19:15.910
+on what I know right now
+between HTML widgets and view.
+
+00:19:15.910 --> 00:19:17.326
+So it's something
+we've identified and
+
+00:19:17.326 --> 00:19:20.338
+we really want to do at some
+point in the future.
+
+00:19:20.338 --> 00:19:21.256
+Thank you.
+
+00:19:23.971 --> 00:19:24.470
+Hi.
+
+00:19:24.470 --> 00:19:26.040
+I had a question about--
+
+00:19:26.040 --> 00:19:28.704
+there's this library that you
+guys have called Crosstalk.
+
+00:19:28.704 --> 00:19:30.370
+I'm not sure if you're
+familiar with it.
+
+00:19:30.370 --> 00:19:30.869
+Yes. But what
+
+00:19:30.869 --> 00:19:34.720
+it does is, if you
+have some data
+
+00:19:34.720 --> 00:19:39.040
+that you want to filter on the
+front end, you can add a plotly
+
+00:19:39.040 --> 00:19:41.680
+and you can add a data table
+and you can add some dropdowns,
+
+00:19:41.680 --> 00:19:44.260
+and it does all of those
+filterings very quickly for you
+
+00:19:44.260 --> 00:19:45.800
+on the front end.
+
+00:19:45.800 --> 00:19:48.357
+I don't know if work is being
+actively done on that package,
+
+00:19:48.357 --> 00:19:50.440
+but when I was looking at
+the stuff you were doing
+
+00:19:50.440 --> 00:19:53.470
+with the React, I was
+wondering if that sort
+
+00:19:53.470 --> 00:19:55.510
+of front-end filtering
+and aggregation
+
+00:19:55.510 --> 00:19:58.540
+is something that you guys
+have planned for React.
+
+00:19:58.540 --> 00:20:01.390
+So we haven't worked
+on that specifically,
+
+00:20:01.390 --> 00:20:03.040
+but it is one of
+our goals to be what
+
+00:20:03.040 --> 00:20:06.060
+I think of as well-behaved
+members of the HTML widgets
+
+00:20:06.060 --> 00:20:07.880
+ecosystem.
+
+00:20:07.880 --> 00:20:10.840
+There are some cases where we're
+going to sacrifice capabilities
+
+00:20:10.840 --> 00:20:11.507
+for ease of use.
+
+00:20:11.507 --> 00:20:13.881
+So I mentioned that there's
+a lot of scaffolding involved to get
+
+00:20:13.881 --> 00:20:16.150
+people going quickly I think
+Crosstalk is one
+
+00:20:16.150 --> 00:20:19.330
+of those cases where it would
+be very difficult for us
+
+00:20:19.330 --> 00:20:23.410
+to scaffold a general
+approach, so JavaScript
+
+00:20:23.410 --> 00:20:24.160
+would be involved.
+
+00:20:24.160 --> 00:20:26.470
+But it's certainly not something
+we would rule out or otherwise
+
+00:20:26.470 --> 00:20:27.160
+make impossible.
+
+00:20:27.160 --> 00:20:28.790
+So it would always be possible.
+
+00:20:28.790 --> 00:20:32.680
+It just may involve more
+JavaScript than I showed.
+
+00:20:32.680 --> 00:20:33.250
+Yes?
+
+00:20:33.250 --> 00:20:33.749
+Yeah. Would
+
+00:20:33.749 --> 00:20:37.570
+there be any limitations on
+the React components
+
+00:20:37.570 --> 00:20:38.680
+as to compatibility?
+
+00:20:38.680 --> 00:20:42.610
+For example, something
+that does too much in React
+
+00:20:42.610 --> 00:20:44.800
+that you wouldn't
+be able to support?
+
+00:20:44.800 --> 00:20:45.940
+Excellent question.
+
+00:20:45.940 --> 00:20:46.570
+Yes.
+
+00:20:46.570 --> 00:20:48.370
+So we made some
+cuts there, again,
+
+00:20:48.370 --> 00:20:49.792
+in the interest of ease of use.
+
+00:20:49.792 --> 00:20:51.250
+There are certain
+things you can do
+
+00:20:51.250 --> 00:20:55.270
+in React that don't really
+follow from the model
+
+00:20:55.270 --> 00:20:57.550
+that we advocate.
+
+00:20:57.550 --> 00:20:59.860
+We settled on the model
+we have because it's
+
+00:20:59.860 --> 00:21:01.390
+a set of conventions
+for interoping
+
+00:21:01.390 --> 00:21:04.831
+with React that seemed to work
+for majority of libraries.
+
+00:21:04.831 --> 00:21:07.330
+There are those edge cases, and
+when you hit the edge cases,
+
+00:21:07.330 --> 00:21:08.975
+it's kind of like
+the Crosstalk story.
+
+00:21:08.975 --> 00:21:11.350
+It's sort of you need to you
+need to know JavaScript then
+
+00:21:11.350 --> 00:21:12.580
+at that point.
+
+00:21:12.580 --> 00:21:14.600
+But again, when you
+do get to that point,
+
+00:21:14.600 --> 00:21:17.170
+our goal is to at least have
+examples and documentation
+
+00:21:17.170 --> 00:21:22.870
+to support you as you go that
+direction in JavaScript world
+
+00:21:22.870 --> 00:21:25.030
+so that it's never totally
+inaccessible to you,
+
+00:21:25.030 --> 00:21:26.740
+that you identify
+while you're building
+
+00:21:26.740 --> 00:21:28.990
+your widget that that's a step,
+a bridge you need to cross,
+
+00:21:28.990 --> 00:21:31.448
+and then we're there to hold
+your hand, at least, while you while
+
+00:21:31.448 --> 00:21:34.450
+you do that.
+
+00:21:34.450 --> 00:21:36.300
+[FLOURISH]
\ No newline at end of file
diff --git a/archive/techworks/items/rstudio-integrating-react-shiny/captions.headers b/archive/techworks/items/rstudio-integrating-react-shiny/captions.headers
new file mode 100644
index 0000000..cadf45d
--- /dev/null
+++ b/archive/techworks/items/rstudio-integrating-react-shiny/captions.headers
@@ -0,0 +1,29 @@
+HTTP/2 200 
+content-type: text/vtt; charset=utf-8
+x-envoy-upstream-service-time: 165
+server: istio-envoy
+x-content-type-options: nosniff
+x-permitted-cross-domain-policies: none
+access-control-allow-origin: *
+timing-allow-origin: *
+cache-control: public, no-cache
+etag: W/"08e4b9fc431b0b77df656df5989870b0"
+x-request-id: 3f4a4ade-8c3e-4118-b8d0-9a57c78a198b
+x-runtime: 0.163514
+via: 1.1 202eceb25387048bc093cf2084e5cea6.cloudfront.net (CloudFront), 1.1 varnish, 1.1 varnish
+x-amz-cf-pop: IAD61-P4
+x-amz-cf-id: DGiKAfzYn5zWYFn8E2j3chVMSashd_350UU66QbJ1qzd3oEIguR2bA==
+accept-ranges: bytes
+date: Sun, 09 Aug 2026 20:40:52 GMT
+age: 15
+x-served-by: cache-iad-kjyo7100104-IAD, cache-lax-kwhp1940102-LAX
+x-cache: Miss from cloudfront, MISS, HIT
+x-cache-hits: 0, 1
+x-timer: S1786308053.839099,VS0,VE2
+vary: Accept-Encoding,X-Forwarded-Proto
+strict-transport-security: max-age=0
+x-ecma-v: modern
+x-browser: unknown
+x-browser-version: 0
+content-length: 34624
+
diff --git a/archive/techworks/items/rstudio-integrating-react-shiny/original.ffprobe.json b/archive/techworks/items/rstudio-integrating-react-shiny/original.ffprobe.json
new file mode 100644
index 0000000..2d8d47a
--- /dev/null
+++ b/archive/techworks/items/rstudio-integrating-react-shiny/original.ffprobe.json
@@ -0,0 +1,32 @@
+{
+    "programs": [
+
+    ],
+    "stream_groups": [
+
+    ],
+    "streams": [
+        {
+            "index": 0,
+            "codec_name": "aac",
+            "codec_type": "audio",
+            "sample_rate": "48000",
+            "channels": 2,
+            "r_frame_rate": "0/0"
+        },
+        {
+            "index": 1,
+            "codec_name": "h264",
+            "codec_type": "video",
+            "width": 1920,
+            "height": 1080,
+            "r_frame_rate": "60/1"
+        }
+    ],
+    "format": {
+        "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
+        "duration": "1300.950000",
+        "size": "3268497989",
+        "bit_rate": "20099145"
+    }
+}
diff --git a/archive/techworks/items/rstudio-integrating-react-shiny/original.mp4 b/archive/techworks/items/rstudio-integrating-react-shiny/original.mp4
new file mode 100644
index 0000000..cb5324b
--- /dev/null
+++ b/archive/techworks/items/rstudio-integrating-react-shiny/original.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:72cdfd85e16cd5805fedada83623629eea48ced71b1bdc686e6f513fd7abfa78
+size 3268497989
diff --git a/archive/techworks/items/rstudio-integrating-react-shiny/source.headers b/archive/techworks/items/rstudio-integrating-react-shiny/source.headers
new file mode 100644
index 0000000..5bc756b
--- /dev/null
+++ b/archive/techworks/items/rstudio-integrating-react-shiny/source.headers
@@ -0,0 +1,54 @@
+HTTP/2 301 
+content-type: text/html; charset=utf-8
+content-length: 502
+location: https://posit.co/resources/videos/integrating-react-js-and-shiny
+server: nginx
+date: Sun, 09 Aug 2026 20:35:13 GMT
+via: varnish, 1.1 34dd87875785e0ee116e7e29b2ad6cc4.cloudfront.net (CloudFront)
+x-drupal-route-normalizer: 1
+content-language: en
+x-content-type-options: nosniff
+x-frame-options: SAMEORIGIN
+expires: Sun, 19 Nov 1978 05:00:00 GMT
+cache-control: max-age=60, must-revalidate, public, s-maxage=900, stale-if-error=3600, stale-while-revalidate=60
+x-generator: Drupal 11 (https://www.drupal.org)
+x-xss-protection: 1; mode=block
+strict-transport-security: max-age=31622400; includeSubDomains; preload
+last-modified: Sun, 09 Aug 2026 20:35:13 GMT
+etag: "1786307713"
+x-request-id: v-d2e3b0f8-9431-11f1-a7cc-77a17020fd6f
+x-ah-environment: prod
+vary: Cookie
+x-cache: Miss from cloudfront
+x-amz-cf-pop: LAX50-P4
+alt-svc: h3=":443"; ma=86400
+x-amz-cf-id: XsqnoN_lR1Th6d9U6eWk7H4FP0Tehxr-vDw0vmzGwTI8NBA8LTeDJg==
+age: 0
+
+HTTP/2 200 
+content-type: text/html; charset=UTF-8
+server: nginx
+date: Sun, 09 Aug 2026 20:35:16 GMT
+via: varnish, 1.1 34dd87875785e0ee116e7e29b2ad6cc4.cloudfront.net (CloudFront)
+accept-ranges: bytes
+cache-control: max-age=60, must-revalidate, public, s-maxage=300, stale-if-error=3600, stale-while-revalidate=60
+x-drupal-dynamic-cache: MISS
+content-language: en
+x-content-type-options: nosniff
+x-frame-options: SAMEORIGIN
+expires: Sun, 19 Nov 1978 05:00:00 GMT
+x-generator: Drupal 11 (https://www.drupal.org)
+x-xss-protection: 1; mode=block
+strict-transport-security: max-age=31622400; includeSubDomains; preload
+last-modified: Sun, 09 Aug 2026 20:35:14 GMT
+etag: "1786307714-gzip"
+content-encoding: gzip
+x-request-id: v-d3162678-9431-11f1-9fad-03565152e52a
+x-ah-environment: prod
+vary: Cookie,Accept-Encoding
+x-cache: Miss from cloudfront
+x-amz-cf-pop: LAX50-P4
+alt-svc: h3=":443"; ma=86400
+x-amz-cf-id: I3-BkYQpriqMxxj6lXmjym4XPH8PqZaXKJYCDjR4jC21DxqomCxkmg==
+age: 0
+
diff --git a/archive/techworks/items/rstudio-integrating-react-shiny/source.html b/archive/techworks/items/rstudio-integrating-react-shiny/source.html
new file mode 100644
index 0000000..f4dc6c1
--- /dev/null
+++ b/archive/techworks/items/rstudio-integrating-react-shiny/source.html
@@ -0,0 +1,2729 @@
+<!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'?'&amp;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="React.js is a thriving JavaScript library that eases encapsulating and sharing sophisticated component libraries. The React.js ecosystem is filled with components for doing everything from..." />
+<link rel="canonical" href="https://posit.co/resources/videos/integrating-react-js-and-shiny" />
+<link rel="image_src" href="/sites/default/files/migrate/videos/2023/02/thumbnail-305.jpg" />
+<meta property="og:site_name" content="Posit" />
+<meta property="og:type" content="website" />
+<meta property="og:url" content="https://posit.co/resources/videos/integrating-react-js-and-shiny" />
+<meta property="og:title" content="Integrating React.js and Shiny" />
+<meta property="og:description" content="React.js is a thriving JavaScript library that eases encapsulating and sharing sophisticated component libraries. The React.js ecosystem is filled with components for doing everything from..." />
+<meta property="og:image" content="https://posit.co/sites/default/files/migrate/videos/2023/02/thumbnail-305.jpg" />
+<meta property="article:publisher" content="positpbc" />
+<meta name="twitter:card" content="summary_large_image" />
+<meta name="twitter:description" content="React.js is a thriving JavaScript library that eases encapsulating and sharing sophisticated component libraries. The React.js ecosystem is filled with components for doing everything from..." />
+<meta name="twitter:title" content="Integrating React.js and Shiny" />
+<meta name="twitter:site" content="@posit_pbc" />
+<meta name="twitter:site:id" content="235261861" />
+<meta name="twitter:image" content="https://posit.co/sites/default/files/migrate/videos/2023/02/thumbnail-305.jpg" />
+<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": "Article",
+            "@id": "https://posit.co/resources/videos/integrating-react-js-and-shiny#article",
+            "headline": "Integrating React.js and Shiny",
+            "name": "Integrating React.js and Shiny",
+            "description": "React.js is a thriving JavaScript library that eases encapsulating and sharing sophisticated component libraries. The React.js ecosystem is filled with components for doing everything from...",
+            "image": {
+                "@type": "ImageObject",
+                "url": "https://posit.co/sites/default/files/migrate/videos/2023/02/thumbnail-305.jpg"
+            },
+            "datePublished": "2019-01-24",
+            "dateModified": "2023-02-10",
+            "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"
+                }
+            }
+        },
+        {
+            "@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": "VideoObject",
+            "uploadDate": "2019-01-24",
+            "description": "React.js is a thriving JavaScript library that eases encapsulating and sharing sophisticated component libraries. The React.js ecosystem is filled with components for doing everything from...",
+            "thumbnailUrl": "https://posit.co/sites/default/files/migrate/videos/2023/02/thumbnail-305.jpg",
+            "@id": "https://posit.co/resources/videos/integrating-react-js-and-shiny#video",
+            "name": "Integrating React.js and Shiny",
+            "embedUrl": "https://fast.wistia.com/medias/aduduauhq9"
+        },
+        {
+            "@type": "WebPage",
+            "@id": "https://posit.co/resources/videos/integrating-react-js-and-shiny/#webpage",
+            "publisher": {
+                "@type": "Organization",
+                "@id": "https://posit.co/#org",
+                "name": "Posit",
+                "url": "https://posit.co"
+            },
+            "inLanguage": "English"
+        }
+    ]
+}</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&amp;family=Source+Code+Pro:wght@400..600&amp;display=swap" crossorigin />
+<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400..700&amp;family=Source+Code+Pro:wght@400..600&amp;display=swap" crossorigin />
+<script>window.a2a_config=window.a2a_config||{};a2a_config.callbacks=[];a2a_config.overlays=[];a2a_config.templates={};</script>
+
+    <title>Integrating React.js and Shiny | Posit</title>
+    <link rel="stylesheet" media="all" href="/sites/default/files/css/css_vCpS-9m25pT1gyyM_A5z41_N8M1o32Hvmu3NECX3ZHc.css?delta=0&amp;language=en&amp;theme=kinetic&amp;include=eJx9T0kOgzAM_BAhT0JOMoBVHFexqdrfdwFxS0-j2Txy1oaYVe5aUd3GG1c45xCKpFDVeeZMzlptyL3orOpofX_ZuKBvr6Dyry6oe_DGy_JJFTZhM04bJoEZLZgStdjRh_NKTGS4yIkXPws2CApTVEhCGWdtQv79zEAtr-b0nPJurjIdSjwgNDxA22Avc8hv6g3xI4Tg" />
+<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_gclFIAzAPyJD9SRHjF_A0haiQYsuJZZ7GVCt1JqTPMo.css?delta=3&amp;language=en&amp;theme=kinetic&amp;include=eJx9T0kOgzAM_BAhT0JOMoBVHFexqdrfdwFxS0-j2Txy1oaYVe5aUd3GG1c45xCKpFDVeeZMzlptyL3orOpofX_ZuKBvr6Dyry6oe_DGy_JJFTZhM04bJoEZLZgStdjRh_NKTGS4yIkXPws2CApTVEhCGWdtQv79zEAtr-b0nPJurjIdSjwgNDxA22Avc8hv6g3xI4Tg" />
+
+    <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-resource">
+        <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="&lt;front&gt;">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 &amp; 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] [&amp;_img]:rounded-xl [&amp;_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="&lt;front&gt;">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] [&amp;_img]:rounded-xl [&amp;_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&#039;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 &amp; 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] [&amp;_img]:rounded-xl [&amp;_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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;6&quot;:&quot;6&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;11&quot;:&quot;11&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;16&quot;:&quot;16&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;21&quot;:&quot;21&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;31&quot;:&quot;31&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;46&quot;:&quot;46&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;36&quot;:&quot;36&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;26&quot;:&quot;26&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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="&lt;front&gt;">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&amp;type%5B136%5D=136&amp;type%5B131%5D=131&amp;type%5B246%5D=246&amp;search_api_fulltext=&amp;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 &amp; 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&amp;search_api_fulltext=&amp;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] [&amp;_img]:rounded-xl [&amp;_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">&times;</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-resource 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:resource">
+    <div class="bg-[image:var(--header-gradient)] pt-10 xl:pt-18">
+
+        <div id="resource-top-section" class="container container-default ">
+            <div class="shrink-0 surface-dark pb-41 xl:pb-87">
+                  <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="/content-library">Content library</a>
+                  </li>
+                              <li class="not-first:before:content-['>']">
+                      <a class="text-inherit hover:underline" href="/videos">Videos</a>
+                  </li>
+                              </ol>
+  </nav>
+
+                                    <div class="flex flex-wrap gap-5 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"> Open source packages - Quarto, Shiny, and more </span>
+                                            </div>
+                
+                
+                                    <div class="mt-8 lg:mt-10 before:icon-calendar/[20px] before:bg-white before:block flex items-center gap-2.5 text-white text-xs leading-[1.33] font-semibold">      2019-01-24
+  </div>
+                
+                
+                <h1 class="h1 lg:text-[54px] mt-5">Integrating React.js and Shiny</h1>
+                                            </div>
+                    </div>
+    </div>
+
+    <div class="container container-default max-w-[1038px]">
+
+                                    <div class="relative -mt-28 xl:-mt-72 overflow-hidden rounded-2xl [&_.media-oembed-content]:w-full">
+                          
+
+
+
+  
+
+<div  class="media media--type-remote-video media--view-mode-default h-[inherit] [&amp;_iframe]:mx-auto">
+  
+            <iframe src="https://posit.co/media/oembed?url=https%3A//fast.wistia.com/medias/aduduauhq9&amp;max_width=0&amp;max_height=0&amp;hash=8bshxLoaTINVWa9k0p7eZCJHc6O486N69Ifpzmsd2ss" width="960" height="540" class="media-oembed-content" loading="lazy" title="Integrating React.js and Shiny - Alan Dipert" data-video-id="aduduauhq9"></iframe>
+
+  
+  </div>
+
+  
+                    
+                </div>
+                    
+        
+        
+        <div id="resource-body" class="mt-13 mb-20 max-w-[696px] md:mt-15 mx-auto">
+                        <div>
+                <div class="flex gap-4 md:gap-10 items-center">
+                    <span class="text-base md:text-lg">Share</span>
+                    <div class="menu--social">
+                        <span class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://posit.co/resources/videos/integrating-react-js-and-shiny" data-a2a-title="Integrating React.js and Shiny"><a class="a2a_button_facebook"></a><a class="a2a_button_mastodon"></a><a class="a2a_button_linkedin"></a><a class="a2a_button_bluesky"></a></span>
+
+                    </div>
+                </div>
+                                                                                                    <div class="mt-13">
+                        <div class="text-formatted">
+      <hr>
+<p>React.js is a thriving JavaScript library that eases encapsulating and sharing sophisticated component libraries. The React.js ecosystem is filled with components for doing everything from color selection (react-color) to animation (react-spring). While it's always been technically possible to integrate React.js components with Shiny applications, it hasn't always been particularly obvious how. To make it easier, we augmented the excellent reactR package with functions specifically designed to make it easier to create new htmlwidgets, inputs, and outputs based on React.js components. In this talk, I will further motivate and demonstrate these new tools and do my best to empower the audience to try them out.</p>
+  </div>
+
+                    </div>
+                                            </div>
+        </div>
+
+                    <h2 class="h2 md:mb-18">Speakers</h2>
+            <div class="flex flex-col gap-8 max-w-[1008px]">
+                      
+
+
+<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&amp;itok=m74AE6hd 1x, /sites/default/files/styles/large_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&amp;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&amp;itok=wjGCvil4 1x, /sites/default/files/styles/small_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&amp;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&amp;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>
+
+
+</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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;31&quot;:&quot;31&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;46&quot;:&quot;46&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;36&quot;:&quot;36&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;26&quot;:&quot;26&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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 &amp; 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 &amp; 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\/11886","currentPathIsAdmin":false,"isFront":false,"currentLanguage":"en"},"pluralDelimiter":"\u0003","suppressDeprecationErrors":true,"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":"resource","title":"Integrating React.js and Shiny","tags":{"field_resource_type":"Video"}}},"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"]}]},"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":"resource","contentPath":"\/resources\/videos\/integrating-react-js-and-shiny","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="/sites/default/files/js/js_HokrY8q7cc_1ENX5JpoK2Tg9FmXkWLz7Y-THA8_gIrk.js?scope=footer&amp;delta=1&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEFywzAI_JAUHfIgDZawzFiCVKBO3ddXmbg91bnAsuwCA-RsAnwEOMFt7cLmknQMSdpDGNn0thOjUfI-t8WzGK2UwEhYr6WriGG_7pdKGa_bG0J-Z2_Iw1unUt6pOqqMntBl0kaqtFSMDVWhYFyghwve4T026DuaBLz7E_o2OG1zuDsXhDO7Ct9HeAb3UIsZDCocOMf_IvcxKO2VeA9_6D8uEpM5RehpU4OvmIaatPhiAvH8KUP1r3o-ANK8oVw7TmHHT4T6A0eFwTY"></script>
+<script src="https://static.addtoany.com/menu/page.js" defer></script>
+<script src="/sites/default/files/js/js_iDgkh5LVhg7OxqZKPS11Ic5T0J1YdZFFh-H6KnTRvSs.js?scope=footer&amp;delta=3&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEFywzAI_JAUHfIgDZawzFiCVKBO3ddXmbg91bnAsuwCA-RsAnwEOMFt7cLmknQMSdpDGNn0thOjUfI-t8WzGK2UwEhYr6WriGG_7pdKGa_bG0J-Z2_Iw1unUt6pOqqMntBl0kaqtFSMDVWhYFyghwve4T026DuaBLz7E_o2OG1zuDsXhDO7Ct9HeAb3UIsZDCocOMf_IvcxKO2VeA9_6D8uEpM5RehpU4OvmIaatPhiAvH8KUP1r3o-ANK8oVw7TmHHT4T6A0eFwTY"></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&amp;delta=6&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEFywzAI_JAUHfIgDZawzFiCVKBO3ddXmbg91bnAsuwCA-RsAnwEOMFt7cLmknQMSdpDGNn0thOjUfI-t8WzGK2UwEhYr6WriGG_7pdKGa_bG0J-Z2_Iw1unUt6pOqqMntBl0kaqtFSMDVWhYFyghwve4T026DuaBLz7E_o2OG1zuDsXhDO7Ct9HeAb3UIsZDCocOMf_IvcxKO2VeA9_6D8uEpM5RehpU4OvmIaatPhiAvH8KUP1r3o-ANK8oVw7TmHHT4T6A0eFwTY"></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="/core/../themes/custom/kinetic/dist/assets/components/04-pages/resource/resource.es6.js-BkpIZJGP.js?tj9gxp" type="module"></script>
+<script src="/sites/default/files/js/js_RJ1fQwJFFCKKXw_812IKF75kByQsuPM4uFd8LwOn-eU.js?scope=footer&amp;delta=10&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEFywzAI_JAUHfIgDZawzFiCVKBO3ddXmbg91bnAsuwCA-RsAnwEOMFt7cLmknQMSdpDGNn0thOjUfI-t8WzGK2UwEhYr6WriGG_7pdKGa_bG0J-Z2_Iw1unUt6pOqqMntBl0kaqtFSMDVWhYFyghwve4T026DuaBLz7E_o2OG1zuDsXhDO7Ct9HeAb3UIsZDCocOMf_IvcxKO2VeA9_6D8uEpM5RehpU4OvmIaatPhiAvH8KUP1r3o-ANK8oVw7TmHHT4T6A0eFwTY"></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_A9DnsSiedfF5h3C4VGlBcjkzzfubwtQkAYqN6javnG4.js?scope=footer&amp;delta=12&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEFywzAI_JAUHfIgDZawzFiCVKBO3ddXmbg91bnAsuwCA-RsAnwEOMFt7cLmknQMSdpDGNn0thOjUfI-t8WzGK2UwEhYr6WriGG_7pdKGa_bG0J-Z2_Iw1unUt6pOqqMntBl0kaqtFSMDVWhYFyghwve4T026DuaBLz7E_o2OG1zuDsXhDO7Ct9HeAb3UIsZDCocOMf_IvcxKO2VeA9_6D8uEpM5RehpU4OvmIaatPhiAvH8KUP1r3o-ANK8oVw7TmHHT4T6A0eFwTY"></script>
+
+  </body>
+</html>
diff --git a/archive/techworks/items/rstudio-integrating-react-shiny/still.png b/archive/techworks/items/rstudio-integrating-react-shiny/still.png
new file mode 100644
index 0000000..3e874ed
Binary files /dev/null and b/archive/techworks/items/rstudio-integrating-react-shiny/still.png differ
diff --git a/archive/techworks/items/rstudio-integrating-react-shiny/wistia.headers b/archive/techworks/items/rstudio-integrating-react-shiny/wistia.headers
new file mode 100644
index 0000000..8a5ff16
--- /dev/null
+++ b/archive/techworks/items/rstudio-integrating-react-shiny/wistia.headers
@@ -0,0 +1,31 @@
+HTTP/2 200 
+content-type: application/json; charset=utf-8
+content-encoding: br
+x-envoy-upstream-service-time: 183
+server: istio-envoy
+x-content-type-options: nosniff
+x-permitted-cross-domain-policies: none
+access-control-allow-origin: *
+timing-allow-origin: *
+cache-control: public, no-cache
+x-player-privacy-mode: 1
+etag: W/"f451fd97f3990482d1ab98a6fe1d335b"
+x-request-id: 9126ca0d-462f-4d84-9e59-eedcc9a4f1c6
+x-runtime: 0.180576
+via: 1.1 87231a08ea3c7f15402d76db2a29d98c.cloudfront.net (CloudFront), 1.1 varnish, 1.1 varnish
+x-amz-cf-pop: IAD61-P4
+x-amz-cf-id: w6hYHNO2YIKgoMrlDMcZK3GsvIgifvsGgYpTZWyYzEunrlo91dIehw==
+accept-ranges: bytes
+age: 0
+date: Sun, 09 Aug 2026 20:35:34 GMT
+x-served-by: cache-iad-khef600092-IAD, cache-lax-kwhp1940127-LAX
+x-cache: Miss from cloudfront, MISS, MISS
+x-cache-hits: 0, 0
+x-timer: S1786307735.663943,VS0,VE250
+vary: Accept-Encoding,X-Forwarded-Proto,X-ECMA-Override
+strict-transport-security: max-age=0
+x-ecma-v: modern
+x-browser: unknown
+x-browser-version: 0
+content-length: 9643
+
diff --git a/archive/techworks/items/rstudio-integrating-react-shiny/wistia.json b/archive/techworks/items/rstudio-integrating-react-shiny/wistia.json
new file mode 100644
index 0000000..745e5ff
--- /dev/null
+++ b/archive/techworks/items/rstudio-integrating-react-shiny/wistia.json
@@ -0,0 +1 @@
+{"media":{"accountId":393487,"accountHashedId":"yy68sak8q4","accountKey":"wistia-production_393487","analyticsHost":"https://distillery.wistia.net","formsHost":"https://app.wistia.com","formEventsApi":"/form-stream/1.0.0","aspectRatio":1.7777777777777777,"assets":[{"is_enhanced":false,"type":"original","slug":"original","display_name":"Original File","details":{},"width":1920,"height":1080,"size":3268497989,"bitrate":19628,"public":true,"status":2,"progress":1.0,"url":"https://embed-ssl.wistia.com/deliveries/139145360e04b63b6421a89f22ca099b.bin","created_at":1548358896},{"is_enhanced":false,"type":"iphone_video","slug":"mp4_h264_232k","display_name":"360p","details":{},"container":"mp4","codec":"h264","width":640,"height":360,"ext":"mp4","size":38636474,"bitrate":232,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":61037,"average_bitrate":38961,"early_max_bitrate":141063},"url":"https://embed-ssl.wistia.com/deliveries/3e74bb176a8d74dbf1725a3ef28a8db33e8c7ade.bin","created_at":1548358896,"segment_duration":3,"opt_vbitrate":1200},{"is_enhanced":false,"type":"mp4_video","slug":"mp4_h264_181k","display_name":"224p","details":{},"container":"mp4","codec":"h264","width":400,"height":224,"ext":"mp4","size":30277433,"bitrate":181,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":10403,"average_bitrate":10880,"early_max_bitrate":12283},"url":"https://embed-ssl.wistia.com/deliveries/754df9f8b1647691e96cd0d2c3967e1d2e9a713c.bin","created_at":1548358896,"segment_duration":3,"opt_vbitrate":300},{"is_enhanced":false,"type":"md_mp4_video","slug":"mp4_h264_305k","display_name":"540p","details":{},"container":"mp4","codec":"h264","width":960,"height":540,"ext":"mp4","size":50871285,"bitrate":305,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":76453,"average_bitrate":46990,"early_max_bitrate":147643},"url":"https://embed-ssl.wistia.com/deliveries/0581e2e334feecb1871e014b30ef6a8f6fe1d6d7.bin","created_at":1548358896,"segment_duration":3,"opt_vbitrate":1800},{"is_enhanced":false,"type":"hd_mp4_video","slug":"mp4_h264_411k","display_name":"720p","details":{},"container":"mp4","codec":"h264","width":1280,"height":720,"ext":"mp4","size":68540592,"bitrate":411,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":113677,"average_bitrate":60492,"early_max_bitrate":196773},"url":"https://embed-ssl.wistia.com/deliveries/f8fa72649cba6a653eff8cb6ca19116867ae5cee.bin","created_at":1548358896,"segment_duration":3,"opt_vbitrate":3750},{"is_enhanced":false,"type":"hd_mp4_video","slug":"mp4_h264_894k","display_name":"1080p","details":{},"container":"mp4","codec":"h264","width":1920,"height":1080,"ext":"mp4","size":148934517,"bitrate":894,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":277237,"average_bitrate":122921,"early_max_bitrate":431711},"url":"https://embed-ssl.wistia.com/deliveries/1372a14903ebf763c5a95818f37693e47ec2e2be.bin","created_at":1548358896,"segment_duration":3,"opt_vbitrate":5625},{"is_enhanced":false,"type":"storyboard","slug":"storyboard_2000x2260","display_name":"Storyboard","details":{},"width":2000,"height":2260,"ext":"jpg","size":555633,"bitrate":0,"public":true,"status":2,"progress":1.0,"metadata":{"frame_width":200,"frame_height":113,"frame_count":200,"aspect_ratio":1.7777777777777777},"url":"https://embed-ssl.wistia.com/deliveries/2d2d80336a94567c78c275e4231f23da85c72cbc.bin","created_at":1548358896},{"is_enhanced":false,"type":"still_image","slug":"still_image_1920x1080","display_name":"Thumbnail Image","details":{},"width":1920,"height":1080,"size":1452118,"bitrate":0,"public":true,"status":2,"progress":1.0,"url":"https://embed-ssl.wistia.com/deliveries/72e76638287c06b6cba4a67bdc399c29.bin","created_at":1548378220}],"branding":false,"createdAt":1548358896,"distilleryUrl":"https://distillery.wistia.com/x","duration":1300.95,"enableCustomerLogo":true,"firstEmbedForAccount":false,"firstShareForAccount":false,"availableTranscripts":[{"bcp47LanguageTag":"en","familyName":"English","familyNativeName":"English","hasCaptions":true,"hasVideoStream":false,"name":"English","nativeName":"English","wistiaLanguageCode":"eng","language":"eng","ietf_language_tag":"eng","alpha3_terminologic":"eng","alpha3_bibliographic":"eng","iso639_2_language_code":"en","english_name":"English","native_name":"English","right_to_left":false,"alpha3Bibliographic":"eng","alpha3Terminologic":"eng","ietfLanguageTag":"eng","iso6392LanguageCode":"en","genericName":"English","genericNativeName":"English"}],"hashedId":"aduduauhq9","mediaId":39602428,"mediaKey":"wistia-production_39602428","mediaType":"Video","name":"Integrating React.js and Shiny - Alan Dipert","preloadPreference":"","progress":1.0,"protected":false,"projectId":3714868,"seoDescription":"a rstudio::conf 2019 video","showAbout":true,"status":2,"type":"Video","playableWithoutInstantHls":true,"privacyMode":true,"stats":{"loadCount":9507,"playCount":3622,"uniqueLoadCount":7134,"uniquePlayCount":3106,"averageEngagement":0.251177},"trackingTransmitInterval":43,"liveStreamEventDetails":null,"integrations":{"google_analytics4":true,"google_analytics":true},"tagManager":false,"captions":[{"language":"eng","text":"[FLOURISH]\n\n[APPLAUSE]\n\nHi, everybody. Thank you so much for coming. I really, really appreciate it. I've been doing some very exciting work and I'm really even more excited to share it with you all today. So I'm Alan Dipert. I work at RStudio. Like Barrett, I'm on the Shiny team and I've had the pleasure over the past few months of working on this problem of integrating React, the JavaScript library, with Shiny.\n\nI believe that for quite some time people in the Shiny community have been interested in React and about ways to integrate it with Shiny, and so this work was initiated in an effort to bridge that gap somehow. And we've been at it for a few months and we have work to show, which is why I'm here and why I'm so excited.\n\nBut some questions and problems remain unsolved, and that's sort of where you come in. So I would encourage you, if you're at all interested in any of this, to follow up with me afterwards. There may or may not be time for questions, but I'm always happy to talk about this stuff. And we can talk shop and discuss why you're interested in the context that you're interested in it in because I think that this could be the start of a really fun and exciting little niche thing in the Shiny ecosystem.\n\nSo without further ado, let's start with a motivating problem, I guess, a problem slash demo.\n\nSo like many of you, I'm online. I'm on the web. I surf the web. And you come across things that are awesome and the only problem with them is that they don't have an HTML widget or they're otherwise not accessible from R. So one of these things that I ran across was a React-based library called Mapbox GL.\n\nMapbox is a company.\n\nThey make a library called Mapbox GL, which is very similar to Leaflet, but it has some interesting properties. In particular, it's highly themeable. So let me show you some of the demos of this thing.\n\nSo this is a very nice Leaflet-esque map.\n\nBut of course, we can do heat maps, pretty fancy. And you can switch between these. The thing that's governing the colors of the roads and the city and county titles and stuff, that's all governed by one of these Mapbox style objects. And then on the left hand side here we've got the heap of JavaScript code involved in rendering that.\n\nProbably my most favorite one is the Superman mode one where you literally fly around.\n\nRight?\n\nSo just to be clear, I didn't make this. But I think it's awesome and this is the kind of thing that I think gets me excited when I am able to use it from R.\n\nSo what I did is in the course of not too long, maybe an hour or two, using the tools and I'm about to explain to you, I was able to make my own HTML widget that provides a subset of the functionality we just saw and delivers it to us as an R HTML widget. And so I became aware early in the conference that the most important thing to keep in mind about here in Austin are tacos.\n\nSo there's this trending--\n\nhas been trending. Someone named Caitlin Hudon--\n\nhope I got that right--\n\nwho I haven't met, apparently posted on Twitter a list of her five favorite places. And then an RStudio person, Thomas Marchi made a Shiny dashboard using a Leaflet map, and I thought, hey, in keeping with the tradition of taco enthusiasm, I should make some kind of taco app.\n\nSo here we are.\n\nI've got some taco joints loaded up into a data frame and I'm displaying them with a data table here. And then over here I've got taco locations with fork and knife sort of blurry little icons. And then probably the neatest but also most awkward thing I can do is I can filter this, and after a little bit of burping, it comes back and you can see that we filter what shows up on the map.\n\nSo like I said, this was, like, an hour or two of work. Now, granted, I'm, like, the world's expert on this weird little library, so take that with a grain of salt. But like I said, I'm always happy to help you use it.\n\nSo this is the promise. This is the kind of thing that I think we can do more of if we develop these tools that help us bridge the JavaScript ecosystem, in particular the React ecosystem with Shiny.\n\nI'll flip back into PowerPoint mode here.\n\nOh, yeah. So there's some recordings in case there are internet issues.\n\nSo this is the all of the JavaScript code that I needed to write in order to make go what I just showed you.\n\nIf you know JavaScript and are familiar with React, you might have a slight grin or even a smile on your face.\n\nIf you don't know JavaScript or don't know React, you might be a little worried at this point. But don't be.\n\nI can assure you that the things you see here can be learned fairly quickly and a big part of what we hope to do with this initiative is to build out not just the code to do that bridging that I mentioned, but also to build out the documentation and the recommendations around learning JavaScript, leveraging its ecosystem, and all those things that surround JavaScript development to make them more accessible to people who don't have that experience.\n\nSo this is the extent of the code that does the adapting of the React library I just showed to Shiny world.\n\nAnd yeah, I think it's, like, 11 lines of code. I don't know.\n\nIs anyone surprised at how small this is or disgusted by how big it is?\n\nShow of hands. Hm, OK.\n\n[LAUGHTER]\n\nMy meme game is usually very weak, but I put this one in. It seems they've gone well, so all right. So if you're the kind of person who would prefer to ignore me for the next 15 minutes and just start hacking, here are the URLs you need to know about. We have a GitHub organization, react-R, and that's what we call it because React without the dash r was taken.\n\nBut if you go there, that's the organization. There are some example repos and then there's the React R library--\n\nexcuse me, package repo itself, and there's also a link to various other pieces of tutorial documentation.\n\nAt the bottom, that will take you directly to our tutorial, which as of right now is the best way to ramp up on this topic, particularly if you have a little bit of JavaScript background. But if you don't have that JavaScript background, the rest of the talk is for you.\n\nSo we're going to talk about what React is, why it's interesting.\n\nWe're going to discuss the core unit of composition in React, the component and how it's relevant to us.\n\nI'm going to introduce you further to this React R package, and then I'm going to describe at a high level the process I went through to make that widget. And then I'll talk a little bit about what we have in store for the future.\n\nSo what is React?\n\nWell, it's a JavaScript library for making user interfaces.\n\nIt was invented at Facebook around 2011.\n\nI believe they used it for the news feed. And then they bought Instagram and I think Instagram developed it further.\n\nAnd after Instagram had sort of refined the idea--\n\nor engineers at Instagram, rather--\n\nthey did a wide open source release. So it's quite a mature--\n\neven though it wasn't open source until 2013, it's still quite a mature library and has been used thoroughly.\n\nIt supports a functional approach.\n\nI think if you know how to write R, you already know what the functional paradigm is. I won't elaborate on that, but that's another thing like React that's trending in the JavaScript ecosystem. But like I said, if you know R, you're sort of already on board, so I wouldn't worry too much about that paradigm or that word.\n\nAnd it's oriented around components. I mentioned that the unit of composition in a React-based application is a component.\n\nAnd finally, they invented a syntax called JSX that you can think of as a hybrid JavaScript and HTML syntax. And it really does make writing these kinds of applications quite a bit more concise. And we'll see some of that in a second.\n\nSo I think you should care about this for one of two reasons. One, you did what I just demonstrated. You're on the internet, you saw something really cool, you found it, and nobody's made the HTML widget yet so you want to be the person to do it.\n\nThat's a reason to be interested in React. It has a huge ecosystem with tons of things that deserve to have their own R wrappers. And I see if everyone in this class learns how to do this, maybe we could get a significant percentage for the React ecosystem into R.\n\nThe other reason might be you're coming from a JavaScript development background, you have experience with React and you want to build a React-based library, and maybe adding it to R is an afterthought for you, or would be icing on top. So that's another reason to be interested in React, if you want to go deep on JavaScript. Oh, I should mention also that the reason to go deep on JavaScript with React, in particular, is it's just wildly, wildly, wildly popular and well supported by documentation and communities and so on.\n\nSo React components, what are they?\n\nVery similar to HTML tags, honestly.\n\nI think of them as containers. They contain data hierarchically, so it's sort of a way to describe a tree.\n\nThe big difference is that the HTML tags or elements are defined by a standard.\n\nThe HTML5 standard is the most recent one. And there's a closed set of tags and closed set of behaviors for those tags.\n\nReact components are different because you can define your own tags or components with their own behaviors that are specific to your library application. They contain something called props. You'll see this term in React documentation.\n\nProps are basically a mapping or a named list of keys to values, and then they can also contain other components, again, because they're hierarchical. And applications are formed by composing these into a tree of some kind. And then once you've finished composing your components, it's React's responsibility to take this user interface that you've described using React components and to display it efficiently in the browser.\n\nSo this is sort of the minimum viable Hello World of React adapted from the Wikipedia page on React.\n\nThere are four distinct code chunks.\n\nThese wouldn't necessarily all appear in the same file. They could, but they don't have to.\n\nThe first piece we're looking at here is the component definition. So a component is a JavaScript class and here I'm using newish JavaScript syntax.\n\nAnd class is in ES6, and so that's what we're looking at here. It is JavaScript. And we can see we're naming a component called Greeter.\n\nAnd then we can see that this component extends something else called React.Component. And what we're doing here is establishing a hierarchical relationship. We're saying this new class, Greeter, should inherit all the behavior of the superclass or parent class React.Component.\n\nThere's only one required method, the render method, and that method needs to return something. And in this case, this looks like a syntax error, but it's not. We're in JSX, that special markup I mentioned, so we're in a world where there's a hybrid JavaScript Excel syntax at play. So what this is doing is effectively returning an instance of the H1 component, which is built into react.\n\nAnd then, finally, we're interpolated a value into that JSX expression. So if you've worked with glue or other languages that support--\n\nthey call String interpolation, that's kind of what we're looking at. We're splicing data from one context into a template. And this kind of templating is another reason that JSX is so handy.\n\nHere's some more JSX where we're creating an instance of the Greeter class. You can see the less than sign. It says we're creating a tag. And greeting is equal to Hello World. This is the place where we assign those props I mentioned, that key value pairs associated with an instance of an element.\n\nAnd then, finally, we render the whole thing to the Dom. And the net effect--\n\nif you were to right click in your browser or look at the elements in the inspector, you would see there's a div called myApp with an H1 Hello World.\n\nOops. So that's React in a very small nutshell.\n\nReact R is a package that has been around since 2016 by a gentleman named Kent Russell, really nice guy. And his goal was to figure out ways to incorporate React and JSX into Shiny applications. And among other things, the package before we started working on it had React HTML dependencies, React and React Dom, and so it is the canonical place in the R package ecosystem where React stuff is currently being hung.\n\nHe also did something really neat in his package. He embeds V8, the JavaScript engine, to support JSX tags or JSX strings inside R. It's pretty wild, but it basically means that you can write JSX without installing any JavaScript build tools. So that's a neat thing and Kent's done a lot with that.\n\nThe enhancements that I'm demonstrating now have a more specific goal than the original package goal, which is to make HTML widgets, in particular, easier. And the idea to do this--\n\nit was either Joe or JJ, somebody in our studio before me, identified a symmetry between React's API and the API of HTML widgets and thought, we have an opportunity here to bridge these two worlds in maybe an elegant way, or at least the way that would prevent people from writing lots of code. And the third goal is we want to, like I said, prescribe and support and document workflows and tool chains for those who are not as intimately familiar with the JavaScript ecosystem.\n\nSo to make an HTML widget using everything I just told you about, you would first scaffold an R package with the usethis package.\n\nusethis, amazing package. It has a function in it called create_package and it will build out an empty skeletal package. Then you can call React R colon colon scaffold React widget while you're inside that package you just scaffolded, and it will populate with JavaScript build tool configurations that we will support and condone.\n\nAnd then, finally, you do need to install yarn and webpack on your machine. But once you do, then you can install these tools and they'll pick up that configuration we generated for you. And at the end of the day, you'll have a minimum viable working HTML widget with React in it.\n\nWe do have some remaining work ahead of us. So I would prepare you, as you begin on your React journey, that there are some limitations currently. We haven't figured out a really nice way of sending data or really supporting widget authors to send data from the browser context to the R context.\n\nThis is not impossible right now and, in fact, nothing I'm showing you was impossible before my talk because it really just was a factor of how much JavaScript you were willing to write. So this is a case where sending values from a React-based HTML widget to R, not impossible, but as of right now, you're going to need to write some JavaScript that relies on this existing Shiny feature on input change.\n\nWe made some interesting prototypes to support this without additional JavaScript and I think these ideas hold some promise. So over the coming weeks, days, months, we're going to be iterating on that. And again, this is why it would be so awesome if you're interested in this to get involved and try it out and let us know what would feel natural to you because at the end of the day, this is all about supporting ease of use and accessibility.\n\nSo that's all the material I have prepared. I think I'll have quite a few time for questions. I would like to make a special thanks to Kent Russell, who's been such a great package maintainer and maybe I could call him a friend at this point. Haven't met him in person, a lot of e-mails, but I hope he's cool with that.\n\nSo thank you, Kent. Thank you all very much.\n\n[APPLAUSE]\n\nWe do have some time for questions. So let me know and all throw you the--\n\nah.\n\nThrow it.\n\nThrow it? I'm going to bean somebody. Here you go.\n\nThis how we do it? OK.\n\nIt's funny when you go to a talk and it covers something that you already were dying to learn about. So thank you very much.\n\nSure.\n\nHowever, the problem is that I have a similar mapping library sort of application, but it's from View.\n\nHow--\n\nnot sure how to phrase this.\n\nHow much work is it to create this React R package? And do you think it's very likely that something would be recreated for View?\n\nSo first of all, great point. Second of all, we should hang out. Maybe we can be friends.\n\nThird, we think very highly of you within our studio. And I say that's kind of the collective because I don't have personal experience with it, but we have several experience reports internally of successes. We chose React initially because there was already an existing package and someone in the community we could work with on it, and because there--\n\nit seems like--\n\nI could be wrong, but my impression is there are far more available libraries in React world than in View world as of this moment.\n\nI could be wrong about that, but that's kind of my impression. Is that on point? Or--\n\nSure. No, I agree. My question, is it better [INAUDIBLE]\n\nView. My question is whether there's a massive amount of work [INAUDIBLE].\n\nOh, no.\n\n--initially just building my own widget from 0.\n\nRight.\n\nSo to answer that specific technical question, I think there are as few, if not fewer technical hurdles in View as there are on React. I mentioned the symmetry between HTML widgets and React. I believe there is that same symmetry based on what I know right now between HTML widgets and view. So it's something we've identified and we really want to do at some point in the future. Thank you.\n\nHi. I had a question about--\n\nthere's this library that you guys have called Crosstalk. I'm not sure if you're familiar with it.\n\nYes.\n\nBut what it does is, if you have some data that you want to filter on the front end, you can add a plotly and you can add a data table and you can add some dropdowns, and it does all of those filterings very quickly for you on the front end. I don't know if work is being actively done on that package, but when I was looking at the stuff you were doing with the React, I was wondering if that sort of front-end filtering and aggregation is something that you guys have planned for React.\n\nSo we haven't worked on that specifically, but it is one of our goals to be what I think of as well-behaved members of the HTML widgets ecosystem.\n\nThere are some cases where we're going to sacrifice capabilities for ease of use. So I mentioned that there's a lot of scaffolding involved to get people going quickly I think Crosstalk is one of those cases where it would be very difficult for us to scaffold a general approach, so JavaScript would be involved. But it's certainly not something we would rule out or otherwise make impossible. So it would always be possible.\n\nIt just may involve more JavaScript than I showed. Yes?\n\nYeah. Would there be any limitations on the React components as to compatibility? For example, something that does too much in React that you wouldn't be able to support?\n\nExcellent question. Yes. So we made some cuts there, again, in the interest of ease of use.\n\nThere are certain things you can do in React that don't really follow from the model that we advocate.\n\nWe settled on the model we have because it's a set of conventions for interoping with React that seemed to work for majority of libraries. There are those edge cases, and when you hit the edge cases, it's kind of like the Crosstalk story. It's sort of you need to you need to know JavaScript then at that point.\n\nBut again, when you do get to that point, our goal is to at least have examples and documentation to support you as you go that direction in JavaScript world so that it's never totally inaccessible to you, that you identify while you're building your widget that that's a step, a bridge you need to cross, and then we're there to hold your hand, at least, while you while you do that.\n\n[FLOURISH]"}],"hls_enabled":true,"embed_options":{"opaqueControls":null,"playerColor":"4287c7","playerColorGradient":{"on":false,"colors":[["#223d50",0],["#88a3b6",1]]},"plugin":{"googleAnalytics4":{"on":true,"measurementId":"G-RHNDCXHKLR","usePageGA4Config":true},"captions-v1":{"language":"","onByDefault":"true","on":"true","async":"false"}},"volumeControl":"true","fullscreenButton":"true","controlsVisibleOnLoad":"true","bpbTime":"false","vulcan":true,"branding":"false","showCustomerLogo":"false","unalteredStillImageAsset":{"url":"https://embed-ssl.wistia.com/deliveries/72e76638287c06b6cba4a67bdc399c29.png","width":"1920","height":"1080"},"contrastIcons":true,"newRoundedIcons":true,"shouldShowCaptionsSettings":true},"embedOptions":{"opaqueControls":null,"playerColor":"4287c7","playerColorGradient":{"on":false,"colors":[["#223d50",0],["#88a3b6",1]]},"plugin":{"googleAnalytics4":{"on":true,"measurementId":"G-RHNDCXHKLR","usePageGA4Config":true},"captions-v1":{"language":"","onByDefault":"true","on":"true","async":"false"}},"volumeControl":"true","fullscreenButton":"true","controlsVisibleOnLoad":"true","bpbTime":"false","vulcan":true,"branding":"false","showCustomerLogo":"false","unalteredStillImageAsset":{"url":"https://embed-ssl.wistia.com/deliveries/72e76638287c06b6cba4a67bdc399c29.png","width":"1920","height":"1080"},"contrastIcons":true,"newRoundedIcons":true,"shouldShowCaptionsSettings":true}},"options":{}}
\ No newline at end of file
diff --git a/archive/techworks/items/rstudio-load-testing-shiny/original.ffprobe.json b/archive/techworks/items/rstudio-load-testing-shiny/original.ffprobe.json
new file mode 100644
index 0000000..a0a2161
--- /dev/null
+++ b/archive/techworks/items/rstudio-load-testing-shiny/original.ffprobe.json
@@ -0,0 +1,32 @@
+{
+    "programs": [
+
+    ],
+    "stream_groups": [
+
+    ],
+    "streams": [
+        {
+            "index": 0,
+            "codec_name": "h264",
+            "codec_type": "video",
+            "width": 1920,
+            "height": 1080,
+            "r_frame_rate": "30000/1001"
+        },
+        {
+            "index": 1,
+            "codec_name": "aac",
+            "codec_type": "audio",
+            "sample_rate": "48000",
+            "channels": 2,
+            "r_frame_rate": "0/0"
+        }
+    ],
+    "format": {
+        "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
+        "duration": "2829.793633",
+        "size": "517033235",
+        "bit_rate": "1461684"
+    }
+}
diff --git a/archive/techworks/items/rstudio-load-testing-shiny/original.mp4 b/archive/techworks/items/rstudio-load-testing-shiny/original.mp4
new file mode 100644
index 0000000..5608f2a
--- /dev/null
+++ b/archive/techworks/items/rstudio-load-testing-shiny/original.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:301d5486cbfa0fa2ea20587884084cbc82f46785f0d650bc388d6e7b6d906fbe
+size 517033235
diff --git a/archive/techworks/items/rstudio-load-testing-shiny/source.headers b/archive/techworks/items/rstudio-load-testing-shiny/source.headers
new file mode 100644
index 0000000..e10d055
--- /dev/null
+++ b/archive/techworks/items/rstudio-load-testing-shiny/source.headers
@@ -0,0 +1,16 @@
+HTTP/2 200 
+accept-ranges: bytes
+age: 0
+cache-control: public,max-age=0,must-revalidate
+cache-status: "Netlify Edge"; fwd=miss; fwd-status=200; stored
+content-encoding: br
+content-security-policy: frame-ancestors https://www.dow.com/ http://rsc.intranet.dow.com/
+content-type: text/html; charset=UTF-8
+date: Sun, 09 Aug 2026 20:35:20 GMT
+etag: "230492ff11fcd4a1087e00b77c401fa4-ssl-df"
+server: Netlify
+strict-transport-security: max-age=31536000
+vary: Accept-Encoding
+x-frame-options: ALLOW-FROM https://www.dow.com/ http://rsc.intranet.dow.com/
+x-nf-request-id: 01KZM3SCWZXPAPJ041Y2MAATK4
+
diff --git a/archive/techworks/items/rstudio-load-testing-shiny/source.html b/archive/techworks/items/rstudio-load-testing-shiny/source.html
new file mode 100644
index 0000000..c01f588
--- /dev/null
+++ b/archive/techworks/items/rstudio-load-testing-shiny/source.html
@@ -0,0 +1,2463 @@
+<!doctype html>
+<html lang="en">
+  <head>
+  <meta charset="utf-8" />
+  
+
+  
+  <script async src="https://www.googletagmanager.com/gtag/js?id=UA-20375833-3"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'UA-20375833-3');
+  </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-TLQTK9R');</script>
+  
+
+  
+<script src="https://client-registry.mutinycdn.com/personalize/client/013e765e14ebf565.js"></script>
+
+  
+  
+
+  
+  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
+  <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
+  <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
+  <link rel="manifest" href="/site.webmanifest">
+  <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#75aadb">
+  <meta name="msapplication-TileColor" content="#ffffff">
+  <meta name="theme-color" content="#ffffff">
+  <title>Load testing Shiny  - RStudio</title>
+  <meta name="description" content="shinyloadtest and shinycannon are two new tools that work together to help you answer the question: how many users can my app support?">
+  <meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no' name='viewport' />
+
+  
+  <link rel="preload" href="/assets/img/icon-rstudio.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-rstudio-white.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-shiny.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-shiny-white.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-packages.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-packages-white.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-rspm.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-rspm-white.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-connect.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-connect-white.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-rstudio-team.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-rstudio-team-white.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-cloud.svg" as="image">
+  <link rel="preload" href="/assets/img/icon-cloud-white.svg" as="image">
+
+  
+  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.6/css/all.css" integrity="sha384-VY3F8aCQDLImi4L+tPX4XjtiJwXDwwyXNbkH7SHts0Jlo85t1R15MlXVBKLNx+dj" crossorigin="anonymous">
+  
+  <link href="/assets/css/bootstrap.min.css" rel="stylesheet" />
+    <link href="/assets/css/algolia.css" rel="stylesheet" />
+  
+  <link href="/assets/css/now-ui-kit.css" rel="stylesheet" />
+  
+  <link href="/assets/css/timeline.css" rel="stylesheet" />
+  
+
+  
+  <meta property="og:image" content="https://rstudio.com/assets/img/og/rstudio-og-fb-1.jpg" />
+  
+
+  
+
+
+
+  <meta property="og:title" content="Load testing Shiny " />
+  <meta property="og:description" content="shinyloadtest and shinycannon are two new tools that work together to help you answer the question: how many users can my app support?" />
+  <meta property="og:type" content="article" />
+  <meta property="og:url" content="https://www.rstudio.com/resources/webinars/load-testing-shiny/" />
+  
+  
+  <meta property="article:published_time" content="2018-09-06T00:00:00&#43;00:00"/>
+  
+  <meta property="article:modified_time" content="2018-09-06T00:00:00&#43;00:00"/>
+  
+  
+  
+  
+  
+  
+  
+  
+
+  <meta name="twitter:card" content="summary_large_image"/>
+  <meta name="twitter:image" content="https://www.rstudio.com/resources/webinars/load-testing-shiny/thumbnail.jpg"/>
+  <meta name="twitter:title" content="Load testing Shiny "/>
+  <meta name="twitter:description" content="shinyloadtest and shinycannon are two new tools that work together to help you answer the question: how many users can my app support?"/>
+  
+  
+  <link href="//cdn.rawgit.com/noelboss/featherlight/1.7.13/release/featherlight.min.css" type="text/css" rel="stylesheet" />
+    <link href="/assets/css/bootstrap-lightbox.css" type="text/css" rel="stylesheet" />
+    
+  <link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
+
+  <meta name="generator" content="Hugo 0.64.1" />
+  <title>Load testing Shiny  &middot; RStudio</title>
+  
+  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.0/css/all.css">
+  
+  
+  
+  
+  <script>
+  (function() {
+    var s = document.createElement("script");
+    s.async = true;
+    s.src = "https://metadata-static-files.sfo2.cdn.digitaloceanspaces.com/pixel/lp.js";
+    s.onload = function() {
+      window.Metadata.pixel.init();
+    };
+    document.head.appendChild(s);
+  })();
+  </script>
+  
+  <script type="text/javascript">
+  _linkedin_partner_id = "218281";
+  window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
+  window._linkedin_data_partner_ids.push(_linkedin_partner_id);
+  </script>
+  <script type="text/javascript">
+  (function() {
+    var s = document.getElementsByTagName("script")[0];
+    var b = document.createElement("script");
+    b.type = "text/javascript";
+    b.async = true;
+    b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
+    s.parentNode.insertBefore(b, s);
+  })();
+  </script>
+  <noscript>
+    <img height="1" width="1" style="display:none;" alt="" src="https://dc.ads.linkedin.com/collect/?pid=218281&fmt=gif" />
+  </noscript>
+  
+  <script id="metadata_facebook_pixel_124">
+  ! function(f, b, e, v, n, t, s) {
+    if (f.fbq) return;
+    n = f.fbq = function() {
+      n.callMethod ?
+        n.callMethod.apply(n, arguments) : n.queue.push(arguments)
+    };
+    if (!f._fbq) f._fbq = n;
+    n.push = n;
+    n.loaded = !0;
+    n.version = '2.0';
+    n.queue = [];
+    t = b.createElement(e);
+    t.async = !0;
+    t.src = v;
+    s = b.getElementsByTagName(e)[0];
+    s.parentNode.insertBefore(t, s)
+  }(window,
+    document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');
+
+  fbq('init', '151855192184380');
+  fbq('track', 'Lead');
+  </script>
+  <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=151855192184380&ev=PageView&noscript=1" /></noscript>
+  
+  <script type="text/javascript">
+  (function() {
+    var didInit = false;
+
+    function initMunchkin() {
+      if (didInit === false) {
+        didInit = true;
+        Munchkin.init('709-NXN-706');
+      }
+    }
+    var s = document.createElement('script');
+    s.type = 'text/javascript';
+    s.async = true;
+    s.src = '//munchkin.marketo.net/munchkin-beta.js';
+    s.onreadystatechange = function() {
+      if (this.readyState == 'complete' || this.readyState == 'loaded') {
+        initMunchkin();
+      }
+    };
+    s.onload = initMunchkin;
+    document.getElementsByTagName('head')[0].appendChild(s);
+  })();
+  </script>
+
+  <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,200i,300,300i,400,400i,600,600i,700,700i,900,900i&display=swap" rel="stylesheet">
+
+  <link rel="stylesheet" href="https://www.rstudio.com/assets/css/custom.css">
+  
+  <script id="metadata_pixel_124">
+  ! function() {
+    function e(e) { var t = new XMLHttpRequest; return t.open("POST", n + "insight"), t.setRequestHeader("Content-Type", "application/json"), t.send(JSON.stringify(e)) }
+
+    function t(t) { var n = function(e) { e = e.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var t = new RegExp("[\\?&]" + e + "=([^&#]*)").exec(location.search); return null === t ? "" : decodeURIComponent(t[1].replace(/\+/g, " ")) }("cid"),
+        r = window.location.href,
+        i = document.querySelectorAll("input[id],select[id]"),
+        p = {}; return Array.prototype.forEach.call(i, function(e) { p[e.id] = e.value }), e({ cid: n, sfv: p, lpu: r, ip: o }).then(function() { t.submit() }) } var n = "https://platformapi.metadata.io/",
+      o = "",
+      r = new XMLHttpRequest;
+    r.open("GET", n + "tracking/ip"), r.onload = function() { 200 === r.status && (o = r.responseText) }, r.send(), document.addEventListener("DOMContentLoaded", function() { setTimeout(function() { if (window.lp && window.lp.jQuery && window.lp.jQuery(".lp-pom-form .lp-pom-button").length) { var e = function(e, n) { e.preventDefault(); try { t().then(function() { lp.jQuery(".lp-pom-form form").submit() }) } catch (e) { lp.jQuery(".lp-pom-form form").submit() } };
+          lp.jQuery(function(t) { t(".lp-pom-form .lp-pom-button").unbind("click tap touchstart").bind("click.formSubmit", function(n) { t(".lp-pom-form form").valid() && e(n) }), t("form").unbind("keypress").bind("keypress.formSubmit", function(n) { 13 === n.which && "textarea" !== n.target.nodeName.toLowerCase() && t(".lp-pom-form form").valid() && e(n) }) }) } else { var n = document.querySelectorAll("form");
+          Array.prototype.forEach.call(n, function(e) { e.addEventListener("submit", t.bind(e), !1) }) } }, 3e3) }, !1) }();
+  </script>
+  
+
+  
+
+<script>
+  ga(function(){
+    ga_trackers=[];
+    ga.getAll().forEach(function(x,i){
+    ga_trackers.push(x.get('name'))});
+    ga_trackers.forEach(
+    function(gaName){
+      ga(gaName + '.require', 'Clearbit', {"mapping":{
+          "companyName": "dimension5",
+          "companyDomain": "dimension6",
+          "companyTags": "dimension7",
+          "companySector": "dimension8",
+          "companyIndustryGroup": "dimension9",
+          "companyIndustry": "dimension10",
+          "companySubIndustry": "dimension11",
+          "companyType": "dimension12",
+          "companyEmployeesRange": "dimension13",
+          "companyAlexaRank": "dimension14",
+          "companyCity": "dimension15",
+          "companyState": "dimension16",
+          "companyCountry": "dimension17",
+          "companyFunding": "dimension18",
+          "companyTech": "dimension19"
+        }
+      });
+    });
+  });
+</script>
+<script async src="https://ga.clearbit.com/v1/ga.js?authorization=pk_60c5aa2221e3c03eca10fb6876aa6df7"></script>
+
+  
+  <script>
+  !function(w){var clearbit=w.clearbit=w.clearbit||[];if(!clearbit.initialize)if(clearbit.invoked)w.console&&console.error&&console.error("Clearbit snippet included twice.");else{clearbit.invoked=!0;clearbit.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","page","once","off","on"];clearbit.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);clearbit.push(e);return clearbit}};for(var t=0;t<clearbit.methods.length;t++){var e=clearbit.methods[t];clearbit[e]=clearbit.factory(e)}clearbit.load=function(t){var e=document.createElement("script");e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"x.clearbitjs.com/v1/"+t+"/clearbit.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};clearbit.SNIPPET_VERSION="3.1.0";
+   clearbit.load("pk_60c5aa2221e3c03eca10fb6876aa6df7");
+   clearbit.page();
+ }}(window);
+  </script>
+
+  
+  <script>
+  !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.13.1";
+  analytics.load("5QCLCHLemBoSmOxysWvjrcIAEZWwdFhf");
+  analytics.page();
+  }}();
+</script>
+
+
+  
+  <script>
+    !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t,e){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0";
+    analytics.load("gO0uTGfCkO4DQpfkRim9mBsjdKrehtnu");
+    analytics.page();
+    }}();
+  </script>
+  
+  <script>
+      (function(h,o,t,j,a,r){
+          h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
+          h._hjSettings={hjid:1446157,hjsv:6};
+          a=o.getElementsByTagName('head')[0];
+          r=o.createElement('script');r.async=1;
+          r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
+          a.appendChild(r);
+      })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
+  </script>
+
+  
+  <script type='text/javascript'>
+  window._vwo_code = window._vwo_code || (function() {
+    var account_id = 450622,
+      settings_tolerance = 2000,
+      library_tolerance = 2500,
+      use_existing_jquery = false,
+      is_spa = 1,
+      hide_element = 'body',
+       
+      f = false,
+      d = document,
+      code = {
+        use_existing_jquery: function() { return use_existing_jquery; },
+        library_tolerance: function() { return library_tolerance; },
+        finish: function() { if (!f) { f = true; var a = d.getElementById('_vis_opt_path_hides'); if (a) a.parentNode.removeChild(a); } },
+        finished: function() { return f; },
+        load: function(a) { var b = d.createElement('script');
+          b.src = a;
+          b.type = 'text/javascript';
+          b.innerText;
+          b.onerror = function() { _vwo_code.finish(); };
+          d.getElementsByTagName('head')[0].appendChild(b); },
+        init: function() {
+          window.settings_timer = setTimeout('_vwo_code.finish()', settings_tolerance);
+          var a = d.createElement('style'),
+            b = hide_element ? hide_element + '{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}' : '',
+            h = d.getElementsByTagName('head')[0];
+          a.setAttribute('id', '_vis_opt_path_hides');
+          a.setAttribute('type', 'text/css');
+          if (a.styleSheet) a.styleSheet.cssText = b;
+          else a.appendChild(d.createTextNode(b));
+          h.appendChild(a);
+          this.load('https://dev.visualwebsiteoptimizer.com/j.php?a=' + account_id + '&u=' + encodeURIComponent(d.URL) + '&f=' + (+is_spa) + '&r=' + Math.random());
+          return settings_timer;
+        }
+      };
+    window._vwo_settings_timer = code.init();
+    return code;
+  }());
+  </script>
+  
+
+  <link rel="alternate" type="application/atom+xml" title="Blog" href="https://www.rstudio.com/blog/index.xml" />
+
+  
+  
+  
+  <script>
+!function(){window.analytics||(window.analytics=[]),window.analytics.methods=["identify","track","trackLink","trackForm","trackClick","trackSubmit","page","pageview","ab","alias","ready","group","on","once","off"],window.analytics.factory=function(a){return function(){var t=Array.prototype.slice.call(arguments);return t.unshift(a),window.analytics.push(t),window.analytics}};for(var a=0;a<window.analytics.methods.length;a++){var t=window.analytics.methods[a];window.analytics[t]=window.analytics.factory(t)}analytics.load=function(a){if(!document.getElementById("dreamdata-analytics")){window.a=window.analytics;var t=document.createElement("script");t.async=!0,t.id="dreamdata-analytics",t.type="text/javascript",t.src="https://cdn.dreamdata.cloud/scripts/analytics/v1/dreamdata.min.js";var n=function(){if(analytics&&analytics.initialize)for(analytics.initialize({"Dreamdata.io":{apiKey:a}});window.a.length>0;){var t=window.a.shift(),n=t.shift();analytics[n]&&analytics[n].apply(analytics,t)}};t.addEventListener?t.addEventListener("load",function(){n()},!1):t.onreadystatechange=function(){"complete"!=this.readyState&&"loaded"!=this.readyState||n()};var i=document.getElementsByTagName("script")[0];i.parentNode.insertBefore(t,i)}},analytics.load("fb7d8208-7386-4584-87de-7b4d3a64fa70"),analytics.page()}();
+</script>
+</head>
+
+  
+  <body class="blank-page sidebar-article sidebar-collapse">
+    
+<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TLQTK9R"
+height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
+
+    
+    
+
+  
+<div class="alert" id="alert-conf" role="alert" style="margin-bottom: 0px; padding: 5px;background-color:#000000;">
+  <div class="desktop container pb-0 text-center">
+    <div class="row">
+      <div class="col-md-12 py-4 pl-2">
+        <p class="d-inline pt-1 pr-3 p-95" style=" font-size: 1em;"><a href="https://posit.co" style="color: #ffffff;">
+          Pardon the interruption as we migrate content to our new site. Visit <span style="color: #EE6331; font-size: 1em;" href="https://posit.co"><b>posit.co</b></span> for our full site.
+        <img src="https://d33wubrfki0l68.cloudfront.net/8a29c867135154b28b826043d1d462b6b93b0c14/41c78/assets/img/posit-icon.png" width="22px" class="my-0"></a>
+      </p>
+    </div>
+  </div>
+</div>
+<div class="mobile container px-3 pb-0 text-center" >
+  <div class="row">
+    <div class="col-md-12 py-4 pl-2">
+      <p class="d-inline pt-1 pr-3 p-95" style=" font-size: 1em;"><a href="https://posit.co" style="color: #ffffff;">
+        Pardon the interruption as we migrate content to our new site. Visit <span style="color: #EE6331; font-size: 1em;" href="https://posit.co"><b>posit.co</b></span> for our full site.
+        <img src="https://d33wubrfki0l68.cloudfront.net/8a29c867135154b28b826043d1d462b6b93b0c14/41c78/assets/img/posit-icon.png" width="22px" class="my-0"></a>
+      </p>
+    </div>
+  </div>
+</div>
+</div>
+  
+
+
+    
+    <div class="wrapper">
+      <div class="none  none" filter-color="blue">
+        <div class="page-header-image" data-parallax="false" style="background-image: url('https://www.rstudio.com/assets/img/clearpixel.png'); background-position: center center; background-color: #999999;">
+        </div>
+        
+        
+<div class="container">
+  <div class="content-center">
+    <h1 style="display:none" class="title">Load testing Shiny </h1>
+    <div>
+      <div style="display:none"> shinyloadtest and shinycannon are two new tools that work together to help you answer the question: how many users can my app support? </div>
+      
+    </div>
+  </div>
+</div>
+
+        
+      </div>
+      <div class="section" style="background-color: #ffffff;">
+        <div id="accordion3" role="tablist" aria-multiselectable="true" class="card-collapse secondary-nav mobile sticky-top">
+          <div class="card card-plain" style="border-bottom: solid 1px rgba(117, 170, 219, .2);">
+            <div class="card-header" role="tab" id="headingOne">
+              <a data-toggle="collapse" data-parent="#accordion3" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree" class="collapsed">
+                Videos Menu
+                <i class="now-ui-icons arrows-1_minimal-down"></i>
+              </a>
+            </div>
+            <div id="collapseThree" class="collapse" role="tabpanel" aria-labelledby="headingOne">
+              <div class="card-body">
+                <nav class="w-100 align-self-start sticky-top sidebar" id="myScrollspy">
+                  <ul class="nav nav-pills flex-column w-100">
+                    <li class="nav-item">
+                      <a class="nav-link" href="/resources/webinars/">Webinars</a>
+                    </li>
+                    <li class="nav-item">
+                      <a class="nav-link" target="_blank" href="/data-science-hangout/">Data Science Hangout</a>
+                    </li>
+                    <li class="nav-item">
+                      <a class="nav-link" href="/collections/rstudio-essentials/">RStudio Essentials</a>
+                    </li>
+                    <li class="nav-item">
+                      <a class="nav-link" href="/collections/data-science-essentials/">Data Science Essentials</a>
+                    </li>
+                    <li class="nav-item">
+                      <a class="nav-link" href="/collections/advanced-data-science/">Advanced Data Science</a>
+                    </li>
+                    <li class="nav-item">
+                      <a class="nav-link" href="/collections/working-with-spark/">Working with Spark</a>
+                    </li>
+                    <li class="nav-item">
+                      <a class="nav-link" href="/collections/product-videos/">Product Videos</a>
+                    </li>
+                    <li class="nav-item">
+                      <a class="nav-link" href="/collections/rstudio-pro-administration/">RStudio Pro Administration</a>
+                    </li>
+                    <li class="nav-item">
+                      <a class="nav-link" href="/collections/espanol/">Materiales en Español</a>
+                    </li>
+                    <li class="nav-item">
+                    <a class="nav-link" href="/resources/additional-talks/">Additional Talks</a>
+                  </li>
+                  <li class="nav-item">
+                    <a class="nav-link" href="/collections/community/">Community</a>
+                  </li>
+                  <li class="nav-item dropdown">
+                    <div id="accordion3" role="tablist" aria-multiselectable="true" class="card-collapse">
+                      <div class="card card-plain mb-0" style="    background: none;">
+                        <div class="card-header" role="tab">
+                          <a style="font-size: 15px;line-height: 23px;cursor: pointer;"class="collapsed mobile-menu-parent-anchor" data-toggle="collapse" data-target="#collapseMobile" aria-expanded="false" aria-controls="collapseThree">
+                            Conferences by year
+                            <i class="now-ui-icons arrows-1_minimal-down"></i>
+                          </a>
+                        </div>
+                        <div id="collapseMobile" class="collapse" aria-labelledby="headingOne" data-parent="#accordion3">
+                          <div class="mobile-menu-child-1 card-body pt-0">
+                            <a class=" d-block"href="/resources/rstudioglobal-2021/">rstudio::global 2021</a>
+                            <a class=" d-block"href="/resources/rstudioconf-2020/">rstudio::conf 2020</a>
+                            <a class=" d-block"href="/resources/rstudioconf-2019/">rstudio::conf 2019</a>
+                            <a class=" d-block"href="/resources/rstudioconf-2018/">rstudio::conf 2018</a>
+                            <a class=" d-block"href="/resources/rstudioconf-2017/">rstudio::conf 2017</a>
+                            <a class=" d-block"href="/resources/shiny-dev-con-2016/">Shiny Dev Con 2016</a>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </li>
+                  
+                  
+                </ul>
+              </nav>
+            </div>
+          </div>
+        </div>
+      </div>
+      
+      
+      <div class="container ">
+        <div class="row">
+          <div class="col-md-12 ml-auto mr-auto text-left">
+            <div data-spy="scroll" data-target="#myScrollspy" data-offset="140">
+              <div class="container-fluid">
+                <div class="row">
+                  <nav class="col-sm-3 col-4 desktop align-self-start sticky-top sidebar pl-0 pr-5" id="myScrollspy">
+                    <div class="collapse navbar-collapse flex-column ml-lg-0 ml-3 pt-3" id="navbarCollapse" style="overflow: auto;">
+                      <ul class="nav nav-pills flex-column">
+                        <li class="nav-item">
+                          <a class="nav-link" href="/resources/webinars/">Webinars</a>
+                        </li>
+                        <li class="nav-item">
+                          <a class="nav-link" target="_blank" href="/data-science-hangout/">Data Science Hangout</a>
+                        </li>
+                        <li class="nav-item">
+                          <a class="nav-link" href="/collections/rstudio-essentials/">RStudio Essentials</a>
+                        </li>
+                        <li class="nav-item">
+                          <a class="nav-link" href="/collections/data-science-essentials/">Data Science Essentials</a>
+                        </li>
+                        <li class="nav-item">
+                          <a class="nav-link" href="/collections/advanced-data-science/">Advanced Data Science</a>
+                        </li>
+                        <li class="nav-item">
+                          <a class="nav-link" href="/collections/working-with-spark/">Working with Spark</a>
+                        </li>
+                        <li class="nav-item">
+                          <a class="nav-link" href="/collections/product-videos/">Product Videos</a>
+                        </li>
+                        <li class="nav-item">
+                          <a class="nav-link" href="/collections/rstudio-pro-administration/">RStudio Pro Administration</a>
+                        </li>
+                        <li class="nav-item">
+                          <a class="nav-link" href="/collections/espanol/">Materiales en Español</a>
+                        </li>
+                        <li class="nav-item">
+                        <a class="nav-link" href="/resources/additional-talks/">Additional Talks</a>
+                      </li>
+                      <li class="nav-item">
+                        <a class="nav-link" href="/collections/community/">Community</a>
+                      </li>
+                      <li class="nav-item dropdown">
+                        <div id="accordion3" role="tablist" aria-multiselectable="true" class="card-collapse">
+                          <div class="card card-plain mb-0">
+                            <div class="card-header" role="tab">
+                              <a style="cursor: pointer;padding-left:16px;" class="collapsed mobile-menu-parent-anchor" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
+                                Conferences by year
+                                <i style="font-size:15px;line-height: 14px !important;cursor: pointer;" class=" now-ui-icons arrows-1_minimal-down"></i>
+                              </a>
+                            </div>
+                            <div id="collapseThree" class="collapse" aria-labelledby="headingOne" data-parent="#accordion3">
+                              <div class="mobile-menu-child-1 card-body pt-0">
+                                <a class=" d-block"href="/resources/rstudioglobal-2021/">rstudio::global 2021</a>
+                                <a class="d-block" href="/resources/rstudioconf-2020/">rstudio::conf 2020</a>
+                                <a class="d-block" href="/resources/rstudioconf-2019">rstudio::conf 2019</a>
+                                <a class="d-block" href="/resources/rstudioconf-2018">rstudio::conf 2018</a>
+                                <a class="d-block" href="/resources/rstudioconf-2017">rstudio::conf 2017</a>
+                                <a class="d-block" href="/resources/shiny-dev-con-2016">Shiny Dev Con 2016</a>
+                              </div>
+                            </div>
+                          </div>
+                        </div>
+                      </li>
+                      
+                    </ul>
+                  </nav>
+
+      
+      
+<div class="col-lg-9 pt-3">
+  <div class="pb-2">
+    
+    <script src="https://fast.wistia.com/embed/medias/044vu2h9wx.jsonp" async></script><script src="https://fast.wistia.com/assets/external/E-v1.js" async></script><div class="wistia_responsive_padding" style="padding:57.25% 0 0 0;position:relative;"><div class="wistia_responsive_wrapper" style="height:100%;left:0;position:absolute;top:0;width:100%;"><div class="wistia_embed wistia_async_044vu2h9wx videoFoam=true controlsVisibleOnLoad=false" style="height:100%;position:relative;width:100%"><div class="wistia_swatch" style="height:100%;left:0;opacity:0;overflow:hidden;position:absolute;top:0;transition:opacity 200ms;width:100%;"><img src="https://fast.wistia.com/embed/medias/044vu2h9wx/swatch" style="filter:blur(5px);height:100%;object-fit:contain;width:100%;" alt="" aria-hidden="true" onload="this.parentNode.style.opacity=1;" /></div></div></div></div>
+    
+    
+    
+    
+    
+
+    <div class="pt-4">
+      <p class="mb-0 pt-2">
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        <a class="event-tag mb-0 pr-3" href="/resources/webinars">Webinars</a>
+        
+         
+
+        
+          
+        
+
+
+
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+        
+      </p>
+    </div>
+    <div class="pt-0 mt-0">
+      <p class="h2 mt-1" style="color: #444;">Load testing Shiny </p>
+    </div>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <ul class="d-inline pl-0 pr-0">
+      <l1 class="d-inline pr-2">
+      <b><a style="color: #404040;font-size: 90%;" href="https://www.rstudio.com/authors/alan-dipert/">Alan Dipert</a></b>
+      </l1> <span style="font-size: 80%">| </span><span class="pr-2"></span>
+    </ul>
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    <span style="display:true">
+    <p class="p-90 d-inline" >September 6, 2018</p></span>
+  </div>
+  <div class="pt-3">
+    
+<p>shinyloadtest (https://github.com/rstudio/shinyloadtest) and shinycannon (https://github.com/rstudio/shinycannon) are two new tools that work together to help you answer the question: how many users can my app support? I&rsquo;ll demonstrate using shinyloadtest to produce a &ldquo;recording&rdquo; of an interaction with a Shiny app, and then I&rsquo;ll show how to use shinycannon to &ldquo;play back&rdquo; that recording, generating load. Then I&rsquo;ll bring the data produced by the load test back into R for analysis. Finally, I&rsquo;ll interpret the results and discuss techniques for increasing the number of users a Shiny app can support.</p>
+
+  </div>
+  
+  
+  <hr class="mt-5 mb-4">
+  <h3 class="mb-0 pt-3">
+  
+  About the speaker
+  
+  
+  </h3>
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  <div class="row team mt-5">
+    
+    <div class="col-md-2">
+      <div class="img-container mx-auto" style="background-image: url(/assets/img/authors/alan-dipert.png);background-size: cover;float: none;">
+      </div>
+    </div>
+    
+    <div class="offset-md-1 col-md-9">
+        <div class="mt-1 mb-2">
+          
+          <h5 class="d-inline font-600"><a class="gray-text" href="/authors/alan-dipert">Alan Dipert</a></h5>
+          <span class="mx-1"> / </span>
+          <p class="d-inline p-90"></p>
+      </div>
+      
+      <p class="p-90">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.</p>
+      
+      <ul class="social-buttons mb-0 mr-3 d-inline">
+        
+        
+        <li>
+          <a target="_blank" rel="noopener noreferrer" href="https://twitter.com/alandipert" class="btn-twitter pr-1">
+            <i class="fab fa-twitter circle text-center"></i>
+          </a>
+        </li>
+        
+        
+        <li>
+          <a target="_blank" rel="noopener noreferrer" href="https://github.com/alandipert" class="btn-github pr-1">
+            <i class="fab fa-github circle"></i>
+          </a>
+        </li>
+        
+        
+        <li>
+          <a class="btn btn-default btn-sm pt-1 pb-1 pl-3 pr-3" style="border: 1px solid #404040 !important;font-size:12px;font-weight: 600;" href="/authors/alan-dipert">More by Alan Dipert</a>
+        </li>
+      </ul>
+    </div>
+  </div>
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+</div>
+</div>
+</div>
+</div>
+</div>
+
+    </div>
+  </div>
+</div>
+</div>
+</div>
+
+<div id="rstudio-search-box"></div>
+
+
+</div>
+</body>
+
+
+<script src="/assets/js/core/jquery.min.js" type="text/javascript"></script>
+<script src="/assets/js/core/bootstrap.bundle.min.js" type="text/javascript"></script>
+<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
+
+
+
+
+
+<script src="/assets/js/plugins/bootstrap-lightbox.js" type="text/javascript"></script>
+<script src="/assets/js/now-ui-kit.js"></script>
+<script src="/assets/js/plugins/stickyfill.min.js"></script>
+
+<script src="/assets/js/plugins/bootstrap-switch.js"></script>
+<script src="/assets/js/plugins/bootstrap-tagsinput.js"></script>
+<script src="/assets/js/plugins/bootstrap-selectpicker.js"></script>
+
+
+
+<script src="/assets/js/plugins/nouislider.min.js"></script>
+
+<script src="/assets/js/plugins/moment.min.js" type="text/javascript"></script>
+<script src="/assets/js/plugins/bootstrap-datetimepicker.js"></script>
+
+
+
+
+
+<script type="text/javascript">
+  
+    
+
+    function scrollToDownload() {
+
+        if ($('.section-download').length != 0) {
+            $("html, body").animate({
+                scrollTop: $('.section-download').offset().top
+            }, 1000);
+        }
+    }
+</script>
+    
+
+
+      
+    
+      
+      <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js"></script>
+
+      
+
+      
+      <script>hljs.initHighlightingOnLoad();</script>
+    
+
+    
+    
+      <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>
+
+      <script type="text/x-mathjax-config">
+        MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });
+      </script>
+    
+
+    
+
+    <script src="//cdn.rawgit.com/noelboss/featherlight/1.7.13/release/featherlight.min.js" type="text/javascript" charset="utf-8"></script>
+
+
+
+
+
+
+
+<script src="/assets/js/algolia.js" type="text/javascript"></script>
+
+<script type="text/javascript">
+  $(document).ready(function() {
+
+    
+
+
+
+    
+
+    $('[data-toggle=searchFormOpen]').click(function() {
+      $('.st-search-container').fadeIn();
+      setTimeout(function(){
+        $('#searchInputText').focus();
+      });
+    });
+
+    $('[data-toggle=searchFormClose]').click(function() {
+      $('.st-search-container').fadeOut()
+    });
+
+    function closeSwiftSearchMenuBar(event) {
+        if($('.st-search-container').is(":visible")) {
+          
+          if($(event.target).closest('.st-default-autocomplete').length === 0) {
+            $('.st-search-container').fadeOut();
+          }
+        }
+    }
+
+    $(document).click(function(event) {
+      if($(event.target).closest('.st-search-container').length === 0 && $(event.target).closest('[data-toggle=searchFormOpen]').length === 0) {
+        closeSwiftSearchMenuBar(event);
+      }
+    });
+
+    $(document).keydown(function(event) {
+      
+      if (event.keyCode == 27) {
+        closeSwiftSearchMenuBar(event);
+      }
+    });
+
+    
+
+    $('.mobile-menu-parent-anchor').on("click", function() {
+      $('#collapseOpenSource').collapse('hide');
+      $('#collapsehosted').collapse('hide');
+      $('#collapseprofessional').collapse('hide');
+    });
+
+
+    
+
+    function toggleDropdown (e) {
+      const _desktopDropdown = $(e.target).closest('.desktop-dropdown-hover'),
+        _desktopMenu = $('.dropdown-menu', _desktopDropdown);
+      setTimeout(function(){
+        const shouldOpen = e.type !== 'click' && _desktopDropdown.is(':hover');
+        _desktopMenu.toggleClass('show', shouldOpen);
+        _desktopDropdown.toggleClass('show', shouldOpen);
+        $('[data-toggle="dropdown"]', _desktopDropdown).attr('aria-expanded', shouldOpen);
+      }, e.type === 'mouseleave' ? 0 : 0);
+    }
+
+    $('body')
+      .on('mouseenter mouseleave','.desktop-dropdown-hover',toggleDropdown)
+      .on('click', '.desktop-dropdown-menu-hover a', toggleDropdown);
+
+    
+
+    $(".scrolling-anchor-link").click(function(event) {
+      event.preventDefault();
+      var anchorId = $(this).attr("href");
+      $('html,body').animate({scrollTop: $(anchorId).offset().top},'slow');
+    });
+
+    $('[data-ls-toggle="popover"]').popover({
+        placement : 'left',
+        html : true,
+        title : 'SHA-256 <a style="margin-top: -5px; font-size: 1.3rem; color: white;" href="#" class="close" data-dismiss="alert">&times;</a>'
+    });
+    $(document).on("click", ".popover .close" , function(){
+        $(this).parents(".popover").popover('hide');
+    });
+  });
+</script>
+
+<script type="text/javascript">
+$(function(){
+    var $el = $('.parallax-bg');
+    if ($el.length == 0) {
+        return;
+    }
+    $(window).scroll(function () {
+        para($el);
+    });
+    para($el);
+});
+var speed = .8;
+function para($el) {
+    var diff = $(window).scrollTop() - $el.offset().top;
+    var yPos = -(diff * speed);
+    var coords = '50%' + yPos + 'px';
+    $el.css({
+        backgroundPosition: coords
+    });
+}
+</script>
+
+
+
+
+<script type="text/javascript">
+
+
+if (navigator.platform.indexOf("Mac") >= 0) {
+    document.body.classList.add("os-macintosh");
+} else if (navigator.userAgent.indexOf("Win") >= 0) {
+    document.body.classList.add("os-windows");
+} else if (navigator.userAgent.indexOf("Linux") >= 0) {
+    document.body.classList.add("os-linux");
+} else {
+    document.body.classList.add("os-unknown");
+}
+</script>
+<script type="text/javascript">
+function addNoOpener(link) {
+  let linkTypes = (link.getAttribute('rel') || '').split(' ');
+  if (!linkTypes.includes('noopener')) {
+    linkTypes.push('noopener');
+  }
+  link.setAttribute('rel', linkTypes.join(' ').trim());
+}
+
+function addNewTabMessage(link) {
+  if (!link.querySelector('.screen-reader-only')) {
+    link.insertAdjacentHTML('beforeend', '<span class="screen-reader-only">(opens in a new tab)</span>');
+  }
+}
+
+document.querySelectorAll('a[target="_blank"]').forEach(link => {
+  addNoOpener(link);
+  addNewTabMessage(link);
+});
+</script>
+</html>
\ No newline at end of file
diff --git a/archive/techworks/items/rstudio-load-testing-shiny/still.png b/archive/techworks/items/rstudio-load-testing-shiny/still.png
new file mode 100644
index 0000000..5c6300a
Binary files /dev/null and b/archive/techworks/items/rstudio-load-testing-shiny/still.png differ
diff --git a/archive/techworks/items/rstudio-load-testing-shiny/wistia.headers b/archive/techworks/items/rstudio-load-testing-shiny/wistia.headers
new file mode 100644
index 0000000..1c1fe61
--- /dev/null
+++ b/archive/techworks/items/rstudio-load-testing-shiny/wistia.headers
@@ -0,0 +1,31 @@
+HTTP/2 200 
+content-type: application/json; charset=utf-8
+content-encoding: br
+x-envoy-upstream-service-time: 111
+server: istio-envoy
+x-content-type-options: nosniff
+x-permitted-cross-domain-policies: none
+access-control-allow-origin: *
+timing-allow-origin: *
+cache-control: public, no-cache
+x-player-privacy-mode: 1
+etag: W/"d86e150c967934e25e3c637f4cbf1432"
+x-request-id: d74f06a2-ee7d-4ee9-b8e3-093ab0fe9cec
+x-runtime: 0.108620
+via: 1.1 2cd91b399d7db009d02ca3e5944f2eca.cloudfront.net (CloudFront), 1.1 varnish, 1.1 varnish
+x-amz-cf-pop: IAD61-P4
+x-amz-cf-id: 4rBXt9yb33Wuj3OXp67Csvg0XyYBHFlEpMV3oQQYCiWmihODMFaiaQ==
+accept-ranges: bytes
+age: 0
+date: Sun, 09 Aug 2026 20:35:35 GMT
+x-served-by: cache-iad-kcgs7200119-IAD, cache-lax-kwhp1940093-LAX
+x-cache: Miss from cloudfront, MISS, MISS
+x-cache-hits: 0, 0
+x-timer: S1786307735.095916,VS0,VE172
+vary: Accept-Encoding,X-Forwarded-Proto,X-ECMA-Override
+strict-transport-security: max-age=0
+x-ecma-v: modern
+x-browser: unknown
+x-browser-version: 0
+content-length: 2038
+
diff --git a/archive/techworks/items/rstudio-load-testing-shiny/wistia.json b/archive/techworks/items/rstudio-load-testing-shiny/wistia.json
new file mode 100644
index 0000000..4ee8b8a
--- /dev/null
+++ b/archive/techworks/items/rstudio-load-testing-shiny/wistia.json
@@ -0,0 +1 @@
+{"media":{"accountId":393487,"accountHashedId":"yy68sak8q4","accountKey":"wistia-production_393487","analyticsHost":"https://distillery.wistia.net","formsHost":"https://app.wistia.com","formEventsApi":"/form-stream/1.0.0","aspectRatio":1.7777777777777777,"assets":[{"is_enhanced":false,"type":"original","slug":"original","display_name":"Original File","details":{},"width":1920,"height":1080,"ext":"mp4","size":517033235,"bitrate":1427,"public":true,"status":2,"progress":1.0,"url":"https://embed-ssl.wistia.com/deliveries/c12af73125729f8410a5140c4529b5aebdfd0da9.bin","created_at":1536264660},{"is_enhanced":false,"type":"iphone_video","slug":"mp4_h264_202k","display_name":"360p","details":{},"container":"mp4","codec":"h264","width":640,"height":360,"ext":"mp4","size":73374788,"bitrate":202,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":32730,"average_bitrate":31735,"early_max_bitrate":93125},"url":"https://embed-ssl.wistia.com/deliveries/7cfd07bd947558194169b6db737c485ad96163e2.bin","created_at":1536264660,"segment_duration":3,"opt_vbitrate":1200},{"is_enhanced":false,"type":"mp4_video","slug":"mp4_h264_166k","display_name":"224p","details":{},"container":"mp4","codec":"h264","width":400,"height":224,"ext":"mp4","size":60259765,"bitrate":166,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":10152,"average_bitrate":10852,"early_max_bitrate":12283},"url":"https://embed-ssl.wistia.com/deliveries/96d18025795f36431ed4835abc5574c23695e480.bin","created_at":1536264660,"segment_duration":3,"opt_vbitrate":300},{"is_enhanced":false,"type":"md_mp4_video","slug":"mp4_h264_249k","display_name":"540p","details":{},"container":"mp4","codec":"h264","width":960,"height":540,"ext":"mp4","size":90289956,"bitrate":249,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":31907,"average_bitrate":36869,"early_max_bitrate":128767},"url":"https://embed-ssl.wistia.com/deliveries/a07135fd8c023c4470ebc334028516418618c4a9.bin","created_at":1536264660,"segment_duration":3,"opt_vbitrate":1800},{"is_enhanced":false,"type":"hd_mp4_video","slug":"mp4_h264_305k","display_name":"720p","details":{},"container":"mp4","codec":"h264","width":1280,"height":720,"ext":"mp4","size":110699154,"bitrate":305,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":35769,"average_bitrate":43885,"early_max_bitrate":190112},"url":"https://embed-ssl.wistia.com/deliveries/b160610d28e94636c4fd937ae9ef0cc8aff033af.bin","created_at":1536264660,"segment_duration":3,"opt_vbitrate":3750},{"is_enhanced":false,"type":"hd_mp4_video","slug":"mp4_h264_435k","display_name":"1080p","details":{},"container":"mp4","codec":"h264","width":1920,"height":1080,"ext":"mp4","size":157657713,"bitrate":435,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":47417,"average_bitrate":60071,"early_max_bitrate":300837},"url":"https://embed-ssl.wistia.com/deliveries/08bc3ce706619420a88802e14cdfde4d25f16075.bin","created_at":1536264660,"segment_duration":3,"opt_vbitrate":5625},{"is_enhanced":false,"type":"storyboard","slug":"storyboard_2000x2373","display_name":"Storyboard","details":{},"width":2000,"height":2373,"ext":"jpg","size":565514,"bitrate":0,"public":true,"status":2,"progress":1.0,"metadata":{"frame_width":200,"frame_height":113,"frame_count":200,"aspect_ratio":1.7777777777777777},"url":"https://embed-ssl.wistia.com/deliveries/62a66029fc8968a9f19c5b2a8b170060f216615c.bin","created_at":1536264660},{"is_enhanced":false,"type":"still_image","slug":"still_image_1920x1080","display_name":"Thumbnail Image","details":{},"width":1920,"height":1080,"ext":"png","size":500191,"bitrate":0,"public":true,"status":2,"progress":1.0,"url":"https://embed-ssl.wistia.com/deliveries/2342faa4453742faffd761a6cfa8723c58c9649d.bin","created_at":1536267281}],"branding":false,"createdAt":1536264660,"distilleryUrl":"https://distillery.wistia.com/x","duration":2829.8,"enableCustomerLogo":true,"firstEmbedForAccount":false,"firstShareForAccount":false,"availableTranscripts":[],"hashedId":"044vu2h9wx","mediaId":36340461,"mediaKey":"wistia-production_36340461","mediaType":"Video","name":"Load testing Shiny - Alan Dipert","preloadPreference":"","progress":1.0,"protected":false,"projectId":2144013,"seoDescription":"a Webinars video","showAbout":true,"status":2,"type":"Video","playableWithoutInstantHls":true,"privacyMode":true,"stats":{"loadCount":3021,"playCount":1251,"uniqueLoadCount":2175,"uniquePlayCount":1031,"averageEngagement":0.186177},"trackingTransmitInterval":94,"liveStreamEventDetails":null,"integrations":{"google_analytics4":true,"google_analytics":true},"tagManager":false,"hls_enabled":true,"embed_options":{"opaqueControls":null,"playerColor":"71a5d4","playerColorGradient":{"on":false,"colors":[["#223d50",0],["#88a3b6",1]]},"plugin":{"googleAnalytics4":{"on":true,"measurementId":"G-RHNDCXHKLR","usePageGA4Config":true},"share":{"on":"true","downloadType":"sd_mp4","tweetText":"{video_name}","overrideUrl":"false","pageTitle":"Working with Big Data in R","pageUrl":"http://rstudio.wistia.com/medias/cfg7kss8jf","channels":"email-twitter-linkedIn-googlePlus-facebook","conversionOpportunityKey":"wistia-production_3053492"},"postRoll-v1":{"rewatch":"true","text":"Click here to download a 45 day evaluation of RStudio Server Pro","link":"https://www.rstudio.com/products/rstudio-server-pro/evaluation/","time":"end","autoSize":"true","style":{"backgroundColor":"#303030"},"conversionOpportunityKey":"wistia-production_3053357","ctaType":"text","on":"true"}},"volumeControl":"true","fullscreenButton":"true","controlsVisibleOnLoad":"true","bpbTime":"false","vulcan":true,"branding":"false","showCustomerLogo":"false","stillUrl":"https://embed-ssl.wistia.com/deliveries/2342faa4453742faffd761a6cfa8723c58c9649d.png","autoPlay":"false","endVideoBehavior":"default","playButton":"true","smallPlayButton":"false","playbar":"true","settingsControl":"true","contrastIcons":true,"newRoundedIcons":true,"shouldShowCaptionsSettings":true},"embedOptions":{"opaqueControls":null,"playerColor":"71a5d4","playerColorGradient":{"on":false,"colors":[["#223d50",0],["#88a3b6",1]]},"plugin":{"googleAnalytics4":{"on":true,"measurementId":"G-RHNDCXHKLR","usePageGA4Config":true},"share":{"on":"true","downloadType":"sd_mp4","tweetText":"{video_name}","overrideUrl":"false","pageTitle":"Working with Big Data in R","pageUrl":"http://rstudio.wistia.com/medias/cfg7kss8jf","channels":"email-twitter-linkedIn-googlePlus-facebook","conversionOpportunityKey":"wistia-production_3053492"},"postRoll-v1":{"rewatch":"true","text":"Click here to download a 45 day evaluation of RStudio Server Pro","link":"https://www.rstudio.com/products/rstudio-server-pro/evaluation/","time":"end","autoSize":"true","style":{"backgroundColor":"#303030"},"conversionOpportunityKey":"wistia-production_3053357","ctaType":"text","on":"true"}},"volumeControl":"true","fullscreenButton":"true","controlsVisibleOnLoad":"true","bpbTime":"false","vulcan":true,"branding":"false","showCustomerLogo":"false","stillUrl":"https://embed-ssl.wistia.com/deliveries/2342faa4453742faffd761a6cfa8723c58c9649d.png","autoPlay":"false","endVideoBehavior":"default","playButton":"true","smallPlayButton":"false","playbar":"true","settingsControl":"true","contrastIcons":true,"newRoundedIcons":true,"shouldShowCaptionsSettings":true}},"options":{}}
\ No newline at end of file
diff --git a/archive/techworks/items/rstudio-make-shiny-fast/original.ffprobe.json b/archive/techworks/items/rstudio-make-shiny-fast/original.ffprobe.json
new file mode 100644
index 0000000..97135b0
--- /dev/null
+++ b/archive/techworks/items/rstudio-make-shiny-fast/original.ffprobe.json
@@ -0,0 +1,32 @@
+{
+    "programs": [
+
+    ],
+    "stream_groups": [
+
+    ],
+    "streams": [
+        {
+            "index": 0,
+            "codec_name": "h264",
+            "codec_type": "video",
+            "width": 1920,
+            "height": 1080,
+            "r_frame_rate": "60/1"
+        },
+        {
+            "index": 1,
+            "codec_name": "aac",
+            "codec_type": "audio",
+            "sample_rate": "48000",
+            "channels": 2,
+            "r_frame_rate": "0/0"
+        }
+    ],
+    "format": {
+        "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
+        "duration": "1097.550000",
+        "size": "2016953406",
+        "bit_rate": "14701496"
+    }
+}
diff --git a/archive/techworks/items/rstudio-make-shiny-fast/original.mp4 b/archive/techworks/items/rstudio-make-shiny-fast/original.mp4
new file mode 100644
index 0000000..5252969
--- /dev/null
+++ b/archive/techworks/items/rstudio-make-shiny-fast/original.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b2872d41daa107619377bd61c92289d562dc78ac69060a5c8bc5e89f817f0ee9
+size 2016953406
diff --git a/archive/techworks/items/rstudio-make-shiny-fast/source.headers b/archive/techworks/items/rstudio-make-shiny-fast/source.headers
new file mode 100644
index 0000000..3984cdb
--- /dev/null
+++ b/archive/techworks/items/rstudio-make-shiny-fast/source.headers
@@ -0,0 +1,54 @@
+HTTP/2 301 
+content-type: text/html; charset=utf-8
+content-length: 586
+location: https://posit.co/resources/videos/make-shiny-fast-by-doing-as-little-work-as-possible
+server: nginx
+date: Sun, 09 Aug 2026 20:35:17 GMT
+via: varnish, 1.1 81316ca7254949464a40e31d08fd91bc.cloudfront.net (CloudFront)
+x-drupal-route-normalizer: 1
+content-language: en
+x-content-type-options: nosniff
+x-frame-options: SAMEORIGIN
+expires: Sun, 19 Nov 1978 05:00:00 GMT
+cache-control: max-age=60, must-revalidate, public, s-maxage=900, stale-if-error=3600, stale-while-revalidate=60
+x-generator: Drupal 11 (https://www.drupal.org)
+x-xss-protection: 1; mode=block
+strict-transport-security: max-age=31622400; includeSubDomains; preload
+last-modified: Sun, 09 Aug 2026 20:35:16 GMT
+etag: "1786307716"
+x-request-id: v-d4c99284-9431-11f1-9e0b-1f19985ace2f
+x-ah-environment: prod
+vary: Cookie
+x-cache: Miss from cloudfront
+x-amz-cf-pop: LAX50-P4
+alt-svc: h3=":443"; ma=86400
+x-amz-cf-id: qVvVsoq2d8vQ688K7gb8U_uANpn0KQCviZxw1K_ityLu7nrZh-rkwA==
+age: 0
+
+HTTP/2 200 
+content-type: text/html; charset=UTF-8
+server: nginx
+date: Sun, 09 Aug 2026 20:35:19 GMT
+via: varnish, 1.1 81316ca7254949464a40e31d08fd91bc.cloudfront.net (CloudFront)
+accept-ranges: bytes
+cache-control: max-age=60, must-revalidate, public, s-maxage=300, stale-if-error=3600, stale-while-revalidate=60
+x-drupal-dynamic-cache: MISS
+content-language: en
+x-content-type-options: nosniff
+x-frame-options: SAMEORIGIN
+expires: Sun, 19 Nov 1978 05:00:00 GMT
+x-generator: Drupal 11 (https://www.drupal.org)
+x-xss-protection: 1; mode=block
+strict-transport-security: max-age=31622400; includeSubDomains; preload
+last-modified: Sun, 09 Aug 2026 20:35:17 GMT
+etag: "1786307717-gzip"
+content-encoding: gzip
+x-request-id: v-d4f69cca-9431-11f1-8b85-a337caaacd75
+x-ah-environment: prod
+vary: Cookie,Accept-Encoding
+x-cache: Miss from cloudfront
+x-amz-cf-pop: LAX50-P4
+alt-svc: h3=":443"; ma=86400
+x-amz-cf-id: WRqnqzrny35bPTtzRfoMCvr9TR2O-xESDJGmJSCK_D5lv0eqGTKTGw==
+age: 0
+
diff --git a/archive/techworks/items/rstudio-make-shiny-fast/source.html b/archive/techworks/items/rstudio-make-shiny-fast/source.html
new file mode 100644
index 0000000..480c7db
--- /dev/null
+++ b/archive/techworks/items/rstudio-make-shiny-fast/source.html
@@ -0,0 +1,2722 @@
+<!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'?'&amp;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>
+<link rel="canonical" href="https://posit.co/resources/videos/make-shiny-fast-by-doing-as-little-work-as-possible" />
+<link rel="image_src" href="/sites/default/files/migrate/videos/2023/02/thumbnail-346.jpg" />
+<meta property="og:site_name" content="Posit" />
+<meta property="og:type" content="website" />
+<meta property="og:url" content="https://posit.co/resources/videos/make-shiny-fast-by-doing-as-little-work-as-possible" />
+<meta property="og:title" content="Make Shiny fast by doing as little work as possible" />
+<meta property="og:image" content="https://posit.co/sites/default/files/migrate/videos/2023/02/thumbnail-346.jpg" />
+<meta property="article:publisher" content="positpbc" />
+<meta name="twitter:card" content="summary_large_image" />
+<meta name="twitter:title" content="Make Shiny fast by doing as little work as possible" />
+<meta name="twitter:site" content="@posit_pbc" />
+<meta name="twitter:site:id" content="235261861" />
+<meta name="twitter:image" content="https://posit.co/sites/default/files/migrate/videos/2023/02/thumbnail-346.jpg" />
+<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": "Article",
+            "@id": "https://posit.co/resources/videos/make-shiny-fast-by-doing-as-little-work-as-possible#article",
+            "headline": "Make Shiny fast by doing as little work as possible",
+            "name": "Make Shiny fast by doing as little work as possible",
+            "image": {
+                "@type": "ImageObject",
+                "url": "https://posit.co/sites/default/files/migrate/videos/2023/02/thumbnail-346.jpg"
+            },
+            "datePublished": "2018-02-26",
+            "dateModified": "2023-02-10",
+            "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"
+                }
+            }
+        },
+        {
+            "@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": "VideoObject",
+            "uploadDate": "2018-02-26",
+            "thumbnailUrl": "https://posit.co/sites/default/files/migrate/videos/2023/02/thumbnail-346.jpg",
+            "@id": "https://posit.co/resources/videos/make-shiny-fast-by-doing-as-little-work-as-possible#video",
+            "name": "Make Shiny fast by doing as little work as possible",
+            "embedUrl": "https://fast.wistia.com/medias/8wfv7ytt0e"
+        },
+        {
+            "@type": "WebPage",
+            "@id": "https://posit.co/resources/videos/make-shiny-fast-by-doing-as-little-work-as-possible/#webpage",
+            "publisher": {
+                "@type": "Organization",
+                "@id": "https://posit.co/#org",
+                "name": "Posit",
+                "url": "https://posit.co"
+            },
+            "inLanguage": "English"
+        }
+    ]
+}</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&amp;family=Source+Code+Pro:wght@400..600&amp;display=swap" crossorigin />
+<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400..700&amp;family=Source+Code+Pro:wght@400..600&amp;display=swap" crossorigin />
+<script>window.a2a_config=window.a2a_config||{};a2a_config.callbacks=[];a2a_config.overlays=[];a2a_config.templates={};</script>
+
+    <title>Make Shiny fast by doing as little work as possible | Posit</title>
+    <link rel="stylesheet" media="all" href="/sites/default/files/css/css_vCpS-9m25pT1gyyM_A5z41_N8M1o32Hvmu3NECX3ZHc.css?delta=0&amp;language=en&amp;theme=kinetic&amp;include=eJx9T0kOgzAM_BAhT0JOMoBVHFexqdrfdwFxS0-j2Txy1oaYVe5aUd3GG1c45xCKpFDVeeZMzlptyL3orOpofX_ZuKBvr6Dyry6oe_DGy_JJFTZhM04bJoEZLZgStdjRh_NKTGS4yIkXPws2CApTVEhCGWdtQv79zEAtr-b0nPJurjIdSjwgNDxA22Avc8hv6g3xI4Tg" />
+<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_gclFIAzAPyJD9SRHjF_A0haiQYsuJZZ7GVCt1JqTPMo.css?delta=3&amp;language=en&amp;theme=kinetic&amp;include=eJx9T0kOgzAM_BAhT0JOMoBVHFexqdrfdwFxS0-j2Txy1oaYVe5aUd3GG1c45xCKpFDVeeZMzlptyL3orOpofX_ZuKBvr6Dyry6oe_DGy_JJFTZhM04bJoEZLZgStdjRh_NKTGS4yIkXPws2CApTVEhCGWdtQv79zEAtr-b0nPJurjIdSjwgNDxA22Avc8hv6g3xI4Tg" />
+
+    <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-resource">
+        <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="&lt;front&gt;">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 &amp; 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] [&amp;_img]:rounded-xl [&amp;_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="&lt;front&gt;">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] [&amp;_img]:rounded-xl [&amp;_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&#039;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 &amp; 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] [&amp;_img]:rounded-xl [&amp;_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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;6&quot;:&quot;6&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;11&quot;:&quot;11&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;16&quot;:&quot;16&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;21&quot;:&quot;21&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;31&quot;:&quot;31&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;46&quot;:&quot;46&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;36&quot;:&quot;36&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;26&quot;:&quot;26&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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="&lt;front&gt;">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&amp;type%5B136%5D=136&amp;type%5B131%5D=131&amp;type%5B246%5D=246&amp;search_api_fulltext=&amp;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 &amp; 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&amp;search_api_fulltext=&amp;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] [&amp;_img]:rounded-xl [&amp;_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">&times;</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-resource 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:resource">
+    <div class="bg-[image:var(--header-gradient)] pt-10 xl:pt-18">
+
+        <div id="resource-top-section" class="container container-default ">
+            <div class="shrink-0 surface-dark pb-41 xl:pb-87">
+                  <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="/content-library">Content library</a>
+                  </li>
+                              <li class="not-first:before:content-['>']">
+                      <a class="text-inherit hover:underline" href="/videos">Videos</a>
+                  </li>
+                              </ol>
+  </nav>
+
+                
+                
+                                    <div class="mt-8 lg:mt-10 before:icon-calendar/[20px] before:bg-white before:block flex items-center gap-2.5 text-white text-xs leading-[1.33] font-semibold">      2018-02-26
+  </div>
+                
+                
+                <h1 class="h1 lg:text-[54px] mt-5">Make Shiny fast by doing as little work as possible</h1>
+                                            </div>
+                    </div>
+    </div>
+
+    <div class="container container-default max-w-[1038px]">
+
+                                    <div class="relative -mt-28 xl:-mt-72 overflow-hidden rounded-2xl [&_.media-oembed-content]:w-full">
+                          
+
+
+
+  
+
+<div  class="media media--type-remote-video media--view-mode-default h-[inherit] [&amp;_iframe]:mx-auto">
+  
+            <iframe src="https://posit.co/media/oembed?url=https%3A//fast.wistia.com/medias/8wfv7ytt0e&amp;max_width=0&amp;max_height=0&amp;hash=jQz6OCIh5qCFHFqu2v6d7udqsyT51ewXijpPXcdCQPA" width="960" height="540" class="media-oembed-content" loading="lazy" title="Make Shiny fast by doing as little work as possible – Alan Dipert" data-video-id="8wfv7ytt0e"></iframe>
+
+  
+  </div>
+
+  
+                    
+                </div>
+                    
+        
+        
+        <div id="resource-body" class="mt-13 mb-20 max-w-[696px] md:mt-15 mx-auto">
+                        <div>
+                <div class="flex gap-4 md:gap-10 items-center">
+                    <span class="text-base md:text-lg">Share</span>
+                    <div class="menu--social">
+                        <span class="a2a_kit a2a_kit_size_32 addtoany_list" data-a2a-url="https://posit.co/resources/videos/make-shiny-fast-by-doing-as-little-work-as-possible" data-a2a-title="Make Shiny fast by doing as little work as possible"><a class="a2a_button_facebook"></a><a class="a2a_button_mastodon"></a><a class="a2a_button_linkedin"></a><a class="a2a_button_bluesky"></a></span>
+
+                    </div>
+                </div>
+                                                                                                    <div class="mt-13">
+                        <div class="text-formatted">
+      <hr>
+<p>Ever felt like your shiny app was too slow? The responsiveness of many Shiny apps can be improved without much effort, you just need to know what to look for. In my talk I'll discuss the pieces of typical Shiny apps in a performance context. I'll also introduce tools and techniques for maximizing Shiny app performance in order to deliver the best possible user experience.</p>
+<p><a target="_blank" rel="noopener noreferrer" class="btn-primary" href="//tailrecursion.com/slides/fast-shiny/#/title-slide
+">View Slides</a></p>
+  </div>
+
+                    </div>
+                                            </div>
+        </div>
+
+                    <h2 class="h2 md:mb-18">Speakers</h2>
+            <div class="flex flex-col gap-8 max-w-[1008px]">
+                      
+
+
+<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&amp;itok=m74AE6hd 1x, /sites/default/files/styles/large_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&amp;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&amp;itok=wjGCvil4 1x, /sites/default/files/styles/small_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&amp;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&amp;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>
+
+
+</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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;31&quot;:&quot;31&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;46&quot;:&quot;46&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;36&quot;:&quot;36&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;26&quot;:&quot;26&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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 &amp; 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 &amp; 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\/11561","currentPathIsAdmin":false,"isFront":false,"currentLanguage":"en"},"pluralDelimiter":"\u0003","suppressDeprecationErrors":true,"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":"resource","title":"Make Shiny fast by doing as little work as possible","tags":{"field_resource_type":"Video"}}},"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"]}]},"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":"resource","contentPath":"\/resources\/videos\/make-shiny-fast-by-doing-as-little-work-as-possible","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="/sites/default/files/js/js_HokrY8q7cc_1ENX5JpoK2Tg9FmXkWLz7Y-THA8_gIrk.js?scope=footer&amp;delta=1&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEFywzAI_JAUHfIgDZawzFiCVKBO3ddXmbg91bnAsuwCA-RsAnwEOMFt7cLmknQMSdpDGNn0thOjUfI-t8WzGK2UwEhYr6WriGG_7pdKGa_bG0J-Z2_Iw1unUt6pOqqMntBl0kaqtFSMDVWhYFyghwve4T026DuaBLz7E_o2OG1zuDsXhDO7Ct9HeAb3UIsZDCocOMf_IvcxKO2VeA9_6D8uEpM5RehpU4OvmIaatPhiAvH8KUP1r3o-ANK8oVw7TmHHT4T6A0eFwTY"></script>
+<script src="https://static.addtoany.com/menu/page.js" defer></script>
+<script src="/sites/default/files/js/js_iDgkh5LVhg7OxqZKPS11Ic5T0J1YdZFFh-H6KnTRvSs.js?scope=footer&amp;delta=3&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEFywzAI_JAUHfIgDZawzFiCVKBO3ddXmbg91bnAsuwCA-RsAnwEOMFt7cLmknQMSdpDGNn0thOjUfI-t8WzGK2UwEhYr6WriGG_7pdKGa_bG0J-Z2_Iw1unUt6pOqqMntBl0kaqtFSMDVWhYFyghwve4T026DuaBLz7E_o2OG1zuDsXhDO7Ct9HeAb3UIsZDCocOMf_IvcxKO2VeA9_6D8uEpM5RehpU4OvmIaatPhiAvH8KUP1r3o-ANK8oVw7TmHHT4T6A0eFwTY"></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&amp;delta=6&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEFywzAI_JAUHfIgDZawzFiCVKBO3ddXmbg91bnAsuwCA-RsAnwEOMFt7cLmknQMSdpDGNn0thOjUfI-t8WzGK2UwEhYr6WriGG_7pdKGa_bG0J-Z2_Iw1unUt6pOqqMntBl0kaqtFSMDVWhYFyghwve4T026DuaBLz7E_o2OG1zuDsXhDO7Ct9HeAb3UIsZDCocOMf_IvcxKO2VeA9_6D8uEpM5RehpU4OvmIaatPhiAvH8KUP1r3o-ANK8oVw7TmHHT4T6A0eFwTY"></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="/core/../themes/custom/kinetic/dist/assets/components/04-pages/resource/resource.es6.js-BkpIZJGP.js?tj9gxp" type="module"></script>
+<script src="/sites/default/files/js/js_RJ1fQwJFFCKKXw_812IKF75kByQsuPM4uFd8LwOn-eU.js?scope=footer&amp;delta=10&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEFywzAI_JAUHfIgDZawzFiCVKBO3ddXmbg91bnAsuwCA-RsAnwEOMFt7cLmknQMSdpDGNn0thOjUfI-t8WzGK2UwEhYr6WriGG_7pdKGa_bG0J-Z2_Iw1unUt6pOqqMntBl0kaqtFSMDVWhYFyghwve4T026DuaBLz7E_o2OG1zuDsXhDO7Ct9HeAb3UIsZDCocOMf_IvcxKO2VeA9_6D8uEpM5RehpU4OvmIaatPhiAvH8KUP1r3o-ANK8oVw7TmHHT4T6A0eFwTY"></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_A9DnsSiedfF5h3C4VGlBcjkzzfubwtQkAYqN6javnG4.js?scope=footer&amp;delta=12&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEFywzAI_JAUHfIgDZawzFiCVKBO3ddXmbg91bnAsuwCA-RsAnwEOMFt7cLmknQMSdpDGNn0thOjUfI-t8WzGK2UwEhYr6WriGG_7pdKGa_bG0J-Z2_Iw1unUt6pOqqMntBl0kaqtFSMDVWhYFyghwve4T026DuaBLz7E_o2OG1zuDsXhDO7Ct9HeAb3UIsZDCocOMf_IvcxKO2VeA9_6D8uEpM5RehpU4OvmIaatPhiAvH8KUP1r3o-ANK8oVw7TmHHT4T6A0eFwTY"></script>
+
+  </body>
+</html>
diff --git a/archive/techworks/items/rstudio-make-shiny-fast/still.jpg b/archive/techworks/items/rstudio-make-shiny-fast/still.jpg
new file mode 100644
index 0000000..a1d33af
Binary files /dev/null and b/archive/techworks/items/rstudio-make-shiny-fast/still.jpg differ
diff --git a/archive/techworks/items/rstudio-make-shiny-fast/wistia.headers b/archive/techworks/items/rstudio-make-shiny-fast/wistia.headers
new file mode 100644
index 0000000..e8e4a6d
--- /dev/null
+++ b/archive/techworks/items/rstudio-make-shiny-fast/wistia.headers
@@ -0,0 +1,31 @@
+HTTP/2 200 
+content-type: application/json; charset=utf-8
+content-encoding: br
+x-envoy-upstream-service-time: 184
+server: istio-envoy
+x-content-type-options: nosniff
+x-permitted-cross-domain-policies: none
+access-control-allow-origin: *
+timing-allow-origin: *
+cache-control: public, no-cache
+x-player-privacy-mode: 1
+etag: W/"3e53dd7268fc07f4b2c65d3915fce2ab"
+x-request-id: ba2109b6-2e92-4582-a78a-ffb3d1c4fdca
+x-runtime: 0.174102
+via: 1.1 202eceb25387048bc093cf2084e5cea6.cloudfront.net (CloudFront), 1.1 varnish, 1.1 varnish
+x-amz-cf-pop: IAD61-P4
+x-amz-cf-id: 6uI-0SlYHHsIJMGK57dkYRAErosKYNDEeDM7YkmH9CiHI_LhHkfEOQ==
+accept-ranges: bytes
+age: 64023
+date: Sun, 09 Aug 2026 20:35:35 GMT
+x-served-by: cache-iad-kjyo7100094-IAD, cache-lax-kwhp1940077-LAX
+x-cache: Miss from cloudfront, HIT, MISS
+x-cache-hits: 11, 0
+x-timer: S1786307735.981349,VS0,VE60
+vary: Accept-Encoding,X-Forwarded-Proto,X-ECMA-Override
+strict-transport-security: max-age=0
+x-ecma-v: modern
+x-browser: unknown
+x-browser-version: 0
+content-length: 1775
+
diff --git a/archive/techworks/items/rstudio-make-shiny-fast/wistia.json b/archive/techworks/items/rstudio-make-shiny-fast/wistia.json
new file mode 100644
index 0000000..0a47948
--- /dev/null
+++ b/archive/techworks/items/rstudio-make-shiny-fast/wistia.json
@@ -0,0 +1 @@
+{"media":{"accountId":393487,"accountHashedId":"yy68sak8q4","accountKey":"wistia-production_393487","analyticsHost":"https://distillery.wistia.net","formsHost":"https://app.wistia.com","formEventsApi":"/form-stream/1.0.0","aspectRatio":1.7777777777777777,"assets":[{"is_enhanced":false,"type":"original","slug":"original","display_name":"Original File","details":{},"width":1920,"height":1080,"ext":"mp4","size":2016953406,"bitrate":14356,"public":true,"status":2,"progress":1.0,"url":"https://embed-ssl.wistia.com/deliveries/025fed50c1f5f0394a88e3b29ecdba0aa6da5fc7.bin","created_at":1519681705},{"is_enhanced":false,"type":"iphone_video","slug":"mp4_h264_196k","display_name":"360p","details":{},"container":"mp4","codec":"h264","width":640,"height":360,"ext":"mp4","size":27658637,"bitrate":196,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":87671,"average_bitrate":36015,"early_max_bitrate":87671},"url":"https://embed-ssl.wistia.com/deliveries/6e756c5fb495298ed6167400aaa2316401330e05.bin","created_at":1519681705,"segment_duration":3,"opt_vbitrate":1200},{"is_enhanced":false,"type":"mp4_video","slug":"mp4_h264_170k","display_name":"224p","details":{},"container":"mp4","codec":"h264","width":400,"height":224,"ext":"mp4","size":23989294,"bitrate":170,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":10904,"average_bitrate":10867,"early_max_bitrate":12471},"url":"https://embed-ssl.wistia.com/deliveries/b33662131dfecefe7b26470640c99184d8d03ae6.bin","created_at":1519681705,"segment_duration":3,"opt_vbitrate":300},{"is_enhanced":false,"type":"md_mp4_video","slug":"mp4_h264_239k","display_name":"540p","details":{},"container":"mp4","codec":"h264","width":960,"height":540,"ext":"mp4","size":33624464,"bitrate":239,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":71315,"average_bitrate":39535,"early_max_bitrate":82281},"url":"https://embed-ssl.wistia.com/deliveries/3aaadced5af809d51833c435d36ee2722d4464a0.bin","created_at":1519681705,"segment_duration":3,"opt_vbitrate":1800},{"is_enhanced":false,"type":"hd_mp4_video","slug":"mp4_h264_287k","display_name":"720p","details":{},"container":"mp4","codec":"h264","width":1280,"height":720,"ext":"mp4","size":40400710,"bitrate":287,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":102711,"average_bitrate":44608,"early_max_bitrate":102711},"url":"https://embed-ssl.wistia.com/deliveries/7e3b996fc99dadcd27c34a76ab1702f6c06c9e62.bin","created_at":1519681705,"segment_duration":3,"opt_vbitrate":3750},{"is_enhanced":false,"type":"hd_mp4_video","slug":"mp4_h264_418k","display_name":"1080p","details":{},"container":"mp4","codec":"h264","width":1920,"height":1080,"ext":"mp4","size":58786880,"bitrate":418,"public":true,"status":2,"progress":1.0,"metadata":{"max_bitrate":173775,"average_bitrate":60800,"early_max_bitrate":182172},"url":"https://embed-ssl.wistia.com/deliveries/0e7223f8201ec54d33727803a1b5ccd5c089783e.bin","created_at":1519681705,"segment_duration":3,"opt_vbitrate":5625},{"is_enhanced":false,"type":"storyboard","slug":"storyboard_2000x2260","display_name":"Storyboard","details":{},"width":2000,"height":2260,"ext":"jpg","size":522500,"bitrate":0,"public":true,"status":2,"progress":1.0,"metadata":{"frame_width":200,"frame_height":113,"frame_count":200,"aspect_ratio":1.7777777777777777},"url":"https://embed-ssl.wistia.com/deliveries/1c74ec238dec7b02ab23c25137aee822cb2a7962.bin","created_at":1519681705},{"is_enhanced":false,"type":"still_image","slug":"still_image_1920x1080","display_name":"Thumbnail Image","details":{},"width":1920,"height":1080,"ext":"jpg","size":62322,"bitrate":0,"public":true,"status":2,"progress":1.0,"url":"https://embed-ssl.wistia.com/deliveries/5ed9c0b8f1802cdee155d31adbbaa6203547c0c6.bin","created_at":1520465796}],"branding":false,"createdAt":1519681705,"distilleryUrl":"https://distillery.wistia.com/x","duration":1097.55,"enableCustomerLogo":true,"firstEmbedForAccount":false,"firstShareForAccount":false,"availableTranscripts":[],"hashedId":"8wfv7ytt0e","mediaId":32349914,"mediaKey":"wistia-production_32349914","mediaType":"Video","name":"Make Shiny fast by doing as little work as possible – Alan Dipert","preloadPreference":"","progress":1.0,"protected":false,"projectId":3446896,"seoDescription":"a rstudio_conf_2018 video","showAbout":true,"status":2,"type":"Video","playableWithoutInstantHls":true,"privacyMode":true,"stats":{"loadCount":14262,"playCount":6398,"uniqueLoadCount":10743,"uniquePlayCount":5751,"averageEngagement":0.367476},"trackingTransmitInterval":36,"liveStreamEventDetails":null,"integrations":{"google_analytics4":true,"google_analytics":true},"tagManager":false,"hls_enabled":true,"embed_options":{"opaqueControls":null,"playerColor":"4287c7","playerColorGradient":{"on":false,"colors":[["#223d50",0],["#88a3b6",1]]},"plugin":{"googleAnalytics4":{"on":true,"measurementId":"G-RHNDCXHKLR","usePageGA4Config":true}},"volumeControl":"true","fullscreenButton":"true","controlsVisibleOnLoad":"true","bpbTime":"false","vulcan":true,"stillUrl":"https://embed-ssl.wistia.com/deliveries/5ed9c0b8f1802cdee155d31adbbaa6203547c0c6.bin","branding":"false","showCustomerLogo":"true","autoPlay":"false","silentAutoPlay":"false","endVideoBehavior":"default","playbar":"true","playButton":"true","settingsControl":"true","qualityControl":"true","playbackRateControl":"true","smallPlayButton":"true","spherical":"false","contrastIcons":true,"newRoundedIcons":true,"shouldShowCaptionsSettings":true},"embedOptions":{"opaqueControls":null,"playerColor":"4287c7","playerColorGradient":{"on":false,"colors":[["#223d50",0],["#88a3b6",1]]},"plugin":{"googleAnalytics4":{"on":true,"measurementId":"G-RHNDCXHKLR","usePageGA4Config":true}},"volumeControl":"true","fullscreenButton":"true","controlsVisibleOnLoad":"true","bpbTime":"false","vulcan":true,"stillUrl":"https://embed-ssl.wistia.com/deliveries/5ed9c0b8f1802cdee155d31adbbaa6203547c0c6.bin","branding":"false","showCustomerLogo":"true","autoPlay":"false","silentAutoPlay":"false","endVideoBehavior":"default","playbar":"true","playButton":"true","settingsControl":"true","qualityControl":"true","playbackRateControl":"true","smallPlayButton":"true","spherical":"false","contrastIcons":true,"newRoundedIcons":true,"shouldShowCaptionsSettings":true}},"options":{}}
\ No newline at end of file
diff --git a/archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.headers b/archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.headers
new file mode 100644
index 0000000..2d9bba2
--- /dev/null
+++ b/archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.headers
@@ -0,0 +1,54 @@
+HTTP/2 301 
+content-type: text/html; charset=utf-8
+content-length: 422
+location: https://posit.co/blog/shiny-server-pro-1-5-4
+server: nginx
+date: Sun, 09 Aug 2026 20:35:07 GMT
+via: varnish, 1.1 c9fff1d399146ad5086b24b243b1d7ca.cloudfront.net (CloudFront)
+x-drupal-route-normalizer: 1
+content-language: en
+x-content-type-options: nosniff
+x-frame-options: SAMEORIGIN
+expires: Sun, 19 Nov 1978 05:00:00 GMT
+cache-control: max-age=60, must-revalidate, public, s-maxage=900, stale-if-error=3600, stale-while-revalidate=60
+x-generator: Drupal 11 (https://www.drupal.org)
+x-xss-protection: 1; mode=block
+strict-transport-security: max-age=31622400; includeSubDomains; preload
+last-modified: Sun, 09 Aug 2026 20:35:07 GMT
+etag: "1786307707"
+x-request-id: v-cf2b8ef4-9431-11f1-b6a3-377931645d05
+x-ah-environment: prod
+vary: Cookie
+x-cache: Miss from cloudfront
+x-amz-cf-pop: LAX50-P4
+alt-svc: h3=":443"; ma=86400
+x-amz-cf-id: CrccS9rl--6v_kFRoKl34Ez2Mnrt8N8O_ntp_7gLyqOVaA_dUclmqg==
+age: 0
+
+HTTP/2 200 
+content-type: text/html; charset=UTF-8
+server: nginx
+date: Sun, 09 Aug 2026 20:35:10 GMT
+via: varnish, 1.1 c9fff1d399146ad5086b24b243b1d7ca.cloudfront.net (CloudFront)
+accept-ranges: bytes
+cache-control: max-age=60, must-revalidate, public, s-maxage=300, stale-if-error=3600, stale-while-revalidate=60
+x-drupal-dynamic-cache: UNCACHEABLE (poor cacheability)
+content-language: en
+x-content-type-options: nosniff
+x-frame-options: SAMEORIGIN
+expires: Sun, 19 Nov 1978 05:00:00 GMT
+x-generator: Drupal 11 (https://www.drupal.org)
+x-xss-protection: 1; mode=block
+strict-transport-security: max-age=31622400; includeSubDomains; preload
+last-modified: Sun, 09 Aug 2026 20:35:07 GMT
+etag: "1786307707-gzip"
+content-encoding: gzip
+x-request-id: v-cf59896c-9431-11f1-aa15-b3c4271a9357
+x-ah-environment: prod
+vary: Cookie,Accept-Encoding
+x-cache: Miss from cloudfront
+x-amz-cf-pop: LAX50-P4
+alt-svc: h3=":443"; ma=86400
+x-amz-cf-id: c4_FsFVN5NvD8vK9G0fYMxQP-q3RmuPfeFu06tn62lhjfOHxSNoRrg==
+age: 0
+
diff --git a/archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.html b/archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.html
new file mode 100644
index 0000000..55d6e80
--- /dev/null
+++ b/archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.html
@@ -0,0 +1,3276 @@
+<!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'?'&amp;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&amp;family=Source+Code+Pro:wght@400..600&amp;display=swap" crossorigin />
+<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400..700&amp;family=Source+Code+Pro:wght@400..600&amp;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&amp;language=en&amp;theme=kinetic&amp;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&amp;language=en&amp;theme=kinetic&amp;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="&lt;front&gt;">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 &amp; 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] [&amp;_img]:rounded-xl [&amp;_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="&lt;front&gt;">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] [&amp;_img]:rounded-xl [&amp;_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&#039;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 &amp; 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] [&amp;_img]:rounded-xl [&amp;_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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;6&quot;:&quot;6&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;11&quot;:&quot;11&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;16&quot;:&quot;16&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;21&quot;:&quot;21&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;31&quot;:&quot;31&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;46&quot;:&quot;46&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;36&quot;:&quot;36&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;26&quot;:&quot;26&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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="&lt;front&gt;">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&amp;type%5B136%5D=136&amp;type%5B131%5D=131&amp;type%5B246%5D=246&amp;search_api_fulltext=&amp;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 &amp; 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&amp;search_api_fulltext=&amp;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] [&amp;_img]:rounded-xl [&amp;_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">&times;</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&amp;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&amp;itok=m74AE6hd 1x, /sites/default/files/styles/large_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&amp;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&amp;itok=wjGCvil4 1x, /sites/default/files/styles/small_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&amp;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&amp;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&#039;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&#039;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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;31&quot;:&quot;31&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;46&quot;:&quot;46&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;36&quot;:&quot;36&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;26&quot;:&quot;26&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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 &amp; 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 &amp; 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&amp;delta=2&amp;language=en&amp;theme=kinetic&amp;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&amp;delta=4&amp;language=en&amp;theme=kinetic&amp;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&amp;delta=7&amp;language=en&amp;theme=kinetic&amp;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&amp;delta=10&amp;language=en&amp;theme=kinetic&amp;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&amp;delta=12&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEt2wzAIvJBkLXIgPSxhm1qCVOA0zumrNk5WdTcwDMMXcjYB3gMcYJiasLkkDUOSehVGNh1WYjRK3uc6ehajiRIYCeu5dBIxbOf5uVDG8_SCkP8rr8ibt0bz3FWZtJIqjQVjRVWYMY7Qwgnv8BIrtBVNAl78AX3dOC19gDuGhMO7Ao89_Bh3VYsZDArs2Nu_kPvcKK2FeA1v9BcXicmcIrS0qME9pk1Nanwygbh_jKH4Z9zPg9R3mM8rDmHDG0JxN8IvDb92gA-4fwPuhbqe"></script>
+
+  </body>
+</html>
diff --git a/archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.headers b/archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.headers
new file mode 100644
index 0000000..5f15f6f
--- /dev/null
+++ b/archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.headers
@@ -0,0 +1,54 @@
+HTTP/2 301 
+content-type: text/html; charset=utf-8
+content-length: 422
+location: https://posit.co/blog/shiny-server-pro-1-5-6
+server: nginx
+date: Sun, 09 Aug 2026 20:35:10 GMT
+via: varnish, 1.1 b0cf88fce5b426f643a724856a8060ea.cloudfront.net (CloudFront)
+x-drupal-route-normalizer: 1
+content-language: en
+x-content-type-options: nosniff
+x-frame-options: SAMEORIGIN
+expires: Sun, 19 Nov 1978 05:00:00 GMT
+cache-control: max-age=60, must-revalidate, public, s-maxage=900, stale-if-error=3600, stale-while-revalidate=60
+x-generator: Drupal 11 (https://www.drupal.org)
+x-xss-protection: 1; mode=block
+strict-transport-security: max-age=31622400; includeSubDomains; preload
+last-modified: Sun, 09 Aug 2026 20:35:10 GMT
+etag: "1786307710"
+x-request-id: v-d116c990-9431-11f1-86ea-97ee6de916e7
+x-ah-environment: prod
+vary: Cookie
+x-cache: Miss from cloudfront
+x-amz-cf-pop: LAX50-P4
+alt-svc: h3=":443"; ma=86400
+x-amz-cf-id: S6fXCmhgerb3E71Yr8YSslCkxsS8OxFwlH_FCaE3dLehrxtCLjLL9A==
+age: 0
+
+HTTP/2 200 
+content-type: text/html; charset=UTF-8
+server: nginx
+date: Sun, 09 Aug 2026 20:35:13 GMT
+via: varnish, 1.1 b0cf88fce5b426f643a724856a8060ea.cloudfront.net (CloudFront)
+accept-ranges: bytes
+cache-control: max-age=60, must-revalidate, public, s-maxage=300, stale-if-error=3600, stale-while-revalidate=60
+x-drupal-dynamic-cache: UNCACHEABLE (poor cacheability)
+content-language: en
+x-content-type-options: nosniff
+x-frame-options: SAMEORIGIN
+expires: Sun, 19 Nov 1978 05:00:00 GMT
+x-generator: Drupal 11 (https://www.drupal.org)
+x-xss-protection: 1; mode=block
+strict-transport-security: max-age=31622400; includeSubDomains; preload
+last-modified: Sun, 09 Aug 2026 20:35:11 GMT
+etag: "1786307711-gzip"
+content-encoding: gzip
+x-request-id: v-d13d5b50-9431-11f1-9f43-8f13073a9b94
+x-ah-environment: prod
+vary: Cookie,Accept-Encoding
+x-cache: Miss from cloudfront
+x-amz-cf-pop: LAX50-P4
+alt-svc: h3=":443"; ma=86400
+x-amz-cf-id: Y0EkZI0bc7HQtLZjtzlEyxNm07DqCRmogHH_CHreai72ubjyyhPDTQ==
+age: 0
+
diff --git a/archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.html b/archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.html
new file mode 100644
index 0000000..93af5ac
--- /dev/null
+++ b/archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.html
@@ -0,0 +1,3272 @@
+<!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'?'&amp;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-6" />
+<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-6" />
+<meta property="og:title" content="Shiny Server (Pro) 1.5.6" />
+<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="Mon, 12/11/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.6" />
+<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-6#blogposting",
+            "headline": "Shiny Server (Pro) 1.5.6",
+            "name": "Shiny Server (Pro) 1.5.6",
+            "datePublished": "2017-12-11",
+            "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-6/#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-6/#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-6/index_files/libs/quarto-html/tippy.scoped.css" rel="stylesheet" />
+<link href="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-6/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-6/index_files/libs/bootstrap/bootstrap-icons.scoped.css" rel="stylesheet" />
+<link href="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-6/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-6/index_files/libs/clipboard/clipboard.min.js"></script>
+<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-6/index_files/libs/quarto-html/quarto.js" type="module"></script>
+<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-6/index_files/libs/quarto-html/tabsets/tabsets.js" type="module"></script>
+<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-6/index_files/libs/quarto-html/axe/axe-check.js" type="module"></script>
+<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-6/index_files/libs/quarto-html/popper.min.js"></script>
+<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-6/index_files/libs/quarto-html/tippy.umd.min.js"></script>
+<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-6/index_files/libs/quarto-html/anchor.min.js"></script>
+<script src="/sites/default/files/quarto-blogs/shiny-server-pro-1-5-6/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&amp;family=Source+Code+Pro:wght@400..600&amp;display=swap" crossorigin />
+<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400..700&amp;family=Source+Code+Pro:wght@400..600&amp;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.6 | Posit</title>
+    <link rel="stylesheet" media="all" href="/sites/default/files/css/css_a7LL9m99Hc-iNxHBgqXJ88lzordXZldgJUs0YJy1WWo.css?delta=0&amp;language=en&amp;theme=kinetic&amp;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&amp;language=en&amp;theme=kinetic&amp;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="&lt;front&gt;">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 &amp; 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] [&amp;_img]:rounded-xl [&amp;_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="&lt;front&gt;">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] [&amp;_img]:rounded-xl [&amp;_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&#039;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 &amp; 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] [&amp;_img]:rounded-xl [&amp;_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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;6&quot;:&quot;6&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;11&quot;:&quot;11&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;16&quot;:&quot;16&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;search_api_fulltext&quot;:&quot;&quot;,&quot;teams&quot;:{&quot;21&quot;:&quot;21&quot;}}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;31&quot;:&quot;31&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;46&quot;:&quot;46&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;36&quot;:&quot;36&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;26&quot;:&quot;26&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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="&lt;front&gt;">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&amp;type%5B136%5D=136&amp;type%5B131%5D=131&amp;type%5B246%5D=246&amp;search_api_fulltext=&amp;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 &amp; 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&amp;search_api_fulltext=&amp;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] [&amp;_img]:rounded-xl [&amp;_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">&times;</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.6</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&amp;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-12-11
+  </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.6.875 and Shiny Server Pro 1.5.6.902 are now available.</a></p>
+<p>This release of Shiny Server Pro includes floating license support and Shiny Server contains a small enhancement to the way errors are displayed. We recommend upgrading at your earliest convenience.</p>
+<section id="shiny-server-1.5.6.875" class="level3">
+<h3 class="anchored" data-anchor-id="shiny-server-1.5.6.875">Shiny Server 1.5.6.875</h3>
+<ul>
+<li>Use HTTPS for Google Fonts on error page, which resolves insecure content errors on some browser when run behind SSL. (PR <a href="https://github.com/rstudio/shiny-server/pull/322">#322</a>)</li>
+</ul>
+</section>
+<section id="shiny-server-pro-1.5.6.902" class="level3">
+<h3 class="anchored" data-anchor-id="shiny-server-pro-1.5.6.902">Shiny Server Pro 1.5.6.902</h3>
+<p>This release adds <strong>floating license</strong> support through the <code>license_type</code> configuration directive. Full documentation can be found at <a href="https://docs.posit.co/shiny-server/#floating-licenses">http://docs.rstudio.com/shiny-server/#floating-licenses</a>.</p>
+<p>Floating licensing allows you to run fully licensed copies of Shiny Server Pro easily in ephemeral instances, such as Docker containers, virtual machines, and EC2 instances. Instances don’t have to be individually licensed, and you don’t have to manually activate and deactivate a license in each instance. Instead, a lightweight license server distributes temporary licenses (“leases”) to each instance, and the instance uses the license only while it’s running.</p>
+<p>This model is perfect for environments in which Shiny Server Pro instances are frequently created and destroyed on demand, and only requires that you purchase a license for the maximum number of concurrent instances you want to run.</p>
+</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&amp;itok=m74AE6hd 1x, /sites/default/files/styles/large_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&amp;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&amp;itok=wjGCvil4 1x, /sites/default/files/styles/small_square_1_1/public/migrate/speakers/2023/02/alan-dipert.png?h=cc872d96&amp;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&amp;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-ad9d9f71a45cd68392ecec109b7a5e47c8bb7a509f2c17c5045fad6ba222db79 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&#039;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&#039;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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;31&quot;:&quot;31&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;46&quot;:&quot;46&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;36&quot;:&quot;36&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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&amp;search_api_fulltext=#explore-all-stories" class="text-gray-400 hover:underline leading-[1.25] inline-block align-top" data-drupal-link-query="{&quot;field_industries&quot;:{&quot;26&quot;:&quot;26&quot;},&quot;search_api_fulltext&quot;:&quot;&quot;}" 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 &amp; 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 &amp; 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\/7681","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.6","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:ad9d9f71a45cd68392ecec109b7a5e47c8bb7a509f2c17c5045fad6ba222db79":{"view_name":"blogs","view_display_id":"related_blogs","view_args":"86\/7681","view_path":"\/node\/7681","view_base_path":null,"view_dom_id":"ad9d9f71a45cd68392ecec109b7a5e47c8bb7a509f2c17c5045fad6ba222db79","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-6","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&amp;delta=2&amp;language=en&amp;theme=kinetic&amp;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&amp;delta=4&amp;language=en&amp;theme=kinetic&amp;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&amp;delta=7&amp;language=en&amp;theme=kinetic&amp;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&amp;delta=10&amp;language=en&amp;theme=kinetic&amp;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&amp;delta=12&amp;language=en&amp;theme=kinetic&amp;include=eJx9UEt2wzAIvJBkLXIgPSxhm1qCVOA0zumrNk5WdTcwDMMXcjYB3gMcYJiasLkkDUOSehVGNh1WYjRK3uc6ehajiRIYCeu5dBIxbOf5uVDG8_SCkP8rr8ibt0bz3FWZtJIqjQVjRVWYMY7Qwgnv8BIrtBVNAl78AX3dOC19gDuGhMO7Ao89_Bh3VYsZDArs2Nu_kPvcKK2FeA1v9BcXicmcIrS0qME9pk1Nanwygbh_jKH4Z9zPg9R3mM8rDmHDG0JxN8IvDb92gA-4fwPuhbqe"></script>
+
+  </body>
+</html>
diff --git a/archive/techworks/items/rstudio-shiny-server-releases/author.headers b/archive/techworks/items/rstudio-shiny-server-releases/author.headers
new file mode 100644
index 0000000..bec7939
--- /dev/null
+++ b/archive/techworks/items/rstudio-shiny-server-releases/author.headers
@@ -0,0 +1,22 @@
+HTTP/2 200 
+content-type: image/png
+content-length: 34822
+server: nginx
+date: Sun, 09 Aug 2026 20:41:46 GMT
+x-cache-hits: 1
+x-content-type-options: nosniff
+last-modified: Fri, 03 Apr 2026 22:45:07 GMT
+cache-control: max-age=1209600
+expires: Tue, 18 Aug 2026 20:44:02 GMT
+x-request-id: v-3a04a33c-9045-11f1-8219-3b4c3343fc61
+x-ah-environment: prod
+x-robots-tag: noindex, nofollow
+via: varnish, 1.1 49ab2a39f8fab50c85ba2e21a835c49c.cloudfront.net (CloudFront)
+accept-ranges: bytes
+x-cache: Miss from cloudfront
+x-amz-cf-pop: LAX50-P4
+alt-svc: h3=":443"; ma=86400
+x-amz-cf-id: TE_vYIetVRujO71kudflZMi821B_30sXkrwa2_JnSmaNJ3kjPV4E5A==
+age: 431863
+strict-transport-security: max-age=31622400; includeSubDomains; preload
+
diff --git a/archive/techworks/items/rstudio-shiny-server-releases/author.png b/archive/techworks/items/rstudio-shiny-server-releases/author.png
new file mode 100644
index 0000000..364478b
Binary files /dev/null and b/archive/techworks/items/rstudio-shiny-server-releases/author.png differ
diff --git a/archive/techworks/manifest.tsv b/archive/techworks/manifest.tsv
index 3676444..1cb2725 100644
--- a/archive/techworks/manifest.tsv
+++ b/archive/techworks/manifest.tsv
@@ -118,3 +118,34 @@ infoq-programming-with-values	infoq-programming-with-values-source	Programming w
 infoq-programming-with-values	infoq-programming-with-values-headers	Programming with Values in Clojure response headers	metadata	https://www.infoq.com/presentations/Programming-with-Values-in-Clojure/	archive/techworks/items/infoq-programming-with-values/source.headers	2026-08-09T20:32:01Z	2119a64870a684d6f0e67527129948096aab553aa08da38503200ec85f11c11f	515	repository-only	preserved	HTTP response metadata with transient Set-Cookie fields omitted
 infoq-programming-with-values	infoq-programming-with-values-video-metadata	Programming with Values in Clojure video stream metadata	metadata	https://videoh.infoq.com/presentations/12-mar-valuesinclojure.mp4	archive/techworks/items/infoq-programming-with-values/video.ffprobe.json	2026-08-09T20:32:01Z	268c30cc7e1400e9e8b9d5d1b6d8e19cf53291de68b0adda0847bc0b09e50732	667	repository-only	preserved	ffprobe stream and container metadata
 infoq-programming-with-values	infoq-programming-with-values-audio-metadata	Programming with Values in Clojure audio stream metadata	metadata	https://videoh.infoq.com/downloads/mp3downloads/presentations/infoq-12-mar-valuesinclojure.mp3	archive/techworks/items/infoq-programming-with-values/audio.ffprobe.json	2026-08-09T20:32:01Z	b720141f594781805b58b0cf682a2aa6227d358df9b5ef27d1fd711737437ea9	438	repository-only	preserved	ffprobe stream and container metadata
+rstudio-integrating-react-shiny	rstudio-react-shiny-captions	Integrating React.js and Shiny English captions	captions	https://fast.wistia.net/embed/captions/aduduauhq9.vtt?language=eng	archive/techworks/items/rstudio-integrating-react-shiny/captions.en.vtt	2026-08-09T20:43:41Z	08e4b9fc431b0b77df656df5989870b0c16af396fcb1dc09af96ce94b116143d	34624	repository-only	preserved	Exact published timed WebVTT captions
+rstudio-integrating-react-shiny	rstudio-react-shiny-captions-headers	Integrating React.js and Shiny caption headers	metadata	https://fast.wistia.net/embed/captions/aduduauhq9.vtt?language=eng	archive/techworks/items/rstudio-integrating-react-shiny/captions.headers	2026-08-09T20:43:41Z	a429d707d087867e6fcc7cead42c61dd0204e74e615e90599d56b3ba2357cbb8	979	repository-only	preserved	Caption response metadata
+rstudio-integrating-react-shiny	rstudio-react-shiny-video-metadata	Integrating React.js and Shiny source-master stream metadata	metadata	https://embed-ssl.wistia.com/deliveries/139145360e04b63b6421a89f22ca099b.bin	archive/techworks/items/rstudio-integrating-react-shiny/original.ffprobe.json	2026-08-09T20:43:41Z	524effc3bebb5cf18cf08ddbc8cf3c05dcc3160bdd15687a791f1953b9c8d95c	666	repository-only	preserved	ffprobe stream and container metadata
+rstudio-integrating-react-shiny	rstudio-react-shiny-original-video	Integrating React.js and Shiny source master	video	https://embed-ssl.wistia.com/deliveries/139145360e04b63b6421a89f22ca099b.bin	archive/techworks/items/rstudio-integrating-react-shiny/original.mp4	2026-08-09T20:43:41Z	72cdfd85e16cd5805fedada83623629eea48ced71b1bdc686e6f513fd7abfa78	3268497989	repository-only	preserved	Wistia original: 1920x1080 H.264 at 60 fps with 48 kHz stereo AAC; no transcoding
+rstudio-integrating-react-shiny	rstudio-react-shiny-source-headers	Integrating React.js and Shiny source-page headers	metadata	https://posit.co/resources/videos/integrating-react-js-and-shiny/	archive/techworks/items/rstudio-integrating-react-shiny/source.headers	2026-08-09T20:43:41Z	ab2d9ced7bb28bd15e591e765d6b057900460bfef92fb09bc44eae5e68dc0195	2028	repository-only	preserved	HTTP response metadata with transient Set-Cookie fields omitted
+rstudio-integrating-react-shiny	rstudio-react-shiny-source-page	Integrating React.js and Shiny source page	web-page	https://posit.co/resources/videos/integrating-react-js-and-shiny/	archive/techworks/items/rstudio-integrating-react-shiny/source.html	2026-08-09T20:43:41Z	48f8a2f70c107f2791976d16a9a8aaeab187504a87ca8ad9f7e18a4cf0de15b8	211015	repository-only	preserved	Exact live response body
+rstudio-integrating-react-shiny	rstudio-react-shiny-still	Integrating React.js and Shiny full-resolution still	image	https://embed-ssl.wistia.com/deliveries/72e76638287c06b6cba4a67bdc399c29.bin	archive/techworks/items/rstudio-integrating-react-shiny/still.png	2026-08-09T20:43:41Z	9545dbac6a9c02f1ec6cae11e0c61610a402746309531cf3f67de231dcf6ef3f	1452118	repository-only	preserved	Original 1920x1080 Wistia still image
+rstudio-integrating-react-shiny	rstudio-react-shiny-wistia-headers	Integrating React.js and Shiny Wistia metadata headers	metadata	https://fast.wistia.com/embed/medias/aduduauhq9.json	archive/techworks/items/rstudio-integrating-react-shiny/wistia.headers	2026-08-09T20:43:41Z	9115f3072d5134e05b08efcea45eb06d8de734fa4931f60250380c77fb9d0ee9	1051	repository-only	preserved	Wistia metadata response headers
+rstudio-integrating-react-shiny	rstudio-react-shiny-wistia-metadata	Integrating React.js and Shiny Wistia metadata	metadata	https://fast.wistia.com/embed/medias/aduduauhq9.json	archive/techworks/items/rstudio-integrating-react-shiny/wistia.json	2026-08-09T20:43:41Z	f451fd97f3990482d1ab98a6fe1d335bceb30601b2114289e3937879a437d395	26671	repository-only	preserved	Exact media metadata including source-master declaration and published caption text
+rstudio-load-testing-shiny	rstudio-load-test-video-metadata	Load testing Shiny source-master stream metadata	metadata	https://embed-ssl.wistia.com/deliveries/c12af73125729f8410a5140c4529b5aebdfd0da9.bin	archive/techworks/items/rstudio-load-testing-shiny/original.ffprobe.json	2026-08-09T20:43:41Z	7042815f96c300ca25ff9083eb34b6bd63fcb9e68d0892ec283acc07bd9c1f38	670	repository-only	preserved	ffprobe stream and container metadata
+rstudio-load-testing-shiny	rstudio-load-test-original-video	Load testing Shiny source master	video	https://embed-ssl.wistia.com/deliveries/c12af73125729f8410a5140c4529b5aebdfd0da9.bin	archive/techworks/items/rstudio-load-testing-shiny/original.mp4	2026-08-09T20:43:41Z	301d5486cbfa0fa2ea20587884084cbc82f46785f0d650bc388d6e7b6d906fbe	517033235	repository-only	preserved	Wistia original: 1920x1080 H.264 at 30000/1001 fps with 48 kHz stereo AAC; no transcoding
+rstudio-load-testing-shiny	rstudio-load-test-source-headers	Load testing Shiny source-page headers	metadata	https://cloud.rstudio.com/resources/webinars/load-testing-shiny/	archive/techworks/items/rstudio-load-testing-shiny/source.headers	2026-08-09T20:43:41Z	d6c2893c17b5a2eae5f02674b42253a731cc6ee96fd1b8713d5a759811541590	607	repository-only	preserved	HTTP response metadata with transient Set-Cookie fields omitted
+rstudio-load-testing-shiny	rstudio-load-test-source-page	Load testing Shiny source page	web-page	https://cloud.rstudio.com/resources/webinars/load-testing-shiny/	archive/techworks/items/rstudio-load-testing-shiny/source.html	2026-08-09T20:43:41Z	82dd73f4495d57fa0a7235728f5bd6cc5c050acaa341cdc8c00b80d7760a25aa	46034	repository-only	preserved	Exact live response body
+rstudio-load-testing-shiny	rstudio-load-test-still	Load testing Shiny full-resolution still	image	https://embed-ssl.wistia.com/deliveries/2342faa4453742faffd761a6cfa8723c58c9649d.bin	archive/techworks/items/rstudio-load-testing-shiny/still.png	2026-08-09T20:43:41Z	491e8c06c61655acec516828ae148acbc14c4c108e0605f4937fcbbeae7cd4ef	500191	repository-only	preserved	Original 1920x1080 Wistia still image
+rstudio-load-testing-shiny	rstudio-load-test-wistia-headers	Load testing Shiny Wistia metadata headers	metadata	https://fast.wistia.com/embed/medias/044vu2h9wx.json	archive/techworks/items/rstudio-load-testing-shiny/wistia.headers	2026-08-09T20:43:41Z	5c3ad4d267d56d117cbfd4de702de2223a4bd2c57ca46727ed7213bf4cfe8742	1052	repository-only	preserved	Wistia metadata response headers
+rstudio-load-testing-shiny	rstudio-load-test-wistia-metadata	Load testing Shiny Wistia metadata	metadata	https://fast.wistia.com/embed/medias/044vu2h9wx.json	archive/techworks/items/rstudio-load-testing-shiny/wistia.json	2026-08-09T20:43:41Z	d86e150c967934e25e3c637f4cbf14322e2cfe9fe80aed75d5898dc7fb6f9af6	7341	repository-only	preserved	Exact metadata declaring the 517,033,235-byte source master; no captions published
+rstudio-make-shiny-fast	rstudio-shiny-fast-video-metadata	Make Shiny fast source-master stream metadata	metadata	https://embed-ssl.wistia.com/deliveries/025fed50c1f5f0394a88e3b29ecdba0aa6da5fc7.bin	archive/techworks/items/rstudio-make-shiny-fast/original.ffprobe.json	2026-08-09T20:43:41Z	011e0d9a2fe99efd195230d320a217e221cb640acef5537698e245fb3892724f	666	repository-only	preserved	ffprobe stream and container metadata
+rstudio-make-shiny-fast	rstudio-shiny-fast-original-video	Make Shiny fast by doing as little work as possible source master	video	https://embed-ssl.wistia.com/deliveries/025fed50c1f5f0394a88e3b29ecdba0aa6da5fc7.bin	archive/techworks/items/rstudio-make-shiny-fast/original.mp4	2026-08-09T20:43:41Z	b2872d41daa107619377bd61c92289d562dc78ac69060a5c8bc5e89f817f0ee9	2016953406	repository-only	preserved	Wistia original: 1920x1080 H.264 at 60 fps with 48 kHz stereo AAC; no transcoding
+rstudio-make-shiny-fast	rstudio-shiny-fast-source-headers	Make Shiny fast source-page headers	metadata	https://posit.co/resources/videos/make-shiny-fast-by-doing-as-little-work-as-possible/	archive/techworks/items/rstudio-make-shiny-fast/source.headers	2026-08-09T20:43:41Z	572f5d65365c1e07e496613ab5014dfb4d9cdb6483425aa4eea21c046263f88a	2049	repository-only	preserved	HTTP response metadata with transient Set-Cookie fields omitted
+rstudio-make-shiny-fast	rstudio-shiny-fast-source-page	Make Shiny fast source page	web-page	https://posit.co/resources/videos/make-shiny-fast-by-doing-as-little-work-as-possible/	archive/techworks/items/rstudio-make-shiny-fast/source.html	2026-08-09T20:43:41Z	1ffaf85e002e59c2069268881878ee5b63a85ed26a930ae79d0dfb9ea1124afb	209679	repository-only	preserved	Exact live response body
+rstudio-make-shiny-fast	rstudio-shiny-fast-still	Make Shiny fast full-resolution still	image	https://embed-ssl.wistia.com/deliveries/5ed9c0b8f1802cdee155d31adbbaa6203547c0c6.bin	archive/techworks/items/rstudio-make-shiny-fast/still.jpg	2026-08-09T20:43:41Z	89dc9b1d2ee6c37d3f3ba3892d648d3eb9e9b3c8f93727146eeb19e8d1d6967b	62322	repository-only	preserved	Original 1920x1080 Wistia still image
+rstudio-make-shiny-fast	rstudio-shiny-fast-wistia-headers	Make Shiny fast Wistia metadata headers	metadata	https://fast.wistia.com/embed/medias/8wfv7ytt0e.json	archive/techworks/items/rstudio-make-shiny-fast/wistia.headers	2026-08-09T20:43:41Z	89fa28704da1fb2151177a109d7321e9168d3616f25fd0f429e4e7ac10bc11f9	1055	repository-only	preserved	Wistia metadata response headers
+rstudio-make-shiny-fast	rstudio-shiny-fast-wistia-metadata	Make Shiny fast Wistia metadata	metadata	https://fast.wistia.com/embed/medias/8wfv7ytt0e.json	archive/techworks/items/rstudio-make-shiny-fast/wistia.json	2026-08-09T20:43:41Z	3e53dd7268fc07f4b2c65d3915fce2ab4c227f00e37ccef6a07467b334ce7455	6308	repository-only	preserved	Exact metadata declaring the 2,016,953,406-byte source master; no captions published
+rstudio-shiny-server-154	rstudio-shiny-server-154-headers	Shiny Server (Pro) 1.5.4 response headers	metadata	https://posit.co/blog/shiny-server-pro-1-5-4/	archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.headers	2026-08-09T20:43:41Z	15db67752d75ddcdb3faead339302cb38d88ba30d3d860d499c9ef9768c47290	2035	repository-only	preserved	HTTP response metadata with transient Set-Cookie fields omitted
+rstudio-shiny-server-154	rstudio-shiny-server-154-source	Shiny Server (Pro) 1.5.4 live page source	web-page	https://posit.co/blog/shiny-server-pro-1-5-4/	archive/techworks/items/rstudio-shiny-server-releases/1.5.4-source.html	2026-08-09T20:43:41Z	4d1a8c2ba5ab3f962cabf7079fbe683fbc223b78e91c87da038f2069b49ef9a7	236456	repository-only	preserved	Exact live response body
+rstudio-shiny-server-154	rstudio-shiny-server-154-clean	Shiny Server (Pro) 1.5.4	web-page	https://posit.co/blog/shiny-server-pro-1-5-4/	md/TechWorks/ShinyServer154.html	2026-08-09T20:43:41Z	05eadbd88559a3e786d88b11c9b92f248ef7fbc226de0d52239f585c2f7eed8b	2344	public	preserved	Clean local reading copy retaining the article text
+rstudio-shiny-server-156	rstudio-shiny-server-156-headers	Shiny Server (Pro) 1.5.6 response headers	metadata	https://posit.co/blog/shiny-server-pro-1-5-6/	archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.headers	2026-08-09T20:43:41Z	d13182021b1963e5c6acfcee2e0d65081e914f5842b66ad7612d0f8d900cc9bf	2035	repository-only	preserved	HTTP response metadata with transient Set-Cookie fields omitted
+rstudio-shiny-server-156	rstudio-shiny-server-156-source	Shiny Server (Pro) 1.5.6 live page source	web-page	https://posit.co/blog/shiny-server-pro-1-5-6/	archive/techworks/items/rstudio-shiny-server-releases/1.5.6-source.html	2026-08-09T20:43:41Z	9840899887818adced5ce626826cc3941dd511312924cd7b77fd83c6d8cc1133	236782	repository-only	preserved	Exact live response body
+rstudio-shiny-server-156	rstudio-shiny-server-156-clean	Shiny Server (Pro) 1.5.6	web-page	https://posit.co/blog/shiny-server-pro-1-5-6/	md/TechWorks/ShinyServer156.html	2026-08-09T20:43:41Z	710b7267a79fe63ee5a3c776dc80d2ca27819149095349387aeb5772767388ac	2637	public	preserved	Clean local reading copy retaining the article text
+rstudio-shiny-server-releases	rstudio-author-headers	RStudio author portrait response headers	metadata	https://posit.co/sites/default/files/migrate/speakers/2023/02/alan-dipert.png	archive/techworks/items/rstudio-shiny-server-releases/author.headers	2026-08-09T20:43:41Z	e755294547f5b9a19054d29eb837069fe8320fe0aa972872c94becdd8b7d8246	738	repository-only	preserved	HTTP response metadata
+rstudio-shiny-server-releases	rstudio-author-image	RStudio author portrait	image	https://posit.co/sites/default/files/migrate/speakers/2023/02/alan-dipert.png	archive/techworks/items/rstudio-shiny-server-releases/author.png	2026-08-09T20:43:41Z	b729a86e1f47a1d797082844e09495a5dab473d5e91b4ccf3973b7644b4a796d	34822	repository-only	preserved	Original 150x150 PNG used by the authored release pages
diff --git a/md/TechWorks.md b/md/TechWorks.md
index 9c5427c..07da52d 100644
--- a/md/TechWorks.md
+++ b/md/TechWorks.md
@@ -17,7 +17,9 @@ Papers, slides, recordings, and source snapshots are available in the [TechWorks
 | 2018-09-06 | rstudio.com                                                                                   | [Load testing Shiny](./TechWorks/2018-09-06-load-testing-shiny-archive.html)                                                                                                                                                                                               | Webinar        | Presenter          |                            |
 | 2018-02-02 | rstudio::conf                                                                                 | [Make Shiny fast by doing as little work as possible](https://rstudio.com/resources/rstudioconf-2018/make-shiny-fast-by-doing-as-little-work-as-possible/), [slides](https://github.com/alandipert/fast-shiny)                                                              | Presentation   | Presenter          |                            |
 | 2018-01-31 | rstudio::conf                                                                                 | Intermediate Shiny                                                                                                                                                                                                                                                          | Workshop       | Teaching assistant |                            |
+| 2017-12-11 | RStudio blog                                                                                  | [Shiny Server (Pro) 1.5.6](./TechWorks/ShinyServer156.html)                                                                                                                                                                                                                 | Article        | Author             |                            |
 | 2017-10-13 | WWW                                                                                           | [Wondr: Thoughts on R programming](https://tailrecursion.com/wondr/)                                                                                                                                                                                                        | Blog           | Author             |                            |
+| 2017-09-12 | RStudio blog                                                                                  | [Shiny Server (Pro) 1.5.4](./TechWorks/ShinyServer154.html)                                                                                                                                                                                                                 | Article        | Author             |                            |
 | 2016-11-03 | [The Cognicast](https://www.cognitect.com/cognicast/)                                         | [Episode 112](https://www.cognitect.com/cognicast/112)                                                                                                                                                                                                                      | Interview      | Interviewee        | Craig Andera, Micha Niskin |
 | 2016-10-18 | [The Cognicast](https://www.cognitect.com/cognicast/)                                         | [Episode 111](https://www.cognitect.com/cognicast/111)                                                                                                                                                                                                                      | Interview      | Interviewee        | Craig Andera, Micha Niskin |
 | 2015-11-06 | [Øredev](https://archive.oredev.org/2015/2015.html)                                           | [Programmable Builds with Boot](https://vimeo.com/144997124)                                                                                                                                                                                                                | Presentation   | Presenter          |                            |
diff --git a/md/TechWorks/ShinyServer154.html b/md/TechWorks/ShinyServer154.html
new file mode 100644
index 0000000..f6bf74c
--- /dev/null
+++ b/md/TechWorks/ShinyServer154.html
@@ -0,0 +1,48 @@
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <title>Shiny Server (Pro) 1.5.4</title>
+  <link rel="stylesheet" href="../style.css">
+</head>
+<body>
+  <main id="main">
+    <header class="site-head">
+      <a class="site-brand" href="../TechWorks.html">
+        <span class="site-brand-name">TechWorks</span>
+        <span class="site-brand-tagline">Selected work</span>
+      </a>
+      <nav class="site-nav" aria-label="Archive navigation">
+        <a href="../TechWorks.html">Works</a>
+        <a href="../TechWorksArchive.html">Archive</a>
+      </nav>
+    </header>
+
+    <article>
+      <h1>Shiny Server (Pro) 1.5.4</h1>
+      <p><small>Originally published on the RStudio blog on September 12, 2017. <a href="https://posit.co/blog/shiny-server-pro-1-5-4/">Read it at Posit</a>.</small></p>
+
+      <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>
+
+      <h2>Shiny Server 1.5.4.869</h2>
+
+      <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>
+
+      <h2>Shiny Server Pro 1.5.4.872</h2>
+
+      <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>
+    </article>
+  </main>
+</body>
+</html>
diff --git a/md/TechWorks/ShinyServer156.html b/md/TechWorks/ShinyServer156.html
new file mode 100644
index 0000000..9e0bcce
--- /dev/null
+++ b/md/TechWorks/ShinyServer156.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <title>Shiny Server (Pro) 1.5.6</title>
+  <link rel="stylesheet" href="../style.css">
+</head>
+<body>
+  <main id="main">
+    <header class="site-head">
+      <a class="site-brand" href="../TechWorks.html">
+        <span class="site-brand-name">TechWorks</span>
+        <span class="site-brand-tagline">Selected work</span>
+      </a>
+      <nav class="site-nav" aria-label="Archive navigation">
+        <a href="../TechWorks.html">Works</a>
+        <a href="../TechWorksArchive.html">Archive</a>
+      </nav>
+    </header>
+
+    <article>
+      <h1>Shiny Server (Pro) 1.5.6</h1>
+      <p><small>Originally published on the RStudio blog on December 11, 2017. <a href="https://posit.co/blog/shiny-server-pro-1-5-6/">Read it at Posit</a>.</small></p>
+
+      <p><a href="https://posit.co/products/open-source/shiny-server/">Shiny Server 1.5.6.875 and Shiny Server Pro 1.5.6.902 are now available.</a></p>
+
+      <p>This release of Shiny Server Pro includes floating license support and Shiny Server contains a small enhancement to the way errors are displayed. We recommend upgrading at your earliest convenience.</p>
+
+      <h2>Shiny Server 1.5.6.875</h2>
+
+      <ul>
+        <li>Use HTTPS for Google Fonts on error page, which resolves insecure content errors on some browser when run behind SSL. (PR <a href="https://github.com/rstudio/shiny-server/pull/322">#322</a>)</li>
+      </ul>
+
+      <h2>Shiny Server Pro 1.5.6.902</h2>
+
+      <p>This release adds <strong>floating license</strong> support through the <code>license_type</code> configuration directive. Full documentation can be found at <a href="https://docs.posit.co/shiny-server/#floating-licenses">http://docs.rstudio.com/shiny-server/#floating-licenses</a>.</p>
+
+      <p>Floating licensing allows you to run fully licensed copies of Shiny Server Pro easily in ephemeral instances, such as Docker containers, virtual machines, and EC2 instances. Instances don’t have to be individually licensed, and you don’t have to manually activate and deactivate a license in each instance. Instead, a lightweight license server distributes temporary licenses (“leases”) to each instance, and the instance uses the license only while it’s running.</p>
+
+      <p>This model is perfect for environments in which Shiny Server Pro instances are frequently created and destroyed on demand, and only requires that you purchase a license for the maximum number of concurrent instances you want to run.</p>
+    </article>
+  </main>
+</body>
+</html>
diff --git a/md/TechWorksArchive.md b/md/TechWorksArchive.md
index 752dada..70a646f 100644
--- a/md/TechWorksArchive.md
+++ b/md/TechWorksArchive.md
@@ -8,6 +8,8 @@ Downloads and recordings from [TechWorks](./TechWorks.md). Some original event p
 |:-----|:-----|
 | OCRUG interview | [Local copy](./TechWorks/OCRUGInterview.html) |
 | My workstation OS: NetBSD | [Local copy](./TechWorks/MyWorkstationOSNetBSD.html) |
+| Shiny Server (Pro) 1.5.6 | [Local copy](./TechWorks/ShinyServer156.html) |
+| Shiny Server (Pro) 1.5.4 | [Local copy](./TechWorks/ShinyServer154.html) |
 
 ## Papers and slides