From b12f2f08c4316550f8255e5515909163c361a943 Mon Sep 17 00:00:00 2001 From: Asad Saleem Date: Thu, 20 Jun 2024 15:44:39 +0500 Subject: [PATCH 1/5] fixed console errors, added shrinkwrap.js --- .../static/default/js/cloudinaryImages.js | 2 +- .../components/assets/cloudinaryImage.isml | 14 +++++++++++++- .../components/assets/cloudinaryVideo.isml | 11 ++++++++--- .../experience/components/assets/example.isml | 15 +++++++++++++-- .../components/assets/videoExample.isml | 7 ++++++- 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/cartridges/int_cloudinary_pd/cartridge/static/default/js/cloudinaryImages.js b/cartridges/int_cloudinary_pd/cartridge/static/default/js/cloudinaryImages.js index 13bae3a..615eb20 100644 --- a/cartridges/int_cloudinary_pd/cartridge/static/default/js/cloudinaryImages.js +++ b/cartridges/int_cloudinary_pd/cartridge/static/default/js/cloudinaryImages.js @@ -8,7 +8,7 @@ function renderImgs() { conf.secure_distribution = window.cname; conf.private_cdn = true; } - cld = cloudinary.default.Cloudinary.new(conf); + const cld = cloudinary.default.Cloudinary.new(conf); let config = cld.config(); if (config.secure === false) { delete cld.config({ cname: window.cname }).secure_distribution; diff --git a/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryImage.isml b/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryImage.isml index b477851..3ef023a 100755 --- a/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryImage.isml +++ b/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryImage.isml @@ -5,7 +5,10 @@ // SFRA has a logic bug where full urls are added twice, so we need to check for duplicates before adding. - assets = require('*/cartridge/scripts/assets.js'); + var assets = require('*/cartridge/scripts/assets.js'); + var verJson = require('*/cartridge/scripts/cloudinary/version.json'); + pdict.viewmodel.videoPlayerVersion = verJson.videoPlayerVersion; + assets.addJs('js/cloudinaryImages.js'); @@ -15,6 +18,15 @@ window.cldImages.push(value); window.cloudName = value.cloudName; window.cname = value.cname || null; + + // Cloudinary Core JS + const script = document.querySelector('script[src="https://unpkg.com/cloudinary-video-player@'+value.videoPlayerVersion+'/dist/cld-video-player.min.js"]'); + if (script === null) { + var src = 'https://unpkg.com/cloudinary-core/cloudinary-core-shrinkwrap.min.js'; + var shrinkWrap = document.createElement('script'); + shrinkWrap.src = src; + document.body.appendChild(shrinkWrap); + } diff --git a/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryVideo.isml b/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryVideo.isml index 772a957..3df7343 100755 --- a/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryVideo.isml +++ b/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryVideo.isml @@ -9,15 +9,14 @@ var assets = require('*/cartridge/scripts/assets.js'); var verJson = require('*/cartridge/scripts/cloudinary/version.json'); - // Video Player CSS - var src = 'https://unpkg.com/cloudinary-video-player@'+verJson.videoPlayerVersion+'/dist/cld-video-player.min.css'; + var src = 'https://unpkg.com/cloudinary-video-player@'+verJson.videoPlayerVersion+'/dist/cld-video-player.min.css'; if (assets.styles.lastIndexOf(src) < 0) { assets.addCss(src); } // Cloudinary Video Player JS - src = 'https://unpkg.com/cloudinary-video-player@'+verJson.videoPlayerVersion+'/dist/cld-video-player.min.js'; + src = 'https://unpkg.com/cloudinary-video-player@'+verJson.videoPlayerVersion+'/dist/cld-video-player.min.js'; if (assets.scripts.lastIndexOf(src) < 0) { assets.addJs(src); } @@ -33,5 +32,11 @@ window.players.push(value); window.cloudName = value.cloudName; window.cname = value.cname || null; + + // Check if the Cloudinary Core JS is inculded + const shrinkWrapJs = document.querySelector('script[src="https://unpkg.com/cloudinary-core/cloudinary-core-shrinkwrap.min.js"]'); + if (shrinkWrapJs) { + shrinkWrapJs.parentNode.removeChild(shrinkWrapJs); + } diff --git a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml index 4020f89..a96e25c 100644 --- a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml +++ b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml @@ -2,7 +2,10 @@ // SFRA has a logic bug where full urls are added twice, so we need to check for duplicates before adding. - assets = require('*/cartridge/scripts/assets.js'); + var assets = require('*/cartridge/scripts/assets.js'); + var verJson = require('*/cartridge/scripts/cloudinary/version.json'); + pdict.viewmodel.videoPlayerVersion = verJson.videoPlayerVersion; + assets.addJs('*/js/cloudinaryImages.js'); @@ -13,7 +16,15 @@ window.cldImages.push(value); window.cloudName = value.cloudName; window.cname = value.cname || null; - console.log(value); + + // Cloudinary Core JS + const script = document.querySelector('script[src="https://unpkg.com/cloudinary-video-player@'+value.videoPlayerVersion+'/dist/cld-video-player.min.js"]'); + if (script === null) { + var src = 'https://unpkg.com/cloudinary-core/cloudinary-core-shrinkwrap.min.js'; + var shrinkWrap = document.createElement('script'); + shrinkWrap.src = src; + document.body.appendChild(shrinkWrap); + }

${pdict.headline}

diff --git a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml index 35d3c7c..18e4848 100644 --- a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml +++ b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml @@ -30,6 +30,11 @@ window.players.push(value); window.cloudName = value.cloudName; window.cname = value.cname || null; + + // Check if the Cloudinary Core JS is inculded + const shrinkWrapJs = document.querySelector('script[src="https://unpkg.com/cloudinary-core/cloudinary-core-shrinkwrap.min.js"]'); + if (shrinkWrapJs) { + shrinkWrapJs.parentNode.removeChild(shrinkWrapJs); + } - From 76fe2008fc3f712a821e4ea5cf07512287053514 Mon Sep 17 00:00:00 2001 From: Asad Saleem Date: Thu, 20 Jun 2024 19:36:48 +0500 Subject: [PATCH 2/5] getting Cloudinary URL's from customer preferences --- .../components/assets/cloudinaryImage.isml | 49 +++++++++--------- .../components/assets/cloudinaryVideo.isml | 11 ++-- .../experience/components/assets/example.isml | 34 ++++++------ .../components/assets/videoExample.isml | 27 +++++----- metadata/cloudinary_pagedesigner_metadata.zip | Bin 2184 -> 2375 bytes 5 files changed, 61 insertions(+), 60 deletions(-) diff --git a/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryImage.isml b/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryImage.isml index 3ef023a..8075153 100755 --- a/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryImage.isml +++ b/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryImage.isml @@ -3,44 +3,43 @@ This document renders an instance of the component. Multiple instances can be placed on the page. + // SFRA has a logic bug where full urls are added twice, so we need to check for duplicates before adding. var assets = require('*/cartridge/scripts/assets.js'); - var verJson = require('*/cartridge/scripts/cloudinary/version.json'); - pdict.viewmodel.videoPlayerVersion = verJson.videoPlayerVersion; + pdict.viewmodel.CLDPDVideoPlayerJSURL = sitePref.CLDPDVideoPlayerJSURL; + pdict.viewmodel.CLDPDShrinkwrapJSURL = sitePref.CLDPDShrinkwrapJSURL; assets.addJs('js/cloudinaryImages.js');
- - - - - ${pdict.viewmodel.altText} - - - + + + + + ${pdict.viewmodel.altText} + + +
diff --git a/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryVideo.isml b/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryVideo.isml index 3df7343..fa2ed7a 100755 --- a/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryVideo.isml +++ b/cartridges/int_cloudinary_pd/cartridge/templates/default/experience/components/assets/cloudinaryVideo.isml @@ -4,23 +4,24 @@ Refer to module_pagedesigner_custom/cartridge/experience/components/assets/cloudinary_video.js + + // SFRA has a logic bug where full urls are added twice, so we need to check for duplicates before adding. var assets = require('*/cartridge/scripts/assets.js'); - var verJson = require('*/cartridge/scripts/cloudinary/version.json'); // Video Player CSS - var src = 'https://unpkg.com/cloudinary-video-player@'+verJson.videoPlayerVersion+'/dist/cld-video-player.min.css'; + var src = sitePref.CLDPDVideoPlayerCSSURL; if (assets.styles.lastIndexOf(src) < 0) { assets.addCss(src); } // Cloudinary Video Player JS - src = 'https://unpkg.com/cloudinary-video-player@'+verJson.videoPlayerVersion+'/dist/cld-video-player.min.js'; + src = sitePref.CLDPDVideoPlayerJSURL; if (assets.scripts.lastIndexOf(src) < 0) { assets.addJs(src); } - + pdict.viewmodel.CLDPDShrinkwrapJSURL = sitePref.CLDPDShrinkwrapJSURL; assets.addJs('/js/cloudinaryVideos.js'); @@ -34,7 +35,7 @@ window.cname = value.cname || null; // Check if the Cloudinary Core JS is inculded - const shrinkWrapJs = document.querySelector('script[src="https://unpkg.com/cloudinary-core/cloudinary-core-shrinkwrap.min.js"]'); + const shrinkWrapJs = document.querySelector('script[src="'+value.CLDPDShrinkwrapJSURL+'"]'); if (shrinkWrapJs) { shrinkWrapJs.parentNode.removeChild(shrinkWrapJs); } diff --git a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml index a96e25c..0e96467 100644 --- a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml +++ b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml @@ -1,36 +1,36 @@ + // SFRA has a logic bug where full urls are added twice, so we need to check for duplicates before adding. var assets = require('*/cartridge/scripts/assets.js'); var verJson = require('*/cartridge/scripts/cloudinary/version.json'); - pdict.viewmodel.videoPlayerVersion = verJson.videoPlayerVersion; + pdict.viewmodel.CLDPDVideoPlayerJSURL = sitePref.CLDPDVideoPlayerJSURL; + pdict.viewmodel.CLDPDShrinkwrapJSURL = sitePref.CLDPDShrinkwrapJSURL; assets.addJs('*/js/cloudinaryImages.js');

${pdict.headline}

- ${pdict.viewmodel.altText} + ${pdict.viewmodel.altText}
diff --git a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml index 18e4848..78a1de5 100644 --- a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml +++ b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml @@ -1,23 +1,24 @@ + // SFRA has a logic bug where full urls are added twice, so we need to check for duplicates before adding. var assets = require('*/cartridge/scripts/assets.js'); var verJson = require('*/cartridge/scripts/cloudinary/version.json'); - // Video Player CSS - var src = 'https://unpkg.com/cloudinary-video-player@'+verJson.videoPlayerVersion+'/dist/cld-video-player.min.css'; + var src = sitePref.CLDPDVideoPlayerCSSURL; if (assets.styles.lastIndexOf(src) < 0) { assets.addCss(src); } // Cloudinary Video Player JS - src = 'https://unpkg.com/cloudinary-video-player@'+verJson.videoPlayerVersion+'/dist/cld-video-player.min.js'; + src = sitePref.CLDPDVideoPlayerJSURL; if (assets.scripts.lastIndexOf(src) < 0) { assets.addJs(src); } + pdict.viewmodel.CLDPDShrinkwrapJSURL = sitePref.CLDPDShrinkwrapJSURL; assets.addJs('/js/cloudinaryVideos.js'); @@ -25,16 +26,16 @@
diff --git a/metadata/cloudinary_pagedesigner_metadata.zip b/metadata/cloudinary_pagedesigner_metadata.zip index 6d3c1d137a1911ad21ad630d029a5237e246d122..b72ddcc3cc15f8a49d54138a6349392b032ca2f8 100644 GIT binary patch delta 1626 zcmV-g2BrCk5yuh@P)h>@6aWAK0029X)R7HB5RlYZ>}@o<+ywvteM*U18To#7@1q~f21j7%pK#q@wm|!6Rc+O7S zmKlNUq;ho?&{*<>Y}SV()I%JP2x6E0>qj(eEa7QPAM+@HGl#$ssW`k3po-FyaslIi zKr}8gNFZ^*7c}d-`BtT@2znlkiI9#mpfW!y#1~u! zfQ-7XJ}5C#BMAj%GiMmU(Zvu39Ch8LvnB1+NHPM0VCG0;8BV_duXPe zq9r|NM@s|jmW{AA6Q=ThU%|d(w(16RN8hPX=eh17+tJJNyQ{@aadidvo}&Z7PP6p0)=Hul__AIrc%58 z%3**!hQt?J^Hl<8Ne&s{&T@z#=Tpl3S`aS@;v<>tE(HY$7KlJXVn#`bhz(_b#Pl$AZvQ3X(`*NDFz#3$PR#;Mhlb@6v66ADD`8Ey9HeV-h`%^fg^3K*ysD zEgw5Pjbu|gYJTU3)abu*ENNeViba-313N0!kRZWaC{tqZSDFQnYp+l$oa@3=r z8^7hdo@))kJYMGw!Q#?;2Wiv!h?GYg#)77U_8dy0)5N??v#FuG+|^AfZOx(6`ptks zr&T!uM@9sWsz>0h5rMbWBXDd);JA7OPK*egRFA+rBLeTLN8r?mz-jdeoEZ@~s~&-N z%ZPzAuN;LN3PhnuGvGsiC_xqots1Q?#U7?S?e%Z1l%_p2!5#vA{DcB2FpNYyxT_o#rn66U_R` zzfP*paTwvD0R?ScF$Pog5E)QN%qzy>dxS;?91`=2afpZs1#Mk_F$O>ND?mqCO)Je(~f15C6!a=MwX>Lq2^22x2xRY{%fVaW9Y zrVnsH!P^h?0{8s*@Ux>f+|W+jKFcPI-WpKQ))iwQYuV6%LSkMq z4l=IpxN~xBz$0r?F)k{=?j$-h;F2}jnaiuxj(TFSTMHyJL|qG5nK%wKRow7v%?dpcjXn$4o{%ol~*)7 zJb_o)m1m)v>$)4houoTrG>)Egl_6+TkTh8T%tUQ%w2JqshOp9>yMH!2Ti_527Aakq9 zyTB~pSlkjTzk0O`#G0F479n?xed*oUEwPqgp|A{-Pyad{7c&34jGkPyW^cKYr@QG( zvE;%3P)h>@lN|^ev*QJL0Ruab)RSHZQVo#QSnO>yy4(c-0DVi7y$6H>ga(u01uqs* YO9ci10000300RIc0RR9F2mk;80QjoyYXATM delta 1424 zcmV;B1#kMt5{MBEP)h>@6aWAK006n7&5;d44Wi9ha#=+=9R&aY#6po=Pk)cvI23(f zY5#+Tv{LsW6JS0%Q!!MtomLvPJIl_;zE&P`VZ2T3tnI+?@7HmFBoHVD!&q&2BFXWw z&-LZro5ZH`{v`_02)H1OUN%}s%?1M6X91zZ%f{owC-1!RzWeJhod_fju*68=skm%B zOBuiO{qcBw6hMS&Fvc8?`hP6)6~HG^3@`qyjo)rI&%9RCJ8m@;7gC>&oW$V4iv*hX zjPxN1E*tkmLXX1$xEcnC8D6*PCqlBw!%}kclt}Ob7!XRNA`k_f##Vt)elqRqL&y@P z6Z1(A58)aF8B*X^y_;_^X)N$*&VYzG#1oI=2vR$|3vp_tm$VCPzIpGj;{|YKzC=-Tje_zd^7!uQZ8FwIVY^c)Eu{8cesZ>2l?4n zzRKtvu%yDOxGXvT;XCE<)lK!0s`MxmRV0Z&I$=HI{@ zewg5(vE^ivmeoSl)v@ANM$4w)wG+@yq(<|=F%<*GBdqJ~zY`o1xozB;7AJ_L%;>+2 z%Z7J7GbRAZ=Q$}-L(aMpn|T+|B=Xq6bKlGK?60{8S_wo`dtEjpPbw>kdDH2PR9hP- zlFcV=9ZTk?8GpRWXXikFaj2V0+FC=q`I~`+cGEcl$3_B<-4k$PB;dq70jEX+PTdo5 zW+dRuJppfx1iW=mz`2otbN2*X7zwy=Pe7|_q(H%)lW@zBEEQ=6dMKk{LC`X2>A~z_ z%G2xKot4t`8b+iKs7GEPM0Y7SdZV~)JjlCOH^$5Kb$^js7pY4c0v>;D8Hi}Pry%BE z+Xf2S&MBy)YaU%c>2Fp7Y({D!oEC2VGtTyaifC*Fi?=``gssQl{_7X0NthCUfg z7MT&D+B*t<^LY0qFT*x)mCUJ}^pibI`9CB8W~JaArA+%Scy%Xr!E3wV?WrrkXKaVh zjvBZjPGi@qiQ*Fj2^#H~0#(aK1`;y3V;YoQ{eS27*{Ok!yoqC4QUm*=_`*O--ehMj zuTnee#9+4;$TCD-3s^}U2b%Ifh`hsc+x3{`nSUZ`h9p>+@j`JhC9SK2{Z$9%Wx>3~ z&aqDeH^gb|S|#n%<~IWw8Qe7uCY3?kMqS`c{;{(vFAGL{UzJw}qrC*9s~_Ome7!2K z41YVkfO=J48FqL9^{Tuw?C=8WRe5FD;RU?PsyqwTT*u#VuX1O|SrV`7DreA8lr>nr z18B?IZ`Jmn@0Wk`0dBNGDc`{8TOiZBbS)4~H+@@R%6H^#Nw#V=qeZ&u+YF10v-^%+ zC=0J)ccEE)BDW=1@wLw`6f2$ Date: Thu, 20 Jun 2024 20:08:27 +0500 Subject: [PATCH 3/5] getting Cloudinary URL's from customer preferences --- .../default/experience/components/assets/example.isml | 3 +-- .../default/experience/components/assets/videoExample.isml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml index 0e96467..60058a2 100644 --- a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml +++ b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/example.isml @@ -1,10 +1,9 @@ - + TEMPLATENAME: example.isml // SFRA has a logic bug where full urls are added twice, so we need to check for duplicates before adding. var assets = require('*/cartridge/scripts/assets.js'); - var verJson = require('*/cartridge/scripts/cloudinary/version.json'); pdict.viewmodel.CLDPDVideoPlayerJSURL = sitePref.CLDPDVideoPlayerJSURL; pdict.viewmodel.CLDPDShrinkwrapJSURL = sitePref.CLDPDShrinkwrapJSURL; diff --git a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml index 78a1de5..effe36d 100644 --- a/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml +++ b/example/cld_custom_i9n/cartridge/templates/default/experience/components/assets/videoExample.isml @@ -1,10 +1,9 @@ - + TEMPLATENAME: example.isml // SFRA has a logic bug where full urls are added twice, so we need to check for duplicates before adding. var assets = require('*/cartridge/scripts/assets.js'); - var verJson = require('*/cartridge/scripts/cloudinary/version.json'); // Video Player CSS var src = sitePref.CLDPDVideoPlayerCSSURL; From a61811c8fa8b75b3eacc3c34e2df24f95c9ff01c Mon Sep 17 00:00:00 2001 From: Asad Saleem Date: Thu, 20 Jun 2024 20:16:44 +0500 Subject: [PATCH 4/5] getting Cloudinary URL's from customer preferences --- .../bm_cloudinary_pd/cartridge/scripts/cloudinary/version.json | 1 - .../cartridge/scripts/cloudinary/version.json | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/cartridges/bm_cloudinary_pd/cartridge/scripts/cloudinary/version.json b/cartridges/bm_cloudinary_pd/cartridge/scripts/cloudinary/version.json index 199a1eb..dc61226 100644 --- a/cartridges/bm_cloudinary_pd/cartridge/scripts/cloudinary/version.json +++ b/cartridges/bm_cloudinary_pd/cartridge/scripts/cloudinary/version.json @@ -1,4 +1,3 @@ { - "videoPlayerVersion": "1.10.1", "version": "24.1.1" } diff --git a/cartridges/int_cloudinary_pd/cartridge/scripts/cloudinary/version.json b/cartridges/int_cloudinary_pd/cartridge/scripts/cloudinary/version.json index 0f01f1e..dc61226 100644 --- a/cartridges/int_cloudinary_pd/cartridge/scripts/cloudinary/version.json +++ b/cartridges/int_cloudinary_pd/cartridge/scripts/cloudinary/version.json @@ -1,4 +1,3 @@ { - "version": "24.1.1", - "videoPlayerVersion": "1.10.1" + "version": "24.1.1" } From 38c8e5f6946b3723be4d98889738fa46453cbe6e Mon Sep 17 00:00:00 2001 From: Asad Saleem Date: Fri, 21 Jun 2024 12:00:33 +0500 Subject: [PATCH 5/5] getting Cloudinary URL's from customer preferences --- metadata/cloudinary_pagedesigner_metadata.zip | Bin 2375 -> 2381 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/metadata/cloudinary_pagedesigner_metadata.zip b/metadata/cloudinary_pagedesigner_metadata.zip index b72ddcc3cc15f8a49d54138a6349392b032ca2f8..43772c8381129e2e9be3ff9013e01d8228cdb1db 100644 GIT binary patch delta 1587 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 b004cHfe3{Hga(mdBau00000_DA3c