From 9ba6ac4a2ed2f5e6ae7aa23ace620096dfc787a9 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Tue, 29 Sep 2026 01:44:04 +0200 Subject: [PATCH] cultnet-rs fixture example: name an Odin port a dev machine does not run Co-Authored-By: Claude Sonnet 5 --- .../cultnet-rs/examples/idunn_runtime_fixture.rs | 2 +- .../test/fixtures/idunn-runtime/.gitattributes | 1 + .../test/fixtures/idunn-runtime/README.md | 15 +++++++++++++++ .../test/fixtures/idunn-runtime/machine-id | 1 + .../idunn-runtime/rudp-route/activation-key.seed | 2 ++ .../idunn-runtime/rudp-route/activation.cc | Bin 0 -> 800 bytes .../idunn-runtime/rudp-route/expected.cc | Bin 0 -> 1076 bytes .../idunn-runtime/rudp-route/presence-active.bin | Bin 0 -> 922 bytes .../rudp-route/presence-warming.bin | Bin 0 -> 923 bytes .../rudp-route/provider-identity.credential | Bin 0 -> 680 bytes .../idunn-runtime/service/activation-key.seed | 1 + .../fixtures/idunn-runtime/service/activation.cc | Bin 0 -> 806 bytes .../fixtures/idunn-runtime/service/expected.cc | Bin 0 -> 1308 bytes .../service/presence-active-below-minimum.bin | Bin 0 -> 940 bytes .../idunn-runtime/service/presence-active.bin | Bin 0 -> 940 bytes .../idunn-runtime/service/presence-warming.bin | Bin 0 -> 941 bytes .../service/provider-identity.credential | Bin 0 -> 685 bytes .../idunn-runtime/web/activation-key.seed | 1 + .../fixtures/idunn-runtime/web/activation.cc | Bin 0 -> 798 bytes .../test/fixtures/idunn-runtime/web/expected.cc | Bin 0 -> 1067 bytes .../idunn-runtime/web/presence-active.bin | Bin 0 -> 915 bytes .../idunn-runtime/web/presence-warming.bin | Bin 0 -> 916 bytes .../web/provider-identity.credential | Bin 0 -> 683 bytes 23 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/.gitattributes create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/README.md create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/machine-id create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/activation-key.seed create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/activation.cc create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/expected.cc create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/presence-active.bin create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/presence-warming.bin create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/provider-identity.credential create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/service/activation-key.seed create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/service/activation.cc create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/service/expected.cc create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/service/presence-active-below-minimum.bin create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/service/presence-active.bin create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/service/presence-warming.bin create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/service/provider-identity.credential create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/web/activation-key.seed create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/web/activation.cc create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/web/expected.cc create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/web/presence-active.bin create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/web/presence-warming.bin create mode 100644 packages/cultnet-ts/test/fixtures/idunn-runtime/web/provider-identity.credential diff --git a/packages/cultnet-rs/examples/idunn_runtime_fixture.rs b/packages/cultnet-rs/examples/idunn_runtime_fixture.rs index 185f9a4e..d6b432a6 100644 --- a/packages/cultnet-rs/examples/idunn_runtime_fixture.rs +++ b/packages/cultnet-rs/examples/idunn_runtime_fixture.rs @@ -157,7 +157,7 @@ fn build( provider_id: Some("odin".into()), provider_authority: Some("managed-incarnation".into()), provider_expected_projection_sha256: Some(digest('5')), - provider_endpoint: Some("rudp://127.0.0.1:17871".into()), + provider_endpoint: Some("rudp://127.0.0.1:47871".into()), }] } else { Vec::new() diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/.gitattributes b/packages/cultnet-ts/test/fixtures/idunn-runtime/.gitattributes new file mode 100644 index 00000000..fa1385d9 --- /dev/null +++ b/packages/cultnet-ts/test/fixtures/idunn-runtime/.gitattributes @@ -0,0 +1 @@ +* -text diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/README.md b/packages/cultnet-ts/test/fixtures/idunn-runtime/README.md new file mode 100644 index 00000000..99e7b07f --- /dev/null +++ b/packages/cultnet-ts/test/fixtures/idunn-runtime/README.md @@ -0,0 +1,15 @@ +# Idunn runtime fixtures + +Written by the Rust owner, not by the TypeScript tests. Regenerate with +`packages/cultnet-rs/examples/idunn_runtime_fixture.rs` (CultLib `f5c597a`; it uses +cultnet-rs only, and Idunn's `IdunnRuntimeActivationLaunch` is that same crate's). +It needs Linux and a machine-id equal to the `machine-id` file here, because the +provider identity is bound to it. On Yggdrasil: + + DOCKER_ARGS='--cap-add SYS_ADMIN --security-opt apparmor=unconfined' bash ygg-verify.sh HEAD rust 'cd packages/cultnet-rs && cp /tmp/mid && mount --bind /tmp/mid /etc/machine-id && cargo run -q --example idunn_runtime_fixture /tmp/out' + +then copy `/tmp/out` over this directory. Every `presence-*.bin` was accepted by +`authenticate_runtime_presence_claim` and correlated by +`correlate_runtime_presence_claim` before being written; the +`below-minimum` vector correlates to exactly `expected-capability-000-capacity`. +Ed25519 is deterministic, so the TypeScript signer must reproduce them byte for byte. diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/machine-id b/packages/cultnet-ts/test/fixtures/idunn-runtime/machine-id new file mode 100644 index 00000000..a71716fc --- /dev/null +++ b/packages/cultnet-ts/test/fixtures/idunn-runtime/machine-id @@ -0,0 +1 @@ +c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1 \ No newline at end of file diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/activation-key.seed b/packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/activation-key.seed new file mode 100644 index 00000000..ddaffdda --- /dev/null +++ b/packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/activation-key.seed @@ -0,0 +1,2 @@ + +²ÊVÖH¾\IJ½ôðŸíȈ{’^ª+l£Z¼}k† \ No newline at end of file diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/activation.cc b/packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/activation.cc new file mode 100644 index 0000000000000000000000000000000000000000..556e8a173ce1d8648b70b1435402d0bdd183fff8 GIT binary patch literal 800 zcmbu5J!lj`6vvZB5J9v^P_WP|#3FaTnVpZF1Iej{R+4B4Q8978_Ofz&7xv>wOtgw3 zRxSn<5wtRXfT&d<5EM>GBZ4Bhm4&D&1$%K2v5{=!@E8W(|Nno#c{g9^td(l1r)@1s zJF%^GQGRPRG+Db{i?enbMs`Z-H0;VW?6hlLys}wuZL@|mxzw`E;=+6-aR`w-AtPI< zS4yHPLw}^>HclK;x!MhOhR8P-Rxn^z z1>|ZBp#HmR0C47YfA3D2u{f4YOH5hS5QP-O0Rdz&mPAr!jj+t)RQr?*g(b&9Krt6U zvD6l*;6iJ`DPdOf)qi-abIqoSWfHdj4q^X!iU!6^3ZzZoBLon*r=mm=3D#&26VTiv z)=2HUUl0hCFAWAK=gb&i5wExR%f98OS9+aqPX@Q$-v5KP*I&Iqv=N^!&KC#nKG@p4 z__nXF|9)>|Vzy`y7AOQp3kn7?!a;fju)C?}R)CD}f$uh=J%Krs2CNbSdloqaMKGXc zYcQoq^cu$(M}|H>-h;*_4j#U@dw5`6Y+w2?`tj()s|%m5y}7C99JK~Cm20>uxXN}UE7o3VK)&J4~j^dW^18ewCR|L@37*)yZ8bM)1in% z5TBvo!jLR}U1OUU8>@%w+~>Yf#$V3heBQ*Q&;hYlFM8ox<@0fI7%a(vi)s*#Is!H_Lsd3FI^%Yxzb*7 zPEIe&=5&VT=q?u-r%@UVc$lkM;ib(k6AZDbLL~1YgwFf|2;uSj#>eN{X0vlWSk=jW ziVagmE8?|QhxTKtDp~}>E23)k0^t`fU`eEP

-1f@ufyF7D5}SZ&dNVv&@-BA#p2 ztLMF*m(e^3s~yzVyB@X>GMHsyn^>-H6NYTWbnfYd7+q*$k8u|x(=;p>Q{rLba^0pj zBal?B8a>F0SOgJQeNIE+FA5~S;=;WmKsAjh(F{7{pk XnYbK{Yg~Y)!Q@w|{605*v_AX-A<<{3 literal 0 HcmV?d00001 diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/presence-active.bin b/packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/presence-active.bin new file mode 100644 index 0000000000000000000000000000000000000000..13a93f5562abac952f33314dc17202825e216e8d GIT binary patch literal 922 zcmbu7O=uHA7=}~4iO_?HUaUXGqLfW%zMYxf2?{w>L{Fg?L9AtV=G$atn}pp>G#AB_ zh#-hPi?+~$AYwuB4~!TOidY1#gjR}L{5c8=J&3wm$tB+U&Sm&!_}&-ZXEC#--CtDW zsB2-8jcVm27{{?{gfW&ij+Ib_Nhw>0n{g7M8m|T?F^sLKW~%K2aY+FemSG?aypCX8uhR%<4{o6Dk`fasFW?* zF@iO!vxuQW1=7{7Ef}~Cm0TDgL{g$C8fuK^D&F z6pJQOaS(QF#2R(`PhYvAAqq~Gq=)9H>)LQ};#QY?R#k&L|D9&*bh1u++S|Kd|6yaT z(lV`d64bHXA604zS`{zGsQ$Nt-0DP^R2X8ph!$gGoL;_SeW*B>j1JQ%;-@n~R>u54TQQY*a4k9_kk?OoT- z0|=EyFn$`05I?j}!+RH=92tJ_ ztg%VIIyU<2ZqT>0_5AXU!snl}@0Uh)&n-@BJe29(xb^As#LIW^;f$D2#D*AK63 J=>OE$`y2izGi?9> literal 0 HcmV?d00001 diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/presence-warming.bin b/packages/cultnet-ts/test/fixtures/idunn-runtime/rudp-route/presence-warming.bin new file mode 100644 index 0000000000000000000000000000000000000000..1211a6059e5c63d55e7ba915d9f89e5dd5ca2b66 GIT binary patch literal 923 zcmbu7KWG#|6vpq+fTjNm5hTHAxtE!@GqXE~;)w*Chzd%y3bQkB?-uszZo{Jk%Jt*T)HO3l78iz`#!g?v!ga@^HjH+A>&SF@z;)bavhifGTTv&#A)Dz${ zLJ>eQ#RVFP!gjcJxg$ML4){I?M-mQ7BjM7KT1$sBfy!wwqU+R5N5;M&(khNrJ*Y$$ zZ5zQl)n3F<+m$mnE;drnn@C;y%1nzYrV*`%lQ^&d9Y z8ZF~zR9p_CV$vH|8g;ZPUJc{s-wyI?6J1hah*1$OI-3-zWBUeNN>f~1kj(XL$uyNz z+h}aYxK9KajUG@TxSQg{3@{IEsibCvWnW}6*|GU!VP+f+a8BiX;cMyH_islFLG+Z| zu8$5x*MGd;vwdao*T>V-b8kMMKe@PT=Z(tM{nwVa+#0?xvNCbx=Dq%hn=-8{hc1V`M$&Xew_OY?Y87@u(qZ*Su6 zG*)))!FT+^*PU4Rrq5r)8$3VKc@B=KjiU&Q+AHQCmaHp|=cW3cwqUoBo-hl=$ zV!XsU*3PvPxhqCj;>_hXo-Na^Xftqy?I^^FD^gd?w3o-I{z=noNc7j(5%#KqrXi1r z4h`pmTdt)RwhNgWooFf~QIxPGlc@?ss4`(g!81-QQ!FDHH7X+_lusJcdSw;6qN;VC z>)MsY=A}tFD$>~GWnp#FU7qO5c0p{rpZb)0zVfI%LxU)gQ7HOCh>%i0AcuTE^8G(x xU-j@Fw@*#s8@}Kneq7A3iY1AASjHXvCC=}ZL8TVr>$llCwNwwJZ`Hz9&eW0baA8G(nbeoa;Zg`y>pkm%poM|m`c#A zdIeG5{y)-_m}U;CSnVD=LxPERYOi|w%;ioI$V}(vvn)?hCFkP_Y-FVj({^mI$g@a+ ziV_glCjhFyy9@v$uliT!ij2KO*_fifC`BkZpjCk)#wsE?53IH*t!6e1Ad(P*LZp_9 zkZB19j8R$&Akyb5vP=I$E=|_!HdR^N`1?ovXZ30ZsAY+^=*3a?ZEfS z@bJ67zW({{@lzAM8W)i!U`^&(S&fG{!ZA;$4$*%;%;-><*_ zaplHz@@Tz&zs{)Z2Z+o>Z;froxpcmW48`1;=yy_~vnH{bES!CFo_Ebva~^E;yuZ=2 zzeWEOLsQ;Nd>s=29i=H(v=(`P2PoMkkr!~ldo1+4#P>PS#7!dC3!=nNJU4+HsYL-O1Dfk>*v{@uTwHuxo{tqoN;VqaX;z(>KXx4A zhBh`IiKECPtG|t8ZS9t4V_Y_^#OG}e^QhjoXdUhsu-12R2ofJ zTxgroZK{1p7_^!j2+;aS2(yGS3j}pQg|gacWt21)w3OBdt|fBHP;uZMrJAwj<)u!s z-SfqwO;jz4+fM#A^&~abk>O#WB2QWcBOoP%EAvk~`R7$NdiK9Tz7BWm(3RynF8l+@ z-QwrIGHF!DESF5rr07oTKm7dt#>iI3lvEsJrHC#pX9ZN?fn>f#5*Wdl=G>yvR7=Wy zskvrc`ymM>q7a1G7FX5+=Mt0*EG1p5j?;CgF&;Y)&{EDJXcUf4eDMzs4UFIDUHta; zd1Ldy&XtKv&f(eF@8ZMy^`CREUp#!gcUAQ?XK!~$Hy^F{Z+@Mhe6w+OY>R?{qW6e7`WC)y)1hTT~-x z#>z>qIu<422o6@N7-M8`u!O3dlyWutI8LglMk?V1mSZQzYArOF_QWMcx#tAvxdg3} z3XD}CTvu9cQCQ8aFG(PXPZT1xuIDo?h#|%(Ej$8(yDG5FL$F1q9j$Wa!^o&=q>^wn za-eBOx2WbJVbE%Bz(?yLAJ*nM)k^5sD$ zEf_*AQ-FfH9t&Ja17sdB20mpJ1D}Iwv`9dyFQjV~bp_GNg3u_i0mpLT4quqN_^HgtSrDc;+8qW9QZ-_hdRJ=bRYFTYzo-+A-w LjrE^>r?&qF!IL?E literal 0 HcmV?d00001 diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/service/presence-warming.bin b/packages/cultnet-ts/test/fixtures/idunn-runtime/service/presence-warming.bin new file mode 100644 index 0000000000000000000000000000000000000000..62b7ff86cceb9219a5d8c0e059e2473baff42e0a GIT binary patch literal 941 zcmbu7J!lkR5QZf<-_L%3sm{uXjYSH@B78rycME%a=kDIc6e1#u zpiP2Zf=CDk#L}P;Fb4@~)l@DwdAlscO|F zIt`&^ Cr8(08 literal 0 HcmV?d00001 diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/service/provider-identity.credential b/packages/cultnet-ts/test/fixtures/idunn-runtime/service/provider-identity.credential new file mode 100644 index 0000000000000000000000000000000000000000..45db9617f2fcfb960f3afda9b8ec42fdc1a6b2d1 GIT binary patch literal 685 zcmb7?KWG#|6vjm@v=?kt5(Nv*9y7Bye|9S^1gjuoBM8gP&TMvNZ#UlUT@nHT8(TFZ zij5!y4WgaI&LBuczruD^)FNn;#$M5pc%@)?FudV?-{YGfbMtmPIiq_n9hOZn+pkB3 zb^RcBx@_{m_f=Cg3+>cc(iuyVZAmhg_(3t!jq8l)tKEC=?aa}ha+-Fj3WaqfN@W-t z&aKmi8O1`O3^yS+A|sh{PD(_dx^>cWKr}%jQ8~gU)(Gs>M z4)(Ep7GLnKJz5ska6ZY3(j~px`a`FAQ8~{cF-2vIYNnkV!}=%BU_|4;M$b4HI?zo@c@YSB^P2/W•ËW;ÆsÖSÅ2�µ4 \ No newline at end of file diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/web/activation.cc b/packages/cultnet-ts/test/fixtures/idunn-runtime/web/activation.cc new file mode 100644 index 0000000000000000000000000000000000000000..6127df727f18aed025681ae2377af563f9d11ed6 GIT binary patch literal 798 zcmbtPKWGzS6mK^R;-cu{Acs0=65sd#zJMBVa4Qz1h*ISHckPv2TJA0}w&i)csD$?7E54-p5UxA=Ix<@fi^bxpIL8)YV3CCjH$S81Wn zt)Y1?%ouVSwJ2xI>dFoU$9k*RQE1z?^h`)#d^D-d6CjqLz zw*mmCUkt9^E)w>SXA=rDUS?7OMFJ@+z(ioe2rH^}6k5&&5rD9V85W_jm|8_b%)HDZ z8-f%X^wWRqmd}rm+f-$7{ci^U&*|4dA*2OoLQ1ND8xV%0P-$zJW>RY~Is&9MRfdGr z84OkfR}nh{S>`3r`sO);SR&SJ)p?A2z} zrENPFmb+IDBpZ8o?p~MsHm)66LETC5@XpAOk>5E8WdT3+}}Oh-j69 zwg?^~;9;B=DU#YK^qa>l-p}{`X09K2+LWAeA5bD&F`y3V-@FDQjUoiyHgE~zEQmOZ zBPN4ZggWMExiu>-x2Z@)UQC@ums+A~3E3VCL36c2I&J&g`3T}f)%KUaO0Pmf2E;fMaM+RA;#`Z5XSiUV`Kcewpkp!kSnVt zJ~PV|ovetrd>6)#mFi@k$6OIvsS!v&ts~wFjhb5Fu6kX@!EA*4vk_)n?4OtyMOVZq z-@Ja&Xo#34K{MOon2S2G9M7?;94KJR0{{Vz&8h8Km{FjZS8%l~EMeNB>X;s7)ONt~ zge~YePmba=l0gW%53DKuc^B4-m`vUW!+bJ5Zlx0Ld@0*c)5|psV%i9+LtMw9c(|Y? XQ+0pvn5ROl9X$W0RKMo7L)Lp=Z0uzi literal 0 HcmV?d00001 diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/web/presence-active.bin b/packages/cultnet-ts/test/fixtures/idunn-runtime/web/presence-active.bin new file mode 100644 index 0000000000000000000000000000000000000000..15ae2e8c9912a0fa89482131e573b2a8f3a72105 GIT binary patch literal 915 zcmbtSO-NKx7##^(7((qTf-INuX72yJZx%7TA_&^F47oqwo%ixNGrf5;Wr0xyfe<2P zEsdzGorx6`q@`esuvOGh&?a}e(M2t^8Zr#5o#)$qhwprc!}*lk-Rddpez1)s%cqS> z7WYGMErmK%Ec8a8lPtX9Z~1U%G;VTrYq$a-XzCz=`K zl@mfzi7;u?oJeIIVNO#;c>By@r%)&j`YVLDh!>kJ7UGK4X+>vowG!YB!(@xt5Mma9 z35GlakF5vJ5z^Xm&O8^yS}M5LL~zRpSIR0WfPz=XU{9H+;mpjl&6b0Ka@nQ29w!@L z#1`=+%CcIqP{2gyQG0L^D@D=Bjj7Gg^STy4{ogX*#CMvwWBMQNPhW!dn%vhmi<{8u zNvn+vf~u)Q+Wehj;&3fTHV(*G|}}7TJtl| literal 0 HcmV?d00001 diff --git a/packages/cultnet-ts/test/fixtures/idunn-runtime/web/presence-warming.bin b/packages/cultnet-ts/test/fixtures/idunn-runtime/web/presence-warming.bin new file mode 100644 index 0000000000000000000000000000000000000000..1d106eb5ff53a16de8ad39b93facaf8125c67181 GIT binary patch literal 916 zcmbtSO-NKx7@fhS76r8kY?G1LqIl!|zxT}|XHi%SNz$ZNa(})%^J4yb^Bl`f3$xaO z1wnxn-Dd0hfKTud_Y za5;%eFjS4924xFF1<=K$kg1cIS`vdURin#LtOX-r8a=gwCR_wO)QDk;wUfwtWR)kH z8RL}`LQ;t^Y0{iXWgTHoQ$=|5%weZcC=L26gtv+3TP=1)Wvk<|PNGUVz?+82HnAzh zEC3S>c?KR^51b>Uwd0(5E{L^MaIcBrmJzO$RZ;*2uZ+Q-GEc*~x!J9jgDd&Gi*+q3 zZhjHl#N$GeRI^=On8*xj4$fkwD4LjjwDoyLSEDEYTW0F`ULB`j{KNg}OR!Os=@A{5 zqH?~`5m$y22r8xqas7Av*^P}Y=wcDdc?j@aBWICy1~cUq3vDwR#5@2vP|{NA8PXIe zvI2$NF-N2e74cM4sepMW9ZkPYrP5RLeZ|x?IKnv&=W`#D9p77L7vB%|Ex+mi{5pOA z!TvpqSKl36-uv*_)WV7Gb^rDBC6ZsA{B&)1|6q6T#i!@TU-qt~1{%-cK&HC0kwY3| zBL$aX$TSibNh`3@##wH7XbiH(BWw)QmMR98AZL)!9(fL?S%~?ZUmIvF)Y`_+9X>fa zu)fx^{-yoZk>fu*?~X04T)%OvW&HNO(XsYUTDj2kBYX2sX4iyGeLPFPojEjfs#;3CV5$`#dIw=@*?Pp45!)4##s zIqLTeOGHXdVug?bgi%II1%HjfSkV0`SbmHTaQ(m%zL*`yFNdkdA5-ant=-)(`3)Eu B6f*z- literal 0 HcmV?d00001