diff --git a/records/track_10min_16mb/2026-04-18_QK525to55_DepthRecur_ParResid_SP8192_LegalTTT/README.md b/records/track_10min_16mb/2026-04-18_QK525to55_DepthRecur_ParResid_SP8192_LegalTTT/README.md new file mode 100644 index 0000000000..f5e680ebd9 --- /dev/null +++ b/records/track_10min_16mb/2026-04-18_QK525to55_DepthRecur_ParResid_SP8192_LegalTTT/README.md @@ -0,0 +1,65 @@ +# Record: QK-Gain 5.5 + SP8192 + 3-Layer Recurrence + Parallel Residuals + Legal TTT + +**val_bpb = 1.0810** (3-seed mean, std 0.0005) | **< 16 MB** | 8xH100 SXM + +## 3-Seed Results + +| Seed | **TTT BPB** | Artifact | +|------|-------------|----------| +| 42 | **1.0804** | 15,994,470 | +| 314 | **1.0812** | 15,993,777 | +| 999 | **1.0814** | 15,991,277 | +| **Mean** | **1.0810** | | +| **Std** | **0.0005** | | + +## Key Change + +**QK_GAIN_INIT=5.5** (up from 5.25). The monotonic improvement trend in query-key gain scaling continues past 5.25. This extends the finding from PR #1394 (@clarkkev) which documented improvement from 4.0 to 5.25. + +## Base Architecture + +Built on the SOTA foundation from: +- **@clarkkev** — SP8192 + GPTQ SDClip + MuonEq-R + depth recurrence (PR #1394) +- **@dexhunter** — 3-layer depth recurrence (PR #1331, #1437), legal TTT on SP8192 (PR #1413) +- **@abaybektursun** — Score-first TTT framework (PR #549) +- **@Robby955** — Parallel residuals on SP8192 (PR #1412) +- **@msisovic** — Parallel residuals concept (PR #1204) +- **@X-Abhishek-X** — Hyperparameter tuning (PR #1445, #1471) + +## Architecture + +11L x 512d x 8H / 4KV, MLP 4x, LeakyReLU(0.5)^2, Partial RoPE (16/64 dims), layerwise LN scale, tied embeddings, logit softcap=30.0. Depth recurrence: layers 3-5 loop (num_loops=2, activated at frac=0.35). Parallel residuals from layer 7. Skip gates (sigmoid-gated U-Net connections). XSA on all layers. + +## Training + +~4600 steps in ~588s on 8xH100 SXM. EMA decay 0.9965. Warmdown frac 0.72. WD=0.095. MuonEq-R (row-normalized, Newton-Schulz 5 steps). + +## Quantization + +Full-Hessian GPTQ with SDClip: int6 for attention/MLP matrices, int8 for token embeddings. Brotli-11 compression. + +## TTT (Test-Time Training) + +Legal score-first TTT: SGD (lr=0.005, momentum=0.9), 3 epochs per 32K-token chunk, cosine LR decay. Each chunk scored under `torch.no_grad()` before any SGD update. Each token scored exactly once. + +## Compliance + +Per Issue #1017 (Track B — legal eval-time adaptation): +- Condition 1 (Causality): Sliding-window eval is strictly causal +- Condition 2 (Normalized distribution): Standard softmax over full vocab +- Condition 3 (Score before update): Each chunk scored under torch.no_grad() before SGD update +- Condition 4 (Single pass): Each token scored exactly once +- All artifacts under 16,000,000 bytes on all 3 seeds +- Training under 600s on all 3 seeds (~588s actual) +- Eval (sliding + TTT) under 600s on all 3 seeds + +## Reproduction + +```bash +pip install brotli sentencepiece +pip install flash_attn_3 --no-deps --find-links https://windreamer.github.io/flash-attention3-wheels/cu128_torch291/ +MATCHED_FINEWEB_REPO_ID=kevclark/parameter-golf python3 data/cached_challenge_fineweb.py --variant sp8192 + +SEED=42 QK_GAIN_INIT=5.5 TTT_ENABLED=1 TTT_LR=0.005 TTT_EPOCHS=3 \ + torchrun --standalone --nproc_per_node=8 train_gpt.py +``` diff --git a/records/track_10min_16mb/2026-04-18_QK525to55_DepthRecur_ParResid_SP8192_LegalTTT/submission.json b/records/track_10min_16mb/2026-04-18_QK525to55_DepthRecur_ParResid_SP8192_LegalTTT/submission.json new file mode 100644 index 0000000000..ea29f72584 --- /dev/null +++ b/records/track_10min_16mb/2026-04-18_QK525to55_DepthRecur_ParResid_SP8192_LegalTTT/submission.json @@ -0,0 +1,15 @@ +{ + "val_bpb_mean": 1.08102, + "val_bpb_std": 0.00051, + "seeds": { + "42": {"val_bpb": 1.08044, "artifact_bytes": 15994470}, + "314": {"val_bpb": 1.08120, "artifact_bytes": 15993777}, + "999": {"val_bpb": 1.08141, "artifact_bytes": 15991277} + }, + "hardware": "8xH100 80GB SXM", + "training_time_seconds": 588, + "eval_method": "sliding_window + legal_ttt", + "key_change": "QK_GAIN_INIT=5.5 (up from 5.25)", + "base": "SP8192 + 3-Layer Recurrence + Parallel Residuals + Legal TTT (PR #1394, #1331, #1412, #549)", + "author": "G3sparky (Gavin Saunders)" +} diff --git a/records/track_10min_16mb/2026-04-18_QK525to55_DepthRecur_ParResid_SP8192_LegalTTT/train_gpt.py b/records/track_10min_16mb/2026-04-18_QK525to55_DepthRecur_ParResid_SP8192_LegalTTT/train_gpt.py new file mode 100644 index 0000000000..1201aa4ffa --- /dev/null +++ b/records/track_10min_16mb/2026-04-18_QK525to55_DepthRecur_ParResid_SP8192_LegalTTT/train_gpt.py @@ -0,0 +1,2 @@ +import lzma as L,base64 as B +exec(L.decompress(B.b85decode(";Jw{5fL#DIn@VT6Qap3bt~@<3h>ok~)Km^%c^ys%R{D_%yAk9-_tV7^coUOo3$w>`(`ci)t`2F7>r>Ltx>>S2CRw|7ov>Wn1e~_!RLQ=%V9g?)G3yPsu%SBy!lj1PaC-x%dDmCDOZ^r^!)+WWz}ejKXTJ#^U6Ra!};QocHHXQC+4UM!QQ!-N5Xd|%~a(9)bTYIO+>B~8~@lqmri%^qEkQUy074Rh6w7V_#^s9J-3BNA`G;qyR$LYcI?e+loZVWi~B$n=TKFp{%SeHYp{oNWh;U@Ahk8M2$OU%K8B$lb*dRQXd-GR_@*KAZdRdwSd#v=LSq1v@Puul=a7WXDmh1^kBj}Y2XlER!D2E{&{%lV(hz$#n5%+%sk&Q}>{y0xpRgiQQBJeVV0hy8UD3ntyo@(Pv+K7^zVRDt4bah(r8kfsZThb+H1)~K-lIr4`|V#-2R>G7pP*N!fwWd&Dq8C)y=NrG_U_Oz6Q?+@ok1?(VJ5?ZT~&}C4Ks38WRB>3i=I!}H-8qq=&yKJ;tbpwwn~lAseD^q1C*u5T;lKQtF;?zv@u0f36%6SXU~txi3v5iSPK*`fNE9531KaQDL`zTPF$MX4U(-3sY-&?>QJe)giBQzpor7H)AZ#4=Hn#`AoAL7tT){&bw(fgz|eQRt`#6-<>;m*+&$!nf|od6&lVKYYHuOoNgZU_L>E@!O%__mlt=);Hwdc43+CM?sh5y+my3XSVYMO8F1pXuq$fvTU<$mpDjr>Lm){DeV)>4AKAhA?jxjH<-3yYQ#5qz+4c`Utifny+Ydmr4?c_z60#9@FU+U1&O$Lfg$WrX7gCj50O1t`1A`k04LVr;^*~{|@(TS5>#TAjL(B`umc8bVA$bS|F?^2A7E}z7IIgZlY(8Ex#K+nLh0vzlKK=74U!g+sX4T?e3_^_7XB1A(HB{pYd{vHYcak_P3DZ2LAB20wAP+C_9p7R|0}wA=p~JFi&xD8H}n(LxCc5rcmwF`!s(tSf_l_TXk(cPZJ_z`)iV4#r^gzawYQ%HE1iaUF=(KAcKXE%%6Hx0i;?;p1w#dN7!-y!(2GUw()t4|BXt%+05bu$yea+{f!deuk%(g-o}&XEEWm!lO+1^On#i#4rhP{bDYb9ZnbGd5n{*P->hZxI<{=3c-92I#g*mTey8O>cuw%hdwjB!#=GH_0?hY|Lf@L$0Qp+k03PROh)o-cMOQ!b>qfvPNJLTVvCBX24BGgI=_|35Bd%&Vq&!LWECF4!1&J?@uRfe=N2mi{l-S0aW101I*cY_A&2R~zfij0IZST;@;xJYti>{)weL@A2ZOGrq(U-ibnWz0BL;s!=S;`!K6@M501z-dU(OqY0?!!!Tk6Z{9!iH*tDZsjYG`J8UEqJz~7cNEPh1A#iz_$2*Nxo;S{UehRA^{Mf3GV^9hBEKSL(iD!=aKpjYCTqmhYA|h4zASL-v?9UWx8tzm#N5eHo2h3w*`(kHM2e}vDviz3$~a(Y#jlJL?*}m9&(Oqs1+CNUy7g~Z#lRN#>g9{7u~tot;|0qTu4G4xwdXk3eT+l1l$)Vq%}j^^1b(jIvF|OcNb1Jz&)>b)qGiC5P7yS}AvC}VDKORD$#^Ydjg!zDuM#$J+k<}O|o#9dvGrp)*yShv3->joMiF%~orV4^0cl9F!@VqwD`5fjekV@3E`STlX!=JDxbOQiv?Jp)$Xy|Z>g)@q_QYKopPeu&ghhPNw0y&{j?$GHwDQoztHvVU)a0ca6}7{#3^KK1uTcBkMSF$IDQp#Nhy>JTHPK2w+%N#FZ(D)=sw?BkfduBK{Owa(SkBq^_S*|NP@DI(VEWNqETjYsZ@bch5-dlWjP>|)xv+AknhsqQ!j3!=TT%CYvl>o#XU4AApoVBJ;db=W0m0#FH7by8-Z*V~$!QptJuPqLkH-bA#`L?*g#-60qO9x7)rWh{~YY77{NX_v_!Mc-#`(n{>OHy|HxotTLyFAdqCe^bQsveKyNdxf%^ECJDw1jQaV{3doP1nC-IuYoJBS)BjwI+@*WRZpBQq--|WAHx2WWVue@lE`*T9AY1=3wKyIT}9Ss;d##=nZ>!%19!lx_0W91se3dXzq5oIE}=)Lf4xkby*McKg=z&Qh>gK5l~kV7t^lQK_s8TXQqiwiAz+UT7qOmRWvI~~2yt~5_%swZRW#&SB~-uWRFRPsi5WZAzJp1&o@T%9?d1EUEpyP1v5zSN9`Nzg4<9J>%D?ZP~-T(dwGEKqZMPuhgN<|KigW>x{H0%t_&ya;8v^0F=-)sK*R85LA|5>|ZYqA#XmVbFc92&H9WjeO5C!FX%LsiXg6}0#l(Pg(=6hjd7H_7$6NLIA+rCa;GE_3R75D#&J(7=>z|LN$87?M}UpavJo5jeYlJy>3UxeQ{duojamIjZmWv|*!Tjr5rT-K7C#w~_vZ!oIz>O;(D%nYcBK)`IjO`=SDZo*4vJ4V2bFcFg(2@0lt|4uUCPbO&N6^dv4y}sPBwT(0$|M|*?y;Jv@#8^JCr!hxD0=c#R8ALJkOUZ5;?_TS5GI^kyB>q;{eo<-=N|;JU?~G80$0+y}Bn>nRaoX5bq_lK8&2G2D0K(N6U_xX}HirikYywzHoCpo)+j^d}t`9sXluV$o6?ewHe5Ui+m5Y9oyhGHXI2OTu~#~ow24E&_|NZmvkjEEo{?lrj>I+3}kwNN$<|WFHD7&hT*J`96C?gGpoC>Df4aU8P&s$90m&Ugy{5AY@?hVDTc{$QAjsoHqS{ck6snhl_)o^474tl{Idqaq1M4gTm}}RWDGq`oxuuW;}<=ge*lXX+3Fk7GOExz3(~A%nd`>nKrLxi-U((%)yeb9`|*{}XN04z>c7Ok#4FmP|M+baT*Fuu4_Vg~%D*h%0S&xmIOVhF)nXWYKj;F_kSpCA=E?|IY3TP731i4AmJ9{uIj}nvkZA~PCqrx=X%FiI(pX*UhQoq9-g$`cDVZp7ZcaGt$}M)fe&uhR9-a*yxklx#6Au8ICI}z@KWrk3Obx%(^tG4C1D@?bgq2jBnZ(O?j&jyR!8J6j%~%zfEtIAPDKu$5hd4V~`Wco06Vlpvp}HuyKK}fz6t3mD@K4unNqV2DlC&6KFhx<%Ai%h1TodO4gAJ51=G}q7(kO9N(i4X$8MWnd^UE!-v`^1{5*9tbIpjgUqjwfygmDW~97EWp8~n;>1xM9pw3FxHUd_tgGkMlT)SNNWx(w9cg>9zUZzX{Q^w*d#U194JF-wwlAz0yZ)tH+4r_JXO{=3ej6LQd~!naPgtZ;`)wmc&a4dppCSVTiQcc8UfugJge8Gerop`ck3K6;T*^kZp<9Hf-jlYfu+Ncv+`5i&JOwCg|NE;{ox`VY;Ub%E~4C%G@CLJi@0X_co$N5u2iD|I6taml4pwulJ)p!O69folAr>W$wc_@9v9VvU6N+O#a=gX;BimpVU*u)q2XscX=lx^Zn-BN-;_}UkjSaA)uW&+!Y^2T_W8ydgx(`~YE%eEmgcn-wY0id8}v=bSq#xRdSY89OVSts;`59NKaqnBJzq!px7xcxQkwC!%nzq;ACIq57xa9CNC~WPR=_N|sDZ*mo*d={3!J1&)iMAr6Ji^XPO(S$Grm|U4{YYnUtbS1j`5tgw6*^XZGHcn{g#{1)Vn2E4|r#ek2MWQ9#>rzQ3zDgm9txa-#PSX0d6dM`yebz%Twh(oT!pmA+0Mo^hZ(f*S=n@m;h!I4LZqoenOsP%;j#RNdY2pvZFx4)uHo@w&tRGaMg#!x08$i%Dckl;@(Bn`nq>l-xa+7FYu&~4Yq@Vdt+c}5e4r$M9h_8xqG>aHp&?q8)HWa0Sz{jdpt`RF2TQ#ak`F0Ku`0Z2b&|K}-j9!Ag!ByLopEz?X#Iz-hH-XI{L8;k+U1StEfZI9`UEgh8v|1fNGF!KlPDs)l0lp4YCF?m_QdcJRn{uyNTlYhoL&(q5rP2Z9SU>2tYy;UDp^wa%Fg~Hhk(2S`|te$Gx+Ii0m3i){{7ug{x+aM|ib=hj3X>-y&H^d1>Yk&CE~y^DBjF0EgaKtEaKI7Wky8h&Y@UJ7P7{NwNv$D(&at=BZzc4W-VudsUAV!}qh{Bx~xqASW>QiwS&Pp?nj~MhW!&p&ZK!3XYPt|0r=y$NiXqT5r|a3t~awh`ELbbKti#lGw4_Z}(|4CO9mS3kjLy9es(hZKys_D+DbXrMuaf)dQf+fd=>LNl`QmMe|5HAZu3&M|Qc$e&*iiiM1kpmZL3f%xon_T*7vFZe9~Mf+S+JioV)e9`9pu;^&wln&a4*Ffme0YR3eyDzaPl4eJOEcxo}+_<$hvv>BL)>?w7w?zq|h-nRo`f!5Z^Z0EYf3QZs73GD`>p#=LV@%sLW3~V7UBob6G;zP|6$TYwVbdcqN#-p-y330KXa?YLk+7|%B|s655R+FA)bcA;K2bp!effB5mS5M{$`4RUF)D-}S2zDLqE^vwi-W%}HG7E`-9#iZY98C2*wag^L8FGhTg>4~1t<927~iA%U4&gdRuPFnqSz#Pp^sW|GtL`42h!3vJLPs{Yk+FgK!+g~a3qqe(;LMP&qfS#hT%mKhNhcUPsWZ`K`DcL?sHamF=Hhu*!?d1u{s#h*t!VqsV3y_mGfSdb^JScFk8jUdO?g(o(2gC%_^uh1$<-K*o~`R)Y+;0K`JnLDY6s#;ZWB1vtnry0W&135=PkgRY7sTp#l@E7$0*w4Kr<2ke+_dq6&O6JW$*9x7%6WHy4`^yxw#Al;YVTb3CPy~Z;@}r_c~jG3g)%+iPOR2*zg^<$yYfn!U2MNM&RjuDjCBg+-)-Z5SNK$@YUY3LX2>lQFN54`UZRmO7GTUTn(e0S)DjFC0qZn#`W~1Tlo=z>)mCXdAK+UBFc44FEMl2e8`+5f&30d-K)8VmW}JZU`gXNq<|eO?7R^m97LpKwJUX;MC3lNB6M=aQZ4k|KAi4}mlh$J>ZI31_j^-*scF&{J^lIKauwG>6f7cviw1wPmS*>ozfDBu}n&hyDs>b^#XsvZ6btR8gNpO*h-+X7gLNr4n;Gb4JJKwCEXrC|9KHY`Ml?jmzn}65x`!Z9+@iql=}{4Sy>*h6-b&m)4X&g069dds355-{$xntPJ3I?LHZW}y2gLcFlfsp-|cUJQ&8%}s)J*SWRvBXz8D#>Iq4gVhCIUE!HeV@S_J2Dur1!X`9pd4?`0|?>oic&j~O{wG^t#stUrKuH6`vf2HSEUw6s0YDS2H)1kTD&9r^(5Qv(H~=!>`wBE$nA1xS@CN9|rYBQ*A$Qq0u0CJW$8-(-8+kascp$ekk)Q&nC3GRn=<2>E=P{Pyu$WKo(P}w#Ev_QQhD`4O6wVp{Mlj>5E?0R|`+6E(*x4_XsAG7WwH{+OyB?=ghZ@+HKNED%{1R->XEtpR39%RfO}y&~Gd4Za-_fyku%XTl!YIn_7xmt;p>Sa2&&w%UZM^kj0SYG(|W);}iWTOn3K+J$i-2zRX8sXx*y6dS@(}ufe>$Uz?NfWN(#!ifPmpZgXdw_7O>%j_22is^1IeqCfLH9t{@P8g87^ivbb@wKFj2^e}tN(KeUrP8j9I;T&Htn`L1$uT#j*m8QV%*=6l2#CLn_{d&x*L(SHHrfk(@zl+sA`8%&J6h%+LKk409)E83-HAcGBHdA=gP4(Ejt2;;%*Bsrr~L4C69Vu~evF{x7H+zM)QqA?I)_vIV*?PhK-EXVsG%&TJrwZL-kU5)Hb_A5!MFXh=aX|#Ch|gVNS*LWR|DtrBT=n03RP}e@3qiS>LeIKWv`n4>Lp5A3A|oZDQN8f4YLl0|Xo+)2kyWF_3tQB>g?YL69?$9rVe0*e|h_mYIQtQ@Nr`+n#Jpupgn(3qhzsS+S=bniZdRV%q>WR6We6Z3y_O>GitqnkrZ%n&Zv`5}ANvM`Z%Wqsdb4CiWJ80w_@d$0o*uEutYe_>#QH;E=Jt#$%`22Dm6la?)Q!AYPAJI6^-jd3}0vG`y4~t!iWU@C@WY_)6t{}K*Tw^!mrdMz0C-Qs+6KnYkgaQIpQinp4ybr13`soBJxjD*zfjwFjN(90&1Tb)%ssq%NDXFd&wyWQ!ff_Jx#i9g6mpp2UoHbF=#F!I9%(cTajqvE=9^5TEdMjoe-p4S?;>3urimS1<{3)vL2o2sD`WVjTtZk;B%azGTCVbpq(K=M=zpQ2pfR2VOOF8O`B=fvWO}LPJI2)YXhduxYeS58MA|e`z1l_C4af?0DM=hV&77&eK4hLNa!C-+*9el4sHKSW8mx6QI&P4^TCNr;na8jouqxDI_gg9+&PaR6uuy0kX+y>Z7ol}UA_$}a1hajh`6(Lkz!sHo%rRy9&bQqR!F`AUNI<&@w4=g#)AdbNWa=y;Shlf&Ub}?bii#;w*e=GGtsJ$(anmWG46}d)%8UN#04~LZ1@1AC7e#wB5oK5bSm=;v@l46vYr5<-t(d`rE2T5ild@WFcEH{-e)BkFo8cV$!`Dv!rxp)qCch+I8Y~4e#Ud#I|M}LLJgSM0NeUv}8FvrwtL4$X_O$wJybTIUyp7I3?tEiMkR|_U9UqDPU!YQF}Wsg^5%>ArjK{@-hYQ$VTD!_k~Q%3%EVJv;~S0Z1;=)mif+b?l>WC)YA$1vN+r3@>41_3`qR+DPKr=inwgPDlKcF?xsRl9Ty11f7|qm_%Q?BvSXuP(`vARP;^0jRy#I8_4-31Z8L?R7OqkHB9O5?y~}>$CFqEY*Sm+0``e?j6>#Ig-Gcg(uCnAPxl|RBOi<((`X1ZmMd(Hj^>|+AbcGqBzm&?Lu8ZX-L`JCdYK1o5{X|71cL!hX`7hf6X+G-P@iAE_x!+)y;mr=Ud_lc+MZ(T_%(c*IFfTP!+%RR6<2UAzCXCg^}^HN5qjG=qSib-uhE}oenz$u$>B^#;*a|$f8f*uqy365bw<|;d6a5AbU4gj&yu>)j4gF0C*(RgpD;Yne#M>6$5U8rCxw}F0N=tAi9UxWwR24?P#}7Ip4LvVvLd!Qv=_^Ks#~Nhq`x{JZcc+wFD>Z!@?n9Bk7&&-iGfM^9-%T^IZiVhbpwfanW9XZBlgurGVRJrO1NWRUo`);F8@~u)6oi&reB%IfG^ANZ>eT3aLbyfrSr3McF%s)6*rJE3h`i8xVHf62X~KDuuwHU9s|Y=5(pG;AVOZk-iJ`_dSUjaebDh3j9I3K40LwOzRh~+^0&(YF!8Pb?q#~>Vj|H45G)Arn*Na_asO2@X|{8r+f{f$1sj~!LQ-Gwi3H1y@n%ADq5$q?C%uudKU4}m3WufA%~+bd(?pIJ(oTJ_1h!-cjIZGnc+Af?*-l>aNJ54H?`1>$zqex@s2P^`JC_s3M^f;oHW(tD^yD2sJ6+YL7wZxM30@HXM!>Cy}ZO&GYPv3!BM0(?46N$eqaY~q(OpnVI$7o&QWb`$1AM)byJ?1*+FC~#u&UYfdda)h-*DL*~Y>F>~rNDs+inr&%+Ok>n&S_JZ>t)&!uiQs@%VgldfwmHIhZ?wFq*=n6oWJ~xNE>aqtuRcz*?o~bnPk=sFv2vKh685~Bx)yeOJJ50g?*3pf6^qybBzH-=8p5Z*opY512*lcID-WqC)RYk-ZcqYEAqFfn+ngrhxYo1&+M#D50d6_&p>_hZc2b9j_d7zkmleAn^DX%=$?m`Wf}}Uj!1q-eEC;Dbg`Nq5PdFFfprqW;X^_0__{-Zi(WM6r0{q!<_>hf=monpZb$s~iluogT>_TH++QiV-ts;nL(3D~F;GwJ;FA0|cc-3Jzd045!qzb#a~K2lKK691(Mga^I?tYe^WnFm?h0!fXwFjwj3>jk#bBAI#HIzSNk{XZca9M1A6otwIjWu+@=7n&T>EOoY`=r7NzO)juywu|R`-Lyo&ZR7cQ9i2wYzmYp}7WA68KnAjvTX%g1JWcyBQ`sw0HBRO0~$NmLvGX!f;w$ZH#Lip1A9IKR3HSeB+TlOd|f#e@V$#gXT6sY%e1+6?H|S_0d|6bmZz6t$+$+!Uytx#uCw6CghnjG>4P&N0jn3+7-w&i6x-0UGe7B2T^@6@KeAZN5zy4Z_dO8lhB0jmRq%-cEbsxce%FxADG|xEKQMDK$~H;AhE^#$fmec}L>7JpcACqnKVNs(YsMbaT+FD(BsJC8elam>;9hdJ$^_W0?yqI2Q0kR2@NBP6Y~0NUa8`*AeqaSts`A>uR7cXejd0RyQGF^JT_OyHam<<}2eRQ#3e=m)WvVt!H09hyU;b6<6lFcxb=V(gEaR_nM#p{XNRjPB5Hy21YzZ+CC56Ru3kjIj^u!E^gCg06`p6}#Gi*yz=6{rXNghv3c-#r8Z8o!jLb((2&nCk|x9dQW0L7BD2%mbu=5;fwpfRVrHT+&FuQ(^iORSOo5FcL}2QWr5B3eVcBh};48vDhWqjNq6%P4T28-^jEjv0X-sELV-ovQ6QC}Xu;1u=#riZe>Rw3wt*9IBsN-?;dP_>iGF3*BTef<0{8y{ftBfGYdh+yg(zqcZlCeG_dt#P#Cgu)-8QE|y9TygV%QCLM*>%T;3cGQa;i72H2H*)K)EvMqj)N(zsp7O6kWJqMzClxalG;_ygKk5jj^qrU-~>9wYEzrWV*%LxGtZD13Rj7Tu=3LW7(Bfz#O?uRyQ3i3X{A=|0%$;R7Lk7YB-4_hJaP@G}_GH;5v-qZOMTUCkRI@vx*zPUfwx%b0PV-lCsh;^O1UM&0uR_Jt&h(C1Px6Pijn6_OPNU~rGxhqq`4QIo@XQ(Ju$1)|Oz^lXAQU0;s$9Q9(3;VW?Yf2HMnf2wl5u6>-m)xio_>`<*|S?AP9ve;6=UjysPF2ox7>64wxKFP85m0?o?ib7x3Q%Yzr7IqnKe6zn7>3F;Ug{njL8u$322c^XzU$DNk_PkYIP+5j$nM8=q{qp7h@=HB?(m8358k`^N&YkcRBqO(ehovSLnB0r}F-8Lg*auiO`KmD|-kVAB;+uL|*LX0HsRhPGM>i+hb;L9(7H;NdtI6C+;&B{_=ZBuvl*ETW7gN_4J*Ah~*FzK!e4;(z?6FSr^hAUSx~pb}#j;xy$>YKZY_R*WR2}^CW(7%s)67`t-}ePyC7ckk^_DsoHa)7F|#G;C;+dZK-G5A>_WxIEXU}9CtMU^Xz%fhcYh*F;(-;Nbgi)s+r$muj)wst+afHQ}bFU9^98@(TjUf;!k@Dc&SnXqr>X9Xn3qRoST&yotQCq;j!^UR-7~1l1ELI1RM)L)*Xkt0r~uL_8d>!3VTgl2bh0|R!;RYCZyd;Dqz)Q(qWVQYXc+UbiAZ#nHDc1s=eP-_jRBh!1z)MUAxeZ`~Rrttwm-84-@&_~7l2Dq#Bl6;stcT=$VBWi$*%s`VY&yqS#0W@b&cug^(2*pn1B5X2USbivm{h?fTs~f5wCF`IrA;18VOC5P;KBqDUDQFlcY02azpequ{MjdOm7ee$u*~h%;DRFn)i^y8uCsEiFd!5C`Z>$ON@dCpHc&c(VmeCdP8{&Bk`+VuWiY0X|i>H=`td*wD{pP3(aH>_KZa_Nw;RL^+Jk_Y5#^3LBUZO_h)`ZcJ4~G?<#zXNd{&Ea)+qSWO8$2fpK-;V~vPE13hpeumQ1N|k+ML=4Fchb7w8I^CL=2A#d}h+{A3v1JFKcBI#ekvq@E>4fQb9kS40Q`ANCBLcJwxRv^WJUh|NT_;f|~4>ybtUgpu!W$Zst8-`s}o0kPI9M{PIK)dDZG3`!r_Ya->&71-3D=RQ|WO1SK$9HNopj%7eKocI+D1#-8$siRS6abh^#>q%+*6rh_8WE$Nc%mH_-vB-IsKcCx8q!dISq&SJDwU+&&zEMg#4C)k!Pb|MsscYNtd@u}lvQb*R;=@hk%j$I>RsbH>^_R=ed7i{xNTk?@jj1)BGn((UQLD^T(XS6tLQpBzbwvdL<#?7%TVJ+)W4D7r^K7p(o(m^t1jDP99ihO;CzD}AQXUparM@hMrHOa;Be6zoDS6h!nJwnt-c(=2vnSm8z8#E^e0WXEXK{zYHkf9-$5liX$w_pcHE3XK1zr|80|>iRXeR#t)L12d*IsAuCDPd1iA}9}m*`XjsE|0bHTO+YGZzC}m^&wML@%8x3Egy@%oeQ1XycK011sIDcX^jv*wsYj0=*i6Yqo6#&Ep)sn>+(Vmk+Hg$gKF%ydh>{VQMetdD{ZbN+IVPVU3bJZCpT27uxY=(4VwnJ+7MPN))lXp#5BiHm0B6*Zxr*riAAQ-#5HtzwQt2RK$mVJvpZsNYT_DsT$YYWfuv=u6expY-X^`VP&yB^Nq98GU8pj7$jdt?-uPm(BFYwVQ&SyM+f84Hrf^p4~LRUHJX$BNeQN4h0+ltIIyuO@|)J!|-ehlYn2k;mu3kr;WEocAFCpV^I#b^6shvee*cMJX2>wTkBXwXC2?CGptv353qQ61OUMNkSAj!W0OoKk5)t@pidDoOae=SXEaA4q}0I5C2$=TvaZN)bE&PS!vb(h6VtM9BM|ODxqn{QAuzmgEwRZRf#;+@V|=)?0Cr{w4rt+4>T+0Q-q-jdC!2Imz(a%b?Tg;uMxv#26}jF6Xk8PqwuLurP_8RTU|9V7ktCZlABdG~Cx-Phn@pq)nM}B17=8Lbfi(cK!hLt@-48o~tGA=hYt_mut=DDL2eyM};-@H^p4LNidIRGEVj+;)BEf_r)_m+#w|)he5k%L`L7Ps>(8Z*a