{"id":11655,"date":"2025-06-02T10:00:58","date_gmt":"2025-06-02T17:00:58","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/directx\/?p=11655"},"modified":"2025-09-16T11:30:24","modified_gmt":"2025-09-16T18:30:24","slug":"cooperative-vector","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/directx\/cooperative-vector\/","title":{"rendered":"D3D12 Cooperative Vector"},"content":{"rendered":"<hr \/>\n<p>Welcome to the preview release for Cooperative Vector support in D3D12.\u00a0 This exposes powerful new hardware acceleration for vector and matrix operations, enabling developers to efficiently drive neural rendering techniques directly from individual shader threads in real-time graphics pipelines.<\/p>\n<p>In research and in industry, machine learning based approaches have made their way to mainstream, replacing\/augmenting traditional techniques. In graphics, neural network based rendering methods are gaining popularity over traditional methods of image reconstruction, texture compression, material shading etc. Simultaneously, the increasing use of GPUs for general purpose ML\/DL means that GPU vendors continue to add more specialized hardware in GPUs to accelerate neural network computations, like accelerating matrix operations.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/directx\/agility-sdk-1-717-preview-and-1-616-retail\" target=\"_blank\" rel=\"noopener\">Parent blog for all other features in this release.<\/a><\/p>\n<hr \/>\n<h3>Motivation<\/h3>\n<p>Suppose we have a typical shader for lighting computation. This can be thousands of lines of computation, looping over light sources, evaluating complex materials. We want a way to replace these computations in individual shader threads with a neural network, with no other change to the rendering pipeline.\u00a0 The requested inference operation needs to be understood\u00a0 at a high-level by the driver so it can be mapped to dedicated hardware acceleration.<\/p>\n<hr \/>\n<h3>Feature Overview<\/h3>\n<p>Shader Model 6.9 adds a series of HLSL and DXIL features, building on each other, around vectors and matrix-vector operations available to shader threads.\u00a0 The result is that high level linear algebra operations can be directly consumed by drivers compiling shaders to GPUs with knowledge about how to take advantage of underlying hardware capability.<\/p>\n<p>Here is a summary of the features with links to the specs for each:<\/p>\n<table style=\"border-collapse: collapse; width: 96.416%; height: 96px;\">\n<tbody>\n<tr style=\"height: 24px;\">\n<td style=\"width: 14.1101%; height: 24px;\"><strong><a href=\"https:\/\/github.com\/microsoft\/hlsl-specs\/blob\/main\/proposals\/0026-hlsl-long-vector-type.md\">HLSL Long Vector<\/a><\/strong><\/td>\n<td style=\"width: 232.947%; height: 24px;\">The ability to load, store, and perform elementwise operations on HLSL vectors longer than four elements. In addition to the spec linked on the left, check out this overview: <a href=\"https:\/\/devblogs.microsoft.com\/directx\/hlsl-native-and-long-vectors\/\" target=\"_blank\" rel=\"noopener\">HLSL Native and Long Vectors Blog<\/a><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 14.1101%; height: 24px;\"><strong><a href=\"https:\/\/github.com\/microsoft\/hlsl-specs\/blob\/main\/proposals\/0030-dxil-vectors.md\">DXIL Vectors<\/a><\/strong><\/td>\n<td style=\"width: 232.947%; height: 24px;\">The ability for vectors to appear in DXIL instead of being scalarized.<\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 14.1101%; height: 24px;\"><strong><a href=\"https:\/\/github.com\/microsoft\/hlsl-specs\/blob\/main\/proposals\/0031-hlsl-vector-matrix-operations.md\">HLSL Vector-Matrix Operations<\/a><\/strong><\/td>\n<td style=\"width: 232.947%; height: 24px;\">Builds on Long Vectors above, allowing matrix-vector ops in HLSL to lower to the DXIL ops introduced in Cooperative Vector below.<\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 14.1101%; height: 24px;\"><a href=\"https:\/\/github.com\/microsoft\/hlsl-specs\/blob\/main\/proposals\/0029-cooperative-vector.md\"><strong>Cooperative Vector<\/strong><\/a><\/td>\n<td style=\"width: 232.947%; height: 24px;\">DXIL operations for vector-matrix operations that can be accelerated by the underlying hardware.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The &#8220;Cooperative&#8221; in Cooperative Vector refers to an implementation detail of the hardware acceleration, where individual vector-matrix multiply requests submitted by threads in a wave are combined into a matrix-matrix operation accelerated collectively for the wave.\u00a0 This name doesn&#8217;t appear in HLSL code itself, just vector types and operations like vector-matrix multiplication as shown in the examples below.<\/p>\n<p>Support for matrix-matrix operations is planned for the future.<\/p>\n<hr \/>\n<h3>Code Example<\/h3>\n<pre class=\"prettyprint language-cpp\"><code class=\"language-cpp\">\/\/ Byte Address Buffers used to store vectors\/matrices\r\n\r\nByteAddressBuffer InVectors; \r\nRWByteAddressBuffer OutVectors;\r\nByteAddressBuffer InMatrices;\r\nRWByteAddressBuffer OutMatrices;\r\n\r\n\/\/ System header containing Cooperative Vector types, enums, and functions.\r\n#include &lt;dx\/linalg.h&gt;\r\n\r\n\/\/ Such elements are all under the linalg namespace.\r\nusing namespace dx::linalg;\r\n\r\n\/\/ Hand-wavey utility function to generate the input vector for Mul and MulAdd.\r\ntemplate&lt;typename T, uint N&gt; vector&lt;T,N&gt; GenerateVector(...);\r\n\r\n[numthreads(8,1,1)]\r\n[shader(\"compute\")]\r\nvoid main() \r\n{\r\n\r\n  \/\/ Matrix Vector Multiply Mul() Example\r\n\r\n  \/\/ Matrix and vector to be multiplied together\r\n  uint MatOffset = 0;\r\n  MatrixRef&lt;DATA_TYPE_FLOAT32, 8, 6, MATRIX_LAYOUT_ROW_MAJOR&gt; MulMatrix = {\r\n    InMatrices, MatOffset, \/*stride*\/6 * sizeof(float)};\r\n  MatOffset += 8 * 6 * sizeof(float);\r\n  \r\n  vector&lt;float, 6&gt; MulVector = GenerateVector&lt;float, 6&gt;(...);\r\n\r\n  vector&lt;float, 8&gt; MulRes =  Mul&lt;float&gt;(MulMatrix,\r\n                    MakeInterpretedVector&lt;DATA_TYPE_FLOAT32&gt;(MulVector));\r\n\r\n  \/\/ Matrix Vector Multiply and Add Bias Vector MulAdd() Example\r\n  MatrixRef&lt;DATA_TYPE_FLOAT8_E4M3, 32, 4, MATRIX_LAYOUT_MUL_OPTIMAL&gt; MulAddMatrix = {\r\n    InMatrices, MatOffset, \/*stride*\/0};\r\n  MatOffset += 32 * 4;\r\n  \r\n  half4 MulAddVector = GenerateVector&lt;half, 4&gt;(...);\r\n  VectorRef&lt;DATA_TYPE_FLOAT8_E4M3&gt; BiasVector = {InVectors, VecOffset};\r\n  VecOffset += 32;\r\n\r\n  vector&lt;half, 32&gt; MulAddRes =  MulAdd&lt;half&gt;(MulAddMatrix,\r\n                                             MakeInterpretedVector&lt;DATA_TYPE_FLOAT8_E4M3&gt;(MulAddVector),\r\n                                             BiasVector);\r\n\r\n  \/\/ Vector Vector Outer Product OuterProductAccumulate() Example\r\n  vector&lt;uint8_t4_packed, 128&gt; LeftVector = InVectors.Load&lt; vector&lt;uint8_t4_packed, 128&gt; &gt;(VecOffset);\r\n  VecOffset += sizeof(LeftVector);\r\n  vector&lt;uint8_t4_packed, 64&gt; RightVector = InVectors.Load&lt; vector&lt;uint8_t4_packed, 64&gt; &gt;(VecOffset);\r\n  VecOffset += sizeof(RightVector);\r\n  \r\n  \/\/ Storage for matrix produced by the outer product of above vectors.\r\n  RWMatrixRef&lt;DATA_TYPE_UINT8, 128, 64, MATRIX_LAYOUT_OUTER_PRODUCT_OPTIMAL&gt;\r\n  OuterMatrix = {OutMatrices, \/*offset*\/0, \/*stride*\/0};\r\n  \r\n  OuterProductAccumulate(LeftVector, RightVector, OuterMatrix);\r\n\r\n  \/\/ Vector Accumulating Addition VectorAccumulate() Example\r\n  vector&lt;uint, 73&gt; AccVector = InVectors.Load&lt; vector&lt;uint, 73&gt; &gt;(VecOffset);\r\n  VecOffset += sizeof(AccVector);\r\n  \r\n  VectorAccumulate(AccVector, OutVectors, 0 \/*offset*\/);\r\n  \r\n}<\/code><\/pre>\n<hr \/>\n<h3>Data preparation<\/h3>\n<p>There are a couple of D3D methods for converting weight and bias matrix data between formats:<\/p>\n<pre class=\"prettyprint language-cpp\"><code class=\"language-cpp\">enum D3D12_LINEAR_ALGEBRA_MATRIX_LAYOUT {\r\n    D3D12_LINEAR_ALGEBRA_MATRIX_LAYOUT_ROW_MAJOR,\r\n    D3D12_LINEAR_ALGEBRA_MATRIX_LAYOUT_COLUMN_MAJOR,\r\n    D3D12_LINEAR_ALGEBRA_MATRIX_LAYOUT_MUL_OPTIMAL,\r\n    D3D12_LINEAR_ALGEBRA_MATRIX_LAYOUT_OUTER_PRODUCT_OPTIMAL\r\n}<\/code><\/pre>\n<p>For instance, <code>D3D12_LINEAR_ALGEBRA_MATRIX_LAYOUT_MUL_OPTIMAL<\/code> is a device-specific layout for optimal use with the Cooperative Vector Matrix-Vector intrinsics such as the <code>MulAdd<\/code> in the code example above.<\/p>\n<p>See <code class=\"language-cpp\">ID3D12DevicePreview::GetLinearAlgebraMatrixConversionDestinationInfo()<\/code> and <code class=\"language-cpp\">ID3D12CommandListPreview::ConvertLinearAlgebraMatrix()<\/code> in the Cooperative Vector spec <a href=\"https:\/\/github.com\/microsoft\/hlsl-specs\/blob\/main\/proposals\/0029-cooperative-vector.md#convert-matrix-to-desired-layout-and-type\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<hr \/>\n<h3>Get running<\/h3>\n<p>Long Vector and Cooperative Vector are part of Shader Model 6.9, currently in preview. This requires:<\/p>\n<ul>\n<li>AgilitySDK 1.717.1-preview available <a href=\"https:\/\/devblogs.microsoft.com\/directx\/directx12agility\/\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/li>\n<li>Preview Shader Model 6.9 support in DXC available <a href=\"https:\/\/github.com\/microsoft\/DirectXShaderCompiler\/releases\/tag\/v1.8.2505\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/li>\n<\/ul>\n<p><strong>Device support<\/strong>:<\/p>\n<table style=\"border-collapse: collapse; width: 100%; height: 96px;\">\n<tbody>\n<tr style=\"height: 24px;\">\n<td style=\"width: 3.02804%; height: 24px;\"><strong>NVIDIA:<\/strong><\/td>\n<td style=\"width: 96.972%; height: 24px;\">Accelerated on all NVIDIA GeForce RTX\u2122 GPUs, access the driver\u00a0<a href=\"https:\/\/developer.nvidia.com\/downloads\/shadermodel6-9-preview-driver\" target=\"_blank\" rel=\"noopener\">here<\/a> (requires an NVIDIA Developer Program account).<\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 3.02804%; height: 24px;\"><strong>Intel:<\/strong><\/td>\n<td style=\"width: 96.972%; height: 24px;\">Available for Intel\u00ae Arc\u2122 B-Series Graphics and Intel\u00ae Core\u2122 Ultra Processors (Series 2) with the Intel\u00ae Arc\u2122 Graphics developer preview driver found <a href=\" https:\/\/www.intel.com\/content\/www\/us\/en\/download\/785597\/intel-arc-iris-xe-graphics-windows.html\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 3.02804%; height: 24px;\"><strong>AMD:<\/strong><\/td>\n<td style=\"width: 96.972%; height: 24px;\"><span data-teams=\"true\">AMD support for Cooperative Vector is available in this\u00a0<a id=\"menur9fe\" class=\"fui-Link ___1q1shib f2hkw1w f3rmtva f1ewtqcl fyind8e f1k6fduh f1w7gpdv fk6fouc fjoy568 figsok6 f1s184ao f1mk8lai fnbmjn9 f1o700av f13mvf36 f1cmlufx f9n3di6 f1ids18y f1tx3yz7 f1deo86v f1eh06m1 f1iescvh fhgqx19 f1olyrje f1p93eir f1nev41a f1h8hb77 f1lqvz6u f10aw75t fsle3fq f17ae5zn\" title=\"https:\/\/www.amd.com\/en\/resources\/support-articles\/release-notes\/rn-rad-ms-agility-sdk-25-10-07-01.html\" href=\"https:\/\/www.amd.com\/en\/resources\/support-articles\/release-notes\/RN-RAD-MS-AGILITY-SDK-25-10-07-01.html\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Link preview driver\">preview driver<\/a>.<\/span><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 3.02804%; height: 24px;\"><strong>WARP:<\/strong><\/td>\n<td style=\"width: 96.972%; height: 24px;\">Available on latest WARP software rasterizer preview, available <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.Direct3D.WARP\/1.0.15-preview\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3>Checking for support<\/h3>\n<p>To enable the cooperative vector preview with the AgilitySDK from above, in code turn on the relevant experimental features before creating a D3D12 device:<\/p>\n<pre class=\"prettyprint language-cpp\"><code class=\"language-cpp\">UUID Features[] = { D3D12ExperimentalShaderModels, D3D12CooperativeVectorExperiment };\r\nThrowIfFailed(D3D12EnableExperimentalFeatures(_countof(Features), Features, nullptr, nullptr));\r\n<\/code><\/pre>\n<p>Once a device is created, check cooperative vector support.<\/p>\n<pre class=\"prettyprint language-cpp\"><code class=\"language-cpp\">D3D12_FEATURE_DATA_D3D12_OPTIONS_EXPERIMENTAL FeatureDataTier = {};\r\nThrowIfFailed(pDevice-&gt;CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS_EXPERIMENTAL, \r\n                                              &amp;FeatureDataTier, \r\n                                              sizeof(FeatureDataTier)));\r\nif(FeatureDataTier.CooperativeVectorTier &gt;= D3D12_COOPERATIVE_VECTOR_TIER_1_0)\r\n{\r\n    \/\/ Have Tier 1 cooperative vector support (there's also a Tier 1.1 for training operations)\r\n}\r\n<\/code><\/pre>\n<p>The tier applies specifically to the set of features in the <a href=\"https:\/\/github.com\/microsoft\/hlsl-specs\/blob\/main\/proposals\/0029-cooperative-vector.md\">Cooperative Vector<\/a> spec: a specfic set of vector intrinsics as well as D3D12 APIs for asking drivers to perform matrix data conversions.<\/p>\n<p>There are additional cooperative vector specific capability queries around what combinations of data formats are supported, described in the spec <a href=\"https:\/\/github.com\/microsoft\/hlsl-specs\/blob\/main\/proposals\/0029-cooperative-vector.md#check-feature-support\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p><a href=\"https:\/\/github.com\/microsoft\/hlsl-specs\/blob\/main\/proposals\/0026-hlsl-long-vector-type.md\" target=\"_blank\" rel=\"noopener\">Long vector<\/a> is supported on any device that reports Shader Model 6.9 support.<\/p>\n<hr \/>\n<h3>PIX<\/h3>\n<p>As usual comes with Day One PIX support. Please read the <a href=\"https:\/\/devblogs.microsoft.com\/pix\/pix-2505-30-and-2505-30-preview\/\" target=\"_blank\" rel=\"noopener\">PIX blog post<\/a> for more information.<\/p>\n<hr \/>\n<h3>Content from GPU Vendors<\/h3>\n<hr \/>\n<h4>NVIDIA<\/h4>\n<blockquote><p><em><span data-olk-copy-source=\"MessageBody\">NVIDIA and Microsoft\u2019s collaboration brings cooperative vectors to HLSL and DirectX, unlocking GeForce RTX Tensor Cores for developers and driving a new era of real-time realism and performance in PC gaming.<\/span><\/em><\/p>\n<p>&#8211; NVIDIA<\/p><\/blockquote>\n<p>An <a href=\"https:\/\/developer.nvidia.com\/blog\/neural-rendering-in-nvidia-optix-using-cooperative-vectors\/\">earlier NVIDIA blog<\/a> shows how to get started with RTX Kit neural rendering technologies.\u00a0 In addition to detailed demos\/samples for other APIs, there is a great overview of the Cooperative Vector feature here including performance considerations.<\/p>\n<p>Their <a href=\"https:\/\/developer.nvidia.com\/blog\/nvidia-releases-rtx-neural-rendering-tech-for-unreal-engine-developers\/\" target=\"_blank\" rel=\"noopener\">latest blog<\/a> highlights how NVIDIA has updated the RTX Neural Shaders SDK with a DirectX path for Cooperative Vectors, using Slang converted to HLSL for shader authoring.<\/p>\n<hr \/>\n<h4>Intel<\/h4>\n<blockquote><p><em>Intel is excited to make our efficient AI hardware accessible through Microsoft DirectX\u2019s Cooperative Vectors.\u00a0 We strongly believe that neural graphics is the right way to generate visuals in the future.\u00a0 We are committed to providing the best performance and developer experience across our discrete and integrated Intel Arc GPUs.<\/em><\/p>\n<p>&#8211; Anton Kaplanyan, VP of Graphics Research at Intel<\/p><\/blockquote>\n<p>An earlier <a href=\"https:\/\/community.intel.com\/t5\/Blogs\/Tech-Innovation\/Artificial-Intelligence-AI\/Intel-Co-Presents-Cooperative-Vectors-with-Microsoft-at-Game\/post\/1674845\" target=\"_blank\" rel=\"noopener\">Intel blog<\/a> shows the use of Cooperative Vectors to accelerate Neural Block Texture Compression.\u00a0 They exploit coherency across arbitrary numbers of texture channels to achieve compression up to five times that of traditional Block Compression.\u00a0 Using Cooperative Vectors, this approach runs 10x faster on Intel Arc (B Series) GPUs.<\/p>\n<p><a href=\"https:\/\/www.intel.com\/content\/www\/us\/en\/developer\/articles\/technical\/cooperative-vectors-demo.html\" target=\"_blank\" rel=\"noopener\">Check out Intel&#8217;s new announcement<\/a> showcasing this technique using DirectX Cooperative Vector, available on github <a href=\"https:\/\/github.com\/GameTechDev\/TextureSetNeuralCompressionSample\" target=\"_blank\" rel=\"noopener\">here<\/a>.\u00a0 The code runs on both Intel and NVIDIA GPUs (i.e. the devices that have drivers so far).<\/p>\n<p>From that repo, here&#8217;s a link directly to some <a href=\"https:\/\/github.com\/GameTechDev\/TextureSetNeuralCompressionSample\/blob\/main\/shaders\/shader_lib\/inference_utils.hlsl\" target=\"_blank\" rel=\"noopener\">HLSL code<\/a> using Cooperative Vector.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/directx\/wp-content\/uploads\/sites\/42\/9999\/05\/trex-and-textures.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-11791\" src=\"https:\/\/devblogs.microsoft.com\/directx\/wp-content\/uploads\/sites\/42\/9999\/05\/trex-and-textures.png\" alt=\"trex and textures image\" width=\"999\" height=\"567\" srcset=\"https:\/\/devblogs.microsoft.com\/directx\/wp-content\/uploads\/sites\/42\/9999\/05\/trex-and-textures.png 999w, https:\/\/devblogs.microsoft.com\/directx\/wp-content\/uploads\/sites\/42\/9999\/05\/trex-and-textures-300x170.png 300w, https:\/\/devblogs.microsoft.com\/directx\/wp-content\/uploads\/sites\/42\/9999\/05\/trex-and-textures-768x436.png 768w\" sizes=\"(max-width: 999px) 100vw, 999px\" \/><\/a><\/p>\n<hr \/>\n","protected":false},"excerpt":{"rendered":"<p>Welcome to the preview release for Cooperative Vector support in D3D12.\u00a0 This exposes powerful new hardware acceleration for vector and matrix operations, enabling developers to efficiently drive neural rendering techniques directly from individual shader threads in real-time graphics pipelines. In research and in industry, machine learning based approaches have made their way to mainstream, replacing\/augmenting [&hellip;]<\/p>\n","protected":false},"author":8584,"featured_media":2727,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-11655","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-directx"],"acf":[],"blog_post_summary":"<p>Welcome to the preview release for Cooperative Vector support in D3D12.\u00a0 This exposes powerful new hardware acceleration for vector and matrix operations, enabling developers to efficiently drive neural rendering techniques directly from individual shader threads in real-time graphics pipelines. In research and in industry, machine learning based approaches have made their way to mainstream, replacing\/augmenting [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/posts\/11655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/users\/8584"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/comments?post=11655"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/posts\/11655\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/media\/2727"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/media?parent=11655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/categories?post=11655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/tags?post=11655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}