{"id":1164633,"date":"2026-08-04T10:55:00","date_gmt":"2026-08-04T09:55:00","guid":{"rendered":"https:\/\/babelgroup.com\/?p=1164633"},"modified":"2026-08-17T10:56:09","modified_gmt":"2026-08-17T09:56:09","slug":"tab-duplication-a-silent-risk-that-can-prove-costly","status":"publish","type":"post","link":"https:\/\/babelgroup.com\/en\/tab-duplication-a-silent-risk-that-can-prove-costly\/","title":{"rendered":"Tab Duplication: A silent risk that can prove costly"},"content":{"rendered":"<div class=\"vgblk-rw-wrapper limit-wrapper\">\n<p><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-e6b311d1df618479e912f0e4ff34955e\"><strong>1. Introduction<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-0a443886c96c634f61bf81a79fafef37\">There is a type of issue that is rarely identified during testing. It is not caused by incorrect code, a missing validation or a network failure. It can occur when a user does something as simple as duplicating a browser tab.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3c80e49a42fbfedb0ef05da78ab564ea\">When a tab is duplicated, the browser copies the sessionStorage data from the original tab. Both tabs therefore start with the same session, variables and context. From that point onwards, however, they evolve independently: changes made in one tab are not visible in the other, and the server may not recognise that two instances of the same session are running.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-8f6f4b20343e7519dd4e21bcc52882cb\">In OutSystems applications, particularly those involving BPT processes, long-running operations and session variables, this situation can result in duplicate orders, inconsistent workflows or actions being performed more than once.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-10c4f66c59eae3ec6782ce5383bfa42a\">To illustrate the problem, we will use MyBTD, a fictional online supermarket platform through which customers place orders and store managers manage stock and suppliers.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-aa16f2a3b2326716f3d2ab45584a2be8\"><strong>2. The Problem: Divergent Session States<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3f4e3a4779343db49ce32a4985d66b6b\">Two duplicated tabs begin with the same state, but stop communicating with each other as soon as the user interacts with one of them.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-e34a0a7d6f417b801ca1d70c747563e5\">This divergence occurs silently, without displaying any errors or warnings, and can result in:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-black-color has-text-color has-link-color wp-elements-9404e5cd8a54c4b6a44e8bf66a386d02\">Duplicate submissions: the same order or process is executed twice.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-6f5c98734d49c1b48ea7033f22a412e0\">Interrupted workflows: a process started in one tab is continued or cancelled in another.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-78c67664ba27bb93fda5612b5fe9a2b8\">Outdated information: each tab displays a different state.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-47f6d95d32c5bcc772db8d3c8cb23577\">Incorrect token usage: BPT identifiers or other server-side data are shared between both tabs.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3741d13b3cc770e9b9b60209430b92f5\">These issues usually only become visible in production, after they have already caused operational or financial consequences.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-367f9cf447472ef3cea649164bbef417\"><strong>3. How to Detect a Duplicated Tab<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-0aeb8e260c63b68e88be3c869e2a7e1b\">Reliable detection can be achieved by combining two browser behaviours.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-38650ab31492b689a90042be30c6d14e\"><strong>sessionStorage<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d85fca2679729e44e88c0995c3764f65\">When a tab is duplicated, all sessionStorage content is copied. Therefore, a TabId created in the original tab will also be present in the duplicated tab.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d0de2f789834b14fd8d4cca073f689e4\"><strong>window.name<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-4de282a91c12a7eb276507aa61f8fae5\">The window.name property is retained during navigation within the same tab, but it is not copied when the tab is duplicated. The new tab starts with this property empty.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-7d036bb9d66656830595172a6dc4ba53\">The detection rule is therefore:<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d32f0757ffe10f3e3b84afab0f1ef381\">sessionStorage contains a TabId and window.name is empty \u2192 duplicated tab<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-e789e03748606ef05449c2f257fcf2b4\">When this situation is identified, the mechanism can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-black-color has-text-color has-link-color wp-elements-7a3154db916dd4544c375f1531ab81aa\">Record the original TabId.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-b02826b8092d997f36a3a53e50477f80\">Generate a new identifier for the duplicated tab.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-e9785edcbeb1d13e1d7a8fada9a46695\">Communicate the event to the server through a REST API.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-b5e8fc8327000a4256cc1db12aecb63e\">Set window.name to prevent the tab from being detected again after a refresh.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-68edf43ae941cad5c58219e316e5b9c0\">Prevent the same event from being recorded repeatedly within a short period.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"796\" src=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_03-1024x796.png\" alt=\"\" class=\"wp-image-1164642\" style=\"width:605px;height:auto\" srcset=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_03-1024x796.png 1024w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_03-300x233.png 300w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_03-768x597.png 768w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_03.png 1500w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color has-small-font-size wp-elements-4ca7726977ba17152b5a7cb4fd8c576e\"><em>Figure 1 \u2013 In MyBTD, the TABDetection Web Block provides this protection in commonly used Chromium-based browsers, such as Google Chrome and Microsoft Edge. Firefox may have some limitations due to its handling of sessionStorage.<\/em><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-dbc7c8012a895061152cf97dfb452dcc\"><strong>4. Mitigation Strategies<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-868cb660745682b7d59903b3e4be41f4\">Detection alone does not prevent the problem. It is also necessary to define what should happen when a duplicated tab is identified.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3a93bc0c26b182abf99a116dbcb40c40\"><strong>Option A \u2013 Block the Duplicated Tab<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a85dd9e9b778db2035b6d79d4558db0d\">Recommended for critical processes.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-859f934339b55f62da873791e8a35fb5\">The new tab is immediately redirected to an error page, while the original tab continues to operate normally.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-9355bf7ef04ee97da233d6e0e978efa3\">This approach is particularly suitable for checkout processes, payments or important submissions. For example, if a customer duplicates the tab during payment, only the original tab will be able to complete the order, preventing duplicate charges.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-779794b19dba95f3085ed54aef91c5fa\">The message displayed should be simple and clear:<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-78e1468185cac51ad41a5aaaff74636e\">This operation is already open in another tab. Please continue in that tab.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-f2abba09c6647199d5de9ba15d3541ee\"><strong>Option B \u2013 Synchronisation Using BroadcastChannel<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-53a8ac76590fb9b0615dba9fc5e7127f\">Suitable for dashboards and read-only screens.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-803f3bf8e18727caa404cba121227521\">Not every scenario requires the duplicated tab to be blocked. On screens that are primarily informational, keeping the data synchronised may be sufficient.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-0c80379094a6f8a7250055d27cc63439\">The BroadcastChannel API allows multiple tabs from the same origin to communicate with each other in real time. When one tab receives or changes information, it can notify the other tabs so that they can update their data.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-b2ace9e4f83124474eafa83997d4513e\">On a stock dashboard, for example, an update received in one tab can be communicated to the others, preventing decisions from being made based on outdated information.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-e7ebbfa3a6c90a3a4b35d86a1af4cd7d\"><strong>Option C \u2013 localStorage as the Single Source of Truth<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-b7a63b9f571f4adc848af6ef23e93f21\">Suitable for simple states shared between tabs.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-b111a0e5ab3ac1860d16648c06efc40d\">Unlike sessionStorage, localStorage is shared by all tabs from the same origin. It can therefore be used to store a shared state, together with a mechanism that determines which tab is allowed to modify it.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-c2470b618367cb73361ae2312c5e8ffd\">In a shopping basket, for example, a change made in one tab can be detected by the others. They can then display a message and reload the most recent state.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-57845d0c71dcb0f574052ed7eed32000\">This option is simple and avoids additional server requests, although care must be taken to prevent simultaneous changes.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"705\" src=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_01-1024x705.png\" alt=\"\" class=\"wp-image-1164646\" style=\"width:588px;height:auto\" srcset=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_01-1024x705.png 1024w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_01-300x207.png 300w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_01-768x529.png 768w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_01-1536x1058.png 1536w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_01.png 1551w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color has-small-font-size wp-elements-62ca80bc217ecf4f999faef9de7c657c\"><em>Figure 2 \u2013 Effective for lightweight state synchronisation without round trips to the server.<\/em><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-12c16d947c3e7b85f5cc969e15e759f2\"><strong>Option D \u2013 Server-Side TabId Validation<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"629\" src=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_02-1024x629.png\" alt=\"\" class=\"wp-image-1164650\" style=\"aspect-ratio:1.6281003864781567;width:588px;height:auto\" srcset=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_02-1024x629.png 1024w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_02-300x184.png 300w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_02-768x472.png 768w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_02-1536x944.png 1536w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_02.png 1897w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color has-small-font-size wp-elements-5d038cec5f1302dee67efcbf2fafac3b\"><em>Figure 3 \u2013 The most robust solution for critical, regulated or audited processes.<\/em><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-fa40682d8294fb88b0e8ffbca71a1124\">Browser-side controls can be bypassed. To ensure process integrity, validation must also be performed on the server.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-5c1a0c53c4bf3914bc593fb4d7cf80fd\">The TabId is sent with every relevant request, and the server confirms whether the tab is the authorised owner of the process instance. Requests sent by other tabs are rejected.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d56be8dbc35f9eda5c0970030e825a39\">In OutSystems, the identifier can be stored in a session variable or in a process attribute and validated during actions such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-black-color has-text-color has-link-color wp-elements-de09cf17f6dd630f05b1c823b5b61426\">Starting BPT processes.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-81a3d9112726c7f4a7c5484f9717d11b\">Submitting forms.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-a5630c95ddaecae34394998803a4fbd4\">Approving process stages.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-5f97326d309ae7ed5d41a0243805ba04\">Saving data.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-56f34ce18629610c889b1e8f9e8c4178\">Creating customer orders or purchase orders.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-9cef8191fdbd7af6ea2575c7b14c211b\">This option adds complexity, but provides the highest level of protection.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-1f9b78e12416e6c9df2911b1920c727b\"><strong>5. Comparison of the Strategies<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"625\" src=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_04_ingles-1024x625.png\" alt=\"\" class=\"wp-image-1164634\" style=\"width:594px;height:auto\" srcset=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_04_ingles-1024x625.png 1024w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_04_ingles-300x183.png 300w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_04_ingles-768x469.png 768w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_04_ingles.png 1296w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color has-small-font-size wp-elements-5f7201462694202c2a868d7962fb5cbc\"><em>Table 1 \u2013 Comparison of duplicate-tab mitigation strategies.<\/em><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-ec9e134c78d32d5e41080d7c42e93c89\"><strong>6. Recommendation<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-c1b9a60676abe5ae1684f383cf9cc611\">For a transactional application such as MyBTD, a combination of Options A and D is recommended.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-329219afcea2fa07278df3cc29ae5162\">The TABDetection Web Block can quickly block duplicated tabs on screens that start or advance processes. At the same time, server-side TabId validation should protect the most critical actions, such as starting BPT processes, submitting processes and saving data.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-91582b06946e07a897fd664f71ab40c2\">This approach creates multiple layers of protection:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-black-color has-text-color has-link-color wp-elements-b751c59990a1c43e088f01ba1ac32fce\">The client responds quickly to the most common situations.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-6272dc51eb9b2c95d12e0327dd936550\">The server ensures process integrity.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-f2e09abcdffaa4138cc269f43828f85e\">Each mechanism operates independently.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-bd2f5a1cb5ca161d333e1d537e254dd6\"><strong>7. Conclusion<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-9291edf497a682b59302ede74770b872\">Tab duplication may appear to be harmless behaviour, but in stateful applications involving transactional processes, it can result in duplicate orders, inconsistent information or workflows being executed twice.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-8d77b877a4b3b9a6a95fdc214bfe825e\">The best approach is to detect tab duplication on the relevant screens, block the new tab when the risk is high and implement server-side validations for the most critical operations.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-46a9f09e599bcf2b2a4aa8bdbc97cff3\">Users who never duplicate a tab will not notice any difference. Those who do will receive a clear message instead of silently causing a situation that is difficult to reproduce and resolve.<\/p>\n\n\n\n<p><em>Henrique S.<\/em><\/p>\n\n\n\n<p><em>OutSystems Tech Lead at Babel<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"400\" src=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/HS-OS-Babel.jpg\" alt=\"\" class=\"wp-image-1164546\" style=\"width:102px;height:auto\" srcset=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/HS-OS-Babel.jpg 400w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/HS-OS-Babel-300x300.jpg 300w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/HS-OS-Babel-150x150.jpg 150w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/figure>\n\n\n\n<p><\/p>\n<\/div><!-- .vgblk-rw-wrapper -->","protected":false},"excerpt":{"rendered":"<p>1. Introduction There is a type of issue that is rarely identified during testing. It is not caused by incorrect code, a missing validation or a network failure. It can occur when a user does something as simple as duplicating a browser tab. When a tab is duplicated, the browser copies the sessionStorage data from&#8230;<\/p>\n","protected":false},"author":17,"featured_media":1164638,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1164633","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categorizar"],"acf":[],"_links":{"self":[{"href":"https:\/\/babelgroup.com\/en\/wp-json\/wp\/v2\/posts\/1164633","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/babelgroup.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/babelgroup.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/babelgroup.com\/en\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/babelgroup.com\/en\/wp-json\/wp\/v2\/comments?post=1164633"}],"version-history":[{"count":5,"href":"https:\/\/babelgroup.com\/en\/wp-json\/wp\/v2\/posts\/1164633\/revisions"}],"predecessor-version":[{"id":1164660,"href":"https:\/\/babelgroup.com\/en\/wp-json\/wp\/v2\/posts\/1164633\/revisions\/1164660"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/babelgroup.com\/en\/wp-json\/wp\/v2\/media\/1164638"}],"wp:attachment":[{"href":"https:\/\/babelgroup.com\/en\/wp-json\/wp\/v2\/media?parent=1164633"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/babelgroup.com\/en\/wp-json\/wp\/v2\/categories?post=1164633"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/babelgroup.com\/en\/wp-json\/wp\/v2\/tags?post=1164633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}