From b810982a174a278848c8bc064f1d71f9bb45bc6b Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 5 Sep 2025 14:14:15 -0400 Subject: [PATCH] v0.2.0 - Nip13 implemented --- README.md | 66 ++- c-relay-x86_64 | Bin 0 -> 320448 bytes db/c_nostr_relay.db-shm | Bin 32768 -> 32768 bytes db/c_nostr_relay.db-wal | Bin 3543232 -> 3864592 bytes nostr_core_lib | 2 +- relay.log | 107 ++++- relay.pid | 2 +- src/main.c | 210 ++++++++- tests/11_nip_information.sh | 432 ++++++++++++++++++ tests/13_nip_test.sh | 384 ++++++++++++++++ ...{9_delete_test.sh => 9_nip_delete_test.sh} | 0 11 files changed, 1193 insertions(+), 10 deletions(-) create mode 100755 c-relay-x86_64 create mode 100755 tests/11_nip_information.sh create mode 100755 tests/13_nip_test.sh rename tests/{9_delete_test.sh => 9_nip_delete_test.sh} (100%) diff --git a/README.md b/README.md index ba16e02..e3d1ded 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,8 @@ Do NOT modify the formatting, add emojis, or change the text. Keep the simple fo - [x] NIP-01: Basic protocol flow implementation - [x] NIP-09: Event deletion - [x] NIP-11: Relay information document -- [ ] NIP-12: Generic tag queries -- [ ] NIP-13: Proof of Work +- [x] NIP-13: Proof of Work - [x] NIP-15: End of Stored Events Notice -- [ ] NIP-16: Event Treatment - [x] NIP-20: Command Results - [ ] NIP-22: Event `created_at` Limits - [ ] NIP-25: Reactions @@ -27,3 +25,65 @@ Do NOT modify the formatting, add emojis, or change the text. Keep the simple fo - [ ] NIP-50: Keywords filter. [experimental](#search) - [ ] NIP-70: Protected Events +## NIP-13: Proof of Work Configuration + +The relay supports NIP-13 Proof of Work validation with configurable settings. PoW validation helps prevent spam and ensures computational commitment from event publishers. + +### Environment Variables + +Configure PoW validation using these environment variables: + +- `RELAY_POW_ENABLED` - Enable/disable PoW validation (default: `1`) + - `1`, `true`, or `yes` to enable + - `0`, `false`, or `no` to disable + +- `RELAY_MIN_POW_DIFFICULTY` - Minimum required difficulty (default: `0`) + - Range: `0-64` (reasonable bounds) + - `0` = no minimum requirement (events without PoW are accepted) + - Higher values require more computational work + +- `RELAY_POW_MODE` - Validation mode (default: `basic`) + - `basic` - Basic PoW validation + - `full` - Full validation with nonce tag requirements + - `strict` - Strict anti-spam mode with committed target validation + - `disabled` - Disable PoW validation entirely + +### Examples + +```bash +# Basic setup - accept events with or without PoW +export RELAY_POW_ENABLED=1 +export RELAY_MIN_POW_DIFFICULTY=0 +export RELAY_POW_MODE=basic + +# Anti-spam setup - require minimum difficulty 16 +export RELAY_POW_ENABLED=1 +export RELAY_MIN_POW_DIFFICULTY=16 +export RELAY_POW_MODE=strict + +# Disable PoW validation completely +export RELAY_POW_ENABLED=0 +``` + +### Behavior + +- **min_difficulty=0**: Events without PoW are accepted; events with PoW are validated +- **min_difficulty>0**: All events must have valid PoW meeting minimum difficulty +- **strict mode**: Additional validation prevents difficulty commitment gaming +- **NIP-11 integration**: PoW configuration is advertised via relay information document + +### Testing + +Run the comprehensive PoW test suite: + +```bash +./tests/13_nip_test.sh +``` + +The test suite validates: +- NIP-11 PoW support advertisement +- Event acceptance without PoW (when min_difficulty=0) +- Event validation with valid PoW +- Configuration via environment variables +- NIP-13 reference event validation + diff --git a/c-relay-x86_64 b/c-relay-x86_64 new file mode 100755 index 0000000000000000000000000000000000000000..2b58d2c7a00ee2401fec98e1f1aac74c1a239743 GIT binary patch literal 320448 zcmeF)d3;mF{s;W9R3eIvLN%yJ)T(g-TNRB1R99rcxD~w0Mz`__9CV*=$~$$2Lg*cH0iJ?I5ahyvXI( z_P#nJ^J+(2KY3N#In|r(yzZ^pmU+$8P`&ol1VNS;_t!d+d9^uoT5Xr7-lo)F@{=omo(_@GOyO{RNr)7qC24T%G_7)DSErWIr=rTor+T1*`7eh zy_WmxLNfE3=}%Qh^~Zz$!Q_V|789*UUIOeCCWPM;~?g%xNQL z&X`>j8WHjwJ>ux2M$Vfv@(6PSRWFzPQDf@VGbY%iH3?|nR;WbGz9*q)D+%52YX?j`<9DSLbIkM*+O zg}uZ-Bb~Foat8ELpC!GxuNPn5OZkWPQqTHc;!o+N{!@F|?@PUuQ`3uo-b+9K+)KQg zcemGX(O%-G^wQolWT0=aoL_q>|B7DvVV_?1yQ!D``g@5V(#w9kdx;;^OZmflX_vbE zZLhuR#M_>i^-}(XUdsPZFZEp5OF1w0QlE2rsn5N=_#?fPGoqJz-r7t2*}c?%axd{E zy_9e7rJQ&#Ufzq3?Zxlzr9a>AC4NCK-qK5d{?v=l@5R+Ty}j{sVlVrh-HY$pOMiaZ zOM7?dC4OixesM4R-M^Q18NI}(dhw!OJlRYCeA-L=`@PiXgkJozUdoqnn@j%i&w;)4 z&o#ZwKX3I?&tX!qiwl?ZVZHbn;@cZ1%X-=G64~#rw!LiL6%rsnnf2W=84vrJlKa<# zz0|W$FK(MuHh$csX;pKpE}k*3x@zwDaieF>nO!x0@|2lXwn>vNo;7FoqL*7K_7&Yv;0$_$%2w`y{Al`cT)t182VPq|{!?8&oq_~mouK?U}HZC=&X;1Q#azO*>A*K8R*IaO091#6~U zT6M)FIRfgKXSeCe(N(u(&6^sSJ!kIRc{47aB!6ZfDTgh)S!mAenNryH%go7?-kE`8 zoZVV>Dn+U4%$MBh);0(RC(oEWDO-kRr{-aiKKh@U_LNtBdDY}gRhL^f>uKWl>XO;v z{}h_p+uX^sr_GsV4$^D`EM4+xm3T*w9TrTHLps}J%u$h zXR0@|RXLL;&6}N5`m{MU)wbz#tEz0%r_ZdJ7f_M%KfQr2UCt<#oK_RGU0fyS*nBBP z%9nkc-5`Bnwl7n#+J|KqI+9vHWA+Slual?Qf->XGG50rha62&7v`y7JtDd3G#u-yE5vse(B9*?pYKm-sX;t++Ma4&(F_|Ht zXq1wv>fO<{Q_IUv9zE%Zkw<0U9g}@m+=EA2-e&WUkdiXnA1NiMd(A%hufM$Z!+Z6r z-}f_LRh0UpJx^ZMyB)GoDo4lb(gq;MZo1C1MyU5a|LLtW`_LumJ*oHlosL%b!2@hD zxkhL1_lL}wA@{p>+ug7|%=7@;LrC9t^Br>Ayo2p&q+c-8dA3)O9&E<k#iH ze_lO^kRKoUV#HUF2OT=Tl6*Ge{p7d61LSwZgXGQd5cwnUF!_`42J#o+G4fa8P2`(* z!uTg2I!b$-{D=|STgVeAzmibs6XdtUljQfn+sK!~ z+sPk=r^ugz8{{v*JIP;#r^#2qZP(_G|J86i`G;@^`Dbt^`C7P({J(HF`A_g7@}J=z z^55ZJ@@}|~JP*&2D#&+&SCa1r_mex}0rKJSAo-66>;4UqAB6ZY`C;$|@?v<5+yieS zKMCGUehNHJJ`UbOJ|5mmem*=wei1xLelfg_d?vh|d>%YSeg)hhUkL9czYd-zUkta^ z=8pec;CAx6;12Tp;7;-_IPNa;2NCZkkHd?|pMiVGmmi4vpZo>H`^aB~SCFrOSCX%W z`^i6q2gpBz2g$#JhseK&hsl3}H;{M1W8{Cro5=r#He!Biup05$+`a z8SWzg1MVib;q#p$@*UtF@}1#c@*!{^`A~QTxeH!NegNE0eh553egr&7?tzEMPlAWZ zN8|d~Kz=IXW8`PTo5&}?o5?SL$H}L`TgYd^Tgj{83GxN-BzZl&jXVl(C%*%pBEJuA zkUt9VB!3c~CVv)gyFPdPx5Dk@%is?3Rd6SH67C}Z0PZGV11}<93-^$J2ltY1fcwa| z!YjzP!7IuCf&0m)VBEKIVCVv>-K>idwM*af4iTpKq zGx3= zj{gF~jL4Faul6)H6Pd)=4 zAP>TWz$?f{!z;-z-bc6BPhN)j0Qnj4Ao&D%i2QtbnA{IEqW#ep+VzPd*go#L4%C zw~)Kxt>i!Mt@oQCKeJGKlKe1~(?)&-yq(+wPm!0x4e~O0C;3_MH2L{(TQqn4Plemb zXTTlgv*Awi8n}ym0o+Yq2QMOTgnP(ug?q{GhWp4LfLD;m;g#gi!2RTLoG$_L7ZD#M zUj`46zXcDIzXxw1{{$W*Ukh&{{|??vZouQ@o$wa&ZSYp|f8Yu7{Bi{|) zPCgW#A|DPn$Pa{fk{sjjiP8BR)Ys8J;8$z}v_#$9QNbpN04o`8>Em zekHti6lNZt+)k$(#hlYb9yAm0Fwk#B}Kk^c;DCcpA1eZ1r3 z+YsME{tvvByzid6oCNu2xGzYO4?uhy`7ZEw@&b5@d{4MRz8}1k+zn5Y7r||}(N^*mh)<9w;Yso~cpLc| zcsu!*@DzCpZjc-BPV%krH2F5T?bh7!|1aE5-ghq@=O7;dcarZ6caaZDgXHJJL*x_TVe%>P2J#v382M%JCi404 zX7a1xaq=*{h5UMWD|r;2Aiou!B)<#ZM!po@PW~u7MgA1rAb%d-N&X5vO}-p%yDfM8 zuY%jjlW+%l8{A302JRwX3wM*J;6>yH+(W(=h&6x1K@u0LGS?i zV0e&xC_F?y93Cb=0Ny}80v;nj65d39EWDZgM0lKh47`QB4Bkq97Cb?I9z02Y0lbZT z3cQ^>08f$6h8yJ7@J{k8;c4KuP8{AEP54?!{ zLAZx}(NTK8Uh+8NedPBapyMmZpFw;j`HOHr`R8bFfcyg7X9dZZp_~x;N_dz&iuFbV z`8$Y@k+;E{$UlcSlYb45ldp%jkZ*#wl6S!q%Skd?ezF$d813 z$d8A6$xnv+$WMh=kdK2`lAjItlb;6)yVz2sZqKJsnw3i5y9mE`?1 z-~S=s86F@X0uPe!1rL$$2M?1U3~wMWhR4W{g*TC(2yZ4o1s*3K2X7%i7v4&K0X#uo z1y7RCgtw8`z}v|ez*FRPaD%)N-bsE7JWYN#+}4yk{vUwb$sdC|$Xnn}^4oE~xX52d zyqnzHN7ti>Jb`!*c@pj={|N3Q{~TUH{tdj6d_CMxz8M}M{}mo2{|6o-?~C<7n0!Zg z1GxhpBX`1^$cMq3$qV6e@+C*;{%;{a4Dqex#qb3AG4Le$iSRb^vG8{CGI)yo47fpl zF1(Zc0(hEy3fy*A?)VSD?c_7z4)V+3PV)J17kSt2dVg;6g@`XAuY-HYZ-9HrZ-V>C z?|@g3-wUrKAB}ampZo#D2gsj*2gzIDA@UdDVe;4e>i%gUUxxS?`AT>b`P=Yj@`3$y z`El|O5Z^++2Hr}(7M>vg7M>*k5#C0=5#CPT1y7Ox4mZgEhIf+p#rL(+fz_7B>56} z8~IXrJ9#J8r77}<5pR$`3GXC-0iGs*6>hsHcl_V@o&NV5?c{GD-a-B*+)4gE+(rH= z+)cg~UPPXPd&t+rz2uwWKJwq-73BZGE6MxrtNX=I{`64o0rCNe50XEJaULSyANNgR z@|{sm1Nnyi^nPRHyCS}cJdNvYGr1G-aq=_qe5{3hIO1E$4}>Sk4}~Ymi{NeK9(X(X zo9MR``H6@($j87t$xnx;$t&QtCAs5&0^Cmi73$+4zYy_G@)!2f<+{kHA>K`X3A~6r z2=|bO;9l};;6Cztcm;VQypsGDxS#wkcz}Ec#Qn~Lv%kk zk-v`kX7ZKrIQeRL3wg;gy8Kr14-uarUjt8)e*y!`|A36$d5w2m%Ie-BR?5lL0$&0 zB(H$`$t&Rj@(bZX@@eo8`3!iN{4#h0`Fwbc{2F)@c|E+Dyb&HJzXjexJ{jj%EBT#> zPmtdSPm(_ZZzF#K-cDYR>sN~WS;QOUFT*>@m%-EIbwBELj_tnO@xK!BcJd_LLH-fk zN&Y$9MZOO1CjS9mM7{~`A-@F2#Y^6Wcpv$n@CtI<{<{5@PV##Y?;>9ccauL3FCxDT0gYw!y4mGDaP)o?#~8$3Y%1w2UpEj&cN0Ujpb3~wOsg2%}JfH#rb@Oy~O zliUMOlb674 z&AH?M6u6!I47h{*T)30`Lb!{3D%?$e34V{Yh&+IJ4|x#oB@e-Uq{ z{7YO%0_0J|2gz@Rhsf`Ohsl@18_47E82K~sCh`~I&E&7bhoU6Xc)6 zljJ+P^f+rH{~Gb_j5A6Cy1{gUkk4!Pr?1<8{h%*t?(fEukaB0#Te&d@_+H%tbzOw zloKQGhBuM#fcdbQd=NZNK5QR74qC_uBfgbkrOkN9*livVuA&3)(8`YZ z1bG=eNq!c*jr>3GcJj&a6!{FeK|UAWNgjfy$*+dn9?c#9*TU`O4R8nfO>igqHJDdj zkGgr;_|>xS#xacz}GmUAHSp9y>sL zi2N0l6DEHH-avlYU|mj({7u9+k-rCTCZAuR%ZZbJjQAGvH9P9~R`UDsdvFQzFHlaB z{9AY%`48}R@=fp*`7dyT{4aPXd0(tQ)8sqCZE@Yc%a+(~{A+(kYT z?j|1vFCw4#gMMD;AwL1}Uh>g!A9)$Pg8VFaC3zlxpV3cViTD8dBzTZK01uJRfrrWG z!yCx2hR4XqAE=LC6L~G-o5^p0$H{Mow~#l%TgjW@3GzqbN%CjlZR9V(+sWU6r^w%i z8{{9sJIUMOY4UY&+he)o|3|o;d<)z`{u|s${tw(m-v3a&KR5YK@FMcv;2!d!a4-2V zxR3lSx883B`3`$%uOvSY@qY5xaD54o7h=Cb@+9IzK`XJG_Ye9=M160l1g^p%Hq&KJrHqUqSvP zypp^H?k9g49w1)^50bBdhscxgFnJrifqV@-M!pu_M4o~-lW%~>$v4AW$h+XJxG&#M{Y_ggeMRa3}eR za2NS0a5s55yomf9xQG0FxR-ni+(&*Xyn?(MUP*o>+)o~c2gt972gz@QhsbY(hsm4Z z4dnO3W8{y(o5-JlHv5AHe;4sd@{izcr$S;D2$)~{^$Y;P~)A`^X=GSCBsmuOxpK?k9g49w2`m9wc7@50NL~Ve*gQ4dkD}W8`1Lo5;U~ zHF8u8(_?d`Ea2`7ZEw^1<*F`B1n)z7M>Ue1CYF{9w54 zncVT8JOpX-k%)JY9|d=k9|w1ld*N)79wWaS-bCIEZzhk!Pm;e4 zZzKNz-cJ58JVo9PH^@`)PVx?Tn!FQkYsnq|X}F#IU$}$3f05qaN#2#2|H*ekyqkPi zcoF#(xKHpg?q?Ta4-2xmu`=b+(3K< z`Br!(`7dxk`5*8Axvg05H%Pt%JVZVS9wwi;pDw3?ya4er@?r2M^8Mk>yQ!9C=!7wUR@$)7;HkNnIXbbJN*LAZafB!3R&_{m>^2gsMh zgXF8=A@U?VO#TtPf&4RgjC?J;iTpcwGx?A3IQb@c3;ECRR`Rj42p`CxdOd??)ZeD3()2W}@XggeL&hC9iN;4bo`;coJG zFrJIZk4L25%$365dXJ4Ln6&4>!nTJL}`#Np9eIPMUl%%CWteJN|Em+sW^QJIL>a zJINn}yT~7dyUCx07m>dN_mIB^_mZ!K`^evgSCBuA|Nq2F@;1c#$v=k&$iIaL$$x-{ z$lbWF50n3d_y+Q=@EG|L%o|PQzazex{BL-iyx&oJ9JG*kV*Ip{4@7)|d{=mq+zD?Z z9}aIPKLDO0KLl=&7r{HpkAkPkkA>S_${qiua69=aa0mIBa3}e>a2NSSa5wohcoF&3 z%=}M26Y*a1%iuop5WIr?8h9o7^>9D=P4EEu9q=IeJ@63u!T5J3!{iSkzJYvie0~=r ze**DMKfqxAmVTzgm%^m;GA>K~@ zD%?T767D2_2ks*O815$j0$xP^HQYn~J={y)0r!z_g;$XO2CpRl3+^Ysbtm0l0rEaa zYY&p|2oI5u8KUFE9r^wHS8|3G~JIODEr^%Npc$j|KmFvF;yG=A{A`pHB(H>r$S;D2$)~{^$Y;P~Oui2P9$lQg zvlRcH*c-Z>9c(t+1o@NsX|ecT8I;#ni=S(8=L%hpD%I)PbudSWCRi z5^wc3OMJN{zTMEf9HEQ@?y&eUi#sj8kHuXUA8v8C#a$LJviQCh_gH*Ci+e4;zr}qP zFSK}t#SgG}rNs}lxZmOjSv+8Ix5a}NKiJ|Siyva~u*DCxc!R|cvv|znBP`xz@sSp9 zw)o)|k6XOR;w=_0ws@<>kFa>c;zwFMY4M{h-e&Pp7H_xs(H2ix{1}TH7WY`Z)8fZk zJZudw(j7O%AUsTTKJ+-LEC#mg)nwD@Tj4_W+li-#>f&f*OgKf~fNi=S!nCX1hK z@n(ykWAXoc`+q&~e?9R3zaID{f1f{nwVUj|#=Ljd^|ATt6V-jY+kCZe+EGxn zG@Din=&p{NvuU+(?&?^SO{4bxh8t)dIPzSZauG0Q&S}j(*A5(El8#P*|b`SO8fuGwBKc>zssi8!c*FxO{)c`v_G3x3r%T% zHmw$z(*A5(Ei9$|*|b_vO8c{EwUCtdXVYo{Decdu)xuHQpG~U;qqIMpRtrUGe>SZa zh|>OSS}hEv{n@ly5K8;AX|)iP_Wzw}zghsw@z18!!cW?tO{)c;v_G3x3q5InHmw$T z(*A5(E$pQI*|b{FN&B;DwUCqcXVYo{C+*Ls)xu5MpG~U;o3uZhRtq(0e>SZaXwv>{ zS}n|^{n@lykV*TqX|)iO_WzY>zt>EEmrbjMm$W~dRtqj^e>SZaTGIY(S}m}o{n_+b zGktS5trl9+{%l$;u%!Ljv|3n6`?G1appy1y(`q3l?a!vw0!rGSO_!VLeY0t`kdpRi z(lXmc*Q(i0>Z#_p?WF4|fAbf)@#`u54W-vm`U6V8Md@Xfev#5oQTky@-%IJ+DIKMB zJ*BUvbPc6vQM!uK7gBlxrN>cvETu~*J&MvJD188>hf%tK(t{|SN9lh)&pp1sQF=3_ z*Hii%O0S{x2b6w`(#t6QBBh_A^uv_Cm(sUWI!ft!N?%Rs8cNTibQPs9r1S(zkE8Th zN|#W26s1Q{`T$A~qjUkK2T?kY(*LZX<4@_$lwMEiZz#Qn(jQRzElMw=^ox{!iqa2L z`d&)kPU$G6>#gb1^GeSxolrV{!a1^1bowIIh4$L+KKVEPE7NB5)PJLMx_yyfJ~lqy zTpm4O)895*d9*~m_*SI)`&O*)?~9Jv!Qt!kn=jJ8aN}wD!^5(ftu(x_Pq1c|y!5rz zO!pnTF~6={mXW^3s~oSYc!=ee-(CUZ1hD-{8G)* z*QI2e@u@6Qe2rrYWhLw}cK6$C8y#kHZ1E3D`isb_*f}PWns{O91*I33UQ{}1l`lHt zFIilg_sqV?7GoDFT3+8!3r0h&ABq!isM3AWQLpXV$7X!^hazJSx!~6)^6MK^*l~C2 z#DkKMyh~*nnEhL&4>DWs#3B@{;oL?tFNTx6**dh)UC*l-6@QhRd|(ht}x?A%~dZ4|Lco%`c`Z?$+sfi z&)4T|-^c$}50L`$P=LKVHQl_9XSP?@^Ki*H+16Hb=mcMF$pfFLffZR_y|b^eWSb<6 zKYs7-Hl|5k-_AQg;`&@D+uE$#cU&%+nQ=URxmTJYr$*#2^H3Y-%P}sCyeZYsuRBYX z9UXN~m)gZTi)? zsy^M`e?cA&So4a#rYcN zdCD3k!xvd;{HAtm7FF|NxjqHuh{*cPn0UR-Ru&l}VbZHNZ+ty7PGmPOsase6VTn@7 zc6VGP2W@)HEML`ORioOje_=0HERZd&}O_gf1+N)ghwx*vME1lMzUl$fPYIS_wJQWljl{Z+vYn&x#^5*=yy+q0z zt32cCf2jVcJhH)<`x^$q*QMbT3iq#BqjvX=9C$g7@02xOC?$QBU#G@ZS?!yBGX1Yk zqgEX>O}&3VWV6XgT6kXZHkI5g$;>D!i@a@oBWaoQ%cRyv=&eSUN4m}NCA-;AT@H>D zm&=7}*hexhRa=^+&objk54wiT{)-dpDqy(;Wa6Tu)^1Vz-fBE1`_vOa^~b8zD`cd| z&fZduj>>y;X!wpF?aYtPmP5bs$^7A7^V-rXU1ZBCT0A;xs!X@4+_SRf=GWE8U{+-h zGt17etCF-Te}trcjs46cqMnD8H~JmYYI_ezxK7%Z>*H6>Nf)Q8-=};Wa}rxP3kvHdA5G}lH&UPC3{jW`){PD zzkZkZsNa$^Qny<0{0qQY~ zD#R%#g*wH9YO0C+Wq20JYvV+pId8~098jlzwB+`UvZxxKIbYN<+-fYVF+=6jAaP!a zGaAi}k2f!q-PKNgJ=py^b&krlUM?Ri4a3|>Pk(#sfZyt+oaiWz>;gfnbdVg@?rH?J z>7c!Og6=beMmy!$FLX}N-}plN(JpJi`k&05=zt{>&^X#H+wXzx zKhTG_OKrZ;-2AE{bDG^z&NN-yQ>7x9A&x6=49Xe0t-4qrx3b!W9vdpGj@8~Ov~j)% zt=e2|v*|-yvqp`=k{Pn_YB7hYzTT=%bSQZh zolwOYk7tT8Tyi#Tv^ck zjTYFYk{#!(`urr&vtCf^$=dF|)dOm~^Q-%=ikZ*SqXl0Z(x&LBE%Jg}0OOO*sum^h zy(3G^x225Ld3JfLe$1!sI4>;c+oDZLm8niQUu3*GBH44UuCP_I)M+QD_)zJs)nf|P zLuHBnr93*yFGDzco~<)HGKSRTrnXTRNuN3o^mMveo&C7H-zC}Q5xI=6HVzb)x5bjz zztC`IQZi-qV`+sY%W&HFav9PBtH6}xwRL`k(Wae1v_FIOi`d1ue z)DH12dQ)|pWu&4XcqbRAo!r00oa^ps98##pm0O>k$C|qvuZOi;Hnfb|VX}pJU^Zr&TDc`J5e*FN6 z%B|DG8})w8Q;q5rF$b3H!mQYGvrYwOJ=JbE$~#q)`uXNrP;#W)(ipqz9o;xZtdDeC zd32gApygwr(#VR^3FXnesH|mP2}|9J6R)a4x?H_i6V3(FIpvY>&08Hcp^Vz;N2&O> zpH%fqw!ST8|0LC^JikM=LGGL6_?d+p&r8U-NQYUd6eRojS=JFfh09%}jmuuOUdp~( zmwl@$`$j3-{2anE|41V<$EZB==koqiQDeT8)G=44#aQOV=vXZmLSv+CKfUMVmHO%P ztt_&pbbMLl?+L!hZ|C?HZStt$G-~`?eQY@=o%%PgixYCr)juqIk;bnZAeDM$wmO|w znd^sdl*JHJ7vHIXP#Ifzn2~fIreW>b5ug*cuCNk-w$G zeUa~sGw(H@AV_4OHhph?RK}bvo}2O)t1tgXy%*P}`{iGMrM#C3Z&DvwMNRF0t*=kp ziRMkTzP^}`L+T1uPgqXBMzzhNH&wUgJ|KxT7VM&GF{aQ_|4IIhPsKXUGLoN5k7uQd0&{Q6VXUZMq`$Of{O zlp!ixoTJYAXhEUuPs%Ejtc}mf_)znvU7b16Jcm@a<7|{8&nQ+&2T4_R31~rHxw`tV zULjH4W;GpBv|Cj(TJRs0CD(-Sd#bs7gIUd&r6}V$8R!4G$h;er{Wg|-zOs)^CdwOc zkYOxapDtTxEBlC=4x$C;=@OSni5-2-irE_T?vw5Qw_bHruOU*enChfx!BWZUn2L5u zxk7@{|kekzopOm{4n_vnuD{4q({>0WxL zzv=?N`%Vfx)v|t({huXS+5Nw+&i-gYl@8xYio^A^^z|mGva#St$!{#FkwzOq>F17% z)Omi2ywmHcoa?E+0Ol@V>k8xMkTEZ%|H{B9i~K%TPPpiZXH`9-BMy-&_DmV-j5Ds* zC%4*ArPGqed@gI9EmEBiKkQ@Em$S$!<5+32oRC+WOP9=4C2I|RwRz7R01p|O4N|TdtY%J^@uj%gpJkCRb(*+>u$U)y&$u)^jhWwn6}>RmkU=& zzf?*E#xN4b)zjO@C{U*kz?+dSjw3snzZZ9WjnGu%35-umPjd+L-^$K+@^q_M z=A&`yo+Uc!s&9Jc@~-d9dtjqZJ>z*>6 z)@3}Z%6LG^ux_Z^kvab6c=0t}uQqRQ z$&t6i)(H9{w>C>iBrh!qqxO5LQEka8b&sQNE!P>(%9^+=@}j zyXQxDb-tV=)dM?9Wc--t(f^#UD*tSC(y9k3vW&k-j@(x@yKWq*kE@JY^$?_bxG(ap zs^hORmC86Y)V(2|3!3wQN*5<4s!1U%ovr2tOO2+R-^Y?}FHfp&-%SmUK^-1h?Ps1} zTBFrCF~^7b>7FcqrDpP>SBXP5whWXpg|bI=n`e%-(Pfbz%ObzY%xcce<&mG|Jos1L z1e_(^Dpjsg*T2=~1TLAG>3fWHwsE+Q*x&qM&2sg*LmDCtbLh|2bUPbQD9p^>G6wXu z@_zI1oKR@&t_GJx7|Z0%#ujy-q2ndA=OKhKN8-oHGX}|%b;)sSW#-8rW0(O_ws}#I zrK91?6#Ir67^>LmQf$Xja_o)2CC}2qX8)>5PI&(IOuNiFXZzvKb>=A$P`5;^_W!VyAZwB^x-GYOk6FBQ!!wzVIadnos8Ic}N%H=uKh7Su-$F%=_iB$S_{dw0)|yePf;R zw`5q`tJjmVEZq2#e6*@Q5|8|)p0zF7MwDHsn)Ol|{?ObOplkX%+@=N1~OVwmmvhWLek>`3fGt{d* z;(Ob;(yv#cQ+nuPA+smcw7WK#4Lws_O)kI7B0xQrmy#!|yVVU}Nq zcVoG{svX`jUOl$VwzPitZs}FC{nB@3Q{VLU$@}U>8O&!$@#@3uVzoq7{b!jZ9WgMR%7YEgwOZM}`y{?_VUPs%JBD8yi`jU$=|2q&yN#^1oDFhZ7K|lX;$PGy7C#kXh0S6=4ifJ=<(N zB|Ea5PV)Ie=9?w5>d;FRU*m}DpU-JRoq1_jE0xXFrMd0LibHI?eE`hKn)b8{IL+1i-5 zNVc&oq@sB~xmz}$qf|%}9&A@lunhjQKam4pqAP#2s(i6o`Kx{9kxgp0&NE{2>6$uw z)1S+rJV3Q|i&V&R_$=e|P<2WC)x0T*mVETAUf>x|t0HUPl&M2LU)?Gzv5uXk(&ln% zm1RAv7DSOh!0GA;mV6_{sShz< zo~lNgIeWi;zB%ZOhkEESljQT>N)@fXNK$=w(8S**0VBT4pU!OkX3G>Pj)v%o?S}CWkQ^E1sI?4fobr{+YAuh-36Yp-ph+&Ig^ zf4lRgnnN?|VZFaiQkUuZbMkgkkEFZ%se?7@e7V1uWA<8$jK9@+&GMpt@(<2CSl+77 z`sD3Mc`Gl+=ohbkDbp`!>z9f0vN~^u{H=bbNAjl2+qd&3D=?OSCXaTy#btj-=>6^d zvYd*Kh!=liexTS|G_rVPkqU_vq$RKT6JI26gS?SS?QGr|$frMf1MzNpq+o!&eLJtO zg8W_cK9ERx`COISEMrVI{`nQzSY4drQfgPeBQLHVt&H|dW@E``DpQ6{p$tBicbm#P zNawX8&yKvX%G*ijEkWL<^YnHzRo>P~W|?8+wIQ!k<$bF2rXlYIA=JxbJO7s={E{5*>vsr(e}Ct3V3m_N??TGzA#X5ED&0@w9d2cSr( znR?2cxV`zdbi7gH&s+=g>mo8gg-afILK=`?e}S1OklvBR;by|Frk4ErzGmVtomeBw zvT(^3xh_ji+)V5z7cxm)B?;-EuVwkIIsspmczBv#h{!Q|Ml*%|Qw}8K2+#j z$x`VQ9et{fUb-<`=K_fim)t1j*{UOQD%7jpMn|2f%QLo3lxO9$Wd$bpyCtRBa=NFO zZSQHM$)xq;d*-CI?opZH)_y3f=dMhB z)O=NXp7i>AvX#F1k#)0FZ=Id7DM1;(j5M7@6aAB))zz2HU3wySece1VQrQjy%S?QrUvTI`# z0*~qmR9}42ftN^x1cp@LDg^G-6S#9Wuv!ORsRHjt;P;ZNm(fy~ag@|FvPv~ahP6yP z=2t$d3+=DiQOLnvhF`a)Aud!FUFa~@z0=djx2odIm3fzZ+#z3&F_uavz9PLVd+Ad3 zl}qP7DB%IAq*|QcCZ=o!DQ;nZUyXB)i^L$jLyQPfR)V=G*6*1}F%j7AD6o2lUJ>&O4RS$LK%cIqD zj2lY|WPj@O`NO56hF$h64;0mCxI@y?mU8)>5T_9ompkx>LVX5h|B0! z-CAOX9{?w*DTgd_P#-FB;Dv`b>#74}sbHddQT^0az#b9Y?6l zXu*F!Gh5NIs;3qHB(>tqhb*l)*&NemD}J@M;&D_(eI983&af2zv=qK^sq~%MZN`Sx zsslC{>*TfLN{KVpyo>q7JijN%CZEbC<{>N{FTWPEex;n91w=msZuLz4_P8Q*D)B&{2Wcn1SZ+BTSMJut7{s3rS%$ zb5xq4qpmf1tMM#YeWD}L6Tx?bKhgXcxE4HBSe_F!j@nad*jUittY==KM9DW+3%0H7 zr@mRCwuufJs$TNPu4o+e`BL>PWPN#b&_J=}Ht8XGEK@06D#xH+ewk#@?=o8DVg5Vn z0mv&VzvAr1ya#17b3Lsdc&PrAM;Vxs<jw?N{g4;(6wH>CMKc%mF=5wlnrHd$i_AeLksQfszs*P?e32 znwyY-`EQ!NGDoUmTq3oTr)=iJ%d2{0j1(b(AHC5tGn}I1Pm*{%#XCy2+L*-iCAn`@ zdzWT-RrQVECEVP%l(v(UW=_YuNqKUUu}&?$<;Un+W!7Qi{p!%k^Q!MC9+&CQ z+oIPyW%*EY(Ec{t{5jE6|E^8D=U*H>Prlh*`)8l|XUo&1+Y+_i{q)BpCq}RDlt*_Z z`3FgKarDmAv(k4mHf@XkG->}uTZ?K`l@@iYbpD-*+C;ye=NslIwS4}$z30br22NWk z-vpDdv5vZYpL#W$dL=Dfs$S&#Sv}=Ry~MXJSJ?%gYiQ(IDHM?{yl9a4x&EF3SsRx=VSy{;_+N9q9dW!z;+dBQ-w}Mk;OZ;|_`uro$ zOm9_RNIhR~^^%&9&(QB5SEuO|d9UWpd&8b-HBI4AA6v~W@_G6O^%U|H$()^hR)Z2z*z7wXH_>I*2Z%JoT254*L= zAQ>SesWkGIRBNPsM?pPqw|>$3Pt`y2Me8vUBlCDpW}mRAbenu_X-uR`-$2~4LX9;M z^Aj%XllKMYD3lzdOLiq+C#oJ~1{$}@G_dhT>2JxC@AEt)C6phVUXWk9Ox17W+U$Nx zc9q7dkK?Rg7Ju<0seDk%mh1a7stiZAE(1{)^#yRbn!loo)8Du0T&ZiRo=)nor7lG6 z9L9L_3{+ox`cvL@RLVw1Omg-5*jyM#{!x$rYB#y0!>@j9`yGCaeBnfO_~B)d&&who z$v0H;>z-BJMV()w>fa*uF+U`zKG^&kV{YfG3zc-fOXiNAhoHK@vLATtlj!MpU&Q*! zVt=$%9}#>Q*-vU>{FFIXhF{vJj>u?zMEa-djpTH!H-CvpA4`0obE1@H9$mHF|3llq zz(-wN|NnRv5(tXEgA$DvYrt4RQ4&mZfPz8*CBNru-tWCcv7gW9@%{gONOs z3_}O?Xdn?llNdaM6;FZF@CjIzuY!ckyM$q_Rv5>eFjO*F&q8SIzPJDEFum$WVf9T0v@}S zyB`7ht2Y$d0PCvVoq`3{Rst^GMaA^xV}+4b(=dy1;Hu5Mvs23s?TEuP8_kQvYow+r zUutjymnU;7IJNDu?E6yj$-$TXS#xF7Iznf}%?Gl+Enz&ZxN#cAlG+D2iz+q5eHk{( zs~C5Dp%Nyu+!_1rEeE9w%;6dGFwcz&YO#E+6H2Si@0BY3D4Ql~pj)fW#}Fs;#h#}T z>bpC|4t3^48Oz3X#Jx)#Gs;W)acWn00BuQ;T76`RPn2cmu1wAOuy;|O#vo6zxpr@P zx+>4*L7u+0+lZ=&f5K#mmUL!lCeBx zv9P1jJk7L(Pc&0;2s1>7l^w7#FPC0K^&s}fm9g5!N^`5V7JwftG3RB20#B4QQgie-!0Y^JPT_@;XT138W*N9)@Jq6)l{ z%S_b8M483e67K_LhxC^r81w6F`ZChZ2x`xhhMDzr&bRZV-+n`p1}v>yrc39TV%5H^ z7v6mW;ATh_rT-%9*5tjPnR%_sAXeJfk}@7Xx6!n;+X2?!rvkV-dJ{Q~M?)uQ*l0Fd zo%`!As%U)!`;fUC+EvLaTm)B`KMCQinLZb0?f%oYA%42At2FxQP2s>xcV`_{NVX57iN?=921v=rEW=eKGOs)n6bKoaxJ?x8kE>w9K44g3D4 z7jY&fEGJ8Agpj+J{0{$(wmb_b8!R{&W2G|F6_7&-&*x@(KgScbrIM;(VvQw`6KXFTixc|c@tyeub1GcT5pfpZ87QtayW?sv0l}BTa^Cw^9tTmFVw8Cvzvgy; z4%~N;P%Y+TCSB0qxEYEGFa8I_>85^N@f)(r=q}KJWel)r3W|KA@FPLt-k^?bH9@vM z-^jMr_1idsHpq5(kZt#Xj-dQI$d&+ikqPWfm5xUcBCVmG<1Hz#H&0=MVseY7Dmp)1 zKtA(lA^?qQUwXWtpx<)yCu;S{!@ub!9@M&tuHoRGDm|V`AqOg5YbjuCMPHo`Euat9 zd-G7zgPBy_^44>3@}|Gg)H>VLTFVKDuGD~^C^r5#k}StIS1P}o>fhOX zNRN@uP9tY8xL-$|P*Tf-1n8z(H1}sEo2Vm^ZW`GXZ|MD|D z519oS)@CzUaeJ*YSaFL#1QOLeDiz#YmOhaW{KZqHM@mkn227+U0Tr2(pAc#XAO91` z=jZ^<#o!BnI})sFX?U?DP*Bu7qy8}lrTikH+|Y8f55aK173t%t zZQ?xDcOSEhm`Xa~zjt9xv0`q36^IgZt|g)MX7yvX5{bF0b!Hh~E?644NDX@LXpI!* zyQJSTD?q}Y^cd>r9=M6L01;}r^EC5041Ep0%e^8KcF;LUum$NsL+in71kdttVhi5o z?01rvJhr1`^s)Se&70}q+ZLvc;b*PfJx(w&+$E9F3e%g9aK9E#xpA9b<5a{Qb1FKe=?Nb`Jh;q zkv=BZLODS@ICebxEwiIl>wUz?WbOO@_%t6EjL!!sFG%nqFKi047GuP^v7qT zd5OH4@gbw7X$bLAo7*3f%s8C{ECTP2N3(=Dn_w_Lj05|)*%8|RPXY(h%MDI25E*)| z%T;r#t!72~lO4W1+wTfWr!U>EHB1eHt@L9U5I$W0$3VWB(T@O2a`3s0FnyGPN!P;) z89Q;Rl%|ybubKRG{0DxC!&Tx?N|>uqP?_}}Qq>Ukc619Xew)qiV}0WIAQxqbBJ*qs zod4vaUsg0!e$z2v(f4Z}Y3DyRX6L_V^P7id+_ZCJ|E%`}S2?zr33OYeZf8IICz{QB z04A=vm@*>cbNN;M{rcoo$n?GNcYqhqS{etmJeZUFr>jVE@F@-S^8}4pa%OO#@*eF^ zP}x@x(fg|h+73PPkUH?3X|u|Wb>R5Azu)_ha#5cUMeom|we;7Tb9{RQw5;OTzw+8& zLhZEwRD$-Oq=OmFH~lV5V(N+U?OBL9&Pi}f1;aa>imi(|b=~=g4o*WH05RA4RbHto zFB8t>)N>&mq~6@>Qr2rm9vzjcIWp1K)tNJf$(vg1W%$lr_mJgJm7052rc^l5wx0VC zD58558s_+A%OD`@<05r#U!gIfi!$?%k!SfYS+r}m-77BjcjQ(746MTzs<_;W%uQzp z%{h%{+6D$(zQPCp94Log|M2(rQ-1J+{g})A7}@fVAx4IQdr{%mMZBfXy-ORGISu!O z6peCHSOMI8Xywx`4aVo=HgkgX1Qwvuw~Eb&B*~2MW;oGa#C==eP#==l_4w+GB~{P%Y@C$i}KkJ1-IHo5eL z`RR`-{ns7RoAT4|Q2H(3oqnCt$972Xln-B2>4Q3???Jv~;p?yTULDdqz}H>rUs;2S z^dXVfHTm#;3dg12&P!*&+dc}$-)W3wkVv`NzJ2+p4@eeUJ;vPmN6RmBSaF%#Aar{- zU539d&u^ze?Zooh;hu~9^edGEa#BuXOn+f)_N$crGMn9pH)kJ@crQqd zyy~B@;QS&a-oa#0Mg%Sid%9qoW>}m#8|bf2wY2e-*i+~<{*H*Of?0Ysc%Z+#euLQm z=nv}1;CF9jpx*jZ;G`(;;}M+iM{R01cmEklj}BEVOTjU$?tV2BC-!*}?;Q}~ChuqR zC@?pW$*!KZm{(R2o=}FW9ZO@J<;ck|?5XMqYIeq+x}Jpu zDz^HYLs({?T^;To$HS;}Fmjsi97A_};_Kn}X&?2eh-SiEUV6OKIG^ST$|C(2L4|@| zqIJ;19(*zI_IwB4I8HxQPW>s@pGy6y(Vvm}GhTltTVn#HteqhEeIWS#TkyLy_+1_R zZU}xq3w{egvibP;zQt4aZ1+AI2ae|2!V>)ZU$ZFjWPde>tdkrsxhCeBwZab z&HkNUV3S?@cXYZq58g;>2C6mtH$wq2!+w3mew@C9YsH1d46L?fa-@9G@9o$he}6&2 z(B{G}1*X*R;Qs1hH##V0{b?UDw7qz#r>g0VmVl*ngvjtuhloCRm}h<`a!gM{Vr2Dz z5EKJpef+B&{^pYncKPegRR1W@*tb2bT$7VzyE&*rOOoQf6wJqVxZUj@-?{piLzkYbnm7XBkL4LS||g)JKW z992%`d-1LMLTcDzP>pVD3Ap?>R3Ay9;fk&vr*g~XkrdX$)_xY_>s_6Qy@DhSf~wTk zjGMY!JRh*WSba@8LVOmc9u_9wgIRYF38ohUnC9{=;?Q~<9dRLZIa~z8xha-ui{u~( zrQsJXMe$*DWk^B|A88vN@aS5hXrtNOC)aIV5vnG3q1xH3e4BAvIHU%jhvbv>XEVwM z<)n@3er;i;)oOw*=9OHMy}!FXF{q-T#<{1(R3Du!w1h(JW|dH9(ch`lb?TO@&7bEA z-*4;PXoi+&K#N(e`NZD>o;|a@++6(|!YFmeOJ!y*vsf;Kyjx6vQI?Ja5-l(vLo!$c z{SlNAyx+6G8_l+Zm?^^0X%^qV@11GUY3NIW0NaEOOUNkWo6=8r0?($++PL7cGwfPG z3cNXq!fB9%1&*XM9K#kR0M{jA2RPTfu>EJ1ml!inoDWN+SLHql#G#A%I< zA&DBI?SeaVFW4HfY zz1@s~{!K8{VOCv91bX0#`vu_OXQspP3mD3Xw*h~Q(V&x26RD<(LZtD5@LbSG)rp#s zePdz2b_FI$)VDNLAcqU~;UB?y{1lWR=0CFV7oE<+#wr}jiW_p>FQ^FPYX(+%Y<+A7 z`mj_9mj1xfdPM&GId~^ai6w>=ggJwZjQ-p?w2~|uF-?km{2eOXp9<-3AVAH=U)j!W zAcI*aNbqmadSnabGk&S!)Y3gNEw>ciO``rYPxu8NQo%n^kW9?qLRohHj!$9k7FO|z zT5j!meL(>7Y|Fhlc{w?N|2@oFGi4>(qCuh z!<)gj+0Lggzct=yOdM7|ww;W&$JDr#Fr&KpmsF9%!+L$D1}w;AB*%X`=6J@>@mOAt zM~PZwM?5v43-D%i-=Fzek02_8=UE*p8<)P3@7&P&^T(#>i2Y;{{2*K z$!a&TvvceyH_;U0iH5w?Y44||JWIBs=_O>tw|Zyi_*=gJb85=(Y=T3=Bdtra>$z|G zOZxX?_(!0Fn{EzrlV>7_PwIqp3e}(9XLzcAr})7U%%~h)|JwChtJ)*gE2o^}!^>{u zrr5rbWBOO11<1U{VzT(#dYa5KuJ@+fZ?#*!aw?#l&ygjea?xc$Ve9t-eLFmtcDP3h z+}Yf5ay#?u3TWm-iP(Oh;DdPU2}Fekjh%K#!dx-v!0AWe2_BhHn23hnn)xAzA9YU zoh~+Q*yqTCubhHzt5biIL-?XXA{TrH^@pvCI4^CqjR?KO;cJYQytvRMvGI(=OZDNo zvqIr|6N-P_?Xzg;`Bo>AIybbS8)X;5qXqMXuh0uPg{NPjBQ|lrOk(T%_FJ;cW^P?$ zzXgr|z07_~+4sMn)VCjeD9pt+kz;zXyD>BrZmBCPA=e1+0)`Vgxd4osGv zm^J+Xdb<$&x^HXt-^ZA}r@d=I!SqA@c!9eB2~U4*>3t<;$IWTEK5dhNC7Ja|=GRT6$>(O{;X6x5b}N_$;?d+$Tt%Z@{EOY>FjiGd<6}^z3+mnK z7pJm&e={sN>J*4}_0%z3Xif4EclIv&a>n#A><}Hm{wxyH(q? zQSXRoXYJ)~5GT@dfqUAplIg$05Ics;1bk=vdRi-pgucqf)D{#xLkqLi+26IUv35A_ z@;tw9P&fCD3#&IkeT&!@R>ZV{rt*SFSEY2pKi-gQ2}#>hJfRX)auLQp#T0o zAN~~qzMpwCc{Nv##%~fv&dCYIh%Da{F(<&jv6Iam_ozvnAX@jc_;k72tYJ;;FlYXt z&d&T;5!2eP!{Cnk_|tiKh+saTzU{H^%i4SAFEl~M)@O3Q*ZOMEk33A} zX%Bh#tIPY$+aZxzCVA3;l4Zo$-X}PUxAw}=)1a=?DUU7gL-FiB=zbeWYT zGeTOVLv6c9u!Y*mo(jB;l;(myf{Z=XU$EtbHc|gr0dU5TY`rCi-$7$zN6hUEE+hdZ zDc#g%0`lTPhdaM$8q^27T*J%px0*YTtyN`i>Sn}8Tc7EN^SA4?bHk~cwn2wZkN5(U zCxJFtfmy=}yKQXz1Xb8PG&EL~`dErT!~*T~K9*$(?JozD{O1`sVrJD%X*x_eZp$)A zr`^QwMibEt1OP?$W~*SFsJ&0RhAg@7De1}%-xJg29lmc!mvs1!<@+yE-xcZ45Dgi6 z20Yz+@lF4Je}nWmG|j*-;PtQ-bm2h5m=S`4!p&WHvVsG17!!froRjIrf5$-{!OfE} z8Y;hf$W2FEKK&_(NR4NWys^Es{W=}HVg_Cs>*2Q}oj?6E0mVvQ_qfl}vzp0$t6Ir|`zAAU_+6m`!xs%iIZvr-I&JseXWe+|o>*|KR*`Ha| zt)l0($zgrDwqRJL6yHip6-=!4u7vaWEYqjck1K)2hc`@gj$7*dq=D&cn{(@ay`a&F zPT$oNolz(O$Cc{anKO}8YF@WB>>T|j(aW8m48x8bTr@#iED<>Y4{7}ExOgY z?`Imnm)PclF>a!+1gTP27DBAYFG=4;r~G*!F;fz2i+jj+H__bLejTz7jj)qhs~trl zNbiX?7xb@9jzeh}8LE?$Y;#SBp&r?(xfA!3RaCg4ae6K#cB*Bujpq9ZM-@Ftol4Fu z&~P2->TQ}3_gUUaWQg_pxRQt#_fF$1N;YH&B)khoygHn5aS;#6V z-|9cP6Ssa>XZFif+CaAEf}4{UR9JLy?xisVaRnW48jGRW^ay6lpnkoi#5{#7@n8vg z_NZ?Ix9Z!e)by>sy_U-MO}LcPh^WU+tb;P&HMg_(XmR>A0;{>;)Y@cS1xF!ch2XQB zUbC_G~ok9B1r zHT@;y74Ur5=1%+QD{mA*3e>3@_}{hdHvQlO$7d`cX29PmxdM zmS>)U^b4?9R!2ot~-TU(`^CR#JgGti(@ty@C&P_nvdRLokBpl{hX9Z#HKr zNtjO0q-bvbWdQaOQTT-HG>SnjNj9#*B|KSI=B6f#QOxo$106@U)VruB|)eNA21j($4DESj04=L|V-gPkq(R%%)%w(~Nw^jf>eBnR}u3jSaV zG+UDZfK?EP2AuCFBUxD@N1zL2yEHONiI#6}F zjMSI2QUBej*h|cY%zf>puUyGt;ifFTqQkbAK1E!h;=iQXk>*drre~FWeY5&m<~qYx zn>z)fGO%%4$Q&}LqP_Gs3a77!Y)!o=L?UawXw6=_`UQ@!I#3ML$6fCg*4nY_rOH&l z5xc5!mD7+SXL3lHrs&x($m+X&MW?vK>PNCK)}_6)g4*5W1uSJI46OC8h4t6OPIHsP z{Y!Qw2o86>LtO7H_5?2}md=x%!|SOVU7$l8V>8ZQZMxnVv`f1@X?;7#Ke`KTE?gd< zV`*}z58OxXh+Y3py1?$?ujgc6Vz3^^;neM1^jm)NPY`GPxlz8SlC;RN5P{k7LRPW` z{>s&#JyZL2dr(98Y4HyaFt^X;O%8_g64}ghz(K#ZJ>mFi%Dc&~qK*?;q|*JO&#nLn z@H56et>~W1345g6$0iTDT`lneo!((kth8ke+`PbrFfNj zll-rD{IBDbI}ZWDd2jVUNhj=Wu9m*McQ`zOwDgv3UlC&6k(?>{A9KuqAk1w1p~PDi zF4A85Zwr21xsZ{(psfC5Y+NK;y4%0K^f5n~Eh2CQ^OfGO2sSzH@#!gpM{il{3h`s+ zJ7Z6?blq)aiZurlyJLL`-56YURn}OPQ<>pCz`ssa76V+XAZmR?8_h+ ztYrtGyY&Hqg6Dqm?c%~gc0;7Ug4$z%2T1qd%X2OhUB!gQ?YQ z>l}vts}l>mh6u!;a#z>y?B?8l0jxLZSf^oxe#bZs<47BHv(vDNf|lL`y*dB%vy^g> z!RhBfZ?;dYX6Va@$@RKdOlkDHVKv&+fK9gnSRH`5$?obx;{=8%+;V1_NYoeKt~a8j zb)Ic^QBdkBO1XALC=7J5#qs^nl2CPYp^nx?lJ8VRAA*Yb>Z@v_-prEpAo9#px@LC2 zAsdgKPR5A_Vl^;zWs%u!8|l9@rz9b0I{iYMl`0)s>{5rE*O@P7m()t101MIsYoH((@J&>nhQx zH%W6o$^$d^X?4X;;t@)zxHN#v)tL70)|)dw@yGQiHhGIV)55{CXDvg^iJ}O`Ayq^r zQzs!m3+e}TIyHW&t(fXeX|Ar}2sVVs5H+#qQ@=m9T&2o!q^r}Q{!XJ@hn}sWYBv1a zFDS=z2g$<`5in%CAQusTiZK_XrKMlu+s;!=iZb;TMEbp5wa#6*X_g!z3$S7r9-1)6 z3_5lCKCbg%lXKgH#LBv$NlI2h|AfF?szIO8CYjqgPQO~rJ`IpdbM0Zu9+Pjv7V}0z zxo9X-{hZTK&xoT{6urfU?IPftHT7WBkp15O4WBepPuj|{cu@dz@M6hU!Y%FX(IED$LS{MjuXc8c(C<^jZAz=UFwM&m3}$5p!6@dPmNFkWR8Y z2Ay`Gv)@To&eGW!r}0iHy4GUu)7ivUe_Sk`*_#?fXXBiPjlx#jePb znO&KIyM0x)PgON&mRez)Bq}HAGpH;>MNZ=Tip^3)eDJrZA)d5PJu!3It9OLDRn*9L z`X~(}U|LT2JCTFNIgKyaNY+&mG@jxS-o%pJD3sfNv3N}1PHyu91~>{6LL9BH51Q#T z{`9|;t;v=hPT5Scbv|A+e~LI3--l_~632lej_26WSwJ~U98>o3WWDGytaAB0J*#Ph zL}}hq`8*x+HQgu941_%)dy_cIAA30c3M-@#TH6QHWWCOl2(Xr-nL#k8URtGTtx~n3 zewl!@%-&<{#Cf!S5PD(n1$%PH;$12xE-Bbh+Dms{65J-)xD;GF4YJ!HWi&(NOB&6G zVI5@0_}y4)$rGoKLg#knuRmjp)A*SJvqDchjhZj&XLWkkX?&ZI`cZ;F1B{Jko!#BF zTj(XhinN|27DMp~Qf5)k$nAEf`$)7_lvO254`cn#-649nFx3-_;{{ZA*!5Ri9pDCj zf*EFDo@GYn0+`6nDYf$i!e~J7TR9Egbjn!C8Dx*yprxm6-5!0aUOk2514B?r*NE@! z#VEAzG~OcCoy8yNA>PJxUmNu0e^q<>5I%GKj>iMCv%qOMoaom3%>DJG=2WskAB!E2 zzUx0q_JwS9ruJ6tWdzq{X$@yBi0Nmb+i&TQRcm;}<{uUaOJ7y1s@A0MwmI#$RS?rd zw$ZRXUq9aZ@H{dt;YqWa!zvpmHMKs(wUU@rpp(aX&}jIZb}GyaF$ zjUtrqgTOiQZt?&-*|Meah2%!Y{;K?q+hgLp;JugLM}Xot+eP30 z#K*S;>$v>#P{+SM&KrO04w3!?QGtFeL-8xnlcwl@mtgEYE`ATsi?YE}Bn&-370C~T+S zCn|tX`ulR?q`z;o`n%-b?}>pRpRM7yz4V9+88yvD(s4S@W|dN&wmCQM>+~q*=X{i@ zktGDipizxh!i37%Zdn1XIz7f?fvySmqH26?zJ&^Dsrotglvr76#S~Vj{neP3l!v(< zQylZTJGlAr>w288%+WOHWaNe2H7(swf3?&`hPGg=wj zMY8{nc7TaPE&vn$ruX^(e?SCxEQx2UR>6@$H|-CyaF6i$iKtkS<)^6EoIb_MTH8ML zF{G{O48Pm)5&t|W{$czOQ0Y0Anr(iiTLC{+DjIj>;}4bIh-wt{C!0PYFTJH>x+vaA z-e>ARs$>1%O7Ge+o&HV|h9?A_9%F~WTPf1LNaJ!|4qtilveLy;XeA4P`u}Jc1M1vSk#utWnLh@cD;*AI^0+0R_{WZC4ZE$&}_#7??Dt(sQ6q7 z5sSy=%Jv5p4r)0MrqRM}Z|i-3Pd;Y53BcE?^AoYusIQm0)mxp0MnM8v-Q>wo04<#m z74MQ>=z36A^-kzfeWM#VUSQxlL5cm`7TICYaE4hjHNV+{ACc`ALoa!jk-LH&w-n|p zyiR5nQ!NrBz*&1#6FfSZ@})8JW&pYRQ8$TM}{}*@;`7iK{+Z#ORd%FYloE?DE zJFz=tXKf8zVr{$hbZ=x?9#mt3dH);Z#alg(etX2`pt69W1GAXO@qaLG&oQRC)Le4r zeU35pa!n_6^FIe-ils<#>Zc|gl>Z)D$~h_6rO)92W4_x6|R@1}=$7@KTA zGxL>C>b8d>)%Mbs5m|e8e~kdNuMwb6GF9Y_f|KZ5#7^ZSuE;o0%hnlm7%ucQ7*eLuthQjOFP zh}`u?m-~IG9Fv7t^pscrnQxY-Y>i)*VFnexmFhdo&)iFSDc7|9-Q~YE9;Z+Xl1DiH z#(30!V>~v!`@b8H*PxOA!+4yz@qZYPM(WEA*0=d5EC0^=w!A6t*as2O|4AM{f?^M5 z_9~AzK}cD+GW4D&kKY;oZFp+_AK^LVzrZtYZ}9lnreAQr7M^#|xYS%N0qO~R+ss0= zqhR!Z6rIq@gWc<5LwVP=wFmqZ;Yn8OA~>RYbL?23S(k4e;v8N3FZ`Ra?}%tl;O3&( zYs%_+SQbVXlR5rMgoT^cL~->RBEHR7;a~=9FZdgyj@1DL*q_kCmoB&b^*_Md?f(q# zwjs_Xg7+@AB>x}aE%;x;%PvAbelNz7@J;-lQMIo10MU!Aj26Gq>eg6444);1SOuOl zA7a}PsCYrHi>>u-k+^?hpeAGdjVx~ad>gkKR*T<}5X%3AUrA9P-qnr??Lh%zs|4-a--Pz9EVQV)9VuZR^42{3(YN5t%42{2MPdc} zn2>ExE8lo@^-C;1fgFwx%SbS%;S0Lti(|=8#Go%j*-2zF9Ew%_=JNUv_voBdS#oG! z*_yHC>9ema0tcFIYjZNrY4|O*W%fh&-9Ge?PO)1e9=;(M-27Ey_PP3>D(CF4b*u37 zYon>_L#%5soHJ_Nt)`s?aC5ZPIx?qvo->CrH))tp!+I0vI;-zlS|Dfq^(@kk7SdWP z{Q25k`<4$K8)ex4r%_%gyy`=X!eD~TZo$f4&^rH{^Ov_33s!Isw$&dc4E_!D&it{HK(_~4LxYW*lDz@uK1>uts1@#SbLOs*-Rxt%z~5%E69 zOLK@b|0dkRy|(z9HTCU%;%l0Rg!+)LlQTcuiM*X!m#XeT$H)2(Iy%O4nk}L9kHH9V zW%M6%hSC#lTs=Lci^C{+QK#0Pe!plQPZ4(H>UZuFI}hkKr^DpV(qAS&DP`%Sa`mW` zaMhD2uSp)G^*fJ_rw1J$|A-Ho_;IJS9y3G%vCC83V$*W<3h*6ss+QKzDl5Pa1f;dH z&-%X|(?kD5dZ+)EzI|9(XUtFkt^UIQRv!3@_nI#K#oD*vr=kNP5eT@*^46H;9pNwe z@8v0nuffoAt8Dx71z*p61B0(0!h)A%ubg%oULz>UX)8h=YJZ}- zRX9j5A_;mMS80ik1l*lUub3@a)pup!?1YLp>UsX*>~z_GaCqA95}Q71nN~t!=k68h z7`0gXYCrPiu(ohA_SyC$kL&Qwc=-0x%uRCIaVkp=D?3tZexj`;et9%`V|hS17vNQ( zBZoW8(yJt#?G2s(BFN_9ba!}a)R6^|>er?hM?(f1=(Hc`q$he4F3MZX6G$pCgqCAj zAzsgrq9^41py6mVfh}e{HfBv8A7qHekvYBC47B(s#5Q!ts;vDuZ#uB=iFz+;!Nld^ z{^9m7rM_+-a!9B6{%-Qe)*qwDe5Apk$xUl=vrp{A@a!uq%H){C<>o;Te*F>|?K16s zIwb3y@421+2P<>IO`3gbFgy|Vg71A9IMw^hApYRs`t=M}psf1o5+P_1m|<8U4-5X9n0DakL~AzFrJS9tw4Ky}k95?EI(v>4V9e zXJ5_pv6=np$`FeP-2#H2VcrH&Lxn7H+I7UsY&|9@IXWUpxUKR_my739MW0WQmWt{7 zg%Mt}-WfOZ>g-|J#=qI@i|y%5l$#~x16S@%_dIG!RhJe(Qf^=b=}Hh z`^6!3ZmViBPw*A^`f-fG{LUuo<`eA%nt6QcAc5|e^zUNgNPSpOz$8j5r z=)R6X)JlQ(*-D7A8!MYD?i~1YljI|UNRzOZGHi~`W)kiAPH?!kti#V0&Q<)#OuSCG z%l|cqA85hc;p62mx%hJ8wd?IC{4AHy)h2*bKV?QPWfOX<1mB){w>FS1AQ9eG;-Kl+ijk)72O1{-VD}a?oe2|KKTG#v zRe}XJT$j|?+CMShBPYd#^VEPf_d^v6EoK--T|oZRONn{N#_TYMUj}cK1^Vp{Q^F_Z zjCs>nzPX`JM4#P2j}PMLt@tBv?Hj%<(8teVk%MN`^S=FvN;z1>Lm{NpgX=!}z2P zK)H_)5G{*xp#^l`WyPzVM(zkEBSpDmj|#V#g^-8(RK&N?`$+KJ!+!5D7YE;;+wXQ0 z3BKR3<=2~4!S^%z7AKplgP8TU#1?Z=@ZH&#*kaQy(>-U#k^~}!pmPcO-HOc=T%V7F zyrojzXgheDC7_LFZ6-Qqd+}ErjlZ~}t#;=$G9+4v^Fh%DU#y&Dz_wa zP_Kr0m!oCX>DX~P29_GRx_(!;X{`x!`Jkd{AKE(B(?(t$3mDV()}Kf#?1rN^a)ak} zk6%4~mSn*WydQ|crRVrJr%&K-(U%a+^o!-JL;NZvDQehpD}OvJ&aTh3R)3TWwK=!exBQrGnV4qN;>R2~HmGR1`IllWzgAu%=4&wzD#kyq zA(`#9I1S~1V@d5`8-PXjw*hvmiv+3VCEeZSGm`khcEb=bAFw9@9p&Uy=j27@ zei>$PGoG-jxsNE_xj2vCMK%1fv(me!rW_INt$=iI(mQ~-Mxt@-Fx92Dn7!g1B-z&t zH=6?wR=F)29+{ZT^3j5+p+e-Cok5U}r0Mb{V)yFj8(wS~^|_3GN0s5lP=C9bLWQl5 z+i%GabA`Tt6JGo^AFa9x$1iGzE56Zx*2`K?Y!am3ZjL9(UY=!+Botn}p2)Noho*Fl zv~;Fb>4$bd{(KCUuy)sR{`|(Uj7!hLnwT^7Wb=36#|7#j{r*h97}h4q$*x8d3zoWu ziZ-I9TH-8pWi65YYYAaStgXmDGSX1-F!=&5?#h-jil)=Brwgv-j4~WD_veL-jdeqF z8gxD%$K@**)c^cG+8#@rsR75v86|FgS?`?FL}GthxUz9o*lSr(f;zEN`BXmDL5~PSz-R;$9x>KF`9`NDTeX`Ey-U3jF$AyCBS0X zX>e@-vN(ePV}T`}6U`=JcYZk$)PE_3$D4mhPZe*}av|+RK6LxuQhk<3CbZ~waDpS} z@$gA4w?g#&<&Ikbor7I^S4VE!m2y2egk+`k$4!cNuSQjH=wUM#skOf>_8903fmQ5< zWhBXspw3N>=IyEvC4TJr5j9lOdXO)Fk>g=*Xtjy;Y6__^5a=L{4;7BCwHE^3`iB4R z#r1spb;q8QbMZ51T4Y^F&&%pIKALB=;z_;m-yLP4X&I!CzBOmbX?xN{Q^BZ4f*Xf&PLKOemgNq zfvRB3+irb>3$dxH@kq zwXgkEgM@*mi1*d5?N8zBDao@|@61G~vOvJT!Z!b%$%zxm#Y`_uREB7pbRARig&HcElm2ky3ry=|&>rR-&g{c&KZ z_4nOa^ffyTw^6e?0vp(lFd@;AN;zcdaC|x!4xsezWuZw%O|2;itSbDiZ@eBiIow+7e71b{agbsqqGw zgI^tyoe%_50~Xx~4UFwKp&%9-DpFZvUt+gb6-+3PNeS^6a9s$;` z&6gvoUu&ORUGIZHiZJ)QYoe$zNad?>;)#npEVT?1p4}#ni9g!QxQ)Bb#?CBOW3LQ7m7P|FD&3ju+oKJt2ieV#dG0!pH zP~*7_t$9mhZv}cRj9JQDLl=Fu@&rp%DnG!MmzEpruJWQUhT+`s;$I0by|VU%zz**; z%B~t-e80LThR=>baKs>CA9BnH&zygRxYW%7^gH`HvJUJ%sy+n4}t7{1L1ai(}kpL3Hl?0a5-yK1O6l-Oz4;I@g9#OPvz|Ye0+hI`^q)CNej75$T)xV>XiawqIu{DLH-CX8xI?z~1rTqIqb4HlwdDpLpYx>v;kSdK7NcH>$pcmzPhCO}XZV ztCe{T)!NKKmhfVkCDLb-k#&Z0JV1_?q5aDvwbXdcmE~7WyXuCRpDkPO!8Uu1)oDe1 zJSS+$&Jy9AYmlOnx@a%{+bH41zorrMI$MU9g-55~l1{Xk815ytL8Ydb6SVzWq=1iv z=p>N93MoLs1EiSp;er3gUd|ix?p~#~7GmEQ7o!$%EQ>j|r+?t;X86#xa`xGf1kE(y zalN8;)?a+nIK2(zFplio=9TdGcjYfaJ0mHyAB8$hx*U-c9EX7a7`H-iRb^;2 zADgLX+MXUxI=FOmxI7i`M#>?!UOk0w3UQ6PF&bQANRT@!`8$^LnLRo?J5{R!Zk41Cug_YL?aeHVP^56g#dQVzbefp7Bv3O=B`vZ98+S}u2l z)#)*z#_4hG$ksoYM`b({9UL<&hsO5(v zqu!dmfb8^xq@8{;;D-c!w}4N5`19CA@XuIo{!_bG_`#>(fA{Ebz#k0v#lY_a&x)XU zWjrF#YXK_*`UY$BBO(AE$pY|uftUBDfO6lgeEcpvR{&>L{v|%0Ui1Am zA`$NuAoRtLyii;u9DTlUMB^IQ`;5J@EQxQ8!-wl)gTQ|Q|6DFL$N5xTI8r1&x)OSi zdapz1dn1%7z|z|3TOAAdu+ZW(m>;#5_#ns)U%*|C_U+ManrDS8i~(Pxy`=^pc!iK} zZUJFd#hrmCH#g32MvuFXx@u*`dd{R6Rx3B<9$v#?>OUUJQSCLk`M|wq>Gfwfhuxy; zO6e+1Zd1BsZnPBr$liZ8eLZT%WXkwj2@|`&#Ao`5AYkl$n`$YF3)Cv>O!B| zmcb+*tEh~ocuRr}EX)#lRMB8xVD`^lJM(d-y$N67=0dcV!lsQSO&iL(wGr2D|L$qp zSlq46JM*hZ^=EPJFJ7_~Jkf4)_`u{8iYzPiR))QmP3e8YO-uJ{TI$q-LhrMxmC4~> zbsk<$=?~8WTzm=0c z+UFXUtmx{k_gcLdYQ0r;-ph5~+OW6HYxY)p&vP?G)ARc_t?Ux+y{T%o_k7c`uKL-r zruW*~s!u|zhjuRP;%$v2mKKKEyd6!?cWQcRzuM4-I`8eOUEYqm-miv3O-(KPRJ~El zvpQ94dT*_*dOx%)w3>TxtPL#TEu&{8vP%|+R(oCf=o$LV8&*i5tTyzfH%#lzUbUnR z>rSY=7Mu(#AylD2PXc{I#v4{fpue*Bk`;X*Ba0X*^flB2n71|784D0AMN@eOwD}Es zFm~-0(8EYKwb<^&?u8_D<$TrBdC&t_oZ{J?XvVJBR2*sAQ0X>p7#QugRPpV>?=Ir| z2I1X=%Y*P&gv)~P*Mv)g@E*d&gkA5zY_r?0PHVXgH!v zq-kkqw`t{pQQeXLnOn7zY;A7m;Wd$_mBns|)zjx((cRU3c~!Kk$*ua_Mh%%Es(KZ|=r#%gq>o2(fag^tR!WmK*k zXi00)B}$d{r9E9VS0nSa+j?Yn{y8UEK^C~S700-!w~AZVM|f)^9Mfk{o6dO8^A3^Q z^!x#IXa7j=O>Wg{;@qZX2M3`YYuw&zqg9{a@px9}LduBnxKq4M=XIN&@8veNe4lHA zM|f|$RXmrvV?^&)BO$~_%OP&n8&O=Q5TCubMyuX;L%XOWl4xTqXCmteOx8jLU1Rh~ zalNkkE^|YlacG>AzYrc5wi6}`6c<&NVW5TWhNw_H4D_(=X>mKOufjDhKCm8_)Dm{N zsF5(&CN)&}k3i&;rpPXzH18dxDGa{kg2i5%_vCc%%pcBKn$;WwK#+V=*z_KC?#mE`f5|mGIfD7|!8Lbv9l5)e-OY%&|gQ%dIRw zUA`jTE78=TDJ?aCU)vDv1+aLm!6g4#>48R@l)9|j-3?=y^Y)9x-t3o1KnDb zc&-z7B*l)Q)vOQP5vN((LF`?%XszeLOyKuZv6*|8^ECpy-qRYf^XInwA#~)M=jYN7 zkrwEA${$(qmq-2oBKYHZZ!kt2a9-lKvupS&+)kPrnB!JRoxK7m`(2fjnt6!hio%{8>9}sSOuei3`O0I05){Thh0U^G^ zUQ@U!eZVj>?0e?i?p^)w?%~9HX9RK4uA%V4!K#&-O8oRL9nw2x(qF_&Yr`38tg{5T zn;Oy?(ZWbJbv|=$v@4f;zV6Jq4EBhITAI6}%I!s;%J@4(JYC0V*TURya0)CX>({AP zqQa=_!;1)VLSWS*Yy<`2XQ{P4yyOhRthoV@8YbZ)Ogbz}ef zS)B*RiigfE>~0@hNDa|!3N5r0MwnG~Ncn!t&I45ECAQ95ZyTVkpI65vXVm6WTW4yksZC9K7FelHH&Bblh@m=t zZScQWM=$xHOVfq}YP&5R!D*##Z`O8u z(`!QG8alUocRJzB8HY&^tup;Xey#inCrmhfC<7VLaUvbA+LYGgcs}1H(!=3Ui%NVJAK+>aC{LNGPRx{BTewTL03-pV}jNPMDon7u}w{KGojx3S5-^%Oi= zSi=>Vr_)M$Mi$P-$bN_<_o@3*Ft&f{??FIsV~xnY|xv@ZTep3Y{JpAx@O zA|khZ~q#Ip&)EV<^Yagd^;B7T=DxT&h1GklG^NP ztOpmZPY2`Y?>jzjdY&xw`}%%{zhUm#pW4kBCj8<&yfjp>Nr5(GaUk)=a+P~16F7g7hxqpAL1lApvW+inX+yINzr}X1+&iE|J*w!72U7TN_W9u z-bx&P$O{|B=yRZ(*mH(+yZkqvuAyu+H66TMhath2pOMr_-c-gHxAYM3IX z8G1b;)DrEt%#OxFTU2gqOzd`JUd}G}(O2ORHAnM(V%I6nwLNRzVb;TT|AegQajt?s5bcQZ8!74v!?!HxxL_Q zSEF@+E~Z9uEiLq3oI7bx)8?|dZhOt#$zORdHf=5;pu211Z-GlpPr_<$C44O^tgxTQ z2ovXJAUnhS>;#Rm-F-cnhUE{bRrh2{VA_K4^k=00j88K~2mFctWJv@}rr&}K{PDld z^knxjGyYm`4$qAwmzj)LrBaacMi3P#Zvat}^2TqN_8wb?VRPolhHWBa-?a0uSZ5AN zne#{4)#MGR2t2oaP&CEyBYe0HXysL)dewrup?eZzXK;bwBzETKjw&j*1L4(8vK#sM zPT=9d4du&2rt4M)Vs_nlY0z#!UdO7# z!9H&p8fh|eAt(t}5dJp&=H(sHg) zZbDvqO^G(H_FP7mhk2Bf#W9Y5PNU@hf>ZcI5p-Y`a)vFl+ASzc)s40ky;ph;U|ISZ zX!Ou%*XGveNme4L4bXH`x@_+7uafRpTA>gBn!wy2?$O`jsDm5gue&@uMCSm&iVEI= z%nXIw@9Wfv$^PSyd81+HmuPBOF{}Q}H9ECUo61KL8``4%T2kEyCf;jH>@0R}>jOm- z2AM5*Sd8$x59A4{ZRve8avt4fds8Q;VHY&cd!SyevnRcouwQXYt@D-YO|Q$afPGR% zgwVk}6UaloaUof#1Bz~DH2Yz7vpn&5u5Jk!>>YbwZ^ww^XSLy;v3Jp1mz* z5LH6?s!EUdNs0)NoD?|>DKeLsfaF!Cm@+=;uQt61=XKfF*X^+k`m7nzx65}B{twe7 z^^_TLDVDfkUK|Cp$%-iE)~05}<7^aXp;kb8HO}p~iF3U7joy>MXf_BVIsywRiD}ph zD?-+Oj)m`flTK8dHnkN zNPXqW5)<_&jJ4Wh^~(6B5viFq+ET3Quc^cLto{YiQ72MSj#8-^WZ=vgc74HsBe1KfF`4Dm3=I4=mFA^mH5km&)-SrLO+&H6tipfe+3`SNULxd=x6?4dZvkkTqF6Um zBS7=FzqS)tVlPn3#Nj1PQ(wt9g8q6`Y!C)}%8kX$1 zJB=^$8Ejqz$^kYIi*V+EU}AjH+;P0TsFniIf*J}$`+XJ(?LnSQJ?`Pc`1R7~r^6yV zJX7#6+;lBr6p1yw$~vmcp8R*DBdN2Cx$eooxG&ODdywT@7Z#25d$Bh384N5bbz47b zAY8S^dmW2L)GMs2UIyPDU@H#$#d+bii_f0BA!$pg>F>eV=0@{VYm?V;xzq|5~R$}w&C?2!r+=qsO}eAs0fZDydm z;N{yseq0)jQfu4=hhKO4F&X8?br)RwOnA2x9HowQ7u?kQ)&n!T&S*GfmUH`TDCFsS z4MJ*qeW2@bW4Ev8)NTs&ocom{QvLSSk2!~WE zP~2$3N0T>&wSrhXH@Lhgxtb6Cmszjvb-sWOrT;wesT#BT55AT70Hgo7$sRJ3!GmZ; zug{&l2fNfj^d>YPEI6<8RY`ECAM8tz1-4?#3GViTWdy(SgMq^IQv6|`6bR^@}K|advC}Qg>xFyPO34ZBD13pO=V#Ry;r!>I&&GH!3J#)CHc@32%zS|Fg^l^dyGUX zjz%huM=DMliDVp)be?Pm^i{)>%tG56cr)quc))pfDJ_}-d4L`01Lk8VE1a{q@o}<5 z#c0>Z41oYO0f<761yT4Rz+)d7I4k`aZG;BUl8ynDzif$q6LP0VeLXEXJ?3f-b9&5s z!2aB)@i9)&kE@T&$b6Anjseh7R)`w&EEf1f2@fCMMwS%bh5d&EN#dT%^Hv5dCbVd z4HJ1P%+ba5hl9^wsZ#ja z(kx(M!BsZ#f||Ki+n3>RhYy9w5D~#&R)CQZ`|%j+t*#ZV-sarCj?(q&j)iogn!-rY zU6u+^=ro*s^4;}% z$h;maB^2w?#&hqfp2d-V|4zK$me_?FFrH$BS-iZ+>@Xr($QzJ_r|_`QmNX6kdGsd5 zb_UA6@A<9S1p`gSl76vtTLAy&F$wHEl+!j?u{n*x*5kc(ndm1OFYu~>>np(e%C3NY zJ<)k8R=Q^*k$ciB5c{SO7R%C`umA6j>N#vR9zh=)t^H$cp$z|u5gzZI8Y6#owDi;U z%plwAZ*t&(K@Vtsi#gG1>m7LGQ1M2fr+1|P*G&wxXW_}{=US7jr2lyY&yj5+nAehv zt?ahy_&lh=I)|h6G!SMtA0JfvhF~3z8u#EKxzzbBjt7q39TK7AwM-zqz2yw2@jP4l z3*HVYWXY>-7cW*(X110?2vQJFAl)v$+3sbphlBo4fpZNNo2=1_$q#ppI<+e!OcDRoAq!i`$vUTQOKjbn zw-w}_I&rScmGXUK)4VokWqN>RDb930ba_$C3}n}`g=3WO<0fFc0&*qgrDXYCU3Chk`u{SLBFD? zTJOya31eHUDOl8t*22lc9^vZ31Ew66o!^}~lK0x)#9;Q7)4(oLdnVh|_W_>8H|#o7 z6n{&_NCit;=bEby7Zl(#u-EA>RW|jGd)?aCgH1iFyLU9`*!qR-4<>&H|<;u!n+i?u&+ffV~r$|2|= zg#3)`(dXs9_ipQ2bNBZxUezCeKf>N#^gr%L@CJ{){W1o8Um97sm~)0lB+7twhxs&s z^%PyojEJ+AqKDqJ;C{z`0;tUGCs-V|zGJ>PEI0qyBh!ICW8uxsM|<-mme9Brl8`k? z>+UHEr_Mx>WA|+*XxiPW87pF{@U%q_CXZXh zyioY`zQnuEUzhdU9bU4J!cFD~Ev$=M&(GM4C#>;yvcnoH_1*Yi*^@e_^DFNsJ_+^S z+KnBumXPxlKkZPoGzfPBHrxSQ{z^#G%Sp}VAB;z0`M%*q^Sy|4naDl2An*|$`&P%(xOH7`!wV~>%_(KsblZnEFBnOIQXYekS8@@_i5|{ zcaKzWiA{(kPl+U2Fc5H_no>T)Vc*zZ)gG3M!7s8^#h>Nr-R`kd`0K=~eC8osHtR^Y zWodi+x;?cV>wKk+lNsT}hoSI}w_CgWa@Wr)d8Pj3*s&COr7mYV(z-2}BCwm4FM0Uk zH3jP|p{2c>*vZbZz4PT`x}8}{NbYBhzrVHU*kNuj6P9M69XD%P{M5lhjlV4Zi?S@Z z{)Vfrzww4^Cg^%iZkdUX3_mO4lJ+~CvbIs(9kKC;H8{>hytl#&3dj)kcA8JVv}6O) z%sJFM`Vt17_arvtjlJwJSmS*GU=Cr(TK^RAiEYOGAPW%hm}i0UVGu~xI&Se1$gBG^ z`lDm77qipANJ9>KrqOBmgTj{WKZorrojE_XiMt}+h9%u?+Tg9#%+tTx zY-QLq1b)V|62h?4SUG>~nmOYK&vY>6Tr+TWRvu67Eh0LYX!d@&+sBWp5sn_Ott-q0)mKla`{FskbQ|Gp$3k>H3* z6><0wd%KS)M|@WGr!m8-1lU+%lFsk`Qv$v&UxK)?m6e4^>aRFxtDj(nr|<10vJC2pvj;IZUqq5K!$Ldmv~1X!{x@`1mpy=R%)Pha z-9u^O^n;G^73FuursbU~)2$Ua755z;!}f*Szp;68{)N5gocoKeIX}uZ&pmb=de@(J z+=(f5;#^9qWsqH*Z@X1z}F@4bqRc3 z0$-QF*Cp_E3H*Pj1p07Bc1biIPJ5wjraqBMdr_{_(RfY7%f>U&n3v2}FNw5xHK|A_ z6A3R2W!RhYPKeY*qK%PoFkPR`gcD8iU^-eC55>Ga<{vt~Vg8KSQ|Fw%$NZ9p;PCVS zb33$Q{>f!0%$_lOT8DEsz9eoTBdJs(26H^pc6DiNR>RF%;wb z8SQuVaSn@kT*Lf|6Hb_OLPxY+g1Ap^@Bxl|2zS%P7Rp2u@nCHz8Y35DNT*jGiABhv z|Cx?pbqm2J28WLwcX)d2*s&CbORZONQpM~ld-5R-^XHv7WlF`oc^%K5J*R5MlnSpQ z)V#2PkK2UmA`4@YcwMI6Ii<7J>6%nDX-`f&msqqRn#tdbhC6$9DPKrY_&#eA@eE%N zY4;J0FC;Gu!_nH>XiYZ8$6&1f7N#O+W}~S{*h_|58q9yYLn>mQE~&99Y)VBlk#wgT zT^LI=MN$j>)O1wz!fZ0x?i`NPhIo!V9q7eF4G}LKY0r>X9g4>zDKAP&JxgtC1PVjF$!u-A{DKR#wWT= zl7=yvmSkjf(7Yxyy@#legu>)_qBpIgYIJZ;Wz~#1v*-2hwIM<;4CA#rl#bSTA@VpT zoeVX2wb@wA%cQaquQn7*N4yg%W|f_~uyW4H3oB-qO`cUz?zNC5-}U$zv)!HY8B?du zm~!H*s#808KYmVmh3B^gFC0yWs_6iJKa2ASzx8|J>Vs<*x-y{!QNClt)!q~;IFSh^ zl96~Y9Lj`9VZiJWn-Zfq%dnD_8>2ktdBHAQV5DrI82jt zk4N0pc~kwKm`Tvxss42QquHc`(KPZQ6AZgyJp1u6?lMp?<6Ha@(6Bx#K?~n5bS%2EAa}?DC+A z%;1dK!I9o*-@%uXzSD@|=@GtbM_&pab98WcEZoC+lAPz9P+oCDaPq0aPC?2m=1uW} zvt}GWqbfL@p#IfiB_&=(bEGC~JtH`8?krbEbF-0DOORfXO~omt;o)E^(UkV85}A z$H;MVqs3&3e)V}%TubUwD=xPkVS6^aShTt+Qk`~Dr~TqI zN$-y`U2jUv=-!DYuPyrEe09;&2Y6G0vrRGtPq1DPoQGVBqy~6%d>KA*fH!7LeI%9y zCg<8)j9Dn$hH3=ji5liYsk*F*3Nw@%GIpvchs3Z(FP#@*&PFJ zO`;)b16Ge4P0>ufpQSXTD2X5Aq8gJ-B{GScgxd!3X3U;faY7aCwQ5e6;$7&fJslj` zxuYzMhDQf$Vo_4RFq$0gcg=;q-19rfLX(`Mf+v;DIPp4?KOuDEi@X z6~Ph1=kFKZZ}fg6g3Fc>1Y^X0rw<>I*9`v~>9Dw@&7`w7&RYcpJBEDg%fU(3p?Oo) z$;ed1L{ubfI#Z`0m5Gx(1#?Ms@w(9vA(B@TIy9^v@#Vd?>tHUH-k$pvx|;mE=hAf1 zdra4&vDYC1Mh*{;3OXeun5jpEH$>ynhHQg#_XBp%UymqE!V^PqWc!dAv?pcmO(=%i)L9AipVPIdx_I*?$iK+9Yn)OzgBDq*2U*bW`7kd%^ilkEa<}U2Ncqvj z>5G1`xl30eM-Pw1vW%3TH;?u|r7EZf-m@E^M$^LSPhZtfd=K4viH8*XSN+!I+$j*;Q(;Y%J^(Zj*R~9C&u1~PxJvh<@v>xb7w*Qhm z?I}Xt2sk1yKD`qw%gc~&ofDiF+4Cx@f{{4MWsXKABlv4G(T2!KOE1EUxfZg^7lvJe zcdBt$hfc5)LA&^NjiEi}8S{d(Pne2Rg?iuQj~{jR1@;Czak?{}KRG6weO3G;f~@7niM77yxwS+G7@S3idC z>prw;(|%vk^3|TG={BYypzJbpbu$4}HJ7gXOeUG0c<{k>C_UNgu?!0b zXCh1Dp;YwX8ei}68>+9rMdSWwJx%9eh>`LY_G8x!*W?f?s~@bBvgRuZ2nSOHEu!Ge zd2?pxX9d$k@o>z9&FmSKW5$i^(`R~Pu@(z3BVTImc|9~( znMx#TgZzJTBDKUOg0<1QEJ-8RZXCg?vit{lw&l+G!ih%9w;<#> z0(G6d(KBtT&hQkiGp({N-D5OzW1l~tGc&J8y`Eb<;Y|EYJyvu$ZLun!n6H8E7Y0*cT6KYiP(03Zc(VGm-hSJAK^+N z*pOw-qB_#Cob=WHomVT!5ZM_K84+X-J0di~#nV|{yY;Ic3Gs`K_L`px=NC*E3ruS@ z<)2|+RqGP#G*k7*e_qu+tGAblaehYNS3vtXW@~F&m~lf815=txGex4a4wA3myguFe zUOH%_nXlWm>*Wg2(SDf3cZtyyow`_}nsqBy>=@@$7DVfKoud!BLQZ1BdyL@iXuUpq|&#_ZC+z4a?WXZTrJ7QZ30$qAnFm)<bRj$Xq2HkBR9%)&ZGdQ|m3E}V*CJ_ewyzUJw`wx|d)y&Mj4k26aT6!-hrYnR zpj*atn}Z#pyFI>Vyo94ku`O5=i-h97(n(5#!7(g6j&aMZ!OA%-UGg`}38bJ~Z5=7~ z-A%~{nE!h7Z>zKB)&0$@XMreF&sKqRmUy!lNYE=;vCS{hy5WXxv~)0JEtNeNe_wNt z`QsXnKKf{;BRv;|gWRwkPZwKfIn*)FV0jJcU?rRirO>9Uyj*S#zdiZgpKHs#$Y+t) zOwQ#p{Hpl9$ZtHq!Tdhqo~tltZ1t5gZ@*IC?EvvWajZCA+~V`%J7ljEPxV=_5%T&( z?hj?2{gs}J-T&*7Rh-xkK&j}VHuN&Cj62#C(Drtr_{LV|azpv|Rr0^RyV>*Zc?P=O zZ&TPe-~s&BSMgFKzvcXb{F3|@>Dui7tzRW^4L&KCTgC5wes=x7XxH}3@FGtBx;O55 z@;|@dTbRyn3kY9#mj7D>?PvD<_5UsNaV`H}#Mw%izn@K+oa6uU*T($s=yN-+^KP9v zn6RDg|M4~9v%^cqH+#d!jU9Jboi{wjkIN%KbgcW|Grdx6(O_=}@ON(B$+vza`vzWX zvcJ}ceQrB3#E00W;bfTz($V$Oa1_=&+8`Ta}xPnonkm-iZx z1(@7hOeKd+40ai-{D@6-oPwYgaI}N=e0Hcz{%G6z z9{+YqPe*hkMcd0wcM!!XU_AqNXi7crxt-3Q&NeCP>=5ZbSBW`7d zJGQdWX%is7+1Taqi|0-0q8{~V8Gc<;+W9(-hS9`P(5U#lis+iCYZLgJ&G8JkA?~lE zGc_686p6*g_=i}$_H@tq7yCr{T;!kIp1-b-ZI7?Y-_YsUujr_FZ#?~TG{0f|_T*>% zy$bp8|Ht1z^4^!<7v%pFlbihB;`bWA7y11=W%4xsHu1Zk-<|w!;ded1b^O-wTgC4J ze#`iEk1vB;j9-}F0)FMBWfDIp?Q$QLh9lM4y0Ni@3DH>An;PYCm#-h&>}i0PZ|}Wq z9lCaCt=@L=;&pERstsON(yHw=fYZTJwjpG9M+aG2=1fS;-Sl1R5}}w~Nu6@*emZV7 zF*wz2C3R|J!^3RI_$|+N650Ro+o`2J7^>xfh)tsNiLf{=eN)S3aBjx>uBB5_wRi8x z`%e3*9ZzA9V%SUR51qJ1uNH1bG7ur;Yj1bEC$EJ zi3V?Y$svr*C5P14H+vi(!Y%Fvy~)u`O@ch8*|)rYuC3b4dP4ErXMcc3~&NjQ;KVXvCu8Hb#Qw9XnlB<4()LR3goJFn4^(z zwm>wssgR|mE@bD-Sj;D!t@wNRac4OeZjC{FqIl7V^Rf9LZvB2rZ?>!-Q|Tl42ptDu9mOVll>RI1XyC zQwOllQWLLZ;u2zW-ijo?#5u(&Xv=0i?h1+pw|aYIJk6Oxz>-m%L@`>i_yU`w5vyM` z24dylU!u-z$p|OK>_8q~lB|7MU2!^)r=+MA3XeRQVNr3AhP$@rVx}cB)j%9ho&Xvf zn?n#uW8j=B$Z&qqs*S@n&e^G8UMQWkGhHDLqPd!5!Ohv6pLCi7JKW3EH}KRA;L+^9B;NIGE&X<|VNa|uT%@xT%)hXkuzFxah*Q4Czrp{he+Vyh0- z@#8EcH3PX}9#IafLk-o51c>t=uwYE-?QY7oMTi}1nzLCTlc7$kZIR7P;*XGUyhmz6 z*0Z1`t~wH_#h_{1HRmHS>&cqIj*wMHXs*tRfHE6VM`&VZMrtV~8y7GrK#QA#C1L2v z5!!flq$Ocda72_v0ch8hPPL0T>Nlb4D20N-S=(wmTS9P79WF7Gn!&V0QXVc-F)9^X zBxLukm!nVG6Jm*kGt(5f*<1!~{$CxV+hDMyRh?kft~x=}tWGpkW6<$1vP6MmelHd*?7&wgw>`94?wIIZstC~bJm*kjs<5GrDAj2jv%{2chSBlo9xsF7Z@-)uz z@}N}IRWyfQDS6JM*7I09?_g%y?kA9ev8Y`vu~JMW;x2H)9?#Jj>!q;CZn=zQtL=zp zbv7I(L0KXvLS_WW78oO|*%;9>e{wh2?=;U8DA6E@?Gaf{^EjIoft5&>S%E9xY}(@V z>m}RbJS|=7)r6{Ps1YOC#w5xblenBt_T8ywl;;KvJ2q-aV%SM@%o^G$Ai0=~_=bc9 zVB%vj#A!Dmsd$r74nvyVmg-^3epHWVDgUn zp8Y7KIwLI_Gg8NN&@OzBS*shmi`x;cvHIjNr0o_%WH~&@-ZNk+ObT z!~XhGi`&NYnrI_EriN41)Md;P#=sV>ItR9dvempKW z2pV(Cx(wR!cniULx%tkfte_BZE@v$ql=Es#2AOFc8`P4Z6erIyEQd%V3d&9#@bpxu zi3g`bONo+3YMvrC)`5t{5ur{^N?BJ*u{~jCn!@MJ11lfSIhf&6h6JLT*fimkg3rhqUEBU;1gMD!ex#4yo}X~HZ_Go_=3E%#xD@_NgEI7FigTjyk+M2Q&4 zAYceL8y(ut{&GQm8fdSM)R^;brA8LR5$CIxj&GJ)-xu8?9HD8Lll2Ttlo*SS9Wl}x zVKK$-#jVKPLICv*&8O3=fGH**k)~E49Rkw^ZrYb=MErv#0t8x&K-skgvdPdFN4bBDroX^NU4AOTTZ=tf_*`#gs@(Ec!N#R_n0 z$8x}fO-6)y7pDPLD~up3T(BQxanoX4wOUD9JdLhqqK%1^OWjhMaya2sf8d|g4kJ>+bbB+{wxVT(Mr^u*$GSQ%601gw;dp{YYqF3YZWnbZ_eQth51EAc z4vi?w=9NQRn3NB_B7}4Y2?lL|$T8Q5jasasx&e}t;4vB(RhERU}TLoae|L�gTv9?rDI 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 J*0Nl!{|5uI|Be6v delta 119 zcmV~$MHNB;006M}ad&rjw|pEHfC_XV05Rymg$Qhq-#2(aKfzrfBrGB-CN3c vC$FHWq^zQrLCi@r*B|rWNcz;W^Q3=Wo=_?XYb(X= 0 && min_diff <= 64) { // Reasonable bounds + g_pow_config.min_pow_difficulty = min_diff; + } + } + + const char* pow_mode_env = getenv("RELAY_POW_MODE"); + if (pow_mode_env) { + if (strcmp(pow_mode_env, "strict") == 0) { + g_pow_config.validation_flags = NOSTR_POW_VALIDATE_ANTI_SPAM | NOSTR_POW_STRICT_FORMAT; + g_pow_config.require_nonce_tag = 1; + g_pow_config.reject_lower_targets = 1; + g_pow_config.strict_format = 1; + g_pow_config.anti_spam_mode = 1; + log_info("PoW configured in strict anti-spam mode"); + } else if (strcmp(pow_mode_env, "full") == 0) { + g_pow_config.validation_flags = NOSTR_POW_VALIDATE_FULL; + g_pow_config.require_nonce_tag = 1; + log_info("PoW configured in full validation mode"); + } else if (strcmp(pow_mode_env, "basic") == 0) { + g_pow_config.validation_flags = NOSTR_POW_VALIDATE_BASIC; + log_info("PoW configured in basic validation mode"); + } else if (strcmp(pow_mode_env, "disabled") == 0) { + g_pow_config.enabled = 0; + log_info("PoW validation disabled via RELAY_POW_MODE"); + } + } + + // Log final configuration + char config_msg[512]; + snprintf(config_msg, sizeof(config_msg), + "PoW Configuration: enabled=%s, min_difficulty=%d, validation_flags=0x%x, mode=%s", + g_pow_config.enabled ? "true" : "false", + g_pow_config.min_pow_difficulty, + g_pow_config.validation_flags, + g_pow_config.anti_spam_mode ? "anti-spam" : + (g_pow_config.validation_flags & NOSTR_POW_VALIDATE_FULL) ? "full" : "basic"); + log_info(config_msg); +} + +// Validate event Proof of Work according to NIP-13 +int validate_event_pow(cJSON* event, char* error_message, size_t error_size) { + if (!g_pow_config.enabled) { + return 0; // PoW validation disabled + } + + if (!event) { + snprintf(error_message, error_size, "pow: null event"); + return NOSTR_ERROR_INVALID_INPUT; + } + + // If min_pow_difficulty is 0, only validate events that have nonce tags + // This allows events without PoW when difficulty requirement is 0 + if (g_pow_config.min_pow_difficulty == 0) { + cJSON* tags = cJSON_GetObjectItem(event, "tags"); + int has_nonce_tag = 0; + + if (tags && cJSON_IsArray(tags)) { + cJSON* tag = NULL; + cJSON_ArrayForEach(tag, tags) { + if (cJSON_IsArray(tag) && cJSON_GetArraySize(tag) >= 2) { + cJSON* tag_name = cJSON_GetArrayItem(tag, 0); + if (cJSON_IsString(tag_name)) { + const char* name = cJSON_GetStringValue(tag_name); + if (name && strcmp(name, "nonce") == 0) { + has_nonce_tag = 1; + break; + } + } + } + } + } + + // If no minimum difficulty required and no nonce tag, skip PoW validation + if (!has_nonce_tag) { + return 0; // Accept event without PoW when min_difficulty=0 + } + } + + // Perform PoW validation using nostr_core_lib + nostr_pow_result_t pow_result; + int validation_result = nostr_validate_pow(event, g_pow_config.min_pow_difficulty, + g_pow_config.validation_flags, &pow_result); + + if (validation_result != NOSTR_SUCCESS) { + // Handle specific error cases with appropriate messages + switch (validation_result) { + case NOSTR_ERROR_NIP13_INSUFFICIENT: + snprintf(error_message, error_size, + "pow: insufficient difficulty: %d < %d", + pow_result.actual_difficulty, g_pow_config.min_pow_difficulty); + log_warning("Event rejected: insufficient PoW difficulty"); + break; + case NOSTR_ERROR_NIP13_NO_NONCE_TAG: + // This should not happen with min_difficulty=0 after our check above + if (g_pow_config.min_pow_difficulty > 0) { + snprintf(error_message, error_size, "pow: missing required nonce tag"); + log_warning("Event rejected: missing nonce tag"); + } else { + return 0; // Allow when min_difficulty=0 + } + break; + case NOSTR_ERROR_NIP13_INVALID_NONCE_TAG: + snprintf(error_message, error_size, "pow: invalid nonce tag format"); + log_warning("Event rejected: invalid nonce tag format"); + break; + case NOSTR_ERROR_NIP13_TARGET_MISMATCH: + snprintf(error_message, error_size, + "pow: committed target (%d) lower than minimum (%d)", + pow_result.committed_target, g_pow_config.min_pow_difficulty); + log_warning("Event rejected: committed target too low (anti-spam protection)"); + break; + case NOSTR_ERROR_NIP13_CALCULATION: + snprintf(error_message, error_size, "pow: difficulty calculation failed"); + log_error("PoW difficulty calculation error"); + break; + case NOSTR_ERROR_EVENT_INVALID_ID: + snprintf(error_message, error_size, "pow: invalid event ID format"); + log_warning("Event rejected: invalid event ID for PoW calculation"); + break; + default: + snprintf(error_message, error_size, "pow: validation failed - %s", + strlen(pow_result.error_detail) > 0 ? pow_result.error_detail : "unknown error"); + log_warning("Event rejected: PoW validation failed"); + } + return validation_result; + } + + // Log successful PoW validation (only if minimum difficulty is required) + if (g_pow_config.min_pow_difficulty > 0 || pow_result.has_nonce_tag) { + char debug_msg[256]; + snprintf(debug_msg, sizeof(debug_msg), + "PoW validated: difficulty=%d, target=%d, nonce=%llu%s", + pow_result.actual_difficulty, + pow_result.committed_target, + (unsigned long long)pow_result.nonce_value, + pow_result.has_nonce_tag ? "" : " (no nonce tag)"); + log_info(debug_msg); + } + + return 0; // Success +} + ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// // DATABASE FUNCTIONS @@ -2189,14 +2382,20 @@ int handle_event_message(cJSON* event, char* error_message, size_t error_size) { return signature_result; } - // Step 3: Complete event validation (combines structure + signature + additional checks) + // Step 3: Validate Proof of Work (NIP-13) if enabled + int pow_result = validate_event_pow(event, error_message, error_size); + if (pow_result != 0) { + return pow_result; // PoW validation failed, error message already set + } + + // Step 4: Complete event validation (combines structure + signature + additional checks) int validation_result = nostr_validate_event(event); if (validation_result != NOSTR_SUCCESS) { snprintf(error_message, error_size, "invalid: complete event validation failed"); return validation_result; } - // Step 4: Check for special event types and handle accordingly + // Step 5: Check for special event types and handle accordingly cJSON* kind_obj = cJSON_GetObjectItem(event, "kind"); cJSON* pubkey_obj = cJSON_GetObjectItem(event, "pubkey"); cJSON* created_at_obj = cJSON_GetObjectItem(event, "created_at"); @@ -2236,7 +2435,7 @@ int handle_event_message(cJSON* event, char* error_message, size_t error_size) { } } - // Step 5: Store event in database + // Step 6: Store event in database if (store_event(event) == 0) { error_message[0] = '\0'; // Success - empty error message log_success("Event validated and stored successfully"); @@ -2603,6 +2802,9 @@ int main(int argc, char* argv[]) { // Initialize NIP-11 relay information init_relay_info(); + // Initialize NIP-13 PoW configuration + init_pow_config(); + log_info("Starting relay server..."); // Start WebSocket Nostr relay server diff --git a/tests/11_nip_information.sh b/tests/11_nip_information.sh new file mode 100755 index 0000000..d0fc99a --- /dev/null +++ b/tests/11_nip_information.sh @@ -0,0 +1,432 @@ +#!/bin/bash + +# NIP-11 Relay Information Document Test +# Tests HTTP endpoint for relay information according to NIP-11 specification + +set -e # Exit on any error + +# Color constants +RED='\033[31m' +GREEN='\033[32m' +YELLOW='\033[33m' +BLUE='\033[34m' +BOLD='\033[1m' +RESET='\033[0m' + +# Test configuration +RELAY_URL="http://127.0.0.1:8888" +RELAY_WS_URL="ws://127.0.0.1:8888" + +# Print functions +print_header() { + echo -e "${BLUE}${BOLD}=== $1 ===${RESET}" +} + +print_step() { + echo -e "${YELLOW}[STEP]${RESET} $1" +} + +print_success() { + echo -e "${GREEN}✓${RESET} $1" +} + +print_error() { + echo -e "${RED}✗${RESET} $1" +} + +print_info() { + echo -e "${BLUE}[INFO]${RESET} $1" +} + +print_warning() { + echo -e "${YELLOW}[WARNING]${RESET} $1" +} + +# Test functions +test_http_with_correct_header() { + print_step "Testing HTTP request with correct Accept header" + + local response="" + local http_code="" + + if command -v curl &> /dev/null; then + # Use curl to test with proper Accept header + response=$(curl -s -H "Accept: application/nostr+json" "$RELAY_URL/" 2>/dev/null || echo "") + http_code=$(curl -s -o /dev/null -w "%{http_code}" -H "Accept: application/nostr+json" "$RELAY_URL/" 2>/dev/null || echo "000") + else + print_error "curl command not found - required for NIP-11 testing" + return 1 + fi + + if [[ "$http_code" == "200" ]]; then + print_success "HTTP 200 OK received with correct Accept header" + + # Validate JSON response + if echo "$response" | jq . >/dev/null 2>&1; then + print_success "Response is valid JSON" + return 0 + else + print_error "Response is not valid JSON" + return 1 + fi + else + print_error "Expected HTTP 200, got HTTP $http_code" + return 1 + fi +} + +test_http_without_header() { + print_step "Testing HTTP request without Accept header (should return 406)" + + local http_code="" + + if command -v curl &> /dev/null; then + http_code=$(curl -s -o /dev/null -w "%{http_code}" "$RELAY_URL/" 2>/dev/null || echo "000") + else + print_error "curl command not found - required for NIP-11 testing" + return 1 + fi + + if [[ "$http_code" == "406" ]]; then + print_success "HTTP 406 Not Acceptable received without proper Accept header" + return 0 + else + print_error "Expected HTTP 406, got HTTP $http_code" + return 1 + fi +} + +test_http_with_wrong_header() { + print_step "Testing HTTP request with wrong Accept header (should return 406)" + + local http_code="" + + if command -v curl &> /dev/null; then + http_code=$(curl -s -o /dev/null -w "%{http_code}" -H "Accept: application/json" "$RELAY_URL/" 2>/dev/null || echo "000") + else + print_error "curl command not found - required for NIP-11 testing" + return 1 + fi + + if [[ "$http_code" == "406" ]]; then + print_success "HTTP 406 Not Acceptable received with wrong Accept header" + return 0 + else + print_error "Expected HTTP 406, got HTTP $http_code" + return 1 + fi +} + +test_cors_headers() { + print_step "Testing CORS headers presence" + + local headers="" + + if command -v curl &> /dev/null; then + headers=$(curl -s -I -H "Accept: application/nostr+json" "$RELAY_URL/" 2>/dev/null || echo "") + else + print_error "curl command not found - required for NIP-11 testing" + return 1 + fi + + local cors_origin_found=false + local cors_headers_found=false + local cors_methods_found=false + + if echo "$headers" | grep -qi "access-control-allow-origin"; then + cors_origin_found=true + print_success "Access-Control-Allow-Origin header found" + fi + + if echo "$headers" | grep -qi "access-control-allow-headers"; then + cors_headers_found=true + print_success "Access-Control-Allow-Headers header found" + fi + + if echo "$headers" | grep -qi "access-control-allow-methods"; then + cors_methods_found=true + print_success "Access-Control-Allow-Methods header found" + fi + + if [[ "$cors_origin_found" == true && "$cors_headers_found" == true && "$cors_methods_found" == true ]]; then + print_success "All required CORS headers present" + return 0 + else + print_error "Missing CORS headers" + return 1 + fi +} + +test_json_structure() { + print_step "Testing NIP-11 JSON structure and required fields" + + local response="" + + if command -v curl &> /dev/null; then + response=$(curl -s -H "Accept: application/nostr+json" "$RELAY_URL/" 2>/dev/null || echo "") + else + print_error "curl command not found - required for NIP-11 testing" + return 1 + fi + + if [[ -z "$response" ]]; then + print_error "Empty response received" + return 1 + fi + + # Validate JSON structure using jq + if ! echo "$response" | jq . >/dev/null 2>&1; then + print_error "Response is not valid JSON" + return 1 + fi + + print_success "Valid JSON structure confirmed" + + # Check for required fields + local required_checks=0 + local total_checks=0 + + # Test name field + ((total_checks++)) + if echo "$response" | jq -e '.name' >/dev/null 2>&1; then + local name=$(echo "$response" | jq -r '.name') + print_success "Name field present: $name" + ((required_checks++)) + else + print_warning "Name field missing (optional)" + fi + + # Test supported_nips field (required) + ((total_checks++)) + if echo "$response" | jq -e '.supported_nips' >/dev/null 2>&1; then + local nips=$(echo "$response" | jq -r '.supported_nips | @json') + print_success "Supported NIPs field present: $nips" + ((required_checks++)) + + # Verify NIP-11 is in the supported list + if echo "$response" | jq -e '.supported_nips | contains([11])' >/dev/null 2>&1; then + print_success "NIP-11 correctly listed in supported NIPs" + else + print_warning "NIP-11 not found in supported NIPs list" + fi + else + print_error "Supported NIPs field missing (should be present)" + fi + + # Test software field + ((total_checks++)) + if echo "$response" | jq -e '.software' >/dev/null 2>&1; then + local software=$(echo "$response" | jq -r '.software') + print_success "Software field present: $software" + ((required_checks++)) + else + print_warning "Software field missing (optional)" + fi + + # Test version field + ((total_checks++)) + if echo "$response" | jq -e '.version' >/dev/null 2>&1; then + local version=$(echo "$response" | jq -r '.version') + print_success "Version field present: $version" + ((required_checks++)) + else + print_warning "Version field missing (optional)" + fi + + # Test limitation object + ((total_checks++)) + if echo "$response" | jq -e '.limitation' >/dev/null 2>&1; then + print_success "Limitation object present" + ((required_checks++)) + + # Check some common limitation fields + if echo "$response" | jq -e '.limitation.max_message_length' >/dev/null 2>&1; then + local max_msg=$(echo "$response" | jq -r '.limitation.max_message_length') + print_info " max_message_length: $max_msg" + fi + + if echo "$response" | jq -e '.limitation.max_subscriptions' >/dev/null 2>&1; then + local max_subs=$(echo "$response" | jq -r '.limitation.max_subscriptions') + print_info " max_subscriptions: $max_subs" + fi + else + print_warning "Limitation object missing (recommended)" + fi + + # Test description field + if echo "$response" | jq -e '.description' >/dev/null 2>&1; then + local description=$(echo "$response" | jq -r '.description') + print_success "Description field present: ${description:0:50}..." + else + print_warning "Description field missing (optional)" + fi + + print_info "JSON structure validation: $required_checks/$total_checks core fields present" + return 0 +} + +test_content_type_header() { + print_step "Testing Content-Type header" + + local headers="" + + if command -v curl &> /dev/null; then + headers=$(curl -s -I -H "Accept: application/nostr+json" "$RELAY_URL/" 2>/dev/null || echo "") + else + print_error "curl command not found - required for NIP-11 testing" + return 1 + fi + + if echo "$headers" | grep -qi "content-type.*application/nostr+json"; then + print_success "Correct Content-Type header: application/nostr+json" + return 0 + else + print_warning "Content-Type header not exactly 'application/nostr+json'" + echo "$headers" | grep -i "content-type" | head -1 + return 1 + fi +} + +test_non_root_path() { + print_step "Testing non-root path (should return 404)" + + local http_code="" + + if command -v curl &> /dev/null; then + http_code=$(curl -s -o /dev/null -w "%{http_code}" -H "Accept: application/nostr+json" "$RELAY_URL/nonexistent" 2>/dev/null || echo "000") + else + print_error "curl command not found - required for NIP-11 testing" + return 1 + fi + + if [[ "$http_code" == "404" ]]; then + print_success "HTTP 404 Not Found received for non-root path" + return 0 + else + print_error "Expected HTTP 404 for non-root path, got HTTP $http_code" + return 1 + fi +} + +test_websocket_still_works() { + print_step "Testing that WebSocket functionality still works on same port" + + if ! command -v websocat &> /dev/null; then + print_warning "websocat not available - skipping WebSocket test" + return 0 + fi + + # Try to connect to WebSocket and send a simple REQ + local response="" + response=$(echo '["REQ","test_ws_nip11",{}]' | timeout 3s websocat "$RELAY_WS_URL" 2>/dev/null || echo "Connection failed") + + if [[ "$response" == *"Connection failed"* ]]; then + print_error "WebSocket connection failed" + return 1 + elif [[ "$response" == *"EOSE"* ]]; then + print_success "WebSocket still functional - received EOSE response" + return 0 + else + print_warning "WebSocket response unclear, but connection succeeded" + return 0 + fi +} + +# Main test function +run_nip11_tests() { + print_header "NIP-11 Relay Information Document Tests" + + # Check dependencies + print_step "Checking dependencies..." + if ! command -v curl &> /dev/null; then + print_error "curl command not found - required for NIP-11 HTTP testing" + return 1 + fi + if ! command -v jq &> /dev/null; then + print_error "jq command not found - required for JSON validation" + return 1 + fi + print_success "All dependencies found" + + print_header "PHASE 1: Basic HTTP Functionality" + + # Test 1: Correct Accept header + if ! test_http_with_correct_header; then + return 1 + fi + + # Test 2: Missing Accept header + if ! test_http_without_header; then + return 1 + fi + + # Test 3: Wrong Accept header + if ! test_http_with_wrong_header; then + return 1 + fi + + print_header "PHASE 2: HTTP Headers Validation" + + # Test 4: CORS headers + if ! test_cors_headers; then + return 1 + fi + + # Test 5: Content-Type header + if ! test_content_type_header; then + return 1 + fi + + print_header "PHASE 3: JSON Structure Validation" + + # Test 6: JSON structure and required fields + if ! test_json_structure; then + return 1 + fi + + print_header "PHASE 4: Additional Endpoint Behavior" + + # Test 7: Non-root paths + if ! test_non_root_path; then + return 1 + fi + + # Test 8: WebSocket compatibility + if ! test_websocket_still_works; then + return 1 + fi + + print_header "PHASE 5: NIP-11 Compliance Summary" + + # Final validation - get the actual response and display it + print_step "Displaying complete NIP-11 response..." + local response="" + if command -v curl &> /dev/null; then + response=$(curl -s -H "Accept: application/nostr+json" "$RELAY_URL/" 2>/dev/null || echo "") + if [[ -n "$response" ]] && echo "$response" | jq . >/dev/null 2>&1; then + echo "$response" | jq . + else + print_error "Failed to retrieve or parse final response" + fi + fi + + print_success "All NIP-11 tests passed!" + return 0 +} + +# Main execution +print_header "Starting NIP-11 Relay Information Document Test Suite" +echo + +if run_nip11_tests; then + echo + print_success "All NIP-11 tests completed successfully!" + print_info "The C-Relay NIP-11 implementation is fully compliant" + print_info "✅ HTTP endpoint, Accept header validation, CORS, and JSON structure all working" + echo + exit 0 +else + echo + print_error "Some NIP-11 tests failed" + exit 1 +fi \ No newline at end of file diff --git a/tests/13_nip_test.sh b/tests/13_nip_test.sh new file mode 100755 index 0000000..262394a --- /dev/null +++ b/tests/13_nip_test.sh @@ -0,0 +1,384 @@ +#!/bin/bash + +# NIP-13 Proof of Work Validation Test Suite for C Nostr Relay +# Tests PoW validation in the relay's event processing pipeline +# Based on nostr_core_lib/tests/nip13_test.c + +set -e # Exit on error + +# Color constants +RED='\033[31m' +GREEN='\033[32m' +YELLOW='\033[33m' +BLUE='\033[34m' +BOLD='\033[1m' +RESET='\033[0m' + +# Test configuration +RELAY_URL="ws://127.0.0.1:8888" +HTTP_URL="http://127.0.0.1:8888" +TEST_COUNT=0 +PASSED_COUNT=0 +FAILED_COUNT=0 + +# Test results tracking +declare -a TEST_RESULTS=() + +print_info() { + echo -e "${BLUE}[INFO]${RESET} $1" +} + +print_success() { + echo -e "${GREEN}${BOLD}[SUCCESS]${RESET} $1" +} + +print_warning() { + echo -e "${YELLOW}[WARNING]${RESET} $1" +} + +print_error() { + echo -e "${RED}${BOLD}[ERROR]${RESET} $1" +} + +print_test_header() { + TEST_COUNT=$((TEST_COUNT + 1)) + echo "" + echo -e "${BOLD}=== TEST $TEST_COUNT: $1 ===${RESET}" +} + +record_test_result() { + local test_name="$1" + local result="$2" + local details="$3" + + TEST_RESULTS+=("$test_name|$result|$details") + + if [ "$result" = "PASS" ]; then + PASSED_COUNT=$((PASSED_COUNT + 1)) + print_success "PASS: $test_name" + else + FAILED_COUNT=$((FAILED_COUNT + 1)) + print_error "FAIL: $test_name" + if [ -n "$details" ]; then + echo " Details: $details" + fi + fi +} + +# Check if relay is running +check_relay_running() { + print_info "Checking if relay is running..." + + if ! curl -s -H "Accept: application/nostr+json" "$HTTP_URL/" >/dev/null 2>&1; then + print_error "Relay is not running or not accessible at $HTTP_URL" + print_info "Please start the relay with: ./make_and_restart_relay.sh" + exit 1 + fi + + print_success "Relay is running and accessible" +} + +# Test NIP-11 relay information includes NIP-13 +test_nip11_pow_support() { + print_test_header "NIP-11 PoW Support Advertisement" + + print_info "Fetching relay information..." + RELAY_INFO=$(curl -s -H "Accept: application/nostr+json" "$HTTP_URL/") + + echo "Relay Info Response:" + echo "$RELAY_INFO" | jq '.' + echo "" + + # Check if NIP-13 is in supported_nips + if echo "$RELAY_INFO" | jq -e '.supported_nips | index(13)' >/dev/null 2>&1; then + print_success "✓ NIP-13 found in supported_nips array" + NIP13_SUPPORTED=true + else + print_error "✗ NIP-13 not found in supported_nips array" + NIP13_SUPPORTED=false + fi + + # Check if min_pow_difficulty is present + MIN_POW_DIFF=$(echo "$RELAY_INFO" | jq -r '.limitation.min_pow_difficulty // "missing"') + if [ "$MIN_POW_DIFF" != "missing" ]; then + print_success "✓ min_pow_difficulty found: $MIN_POW_DIFF" + MIN_POW_PRESENT=true + else + print_error "✗ min_pow_difficulty not found in limitations" + MIN_POW_PRESENT=false + fi + + if [ "$NIP13_SUPPORTED" = true ] && [ "$MIN_POW_PRESENT" = true ]; then + record_test_result "NIP-11 PoW Support Advertisement" "PASS" "NIP-13 supported, min_pow_difficulty=$MIN_POW_DIFF" + return 0 + else + record_test_result "NIP-11 PoW Support Advertisement" "FAIL" "Missing NIP-13 support or min_pow_difficulty" + return 1 + fi +} + +# Test event submission without PoW (should be accepted when min_difficulty=0) +test_event_without_pow() { + print_test_header "Event Submission Without PoW (min_difficulty=0)" + + # Create a simple event without PoW + print_info "Generating test event without PoW..." + + # Use nak to generate a simple event + if ! command -v nak &> /dev/null; then + print_warning "nak command not found - skipping PoW generation tests" + record_test_result "Event Submission Without PoW" "SKIP" "nak not available" + return 0 + fi + + # Generate event without PoW using direct private key + PRIVATE_KEY="91ba716fa9e7ea2fcbad360cf4f8e0d312f73984da63d90f524ad61a6a1e7dbe" + EVENT_JSON=$(nak event --sec "$PRIVATE_KEY" -c "Test event without PoW" --ts $(date +%s)) + + print_info "Generated event:" + echo "$EVENT_JSON" | jq '.' + echo "" + + # Send event to relay via WebSocket using websocat + print_info "Sending event to relay..." + + # Create EVENT message in Nostr format + EVENT_MESSAGE="[\"EVENT\",$EVENT_JSON]" + + # Send to relay and capture response + if command -v websocat &> /dev/null; then + RESPONSE=$(echo "$EVENT_MESSAGE" | timeout 5s websocat "$RELAY_URL" 2>&1 || echo "Connection failed") + + print_info "Relay response: $RESPONSE" + + if [[ "$RESPONSE" == *"Connection failed"* ]]; then + print_error "✗ Failed to connect to relay" + record_test_result "Event Submission Without PoW" "FAIL" "Connection failed" + return 1 + elif [[ "$RESPONSE" == *"true"* ]]; then + print_success "✓ Event without PoW accepted (expected when min_difficulty=0)" + record_test_result "Event Submission Without PoW" "PASS" "Event accepted as expected" + return 0 + else + print_error "✗ Event without PoW rejected (unexpected when min_difficulty=0)" + record_test_result "Event Submission Without PoW" "FAIL" "Event rejected: $RESPONSE" + return 1 + fi + else + print_error "websocat not found - required for testing" + record_test_result "Event Submission Without PoW" "SKIP" "websocat not available" + return 0 + fi +} + +# Test event with valid PoW +test_event_with_pow() { + print_test_header "Event Submission With Valid PoW" + + if ! command -v nak &> /dev/null; then + print_warning "nak command not found - skipping PoW validation tests" + record_test_result "Event Submission With Valid PoW" "SKIP" "nak not available" + return 0 + fi + + print_info "Generating event with PoW difficulty 8..." + + # Generate event with PoW (difficulty 8 for reasonable test time) using direct private key + PRIVATE_KEY="91ba716fa9e7ea2fcbad360cf4f8e0d312f73984da63d90f524ad61a6a1e7dbe" + POW_EVENT_JSON=$(nak event --sec "$PRIVATE_KEY" -c "Test event with PoW difficulty 8" --pow 8 --ts $(date +%s)) + + if [ -z "$POW_EVENT_JSON" ]; then + print_error "Failed to generate PoW event" + record_test_result "Event Submission With Valid PoW" "FAIL" "PoW event generation failed" + return 1 + fi + + print_info "Generated PoW event:" + echo "$POW_EVENT_JSON" | jq '.' + echo "" + + # Extract nonce info for verification + NONCE_TAG=$(echo "$POW_EVENT_JSON" | jq -r '.tags[] | select(.[0] == "nonce") | .[1]' 2>/dev/null || echo "") + TARGET_DIFF=$(echo "$POW_EVENT_JSON" | jq -r '.tags[] | select(.[0] == "nonce") | .[2]' 2>/dev/null || echo "") + + if [ -n "$NONCE_TAG" ] && [ -n "$TARGET_DIFF" ]; then + print_info "PoW details: nonce=$NONCE_TAG, target_difficulty=$TARGET_DIFF" + fi + + # Send event to relay via WebSocket using websocat + print_info "Sending PoW event to relay..." + + # Create EVENT message in Nostr format + POW_EVENT_MESSAGE="[\"EVENT\",$POW_EVENT_JSON]" + + # Send to relay and capture response + if command -v websocat &> /dev/null; then + RESPONSE=$(echo "$POW_EVENT_MESSAGE" | timeout 10s websocat "$RELAY_URL" 2>&1 || echo "Connection failed") + + print_info "Relay response: $RESPONSE" + + if [[ "$RESPONSE" == *"Connection failed"* ]]; then + print_error "✗ Failed to connect to relay" + record_test_result "Event Submission With Valid PoW" "FAIL" "Connection failed" + return 1 + elif [[ "$RESPONSE" == *"true"* ]]; then + print_success "✓ Event with valid PoW accepted" + record_test_result "Event Submission With Valid PoW" "PASS" "PoW event accepted" + return 0 + else + print_error "✗ Event with valid PoW rejected" + record_test_result "Event Submission With Valid PoW" "FAIL" "PoW event rejected: $RESPONSE" + return 1 + fi + else + print_error "websocat not found - required for testing" + record_test_result "Event Submission With Valid PoW" "SKIP" "websocat not available" + return 0 + fi +} + +# Test relay configuration with environment variables +test_pow_configuration() { + print_test_header "PoW Configuration Via Environment Variables" + + print_info "Testing different PoW configurations requires relay restart" + print_info "Current configuration from logs:" + + if [ -f "relay.log" ]; then + grep "PoW Configuration:" relay.log | tail -1 + else + print_warning "No relay.log found" + fi + + # Test current configuration values + RELAY_INFO=$(curl -s -H "Accept: application/nostr+json" "$HTTP_URL/") + MIN_POW_DIFF=$(echo "$RELAY_INFO" | jq -r '.limitation.min_pow_difficulty') + + print_info "Current min_pow_difficulty from NIP-11: $MIN_POW_DIFF" + + # For now, just verify the configuration is readable + if [ "$MIN_POW_DIFF" != "null" ] && [ "$MIN_POW_DIFF" != "missing" ]; then + print_success "✓ PoW configuration is accessible via NIP-11" + record_test_result "PoW Configuration Via Environment Variables" "PASS" "min_pow_difficulty=$MIN_POW_DIFF" + return 0 + else + print_error "✗ PoW configuration not accessible" + record_test_result "PoW Configuration Via Environment Variables" "FAIL" "Cannot read min_pow_difficulty" + return 1 + fi +} + +# Test NIP-13 reference event validation +test_nip13_reference_event() { + print_test_header "NIP-13 Reference Event Validation" + + # This is the official NIP-13 reference event + NIP13_REF_EVENT='{"id":"000006d8c378af1779d2feebc7603a125d99eca0ccf1085959b307f64e5dd358","pubkey":"a48380f4cfcc1ad5378294fcac36439770f9c878dd880ffa94bb74ea54a6f243","created_at":1651794653,"kind":1,"tags":[["nonce","776797","20"]],"content":"It'\''s just me mining my own business","sig":"284622fc0a3f4f1303455d5175f7ba962a3300d136085b9566801bc2e0699de0c7e31e44c81fb40ad9049173742e904713c3594a1da0fc5d2382a25c11aba977"}' + + print_info "Testing NIP-13 reference event from specification:" + echo "$NIP13_REF_EVENT" | jq '.' + echo "" + + # Send reference event to relay via WebSocket using websocat + print_info "Sending NIP-13 reference event to relay..." + + # Create EVENT message in Nostr format + REF_EVENT_MESSAGE="[\"EVENT\",$NIP13_REF_EVENT]" + + # Send to relay and capture response + if command -v websocat &> /dev/null; then + RESPONSE=$(echo "$REF_EVENT_MESSAGE" | timeout 10s websocat "$RELAY_URL" 2>&1 || echo "Connection failed") + + print_info "Relay response: $RESPONSE" + + if [[ "$RESPONSE" == *"Connection failed"* ]] || [[ -z "$RESPONSE" ]]; then + print_error "✗ Failed to connect to relay or no response" + record_test_result "NIP-13 Reference Event Validation" "FAIL" "Connection failed or timeout" + return 1 + elif [[ "$RESPONSE" == *"true"* ]]; then + print_success "✓ NIP-13 reference event accepted" + record_test_result "NIP-13 Reference Event Validation" "PASS" "Reference event accepted" + return 0 + else + print_error "✗ NIP-13 reference event rejected" + record_test_result "NIP-13 Reference Event Validation" "FAIL" "Reference event rejected: $RESPONSE" + return 1 + fi + else + print_error "websocat not found - required for testing" + record_test_result "NIP-13 Reference Event Validation" "SKIP" "websocat not available" + return 0 + fi +} + +# Print test summary +print_test_summary() { + echo "" + echo -e "${BOLD}=== TEST SUMMARY ===${RESET}" + echo "Total tests run: $TEST_COUNT" + echo -e "${GREEN}Passed: $PASSED_COUNT${RESET}" + echo -e "${RED}Failed: $FAILED_COUNT${RESET}" + + if [ $FAILED_COUNT -gt 0 ]; then + echo "" + echo -e "${RED}${BOLD}Failed tests:${RESET}" + for result in "${TEST_RESULTS[@]}"; do + IFS='|' read -r name status details <<< "$result" + if [ "$status" = "FAIL" ]; then + echo -e " ${RED}✗ $name${RESET}" + if [ -n "$details" ]; then + echo " $details" + fi + fi + done + fi + + echo "" + if [ $FAILED_COUNT -eq 0 ]; then + echo -e "${GREEN}${BOLD}🎉 ALL TESTS PASSED!${RESET}" + echo -e "${GREEN}✅ NIP-13 PoW validation is working correctly in the relay${RESET}" + return 0 + else + echo -e "${RED}${BOLD}❌ SOME TESTS FAILED${RESET}" + echo "Please review the output above and check relay logs for more details." + return 1 + fi +} + +# Main test execution +main() { + echo -e "${BOLD}=== NIP-13 Proof of Work Relay Test Suite ===${RESET}" + echo "Testing NIP-13 PoW validation in the C Nostr Relay" + echo "Relay URL: $RELAY_URL" + echo "" + + # Check prerequisites + if ! command -v curl &> /dev/null; then + print_error "curl is required but not installed" + exit 1 + fi + + if ! command -v jq &> /dev/null; then + print_error "jq is required but not installed" + exit 1 + fi + + if ! command -v websocat &> /dev/null; then + print_warning "websocat not found - WebSocket tests will be skipped" + fi + + # Run tests + check_relay_running + test_nip11_pow_support + test_event_without_pow + test_event_with_pow + test_pow_configuration + test_nip13_reference_event + + # Print summary + print_test_summary + exit $? +} + +# Run main function +main "$@" \ No newline at end of file diff --git a/tests/9_delete_test.sh b/tests/9_nip_delete_test.sh similarity index 100% rename from tests/9_delete_test.sh rename to tests/9_nip_delete_test.sh