diff --git a/records/track_10min_16mb/2026-04-04_MuonEqR_3LayerRecurrence_WD095_MLR022_AllInt6/README.md b/records/track_10min_16mb/2026-04-04_MuonEqR_3LayerRecurrence_WD095_MLR022_AllInt6/README.md new file mode 100644 index 0000000000..2dd2f9e7cf --- /dev/null +++ b/records/track_10min_16mb/2026-04-04_MuonEqR_3LayerRecurrence_WD095_MLR022_AllInt6/README.md @@ -0,0 +1,78 @@ +## Record: MuonEq-R + 3-Layer Recurrence + WD=0.095 + MLR=0.022 + All-Int6 (val_bpb: 1.0900) + +**val_bpb = 1.0900** (3-seed mean, std 0.0005) | **2.5078 nats** | **~15.96 MB** | 8xH100 SXM, 590s train + ~81s eval | No TTT + +Built on [PR #1218](https://github.com/openai/parameter-golf/pull/1218) by @clarkkev. + +Previous: [PR #1218](https://github.com/openai/parameter-golf/pull/1218) (1.0979) -> [PR #1285](https://github.com/openai/parameter-golf/pull/1285) (1.0912) -> this (1.0900) + +### Changes from PR #1285 + +| | PR #1285 | This | +|---|---|---| +| val_bpb | 1.09124 | **1.08995** | +| Recurrence | Layers 4,5 (2-layer) | **Layers 3,4,5 (3-layer)** | +| Weight decay | 0.090 | **0.095** | +| Matrix LR | 0.020 | **0.022** | +| Everything else | Same | Same | + +### Key Innovations + +1. **3-Layer Depth Recurrence** — Layers 3, 4, and 5 are repeated (RECUR_LAYERS=3,4,5), creating 14 virtual layers from 11 physical. MLP weights fully shared. ~0.0005 BPP improvement over 2-layer recurrence. + +2. **WD=0.095 + MLR=0.022 Synergy** — Higher weight decay (0.095 vs 0.090) compresses weights better, while slightly higher matrix LR (0.022 vs 0.020) recovers quality. The net effect is better BPP at the same artifact budget. The 3-layer recurrence needs WD≥0.093 to fit all-int6 under 16MB. + +3. **MuonEq-R + All-Int6 GPTQ** — Row-normalized Muon optimizer with all 66 layers at int6 precision (carried from PR #1285). + +### Configuration + +```bash +NCCL_NET=Socket DATA_DIR=./data SEED=42 \ +MIXED_QUANT=1 N_INT6_LAYERS=66 \ +RECUR_LAYERS=3,4,5 MUON_WD=0.095 EMBED_WD=0.095 \ +MATRIX_LR=0.022 \ +torchrun --standalone --nproc_per_node=8 train_gpt.py +``` + +## Results (8xH100 80GB SXM, PyTorch 2.9.1+cu128, no TTT) + +### Core Results + +| Seed | Steps | ms/step | Post-EMA BPB | Sliding BPB | val_loss (nats) | Artifact | +|------|-------|---------|--------------|-------------|-----------------|----------| +| 42 | 5,540 | 106.5 | 1.0991 | 1.0898 | 2.50733 | 15,961,029 | +| 0 | 5,536 | 106.6 | 1.0993 | 1.0895 | 2.50672 | 15,955,962 | +| 7 | 5,538 | 106.6 | 1.0999 | 1.0905 | 2.50901 | 15,964,018 | +| **Mean** | **5,538** | **106.6** | **1.0994** | **1.0900** | **2.50769** | **15,960,336** | + +### Rule Compliance + +- No TTT, no SLOT, no eval-time adaptation +- Artifact < 16,000,000 bytes for ALL seeds (max: 15,964,018) +- Train < 600s, eval < 600s on 8xH100 SXM + +### Run Command (3-seed loop) + +```bash +for SEED in 42 0 7; do + NCCL_NET=Socket DATA_DIR=./data SEED=$SEED \ + MIXED_QUANT=1 N_INT6_LAYERS=66 \ + RECUR_LAYERS=3,4,5 MUON_WD=0.095 EMBED_WD=0.095 \ + MATRIX_LR=0.022 \ + torchrun --standalone --nproc_per_node=8 train_gpt.py \ + 2>&1 | tee train_seed${SEED}.log +done +``` + +### Credits + +- @clarkkev for PR #1218 (4096-Vocab + high-WD architecture) +- @abaybektursun for PR #1019 (GPTQ + XSA + BigramHash baseline) +- @msisovic for PR #1204 (depth recurrence concept) +- @dexhunter for PR #1285 (WD-quantization synergy discovery) + +### Included Files + +- `train_gpt.py` — full training + quantization + evaluation (20,302 bytes, self-extracting) +- `train_seed42.log`, `train_seed0.log`, `train_seed7.log` +- `submission.json` diff --git a/records/track_10min_16mb/2026-04-04_MuonEqR_3LayerRecurrence_WD095_MLR022_AllInt6/submission.json b/records/track_10min_16mb/2026-04-04_MuonEqR_3LayerRecurrence_WD095_MLR022_AllInt6/submission.json new file mode 100644 index 0000000000..d25ff4b5a2 --- /dev/null +++ b/records/track_10min_16mb/2026-04-04_MuonEqR_3LayerRecurrence_WD095_MLR022_AllInt6/submission.json @@ -0,0 +1,16 @@ +{ + "name": "Record: MuonEq-R + 3-Layer Recurrence + WD=0.095 + MLR=0.022 + All-Int6", + "val_bpb": 1.0900, + "bytes_total": 15964018, + "blurb": "3-layer depth recurrence (3,4,5) with WD=0.095 and MLR=0.022 on all-int6 GPTQ. WD-LR synergy: higher WD compresses for headroom, higher LR recovers quality. 3-seed mean 1.0900 BPP. No TTT, no SLOT.", + "author": "dexhunter", + "github_id": "dexhunter", + "date": "2026-04-04", + "pre_quant_val_bpb": 1.0994, + "bytes_model_compressed": 15943318, + "bytes_code": 20302, + "base_pr": 1218, + "seeds": [42, 0, 7], + "seed_scores": [1.08980, 1.08953, 1.09053], + "eval_time_seconds": [81, 81, 81] +} diff --git a/records/track_10min_16mb/2026-04-04_MuonEqR_3LayerRecurrence_WD095_MLR022_AllInt6/train_gpt.py b/records/track_10min_16mb/2026-04-04_MuonEqR_3LayerRecurrence_WD095_MLR022_AllInt6/train_gpt.py new file mode 100644 index 0000000000..1371317adb --- /dev/null +++ b/records/track_10min_16mb/2026-04-04_MuonEqR_3LayerRecurrence_WD095_MLR022_AllInt6/train_gpt.py @@ -0,0 +1,2 @@ +import lzma as L,base64 as B +exec(L.decompress(B.b85decode(";O@IW3|#;;n@VT6Qap3bu0*k?ZQ#cZ+jW?dytN`lF>W;rcxPma*wnnaS=&XhgXsqXkT^uIOtJ2AMhOWukX|>l(I@ZT6}KDpb&(c%hYrRJzA!0gHh{h|(XOu%gZVfwfE0Q%yeYB9LA&r*mL&kLB}e`jLfo&|-srgy*-A@ZGN@pJ#%f0fVf$qDir8`dRrK0K6p=r|vw}@#!_h1shRuE$uVi=QeQ~w;SYepkcLQAKzqv^(15CFbuzQ66clVf#^X@6NQ*L*2F(|uPOpk7j8SUJg0jZ|<7NgAws}&c0-po2%*q9GuYw(0+`!gv83tuk0scvwnUS4Mrq#KujNZXD?2a;lb-&I4Xt6Al?!FW%g{Vbsx*jNj0xC-8U!I{>C$ki)z^t8#}u%U}Vt;n?@mTX>ucA@8KJ270OhLi7qAizFsbYi*MaV-gOB-@bn$T@9iScQ5^E#}B{KrT>S0s(E4d{}z(Mu`m$T7`nf)5m8)41Bu1Hvq>qOXmh9rBFGFiT)0?%@OIOVM&bVQ?o$zanFP_dgN$R%n7njx4mN-K@$TAMqD%IVPTbhBdXm#M8EwV;yk@dcN-z)!9er|CTj=DJsS|njq@z-t6S6FnNr3>R^IKmFu15N&kRW@bJy-B_&s$0&d1pX1fPur0N3ELy94Q>kC!bHw6Z|Tix29=;S{UtFFt;swWOY_I4TOt(1DCl@EP`z#_%N;K8WR=_`YFC^dgog1V5En^Kp$8VHI?E6A0|_U}+)YKlj&Sca^bQm-yh1d+zj0e(g`k$e2eyGHM%$*=U;_O!9?|FQ+sLlUGr&3EMG7OaEIg~?_l@uSZ!WOp$fY91%tsOxBwG(3D(xiMde1l@Fkt@xDobH>sVIb>G2U|5`XHt$2v(2-;QiF0#Cd1-33lw!T>2ZN1DH7@nkm^t0!{51mOQSlFq3`sb}AS0}WEl&UoY@T3XtZ=il9K{fQUj$D0Z(u8?PgNo|(wu-dbOcS(_vaEbbbJx!a>bzDzPO?#ycLtnF-FqTFLMeD06!P*GeeQ^Mb@RXFXpkLSZEBdR}IQ%lF*C7J7LBltAWHKPjY}n!+UFjU0P00IlLwTQszh;Rzp!F-RG&_r>f6t5mg+GI{S&&OB@!9Zo_oD_>Vu|NHC~BpQ(ATK21F1bEAhlM+0dQd%!Rt_F#21gBapoz$unGZd0w&3aDUbJ~K^PGnM`*=DlAkX&1(8i?j8Dd}@njRs#`cI`W63c~LKyE9~#Gn@k?thWNFeXgw%?&7T#CE_2l+L1+V$IIxx^(DW?_6kwMekX_>e?$cnoBHJW^BQ-G4ft-vxc$|&Ef~VH|FIy33A0f1Q6-2jDQijTD-pkd3KLwsXJX)R=EGpM)Twn+@Xdgx$BxW9(=>GYpX-E{;^+w(ecrT`uy9j1QqCuXt7#uHz>tdG}S?qR1ujI17Q(&S55rbjwwqpJV(#pzZ6LQ-fN|6gEbZ*v040;v)E~%+oEe$N3yZhVZhCMWnP-uWNRm-yVAMaSr&L{2#pNLu;fTP!2O0z^iG&~b5TXZdp!torN-22S^%(6Y9`j6^8)1NldwY4G#rRnA!zU|!H){|;XancTs)qV`FQ0kd%k)c5@l3trAe@V!sC@7QlN#9`G_F|-sAD~n}Jw$PjQ)k-xyk6+*P31sf{&49C-hOCMyMCx1ShfG?VSMNA?VJNORISqkKK>wPSDgpx$LWXsf6^)pHy1zVcF~9Z;tjWwNHxm|nt;>Ic%{Iixfb%Y7`rU?H*WsS|SFJ#d-T^uQVw8YnV7_Ula*+MIH;*Hp9ev>@y}WA;d5t)k+}$##tmJQN(gx;DZmqlO$I|kB#%_{pYuHgG715BNOpfEX<^z^qi*)Z93^BuMN-BMNEx;E{OqqxiGe;h{Qq$6I^?~(x-ReV`ZMyz3M+=O29Nebn35AKD@?mYkz=D$h`6C18|jPS2Q7Mz$dg-)ahL;^AhH$X~|PY2_krs&$2&=D2g!V5DYcb1zfhxKw*RsrNDmTx^IMeb5OnH6=gEaxUiSZ$7(#E3^5Ebd&@ZNIkdk$)sn+`bLrSKR#C-(a(&Li6(V-Miw=H4KN%U{fPeo-O(nSF#(4L=RVou>9BO#o*WS9(ID0nb_6SrZ7RBZ&JQRi4B!_gT6Vx&0tkv`IZS^Nu;47gQZM|#kOU;Pa>)Bn%m9_yhVl2;n)8S)w`GZ_QVvrLS$xCd_lj6GiFtrUYQReGYl8gyodtb!h!lUSfVVvUcwCh;9o8D@LENa}6aN98W7CzKhK(5OelKIlMag-*&EWYb%uBey>g`#qQjN?0J0Fv!$C%JKiOCp=_X!{WVL-QjszH4{Pb@7@%Pz7M!*ype)_cse@BGPKh#y377EPv}_<$ngZ+@ND`ON(eQXFn_{?iUxvqaLX|yqqC#b&Eq=i0H!aW%*KKa6(ys}3Bm2EB=7`O(hkynq2(t%4d{11oP+QzCo36);hT<_fIw*iqDLpyvI`^&5K^a`n|89a4@%NXqB{y#}VPdZGGTAf6^QCk^wIXmcAQU0ZsJJ7{Aj-YUdDIXsAC-Aorh7EBG$^EhUrYtqz!1BEhFv!zxoM$#39JEoOzdjR%n!Z)3*ug*3WnNKDovQ`5;mfwKl!%P5QHatTk%a57gNLmyFdWzOtYGycG1!61mIvR;W$rJ@nhdWZX+WjcSz0%(jAsgk1t2Q(Fd1LtemlB=ZJLpBj0y2EOGS+~t@re1S||Hys#-Pj3-0w1iUcqnY`sv%*%GLAHxxhTYArgb{PH512ysE)qD9e(p?6PJ*k10)!(GGWF$O*+)9&JkNlcMB)xVs<~n@KWS6crOQN2@~Dj+26;$Yr^DnqlZV=*<;}22-MZfh9eJSRo^N?K@<8Mi+?Eeq2Rz>tT+c41Y@e^-fw&|sNH0CO;^SOAx5F~L{h+a5!I%*a|QH_GX&7gLbF*0l@O375Mh}De9XX!Ylptr?2F%p0l(QTqS(=}%JpEcMDD1=HATzO%Q{A&3@;c63}*ec#LKVh!CqB+WAE$S@0G5J|RRlbP)M?{FVoB5d*lmJ=u(nN;lPEgyW!-@OFpg;Gz>`0?5&PJJ+WkWqR*689dXRft5R_wMp}J*7jT!HEv=X{}2QEy0M*pk*v!tsIE3i=fxZfn#o?9js`LX-=7eROd0ORtdb#6@SQG};*4nT%h&s81Svp+~n!4(7rLLCS4Qqe{Og6I&1%@LjUS-D{qxpar&9QG+PSf%H}pR@tWsA`FBOf#1W`m-sEUJOltS5om2vQxBA&Ru9b72ENCo(pX})R1eMFpX89CsQ*9=&cCLHm3sJn-n!@7S}N^^cO%U+6xj@YAh<<1CkR>ziGH$;n@5>`?1kL48kfC1O@U^w`?c+`0O=#CLqXP3Ka<=g0FKOu4K5Vao^%|DpeDrzXOK3T<>O6WOHz_l@=z^IG(4EAynt3QP&I6XpxzUAd!MIhsB@r-IUk_g#;0oX?-|296+aIa^esf?24#CC0e2L{=m5zN+v7C5sc4s0TT6$9J214v6`uT|Xj8wDmdD~RNoBD6ZH$JK%-u!|xRCskYJ9RGBs^a|df_^tmCn&1CxMft1XM53CwdmwrVm8j^jPHVfYz<1C5P0|k{hYv)H>;Klrc_2i!8O&4r?mpeR033Qtu?B-bN9bNo#Z(C+1iu`W!3z(Cs!%+~PTq~{sE;Hb3F@W+J-?zkNk1agvL)^URMWHK?qVj9fE3I)9q}M&RU#{Z4lJ3%o~wmPkUR!l1ZdH3Brk!HTg`FvIDTe)T5SvuhqRTuIZ&XM8>-dlJINtM3QI40Zi%L;LcWgB>3;vV1iFSHrfyZJgwG)tv=<&^4G`(CpUs#isu7O?VD-u$y~cB~ae{Zx$xV+B6LaLnc=+|1&v2q-_LF`H-F_4Y2sDW0P3rPeyc%CN-bg7Jsv*HZRUhlw(}!|GWzq-qi49ywI2h=ic_3qMRg;NDKMvSQ8E4NRyC(H>kUF)OzgWu4NhA|yg9c$=Z6UQi?5zP(II@y)acezb$A#W&KR>{IRAs}x>lai5%e%H70hR6i&JmjU;VG`P=kjMVu8Lj_EHlv*Y>G{Kzu?&9w@Ohy3d?M#4t`f4_R`Ye7kDSgZM6z6cRrhcdrpW2W*KIX0h0M1`N$*?>%3W*pLt$6nDB$aw@qwJ)x>ZnwYojfnC>(~tA8z6PGIwQVE937ao2mZz!eG8JI5>f$=cXDupi~TpS?(tH>h1hGn{KkSRR(x<0DKsS&@?Rzo_&9kIHlpg^D~oi~dzbW!)TQnw{%^8Y!E69y1wiUN(-tZW(JW)k^P{%o{#kspWuJ=x<{E7~M=fzP>!o(q_w=iq)`%Zssm*5Dyt)xlI5kKV3@x6xVYYSc|?r@%7#gKR4C^%45V52Ov^drb4VuS%sQ*rkUExS6sp1HsL6ugtEdy2_E7d*PtHD{Uot*v)D|nQWwZ9U~i;7BVc47uiPCXW&>X=W||qxq5ma#ICjt`WO~TLRjwXUvv`Jop`Ir0c?B_&njkhjo3X<|+HNn{Gib7f&rRtc6yghJ@NNfVFt`tl1&zZ8s>#ms3qIXqD(fV%b?ysqqtY45YW}}%=fTRx@Tzv0G{4tG)uYqmf(f~1-s6W7kIN&Mh^SWErda=%SbqWA<;dp!yL{LUvOvR6rq${=D0zqocTGnzGHu&5oSc}syJnPRq)EFBo~W0C?T^m$6JiJ03?Ys7%t8M@5N1Rdd;o6#&vApL6dZuD(SE2b;O&~Rp?%%$NDGOgXCg^aG3}{w*Hn?awUCDBMS>QEqh?P`St70CYC`obWiN4$Ymp`dk{XRC6c~0;Pj#x8&|ZeCSG8cxoG~T%8;84u5`O8GIfZIxQ_EG>ayU>B^aG^JG7t!GfOFU|X3eVg#wl1KReieb5Dc;s%BJnVaJTF9U46t7EK;IzrAi8K>55aEZxIbR8rth|i5F5kfr3|p2tD_U=a99SM-p>u3DNtXZJ`z~$bm}#8T=n7%+t_>SXR>;6J7~d>M*iAJK+c@&$OfJkDN4=lV_-Y(xNoc_!v5wc&g~*1HXyoT(E3T#OcQ+lbvW%gsJdrgWQ&cTOm&9gz)h5h3MVe`-q?z-7Ue>}kb74?IvZK=Nw4{|W+W4pddGsr8Rzz!A#cbPCheBFMGk0Bo`gNV!a7WH9SG#gQJ_QyGa#UVit%l!8ve>dy#>2l)TM)E!V&9KtOjAHHbyo@y_;9b64j=?(|C%Q(p><)$<+hfOH>$L~6WAo^;@$$?KTs+l^Z=%(D1tg&51oDnPW0WW^a^!bAs!V|pLzUtO*vIqPI#^muLR|-UrV2vhFRL0{y{e6ZgD$7ohQb>9yCS)rVFzj|EQLCHFWc5v2(NiHD$MeaNOt$LMyw*v=Ng+n^jUIv!(mZcriQb?Xkpr=iYbKmcoXXe9QJ-@RZ9sFH4vgvK*igkxTGILY#`%*x`;;hX@IdcBkFoQngsbkllvb3>)~DliB6}R%I;Hxwp5-ng@0-h!AwaO>%keKcAK5?-z;!Na6FTbZrn)%(J7Ir2^mTITL+T$=DU*Ho4Me}TugW@r=Wrw?$xq2r)%0^y#WvS`B4gkAZ2*AwQo57amXJAvp1XzQFQo0f5+u0PcM<+Qtp>aG`f_m$62x)6{4AgTx-bCK@dtho8hBA#0tCtj-}%;vTLq^MwnTL=U4v-X=Le@c`fACZ}$do@2h-d4V$!Z15aFqe%vw?}QWRo-1=`n!y63syoo&|Xxw=c3;(wc$}FaO~U9%(5qZr}jG5Dh-?B4kTU|L>~;C2Cn0Y*IJTM#A_eEkX**m1r|b`F9Na&%m-0u){Ksbt@-5}C)ArP5C&0*k3GLNzrS;mv%T-ff}cs2=?Sx!QfEK2O{K#4E3U4}S=ZB!U{;`y0TPJF3OZj9pd&{2d5?!WF&yet<;vkdEwHTw{v5s=w#%;UQ{RJ4RWe@#1HZSsFK--LcVw=gXs-!7Mp+M%a!pSO$aetKqv5jj#m)p+N4n+ta{U2Jr1Q!z5sGdb&Ucr#eLfU-v1)w0R_L!=k)A{Z)W*DO!J@>QrcIfs-}Vrc59asU_B&?Q@3$__!yR>Vu1GixpOJM*Yop85AKsB&C5g%+{5vf!})o_F=z=r8F+I+x^`=4FPX7o@sKhIXdSBM%9^P6cg5POJ7IHuAzF7hvLIl-PrlREq-My*Sxy^6At|tK5y$NhcXtU6}-l(zXY|62C%DbIdB+HQ}J!pRb7wZyBD_(I0QUBW8+>dLkf;8Lkkf-s^Di6y)QMb<1h{^RH{&}2G?T9_=`af%HOeSOs`64y`i`IZ562u{{(`p`ZmxeuEpM^q;l!qTl?QCSblxSSn@&O=+?}&0Grr*PPc4&Eb9B@G*>GjA*Rr{)P=_oBpfmR5ReX$7^}BrOhxx1~{%g(2@)>I2RICsavOJ@euiWa%J$E-JB7jJlQ7Q^wjji~COwVZ1qM5Ex><52Xns7TWhP#H4Z%#Rgub_E^^(*q;CR>_haq8UM{o?l}_+%PKCOJZR{x$Jww~qVou4c|o-gRBkjX0FLmI6(No^=giy^1pa?N=7c4sV)n&>#IC<#%NHG?hpe*HWfK%};(XVpuJ5_14Ju=PM_)b>&D*8l?NHP|4ACA=_8%x+&jqOr1I2nC-hxqj6GhU?>JyTlW~)Jf^mYU0pAJ!LKHO8m;*<(1qun0X4b~qAINDCrJy5tCmJYXB%R-2q-_cRhb4~5_kai^&*htY#o`7nsAxMc$V75OfQ+it!bvS0#Rx{s}v7duqXc$9(1I>(zNy+pLfH~9Sdr$^_|X<3Y6E@K>lM89924|*eJ(+B){7k_2|4VF#8q|3_pOn21uW?dS?DL@7(Jmo40Q*~;G<1^Nkh0Ya&KQAy`kg~C+H{94(w(yF4_B)`ia3GMAS@TNL|CD3L9%D?+8UjghD|*bafQ(NIeUN8?fm3y3OMnRXqM*(ZqDW{ZPK2QhYu}Kt$W10K5yVgT{xp5g1|{Z?(3l&Vjd(Ah%%J0zdrEg7SXUjSZg4R_3iiQByU!zHBqMWiZM#c1aX*hE+z6K2`~BuXiEl>r5;5lwf;ws|G(%A8h8@LnYzX$it`8uNl1BlJKgY=Eay;#B~}4M*JMqtyy2EQUh3h_96qyuF#~vEQ}Hne1HwuQk2XU7{0^s%NjpjBSvq8zwK}tZXp|Mjh=03T;^ni6@~S60o&X03H8%f29F0Z`Dh}J*!1~M6y%c17kQl=4u%SlDwV=cB{xoI&uajaYK**qC0QGElLq@5&{TX7oW-e1g(@79EeR%S{}Jvmhr~%jVv&7K_`@}&bL3JEHi+Ua8k=#fI)O|azGZMYXm6vz+kmVQR=Yfu-$Z6P1=DPDIrf{KGnhDHqtfw_)XqS&u}4!1I5&;IESil(~xQQ)u8Lrr1gdfDXdxV5PRz`4I(3rrO_O7hl1L*VyVp2dK1e{in^mye6xJ7e_nMo&>_COl?VS?$kh_p`f&2AYp>F6@cAw?jT`8`}<-FmwaDGafA|)e?`7StferPxQ0kyF{_Np^q@sb-@`UB&jce%>n4@F#a?xZ4n8Pyt`EjMMMI@pmA>g&MzPK3z)aw){AJzYy8HvpKx(mDU_*RQ%@Z`WF;!anyN7Yi3jzMWUfBa7Gal(9yFTHJd-=n@>Oq$85U{4y%G`R%!R{#lcd$%MzPZ)|*sEZ~_Mc2=y$iCtITOdc$AP|Mgl0bsfkR?KOSqw}Dtkqp)t9bU3sqSd)VVj9Yl=2NV(lgHjZTbN>eAySAp(2bTm1-AWdzD4D;o#={xb9Cu>3tD%oyav}8UQ;&8i?lJf-sXM`fLGy=&rZmq|4j{C#O!;n%`tMLV-nHO6^=gw^ASK3mCl!j^YvwUlJ?L*<9dR$WhbJ)&yTa@!*A|MItqz9*Ds@Yz-CCXBO$Xu7+A?W;fk75}DLsw|R#!w;0Pc2VY%hG(IWnSB1zvZ8Hwg?aS70f0da;`Y9`SZJU?R;HJ9RkORCoW>Z^;5eek1r?reRxi9HMH2V0dp|J26_l^m^M=3wk>p^Jc>c?8VdTbw--&{9NCEX6Z~TXHf~#hR2`tNZ-O*te`@T6A0#%)KWMVzebu}A{lq0{CDog>f*bRRR_6sSxO}-?Y&wgRn~fFhvE}UOVKC8_mYqEtB^R-Q}66@-=l6-D;?-Kry-eg9OrKLu^fj-G=_NK48#~z-hg5@;cC)Cb#ej0B_3pdiVvjuanoOO%+tsW%@UhAjc%;-y4!3DK&Wa$>cJw1?7^8sem1+AX%=r3XEA#)jGJs5##6Fn3+2-h);~_8q_`jfr`zgDb*R7vj^X&A5@PpYNrNX{TS@;&r$Y%ZDD$E9B^#~8*x7Ub1z5IpOv0o4^8N`97S=72iPYS#%<|(>}O7KmsfusNfljgG7KAj9F;{xt=7;3~Ck*sqwJ8X|nSs@4je%4FFFP*>=M6|*yQOaL>3|wyG8OTkYlr67}{8aT!4Mh_ShmwFTyt*r!Hs#T%P85GP<+{S-lvm)DMGo4IK9bT)REt4qBES9ix{o3LGYdwL1IqK%5=+M^J&_^orh>ELv`XFSmS{VG;g;ho;gAwR#?ZYs8mgz0-5d%Au+rdx?k)QREK{OhFR{?`zK%e8~yink9W+wy*ec8{-f0z*`ND(`uCd3Wg_*?qaEu_@LX9vNm>2e9#$>YnNQu8UPM8_rm_#NQk(^}R`f?+#QV-PvB&jsQ15W%aKp9nkQRa!IwQL+OSXDL=qoq`J@FVS(;|AH(l9o>zhXc-!=7vs98U2iCOBk{K&IJ_0uc@cQnNT)ht$tW;L*IO9^z1&OsQ#|wrxNUJujzH{)8kOmD9pO`lhNCa>$hpkb5mh<%Jg*i$p7Eh-+EiG&x6zS*?bLqENOOsAR0CQbNfOkNLN&)-xoMUJQU<+3iL7p(mt5bz9M#*$umCA#ryMyK>CR#q;mriHGQl+6Us6`gq4Sp(!6{!1j?Prp0vA)yoH>rkqcy>LAAXM^KnCI+{+V9=EwQH-1f}Z+Hhecdw-fAHISa?VqxZjY2*dVaMLUn912@T7v#vrbecAP$#iTaf`Cf7V<+e-bk!i+kL_pJEo!-BGK5AAcUAN*$zc>!7qPrj>x!tygrUiD-#W)if2S0YR3oaS!rzNe+T@YT$QRIj9-4aqy58;$pXAn>&l`))P$9w=MxI9uWpoV>&hcM^GhQ`!=TMLL&!w_~&}oQxuSkR!JQN)+xLHnx7&CFt@o9Dvi>LOzw^dp7}559st>WNRRoQ|J$uql81O7yqXp+=%kCPDHRPnGm?$b<=iUMGPc2$_rp4#h_(ZhrXK&dvY==jDrK%wxVppfm^Hw(y`=27$LOgg)x|0l(YXu^XD8aNm-9|{knc)|#gecUA0ZU?|M@{Xy{9OF=Fb$RIRhdmBH&jhxoaHhw9ocK+000U70TXF2fucRMSPnz4+bSvgoqf01ibYDmf#9nicP}9pro{V9rcT1fEwEzZDSvfSNQ}}R3Cxwny>0OIGrSu*`WUtd!rdOUY?hQBcezxli6OSvm5=<@jN=g{7UZ*W9pZ`R4p(B25g5A|8N5>Yw`4_a;I~av$m3*iY1;@-G1#SmPzA%wWph%Vt9h}+&r9tXeD;<6og}3b);MIXy1e~qiGcQj2I>MO9X$D{fb$&s!NH>zI8q$$j4|C&3ZLWXM_@0N!wJ<%C&Uxh1e8_g$VeAD=6Cj33#ON;1D5Cw#Mw8uJjkj&ST$IqbZ9SK>uy8=MFgz(mw|E$-hpI4j9kKj?8HYc1bH1#%cwT$W_fTg<&!rB!-UiC4kAJ_uJ!jhew87Z*Se@S7eh*FsUj^INWQXHO0Oz4UztfIA+e>sYYKur8bAeKysJxH*!I)Cw$Vc3`do25)!9}O990(?N68SA#W{GGb#}tMUj4$-(mOFmE!|HC9+Fa4>dYWN4Mlfc+@fFu&8sR%>$|Bi|ezwHtRYt*|>e(j7kx)pnyuKlVr)z*h@J5P!Mj@0qqK}Ow>+RGD&rWT(hmlDJfK1Z4VAbuA`uPj}(P#CzKKOx1C1G_b(S^i>B5Ck}Jv4Ce1MZDyBp@CEg6i<3bBMi#C#RZ2OnT+|i#FP}F^e^abrm@NoVUvnuwb;2bLJ&uogxE$Pri*Xo4ZZAj4FQYz;2|CTZXxJA(jDV@(j9>?U8~fE2R0WlSc@Mqv$|35je#LKBcgj@i>Dhqi=Ur63%Oi?s~^rC+z-}k&8Ay4&WD^F$4}A#+45G3LZPvM5mrPMq(G{~exC+P(&gvDApU8|py`$SPB;qkl26x*h!`&tsxG22R5eL~bD<|gpi?58Z;nowFbyLv_9;xZl>@pq(lcyH9{F`=l+Ih?edYHtbu+y+TRX0teY$BdN*@A3GDI@HBRY@Q>jK|&SES+kn|9Pq*mE^sMmW5&zeA$+Ksw|-P_o;sH0^{1gCqTjst0Y2u>NJ9&SIoY~5VyKyp)WE~IspQYIB|Cf@3|1d^}Z;a{WI7)qQoFvo!fLn5T-cE!UQp$nR>(4)a?}nu%zg-0p9tu{bV``FBlOw(C+F-hmdTndjGaHEGS3zvC^MObYkvxRpgM6%GsH$z1U!^2TsFv8h7XW$H0FzL1FOU$byu}S*u^}5kLfJC;is9yMvmjvxdXKblVJT~tH)nIk_pZ#A)HJ(`X1E5suV|p`;|93IV3}GU?lh@e57YW*4#r|jW5bqcN)%k$R(VY9CkMn@c&nCw)YvAGKF-;P0K36V%o;2gp!GEkj0374kBNWRq{`V0j7jG-_^2FwE8-trg>t8&sbP`nj5MJy@H@vKQ~T%hdPdsyWh0k6eVz)^zmbMsNR_FQFb|BDcEWLmqm&7MJzne&Q${fBqdep+XyEt$qA2XA!fX%Sl%XAhoxB>tQG~H&FUd>Tw(c;s{^DCo$iG*%QqozBIY(-eysgJ!V*urybPw&3p|C*dpIG-49HG|Tm-bZ>!3T2KFNo_<|u$<1eC7*C+$RySHs0H2ci+3NoGGR64OU41Bf-R(N=pv+s}jm#SJ4b=iTR|${g4oToPfw5v4D6z=c{1-IQJWK5?-*0tZzfMrQUjhqI1-OBAOGTa$8QH=>hDHAMU7Dav?9J^tTBx6iT!OOcp!483*;9%5Vd+BB2>;+Nh|61t&72XYk9g_PA|hXA_dVIO^2mQnS&huJq7M(<)ksryG<#WaDS9T>_!wnkQYTYk@=Dp@#?XBCS2QPA#i!2M7dYz!x;@2(jZAKk4hPXYfu_$%r!``5}jQa3+_!U;7@pUxg|Xp{<(z(`0Zd`_C~r452>UhbH(Zml4?A-aqolw%EIE7YODZ-YaNY$9&j+OsVuFK?P6_!;DW-PP>2*UJ$BoLWbOnM*wysG{coY!HmL3sB(XfWINT`zpuErPWkB^NC+p)5>@dAV_#W%i1NICfK{J8|qiX69_HcIi_?x6gGwIrj;_V{i+-i`It1CXSJ7dPM<#y(jsGD%C(QR0-?$Ud2T6is7&B3gH6l|B#~J?|C%Ws=nIC-hLJhD49|HWl%Z#=}YB_}szFR~MoFkLE*)E9oN)ScJJneROmMI>+Kcsx&P;Z!p*UE>gh*ACDtJxc;3&m(+hGM}&dUVDK^Vy3o%&9SRT`<(J^03a*TiKr;#X>*`;Ue#|S-RhZ-=#f0|Asr4g+qY@)xe*w*6)o&`ZGkApiD7=af+_#kg-9Zs-^0E;G;)|GudIm*@8v-72jv`tQQtrht<;1-lvlB-feUvu!JLYIG)01OG#sY4w+$9vZf-I+q9~ZPx#rMbD00)g@&G#f?~}0A{7c!QA}|90q3nxTwk#9To6}4dY8Ga$?LBxNOaSEuY{OHmlJlK|tnRdJNw-1ge8StII!bgca)(`^QMp1bMbbCg#1`ItC@EB2!__HP5KRf=n6L@XJLADYTr+%nUZH7)AKU)~Yc+at%TxCq4IY8*Ie4~AZo@nT?Or&0SG(A=dNMB1?&}EhO9pSnrS@nS!ucE{RoL#4eiFxq3j#PMGK#MGc~Qe`-fZygB2W6HSD6$>@`s##{Hu#(gI_^I;2WMlmBDWtHTi#mW4Ri0LMf2MhFcSVo2Q64D5N|pUwegAvZLjGzcdnx(_5RFSf-j5;U;PsO)xI&K&Iqotoh@T=k5ic){WIKx4%6Vsw*4yp$iGhglN0$JaOO{nDYLI$C(H>+s!~gsP--+Mlg;Bst{KYC!921YDf9JcnMRZU(rSJ&yv@2Jr-inbpkT?0DnkodTruM^?V#`RVVcEOaXXJ<=TAP3*P+3X97Zs>mZ{!UELJh@q<@#B&C!cvv=!+IB_92A~M@K0HK|EOjJ(;cpv?!c#){r>U^RVU?+Hcq*#Xg*8{Wk{zX?H&xlX=*#t)0OGtBogS4pkAveBWB}UjM_hQ6wV89pkoMY4dW_Z3(y(^W@HNq3(VE=GP&D_0MFiK$!g)*&ldm`jOU{xf0XhpfPrX=)?ic4^1pJ%&m5gTb{4ckh>ju_SSrQXz1-p#y2k_5{}_15P`TN6On^K3Da)^~Q=}(Q8y`Zg0}a2u^i0bkpWzp$P*Ex}K-NU&-M3!9?!-Mw#rZH1UuqKxy2Yisr)!sVQ<^ycj9Sz`Of)SBQiKzXD~mD6dO~y-socJ&-kV1MxZsUYyy?I$TnkPV~WD)WxYnB2b7~J%0i(L)e2AQtE#D#@nxY(}NLav$iH|5GAcgZ2Y2Cl#FsFhW}oiPI7r|