From c96a65d023fb89a5276957036cf45087a5f738da Mon Sep 17 00:00:00 2001 From: manarabdelaty Date: Fri, 14 Jan 2022 10:33:15 -0500 Subject: [PATCH] Update doc --- docs/_static/chip_io_obs.png | Bin 0 -> 32994 bytes openlane/openlane.md | 56 +++++++++++++++++++++++++---------- 2 files changed, 41 insertions(+), 15 deletions(-) create mode 100644 docs/_static/chip_io_obs.png diff --git a/docs/_static/chip_io_obs.png b/docs/_static/chip_io_obs.png new file mode 100644 index 0000000000000000000000000000000000000000..0d77188b8c726281fc083ccd0449e6bcd357b223 GIT binary patch literal 32994 zcmaHTc_7sJ|9{)DI@wa$4s0ShYAQ*tnNKKJC@MLpQiMeAW5(=uNftRLIc8lsGaCtm znRLmK$vHX3NSMZ$nHapyyv@w-J%(!c^ZEY#)9#X)dA(oH=kswrH~N&d>4vr2*DhPO zY=gO(iS4pwKM9sCTRyOQIrLvHJr}k^f2;^FGC#9=_3HjlHbcvn{kF{96R_a|cvYgguq zDSl1%FkB^si+^>*mN^6Q@8z8RJ6=}uD@W_gmgA&Wty(o&zZRvidGqFE0D6Um*J?OB z$o%$d^Ozm+BJK?f9r25w8cRWXuMs>ai6*g~uvA>l6Qnky8j*JgRpwG7B%Vjp-uxtb za|gJ^vs#W9Vf#tKvFRACD!wJ_+6|4*vzW;l(MQCM59G{&{auyFvRXX4hR%vTo(umKJ}HN#^lwrmDx72Y|1AQhx+lvf`BhE00f0cD z1Nq@Dta)@-66i{16Mg34gC(klxCq+0w<)&8$Q2rda4DMR4jfsO@=$l9s#mt3MzlIx zMrdKHMM>~tUykh`eYAF#W@3feJJ}ZeyoPkDljuSTIZ51d@pa>hPYrkaW?ArBK2QDC zY>4Ys22oe|?mrLJTpn$FQiWpzA^z`3wki5>hzs_u*cx(rv5lA$Hk$@7khqh z?JW1Jhd_kX6v|*8$1{J|8T}07V&Eu!N<6|mhlWs8Q^`SC8YIO#XM2i1KZ1YZeufob z;CZTw6qAwg%D%QeuzYV?nbXYtXPX?+q~LJY4(H+PCRSju3sS^IJnM?o%DIbOw{M_I zhCk5Rwg=elxXr#lj+DelHYGkvjdkLU1PaV3{T_TP;S8^+H@;i3ZZI_z2>)2^n=7QX zP#SArJ`ueS?Tn+GEvo{7D{}-#9{L&Otp4~D8g`OdoJDgV1jCYPSpBy%Eb#dxI4FX< z+I2?iJ_6I=QFX;6hn`nAZB%-4PlZiuX!D3y1ZOn~8tVQ#UIhF~ip@PpWs^QU=x?ti zC6A&3qgS&!zVDi2y{f5%J78+X=l8+qLPMU!f=4DUA})(Q+=Ef8^1DaM(tBOJKNB~A z7#K}w@F!$i?t4o2tB|*(!c>f6Bfg|oZwOy01glB?mRpDzT5w!Td|4!)FnImzhbBCF&@!nDuA3Y1}w#OHh!>jMPWnl;KR>OlcGCtB?cfc%4L4$gGN&yDRIHG0m8b- zd7JJ?3xBHnzQB4{gs7rpG}d1**ZIu%Ge2;*V{LN>`a16=y0$iRLnNy&gd*Tv&;(rV z*9k}_qV$KIGrQ4K9(*$fbGP6UALG*PTPKZhsHnTe=|7xh%lBXitMD2nm_|-aExV8N z*{D~D-WFGqMe`aIWfLQb%>umxbfQnJ_i_6OYX<*@V4#fTI4hv`;4gKpkIfvrPV+hY z^oQv)pUJAU?eV_8`e1eF>(~%YN@fRf3pe=*dYe6oOK)KEz2yUG{A=C6}r`)QGZ(F?6jZpEI;>G>hz6%}w;~K+LEJ zo2ufyEvk}*$(k3eLC2|TXK+gCs_$gpM70<4?M%H;rbQlLm35F_Q#k#34|>i1qg|FC ztkCRbH{Qn?d>oM{YP`Yddrj%Ki&Ugm-(|@tbJ8h>0MRO0_`cjtBqUl&$NmNrXpqK7 zVeuT%S?nroDC+qOoI>oI-LtIzp#ESYZnT@#QvHa}qIuD9`}R|-CYJ}-WTNkO^r2ha zctZSxq~G10V+f%4|u=WFM_veC-?D!xbO+l5OAfjnqBXk z5@(pVB0^ahUVpuZrrA#*A!-#*>>x!4sBP!W%$>+gx^td2DcCj_P16|OXwR~lj$?K_ zLsW|d^0gv@CBV9ON5n^K3^Hv&kao*q64luSsPifP&Bep6@c!S*t)jf~B@r!ui&{wW z0Z99hI&4xZ&A5-it_PkFnsd3tqN?{1TjI?{0ka(6z#Ad6UcObc3Il%&ZT0oTK2OSD z+?#JWIGHQ(ZCL~C%MYZWccfA|4c9`6NrNTlr%)kr?zOE)P_snU1fo8NE`qbeVe}oo zRgbkWiXLHnecPw<1f<6X{o0PrB30|Nyf>b6YXbC;G|Esu%6|_v%(=oK8D1E zkc`Hu`iam^eWK6@@6<UZgZ02*9moT)Ieo#Fxl(0nU52JBL&1Rb!qZTF{<2q7wR zl+sAIFR!vXQP%~io|`9n@*_UuQB?BCcIT@eN!X1pb~)+3wENEQ-ljxc7YsC7dLuP9WYjV0Jq3GJY;8 z#XP>I_!mM4AB)pzyR~hws*hU34VAF>3j^eI(t_$rl14tmEd*OeGjS7LBhQSGUKkoXA1Am4I{ zQ{d5X7sIdNspTTzAT?L@J?C=>yT2Y9M63aH`q9n+fWyVSRV*J5AOn5MxKHo)kjeTj~{A3*HN9yCShDQ=vTaiW={&uG{S}VGg{vg z^)Y`&00QIY2r;nA{H#vt19r9QhxMtG2S}u8dz1!7aCAiDZpVt=o(D4hxKQdv-Ee2s zfvSr&Kt+10aD@JeOrz0+^?;8>*k8DiN&8TjZf-3RBXTu#P;ZR299)m|68!|PD}<@C zXxKX^acdL=ws3+V-wEXlT8{p4gSy4SzK>LrnSy-MX*A|a2C}9!85!@Qt_*Wp>hUFN zELuHA6h?}-9Egwk62G$|4^uJmK>!*)uFX>x%umdH@IMt?*DH))mllDj7#*U#YVYM! zH--6qLH~Am@a$U_o`{w8NkM4J%o9&03zOg&+?Nx95kvOqb6d4kBJN~Q|B4`pcxtuK zUtal&{$aC6QEOtN)VZJ#7acSxEG1zBroH9{!5)C5rW8M0AfsxAnI_XP!$z8Cz@Ikc zt3(!NC+`U(YOqc=d8ux{5_NY_kxvMp;{q5y=d&gQ;U$8%<02dHY`NU1F`qFpSH>JX zo3-VT;#ZW+doSG8x%E67_5H&2&msLJcL+9Xhz2PFNRmn4exitCwx|1bi-S3!b@0N%7@MQE~bHeQ0LT$;7cK z^Bw%?>{~K#&yU7j5qys5BiBFjpT?diOzVj(M(t=LZi(|4*-87H!`JEX>#V~p)#kd0 z=35jOFWS#@?`MOKLga{z){kYLPkpN$c?VH1g3S`v`q6&2nU9Oh{H-D=>;#b}l_Le0 zi=e5VF1_pl^0HnCGiMcv&2FFjFxiSXXl*0&n7l&1 zY-R9$a?%zQFVT6&F>lutOxdp{Iw5w>`a{qctVN%SLzSk+M#-=q++8UkT3}!=8X6jq zY4!wK!8;XuHnUc>kKyjcZrM+TVUg9B5z4l>sPR$~W3S2>{&n=DJ7n_c6t(#Ve??qa zbSo{~wX`el-G6|ZE;4P9omJw~)+1;#-8O$m_clfR;Uf3o6Nh$R2|l0o1Uy!EMEs6r zb&LMkjp*M=!!LViIZRUi;aLT^0(|1y7KzD{b{xNbsYYGfJ*tbLzRC(KZk3+MF$&$%#4>C z5Ua)>Vju40`X9gtl57$z%bY3r*&9dv^@d-STLLYk=~2#}cTG41jN;CnJ5h2~w)#pd zsC4aHF8vwB;PG-SjDh!>*+C^k>{8|T??+JeHSC#FvNe@tV-odTCN3;YB`!=iIcfXR zsS2Bf7Tt=>cXfWq!`e2l^Lt0jCl8b$Qm%f`rM)rXB_OueQ&U^)LEKsJqyZ8%`JmeC;oc;vCmJmIlM zuihSk(wFPI-Cck3OBLSL=@py@GU>-n;I}^<%-X(DzE8-!(Q0`Tdag~JM{=Ell+6xD z?Za#5X7M&fs$YoHM|!tLdOs>DJ1_S{m^iJIS<lk?qD|Gp9T+} zagky4Qd>UNza4>|+q@55g-JiqfY0ud+s~TTJ2?~Ayp6yiWWkV@N4z(em#xoD-B8pa zFd5zIXCNaDJ;M2A*1K^Ydj+j0qh-(jY>j_qG(ulVEqHxf0E$n#lV{XSv&1wXvF=UB z^LwXCpO##SV$nFi5f23kn+YPF9B)4W$5=|Qhry;SCWAjLhlME%knvIV9 z<8af_l~e@#uLG_-jvhTamo~r@5~j6EKHK`w3ps_4IW%14+}ov!QO9!yE3O2eIidj1 zF;1R}ec<$;8gA|{;dH3PAO*c?BW+vzNK{$A322T#Oich<#@;To=eAQkqVe zIX_>~WS;x#cnJc~m{{8S*S2usC4G5oejo!TQq)~iCEkS6d>lW8N*g`ZVsEwIo zQO-)t^R+u4j7Sz*06x6kER!ED#RnA5_W6y{eH+n-XyY2%1WrEf)uETgnX4t2zsR8R zcl_(1)PaIFqm#b*^(L*A(sJ-)fN%I&m*34g&z`i4wi%ykX>jR54m&CE?(h;gA6Fv& zaC5yRepiu{x`*s_zJVP~)rum~$JI(feGc|pWCLmYuVIrP@9X<}|K)2}K7`bFqut|1 zzFnB6n%^utU^e!vQhUPXiOL2}8pl8RbVtp147J30Hf?5nu3+0j)T>`xBYbfOvIUQ_7$Re`AmC!n4VGa&UV zyfyxl3_U~LvC#{zjL7XZySMGp>VWw--qq8*)c-XfVxwo9)%IN<)+FFvoD+p7fPli) zL+=+RP*Vg|(SlThxtMT?boZ3}5$ga{RLJ%?tZ8C^ggEq(RcK^nLiKR@TNx#ULmynS6vh5# zfvvmZ#Vc{N(D(Ea5i7Y?zGc2q_Y|%+&b0+k5Ykx?#pA+Tz35ScHm&Q}beZtXB!YZB zTc-oI@4+^B<|WzD4>@wB#g*Fm$U4`!cR=l_ir@X~u!aCzC#6`~<6XWsyssXEyVqR)<$%pTSf^4L zszG;5Wlv+>>yeQ6F<*!~cSKJyN5Gz=GC4D#1j|`KYPbd!HmX?Criavpgb%HZV2Ch`r`$!p@u`I-MIOlkH;0Ib;U{8~5%17Zhn15bZLgHTQ3@~8gi3*Hr6Fea0`eVqn#>mv z3enGjnW(YJ4WIzb}@8Iv@Onm^7sxZ1|QLH+Ej`MY?2`DW)*UO~Bc5 z#%UYUF#2~3GO+mSiPRXrYO%D?LP)YjhLX1beby+lY*o5gG^%8l=3c!!{VREQ)oA?P z`?j*;Yj|9@sK1>Vxm(bx8FYf+XzQ_SD&Qu&v&v9#zcv}EXXVS9Y=}Usi5t0Fo27Lt zb0X55Z};Y&LbW0C+Ca7WRSHLiLsR9R>kx5jY4suGFdwd=}+PPSOrs6OQ_+j?*(T#V; zWsZ)i9Ev{*%OsKZ3)Bkc#}gjD4j9|C>`;6u7-o^h5-c>FHYpBMIv<(meA$JI_OTmH zo}v#{p^6L~fGZ>OONBSc6rSRz#Uy*60q=V|jl6_tDy4M(5UMM7#MYX)DTr2^D0fs~ zSIV3;sFpgqG1JdQY3-pw+)MEw>u-x;T+9XQr!CQ+I^xEJ`SN;~MR1tT$ky%MHVe(> z=-l#x1agJ4plKVtzVOi?zkuu28~TtUpB^RSUS@p9Ip$@UpBRNjea(2NSoG8qIzKJ! zAk0HxdrWS7ukU!S-SuPj#r}2=xh|{67ND*T-2sS=>J;44TNw{C5Lc8K6_$lg0QWlk>0Q>Q zx03HBNKpi@^h{>k-d5BfvGghTYU{_MW5o_(J#P7?Hv0q6;TTj6hV(CwU?M?)_hGV&Na#ua3r zHl7JFVAJ!B6C{vYtL6**4VA?Cb30Ry$)FB|m>C-tF}A7=Y3v;IUZ6s|+blCVc0Ln_ zJIK}mx6S_goBEY^)p&3$TnpXLgnCo<-6hQR6s-UoJv$NpCxw7({8mG*bg*@PgNx7H zN-E{?LKCtg;xmlG{bc-<^gaDpwmB(?c1ixu z^pL{P5)_9yeo5sJDTz{P%6L!mfTVnpqS(v(>mfgg=Xm) z_Dh;~tldFWoCV$<0wap;*@yg{gsbBvg|7IbXpp361EirT*zpI~o1Y!VQTuDGnmJsw z1!rD9UB+L0xDVx8TfDzM6ZA8kGhq+$Efy#Id8tJ-|o>nm4D|ue-@%5`(UcCJKwsAufs_&~p_GB{IiHjH!;)w?*_j;7Ls$)F^BXPM@=5Y!#r@EZ9s{Ek|JrOY-I4 z14UascH91O&jhg41~%)P*SS9P>_*QNOeBsQs;JksqhSJ9AgFMWd&!2)3&6)9JlOot zj;Kvr2AM>2OfDGKs#YlJjlaY{0o6zMu=`v{FKRAZ(Kj%Bx#<17ZV!j~$$YKz)1M=R zrERWNraWcMFoc zom~XPnQn!;7zwo+(A_V2s8|!v9L%c4Gzquwut3SGR9dO((;OQ;* zFYpQu-&UTPmd_JhFtdxqaXNPmZiCuM=+!K@7aMD4PEtcetP6LY zofM?1q&!oUD^XR=%cB;Dc)^q&4To7!m&YGS|GLm=Xh||C1^uEa_a|iZ4L&jL5jb_3 zN`A`jm8bzt27yH1(^r?qK{!PK{-{5ET~h>_1{VHlaBq?5s0Qgz(+35hf##z}s*703 z1c>1yCkp<7mJa;kqSjA<9aP__bGk6vdXvYdgVdv^;nm>7UFB%Y{r8&M@>*|&`Egno zh=j@>lDF$gAc_aCDaARA+V?GymYBc5*oV2C(8FvQHc8`9f{F6l&)-x9ONF`=Tkw~c z2B(7YWZ6JuxYKfL_4c=VCNov_rDm9Rv`@woep);jj0>KUY-`bE{fL{q38OBOM1vT( z_~cFb%!T~M)GLyjfZJ}MlRrI)cZmXU$4S&g=WoXWZ)inX=9%y!Uggn#zT}Q0SMeYH3M4e#A64PeewfMS2 zH=m2G4ZQ93;WFyXx-`q4z`+NQg7E|n4SO+XiyvzH8g`RhVGOuXdc*i{M@ewyMTO{= zWS*)*Qdw>j0G1*h-zC;&%tWBG{sNN&0qgp|e(R6nrn(nRi!#5cz?O5sqF0a zb5tq6&;Muxka{%fp5@AaBCoJjeC(ps{5pn3=kbk#=?_9Q>$=H;tc%i9jR@iXO=xu{F!Ux{@z=OOv(d-Z$JfrS{juhI z1Xc_iUEg!@ua&d3urDq+Xye89i7l#Tcczo43HF9QXPZ6O-75*XC@) z%GoXNcuN<(jv~mO){;{r^VyVNyynjQ3kZc%$P3VdHu5+smJM{kX6{((KLWAAg@dPc zj{$T=Vk6W@e{2b!Bi!}*xU_t0>0Ks$2f!|ed-G72E0sI%WhwVtNAzW1cp&E}_=`v8 z<6oAPxBs(+7Myr+d{>9fmx&-+>aMNo)0;LL9u)&VMusyHB9W~;Qu4!&ZP7cPW z1kvxb0x|sTs^7b~O8;BJ91bEiv3D>$+#&oFtyv2goW70=vnApR*FxA*VC0tkSs&NP zHd{CZ42aYy#9U5nn4QoKNSL)3Vr0&jtG4f@1)D*ClrUKX}-a}Hg- zc!5Iaw8(3`srJU){DE;PNiZ66=*)VY1vHK*9zLAHlV=iAprOf?K}`K7IgRLy91v_J zGA)BN4?8@fne4mey!EIYsKz>VRALPLlJ#%U2=N%s#N_cGr2fa?X-KTs%UhSRSMpoa zoFO<332r@BE7FJMxy>n?NgKk-WuxzmzF zL6542dGR;{(%uM}j4vN%k?{+XXG_C86{W!1%FyrIxuj_5@Zdr0)ivmh7+d(s_YhuC z5?a8+6oU_L#E!O3d03rl-eO_8VhO}fjhQ}~VJ(P0{~x%sI(i9LLjq9Uo`;d*HtrxO z((G+5&9NDCLaP*$SZ|bx6v3f)9c_@@^Ic0!bbDbx+}7_|E`0pGCI<*FTcgJxj=@zO zZ@x~PPGUJV?~Wgq^v<_dz^yUx_y@t=jP?+N?SK?O+mcpzyZYB}XGj`pXonhV`n7eW z!sl@}wSDBGb%@G><3Q!47xh%sFJD!xO|m5xRH1w%VhDwUnIlShp!l254>v@d_%)(JHdf9jrR54i8{6@D`5qR_4t(3z}h$h*?l z04{!%W~+)}@0dVY>n|@cuE*!xwZVUc&VO^{mWzt;E4wvEsm)pnRV-~7oA;uJaT{(XO;6=<47TEI#%oRR1vlLXpjAa+_yD}{t5 zoN*<6j`jyz?Uq=ez$h2_`{9@bl-x5W)Ea{qw7FCY0h&>Zx>5<;a@jkB>qLCj@0S+4 z{M3)VkZ?x7{dZW(5*D%=xuS9YPvP%wu1ef*h%(QBS&K9-Ot+nch>`m!_EYY4Wvu^H zN}-Ur?@&?!G?^&I;lbiQ+gbB3MX4CEG3+Lrj6lUhE`-6NTCxlhm9&y0-Ba~88C4%{ zg$Hd_LU??EGgqbdb*#DA^1mdvi zcDvu@{KAOra0Ps}UCJKLG$g+JPMhyQjS-s4Y?}QRA3HB3<}TX?F}?NFl9qCvfa!u1 z>rrr#Z>dgg76m-?2r-jFjSB_yA=jfSarDF=%e+o7n6l^i{+jY0Y{8iRW7fw77d|Nn z(MVV}xZoS5{Szy_6hgv=-`7>vZ- z8<4YlFFPud9R=FjITQ7c>6Q5{GI-Z7nr;_%ExVWZrRG(}GwY^H;4P`!GMw z^fRPz*DA@Ho8(jhb2op)<$^>hm?cTwrw6TcNnvj-g%0@(_1e^`!j7Fvlcl*%iNYMP zFSPP{q4DYkL+cwhuTQp=GdC36Rb8Um+P7~nDOi&LM^QG;jMhH3U?-Hm9G;ef?tB`F zTQ?2KkHYz#DN_^N^9L1NfGdSP?VDdN$}};r6+=r?J($8{5(09;dOY~l@Uv@ws$O#6 zsLT)Hzk&X3S~cIvLec&c4&^RzMM z2gw0Y^W{e41Cm~lVFgi+aN!}5Di=yE2U@AQ_~IZ$O~#8Nr&vk8YWX(A{6Nd9ekdq6 zZbyi8mYb=2G4uC@8@Hxeck;b#kLAk3B}tD25QVcxbpEL;!fx`2f6aJOx(h;PHEA5q z2LU5$aQQc00C`7mts#%#Lcw2x>8B7%@Xw6pcQYR^9J*_q#G z{^wthzW3J!WxrKyB_aY6rb;=H8?vukydmMiM=8i9MY?0Ib2~hiZU3FOTgmJYWr z*x?%k z5I3{j(uc9!L@#0Dy%Z39J!uL$uEl~an1aOnz@>iTo`W}D>|6(B@Ss$nncUIE*#&8_ z#GOiiTHU`E?SF-Fo{>x)mr?X-E<-^oS>yp}j`o5>wvnz-TBF%}C9jws{7=0!%TIyFSA^?yKi+sI+^B*7$8M=I_Hc#-C_=_nlZcV%_|?PaVBtn6HXw7cZh9WZOQ`0rcN=3WM@pR*VU(?26oir}koL)?Lfn=Gf` z6N;X}pyxt>MX)( zKY6sDGwa`_dv2U~ms8 z8spvsc>|OhieOKz_^lU(^5vA8*Bnmp+Z8<(l$O>l-E7Y>iQKJerV(BILVNw5$n1m7 zlTtLix3RiTOXUjjFfOnAmlU@?&36oB%3zhz;s3y*4IsgoA*UwifZb}5zQ5c0@Q~$b z69KlH4$U_)qEzKdRL#7MM`*rz?CuE~Wlbah{REhlhumeB#uL=) zi_qlnR)qH@%M*~M>G>yGR4S#cx~8b=>vl>nJ#Z#U9G*C$Fl!4RIrr`f%nS{wC-rO% znZ+M?Ck2nsgxFI6GDF&aixS`94J)kSyA0RH-K0;md5vsR<)F9P@F|yCug!qFWwa9* z#O{Izk|4y!j5^-N(~$6^i?>&AN)@S-Lyz+{sE~L5;Hu;&ep*0JEu82>{Y^Q4QT_p- z20V_P68OOOOxClpL+AR!=$wzJ2eR#JC~xX6xVqkI%)stk5ob0l5!8?GS_nDB)>N;@jP0-tEOxzs0XFbcJBFGV{{Dx zN707gJE#>f)*ylUjDbMRLk_g0m)6Mxf%w%XR|<99BWawE>m~V$1zFStU_h>LFMVko zOH(1wcTVB(>6VZZO~0c{%+wwuDumQF1JtRgz&~y+X6#x(Leb#F;LdW3ze_P{`PQ#T z9UFoWrgi@=J_!MwwigfM)8D*7$PaAEvC9R|is>KVzsM67D-s$TMKI^S_5so};~7;Y zn-2nB6zA!W`NYFhVRt*ot+u8{tFd=`p|sfueLdBq{)Md*VOfH;vK2RMTDtPiQRd+v zNFY*hVMmfM*(bvbT(4!Bp4Ac%RymLh)(vEAKeqLb86vxaf_A!lzVJb&d79Ke>-Iql zWDelO@X(H67VI0Y;k{bSPXEOV*-OHhdKNKUS>9&k&%e}ok&A#R`de2+e14(qI^(eX zKVwb=5uQ2o$ksxw*E}H0cGyNl3KUpEaG2;QM#VC>Osbqk;)P1me@Vs6Mw|`NT>mXT z`L6T0Dj#@&f0hJ_CW8NjGEV}yW+fL6$clS$65GRG43RxvbaI>#%mV_DpHNn1^Evs< zt612Vus@g=vma`8q7~#Ok1k2WzEc822aH>Os7^k<&h~i_?U4d}{Di-nDgpP5b14^W z{T7^Te+9`HQzIzcttAn-7~t0Z!EQM<8hpTx@J^@-M~f!NqyN%)HKV<0?jN7MdX+Qq zvQ->Y>ggF*$v0B!*|m>Ns|vnm79M?1QYlcHQgnhBx#q^fZ{{U&=W!WR2a-zXgk`}5 z`cl0u#KW6>pU(&H4by zjSi4LrK36!ey~{NSlTW)!GH4T2PKKaeaHqsjvAoF-=!>Am)wWnTptKcZXHOT&rngr z+kK5~cKkOWvc#nPe*jSiio2N_;zF-;EmH1BCO+fepSCCXw%~y2xfcgvr=ghPDTrr{ zXg5rYE3b9j=E|Z$iGXY_dKvS#~$c^g$jEdFahKkR1SlsQz+|>S| z?rHhX0lJChgYyZIMfm?#=^p2ZRXWHod&<@)$J|4$&UP~pXEOwp&kKI{Lg+aM9GT@b zcAyzg7?Bmro*FA>1qEt!kRNfJ3is;dOYahQXM7Vhi_GoO=VuMoWQ zRc>tW;DTJ@nQ{LQyM+*QX%a+hi$VSR0}ID63?-LcWq0nWc=bKGJkX}7Sh@b3&$x|e z)VI*l&K1Ot#50MOJT&C!Mm%$DF(i<}&1KQ@9r8Gms7(QR`Fm*hk~q^Fsv6HI);?}x zEI&Kr@kMxS-2=04k|ypZhX(xNtg=(FRK>SMDW`nx z=Us2xki z(GiW)LKESe_XeYCj79d7mT~{nt5FlCmR2|Jk6=ZaEDm-wKDd7U&r44CE<}`V*@l7l zkYFZu7c(>3Tl{k)^g|v_S)#+e<7Eb!mf|G=g#g!buM*`)$(`5nm;`bc+V#41>~E}Q zGziRmGY(K8=KelsW&0ufjkBNZf=9sjO-6SH5FjrloLW_eE%-QPO8Dk* zL+Me7j#3oidB(Y?cKsL?6{ntW+PL)4#MKux0}_yL_WSJLh})s)TgVSUwxtO$I&=>%6Q4hSjIE!y zE4wQ&X0!O3V@F+xclx{i-S^D5tp;A z!_6T6bt+=Jx`mabM#O#- zxjoaf|6N*;=WCMUJ=}*QU@*e$@1eE*1e+UBbyKqOua|7}ln@>q$_VnJt%}~%pIKc7 z>UAY8G%WO|@*e#FXGG?rvw|9e95mW^iyc?KGkD_J+VysUBxhpSyOir@EcyYblU$o7 z?~En!724UDcdIner_mSfw6uZ53pftAxn>?)!oQW+pH_eU`A=zuQ74um(aZ^EmlQQD~YccS7xA1i7tXKVh3b_=xl7W&3O0hj6$<# z)z>xRg3bBv#VO7i1luwqmD);v0!tNqAn7UkXH?Nd2fEf3e4s&n@b{ul28d&dW0!tu z@~pi3H9W$O0mUKZniLEd-~qCTBGBaj-+|Hb%R5$tivuKS^#z>%n)46dHMmz!Gy|%N zj(b0G#gR!`0#spen(7QtKdt3)opp5~M*`*Ez$rXwlFJXL2i5apyq#yxlW!L-}ZOpsHEfF0)`YrTU+^?vMLiP zj69n`w1-wTi1{;TCpsRd#3S^Tiab?VhY2`0mw#q$6!bpmc)%}_tyRfa zam-T^#Il{xi+f#)4N#_3g{JtpjbF-=Pxv{9kw zz0iX_Xa|pj_Q?M8ZQZ!$UV_1++8koHeGVW0CXuaTv7e?YY76Ralczm3H@V#Ms!S*h zZteyu-6-`XnVB5RVhlz}Lxe`2BaASKtUcZ%}b~f_KpB-UH%=rea4;6N^%;jRwmSq*e z^~13rWCC$Pg-h@*tPQANcL+GY4~lox@B2wLLA$sEiSCc-_I);Z!mP-v&QYgp*Glm? z(+kR2?NSZZ6;9!JDFKafgWQzxTjap(Cz;I&4Zz^A0V&pmRAKM zps}FKBeM>JnLXANJCKU#nA!bbdDbsM5a{vzqxI{qVPfIN;Q)$=O2;BJJYj!b(?Y`LmNP0G(my7tG4^7pZ>Ga@ zY}1Z~pGeW+MY?rO+eXSkt97k4wY#sY*zaAEs8w7!G!d}?F)R+nrC$aX_Qb3J&Z~&n zg=H;$vSmJ)^SCnE-uq7N+-7LEb`HugTkn#jCw7OXtkgeySgn8)DyTqZy}9ePyKw&X zl5M9pCq%o`X7cs&Tpu(UmVD|Qk8~Is`E8fCVceI7RsSSJC9@l|EKG2wwO6u@EL^iz zN>+jj0-#-;Tn4oE+EWqgzb?(ByJ04TYujy zRXJc!P|xX)GbY2aF!QCL5+Y9abfLtWy~o{TK=Tk2pDGK!%CDEH_Ja}^?uYe(R~R8Y z9il$@E(zabnYulO{gPpnCY}Sr|H*vz{|~vN?u*A-Cbz5CkdnAhG_$Lr9L$z*olQp5 z?(fGo8p5IA$C-tlS%N&2A@>k;EKmDn{2E;(<}r4c2t}8*D(=H|@yI}09!(rm*fe0F zzfnR7?ZV=IGF1i_vO)t;FH$XbdqiV1p8L;s*gW@bk~-+_KKfk}A?3aF7$-j2K0lS6 zfh&jhbWp1|?nnO>*cjrb&==QD>y2{>DauR&q0YwuDttZaMZR!JC&poC~hALGQJdTY|m!V z|B(H@ovizixqnuijW7nR%E2gS#@#avNhWyYr#f9R>eQ+coIE4VhC^=M4wF)~Abg2~ zuaD2c<3NE_P9lf-V6S9pJaQ%3+^+y!Tu@oLf+h{A+R!dndeWV>O2eb7k{xmw~Wp?Ntdx(>@ zr?Ow&`?9#M^5e2_FWS7^H_hH(gr?%RZr0d$NfHi+{~#Jg9_-kW1#zICxB`DUJ#xvm zO>>)mOsoAUi?=yL`cXm<(tgD;!(-xec{MkLre;saB*&C`6Y)?^&2HA-k$5JU5xM5j zd*iaerLK2;Y3;|Z!Uj=vV|v9b2U|+gJpaSF{aq~DxV%=JoaTgw%w2Uec69uEHSjbB zieZdU4ZantojQ0F$_cAHPPaG`pzyPnE-ZSSwAFImx>RLM#5p>6g(oX984%Di*@Frp z6w!w=n>AKxtr>dp<|fEc$Jye&Mbq>I)5W>*8A8QSc6X*nTRS-j3EAs%$0%h7m}`G` zsCE73h1DM9f{~5xe&5--5&=0ibQK;y{d{GHNl&2#i4Vp}I^U0Q0n6d~_uz0JlN|>v z?>G?1Dl}LYk@RafW?zq_{pof6zrxNu9Lo0n|Jt6CN>Q|u3Mot4gkhd6*<#8PDx@q$ zlHFiTn+nOkFY{2c?_@WX?913?ox&K5br@re8NX}BlAiDLIeve1IF4q<%zeA>>pIW( z`Fg)+wf6Uf%#(#9{s%(Tqp&V1Vc~}N31zC1?U9%2HV=jH68Vf(R)t=_m}3l)*xqpN zLf%?8l^8WVbf<-*KJAi`Z-piq*rcU2$hT>%W$$O%r>_NcW=osmt^{p-VY$eUq~i0j#gahIIy z;Wgqv5BlI3g&Jl?#24bVB6A#;0CqX(5PpifQkmEpNfVL}uTOF`#%7N?q=pC%QE{Tx za3&11VaO1LM!n_4wG~1?mPL_MHc8udM?VB@0Dkg)!2xvHG{wDD5e&N5MUaiul@x+8 z==xouTfIk z%F_EA*Nmgz-ALY#)PXtD#%oW?x;GLd`xt;$a&OiLkBE)%DK)?Zdp=``4ulht)3#RvFj}X6D2cv|qK&C^YVf7??HLmSL>5Bv;OcI0*>C!d*$d`#bkA z?!7uD zxCYfupN;^XuG7A>LmfcwUz63}2})pq zWnQaqHdi-HEZW!XO)6F3lwsBs@->nDcWtLeR=VeSA3a~9x zKkCn8)Ktvq4)kK8F@1!0SL13TEOvwwv$e!K|+Cne%WOOuG=%b1y!Yy9ArdT z(`9b&y}s6p1=B*5DEPTm*j%Cy1BsZd`}TE3mx<{`xll;nyMw>2{8`Lxn-N|> z9(wk-HrEv(Q&DX;xC^J!Q$0c7*Jv#ENo#yW*L2l@~?!N*) z@aYs;%Ujq3B=C<38VZ%eKv~?h$X2?3SRU<0U;Sr6ZYWEPcQp^G_X*d&OHpqZ7b7R; z+)AVAMX*QaIN4o2Uzt{c$`X|R0B&@9_4p0Ugo#oaHcD7~?>;doDdl$ekM@y&2Y&oV z4Vi9&&{<3~7a-H_*`73guJte5YKrqHp~ZS)I&-|)LPQ#1H1R z=GorJGz*A{Ycu;d!v7&v#X%^GXSVzN_LQq8QoR{}f$Rvxu#hZf)APg)W5^5#q}C!X zs{W+7C%&HloC%LU`I5!jfNv;mQcMM{Tv%O{d!t($kuaW-%TTar93~NrGIH({m0Wi# z^WcizX9^-#I>{c7DpZDd=%9g=WeIU9n=0mM$zj;aQH^#Sy^P_4rcpueheG5dC3`fG z%owMyY1>=+dXu-3EhFr3>ebUn%s2*jjaCGM5YQB>9*QY;ibA~2(a>`Fza#Icunc$c zG!;hjOtW!2CWJAG1PNy^_i&%FKe$HcgKcdCm?5SzFEXn-31~0=ZejBoE~}BtlSRjZ z?DII*1VY!oDF=|8k&19v_fKY|^hpu&l-XUX@LKGTJ z&$PeIFYUd81Q~gY|8FE{{(bHLnt!eIgnv+J+sJ3?TC_{cg{-h^JNTN_|Cu z-!T3fExS1^Ogpjo4dI9-xQEao#8sI85g1@REHm1Q_+_Y|L|_!lyfRzmwBvue|02E{2_}G z_Y&Ju$ynH?C4kA+x(g9GrKTTXiz}mz6k))U5n1gy@`}K5({F~ppHbH`JH0Exz$ub} zX;~be)vKAfjzyzeZXC0!U3b?5sgD@(^VytBJQ&O?zp34v@M>ov*B`MoyFMeA_cn)) zn9H9i+_z7r!08XtEP~|gL{w%Qh#mqgO7=4SOPelf;mc&#dD3z=-EO1uQ5VIMeW@vX4mF2&Ifp%f$*0 z!-X5Lwd8yUBhkBm zWwxDIX+Nh14aw>Qz<61I3hSIGHSTkA1<_xkZF!f#;PPQBaTYLK-lVlEvQ`M~a!Oz( zst{nLCkbWge`$0>)xhrhZ`iyY2!c#3O8VCSSP4O$@|8TjN=HEm$wuo3 zvJ1<@wA?JxX@PY;NT%Nw77^1cnIyd6UmL0Mx?$p0aVntp3or;s20Ll;KV-71Mo_h= z_vRJ5^93&7ez(p6`Ni~=t`!O3UiWhUt9>neX@j%Qin5_C)Skk}Ui@(sHa7d?H)FMG zFxO@{LTl(-`_QIB`H*O)DcKbSaf>ybXCMArdg1q(5NELcvhilkI#ynZBbj1l;6)pv z%T}2wF`+zmzWObu`HSUBk;Gkn`NhZao7U8}=qX;loU^8bzvLZ^xCPdI+zT`+j>r~z zboZz_U>#TE6+nmV0&r!d`}?u9-Ym^`uufVHkb)<0*alZqG_;o6 zQhW@2CO4?c|0Q$%t3>%A9}ujjz%F`PFpe|b8~(MVzzNaB~806U+L>?|N91P zFJl~W4%o*q^DFZAFr&19Ld`)Q0A}TY*AEh-GHnB{#Mm|6{6asS_V%|CSfy`|YE+`k z4@7|Y1+{1nxezQp7}aXe@N>MeSGjKs9gq8d0yU*&x>s>Elj~O;wS*}}d7gT_|JW_s z<3dQNE=W*BA%>cZHcC-LM4H2>dE;{Y_aM;_k{#<`*NHxF1jvy^FonW9E}GH4^Hc07 zO^X0wV=nSk;1hj*QpwvyVecTd!Jx^7C-w3@S&Py=Sp?BMJ6izbU!b|qPo$EU8}NX| zFU+u8YtCAI)ZZxH)AuP*(6{Bp5zgzLY0yZVFk#@H`d=-7>_<0E%VCv~q~29ZFKHc$ zT6JBoqMoza2D5$g)@#!_*w9O|!4$lxmoF{%4lBsc9PE2c*3-UuQeBTO7aE6v;>A4 zsi^2Re`e_(@6C+tGK0=poMnxfk6cG^{5J1tRWfJroi8&hklmImYYnnEuI=^NW5A3g zI3mm6xUUkf(sDpkEXnh7d7_RAy6%thhbIMGEw)WQBE?g_XSA<3(e8xU7N5#-kn2v2 z^V#ZoU^G8bak1aNYbO`xrK|aGp=-cl*^gm*1rY-I`vR}=1kR8WgB_p&>)1u;$v6Nx z+LdLjho2EzjBfv!@L&c_?T3NE_iXm_!2cG(K=#os^*1g72?EG=$Gg;Tvqs-NX7&!Q zXi1V`Rm=Usanu!RTK2gFg?>X9k@(X%X&rr%Y>#pGw4%f zOFR%_2|1$R(*#%pzr^-q=Q-}sAMOzP9l`*R`t3W$RlA%Qt~6uvUxxR0556QXYBJhJ zCL>zL;nc4YNRj}}hO>cBBDGr)?PWZCl>B0y4RvpFGlF~oVOG8TElw_xi8|ZjHUK&U zlUQiFypbok75@xUawr4YsOssD!<`%h3)H`+w1KNd!sorH{+S>?oEx^Nf0%liA2Uy9 z_V)NJM9hgU8beM^2D1osGY!Hp(=d)xa8>|otvMw3QCNj??h=^HZ{HTz+q}x;1DxRJ zHKtvaF*YoXmFf;cE$WC^ja%3+H~caF00|&^E;7PL*mbkZ4p=G7sZW9@zW!_=Z9dURp zGXpA5X5Xpczk%mG@lLJ9y5=IaMQ8>gSl@$VXA$0VYouIrG2@!#OjlF5T1nMnxUB$a9D9G^RU2(k zN`V!%5~cJ9#cpX4^R_ej5hDhRF${VjlXDTxyQ^IYy}QO?V{+HqUYAdk#mn>UZn^tB zVHe*&=+I!jPuW1p0SG%#Em}YDk)=gqc^Q3IAN2IzuY+tWQIZ=VY=!S2Y9a;dmMc_D zq|ury$^UrX*2%vsy&hl&2Kj(ddJGwlcdJhGyJO_H2q~STg2cr&lrjss+-2CKAexeS z;$_ruVH#9rT8eg@C^GjglO$z z!njqTegMZ=oyR8q0=VuqzmbWpeS)(IQbNdA#d_MWPyL?=XFJ1cKs8$`- zNRBnd){w!ZccFEYc~q)6ar5!|hD>aR^xX1CVyC^>oX?ytrae70Qj?w4&2zQWhJS}A zF;q0hf)#s@BV$n*ELdwa*ebutv6ACltJrY~+sP=lK!&l{)lUGOGgH<^PI;LE^+#*X za?}7nJ|{n#pNg_LTVWq;&zk^{abo)M;jzJ`I!ZG|wljwNW|`2X{76NG-GXstbTerg zBkKh8q*k|nA$z&wQ>Zu?uZvHaYrJ5We(mx^5M2CQKu!geqaki(X9vbGl;ASty4f3G z40A1WKqN6RFs2hR-6&XlBh*_(0 zkSs##9dC)PTuHqIX-TsPAGw$7IpS-L5Hm`B2lx`Fjv5UAeWQ00&rKMGod0<9svq9v z|D=lFCiE=Zf`n#}pw0;M44#6?=H6hM3BaAC-=xUy8`NdI8q-&;EZkrX(wURh;c=;V z0s3}z!vJdZR>dimQ1J-XODL`N`Rs8tPVjyxA0>xHrU(1Rctbr!46T`!g zMIo9*@~<1OF4A!4J~4f_QK{wS2?I69!Gb*={iCgxqcJ98ji>s368o-jnv2C~XT%G* zZE@fFf(6QfJ8jw^t83VUgAIVU!y*1=*Y}%&Dr(Dqz5)&Q zAc{be19Og|tHWAxKZA6^FZ9J(h4k>{xZjT1_C96H0G%EsI}8%zjlf$W9e9x6D`^K8 z)4WlS;E|g`dH0gLw!ZI*Amoc z5Pa6@o17_6%1tGF&+g}8wN#l4h$|u1o?WgYn)_1U=$tMIi#pr+iSb`Z$nrNE>=&Wc zvxyl#InD7Tgy6e&F0eA#eDj(HpMgtc7Y%S^QA>57y;)g#EisZQmo~xaP^-HtM>ZGL&H5>IxlqH`KIzbGf$!j{Jz*C& zSKZM(wQ2t2EJEAC?#1dS(4t(N#A}(H*ZpLJZTVTob?`hkK~6H*^7#!#&S7fSSk2(+ ze%rFuC(kSu&O$7!8=-Q?1^f$m<)NO`zZwG~k5pJrlA=mJ*GW=BpM>rxc@^2P_}~yS zL!9enbOgI6b-T=4H$|AACG*-q3ZSmPXw`!u^Yq~_{7g3mp4)cuJ1zU4xkowl6e<~9 zXmH%N{_XbM?7mTkISZEhA@G<@#|`}~7a~TseeK-JGJEVN!H&lLrA+-Pcdbz>`t$60 zgRe_$+-ydicSU+xK2^-*ly2%hhd%ghRH~;Zdr5kW2v$^(=wln#FDhBpzWmr0d|g*+ z6pDbs=Xx*B9-&HJ*JaV;F?-F*5<+I@5WrLMsu9SqOA!;ht6+zV&;kWNO!dDkMNFX{ zLyT&O4}K+Xzv(RQX)WGSO7F$2{=Ik`27P0oSX64>jW3-SWm2R0Aheb)DP0bhkkOqi zmA&r@1z;l2DD+Y5stR!zqGU(ub`bh-EGe8xc1h(-{VS@S4k(h z9by)BDQBjAq)AWghRsSR#$GSjy>x)qp^%q-1Nz}F5+m-B>q^8obMM@Kv4Zw>p*eOe ze5rHm)L$$=pDb&S4qQiD}XH&twJ(tOH54*JO>d;JE zzYfAh??HNHuQDY-O3`a%ws-kS!;;UowSG$qVhMFB zIo4YHz4PwHT-yCX>Z1+rgPSM5JWeQX@A8oTpVQ)?q9#nVv#y;0MXVgB4# z?k9`};H60h_d?qHH7Evd4-&iU)gHPHX^YpU-#lpA$vO8KvRUS%jXB=suSnW@k-?Gh-rcqnc+N?Y`LLl_H#LN9pRD04qzOiYJ-jHg_ZB6g<_g^@3|{e z_b}>2!B5tQTCt=Yk=QUQOZm#4<*tE~XOR@0bz&RX+T= zvW#U|lAM*3oSyfpV-Y2&ts>cQ#FgwEb#8{JWkxI2N=FfIWsO->7n0v+R3@3gMPgI) zJ)GEBD(|wzq9X`Xay=ACo_dr{zv9x!{p^&lGyeA6VO8e~t+qIRW@#OmR}e$pqi>Ne zKmXN@Z2NXPk(*6ymPbLhg>d*;P*s0oT=3%>>I z?RU5v=C{cH=#ny3MMvx@?bMh>*Zw0O_9RS{prg8Rt6groqI-B%S@068e&|Shr1!A_ zSjhHtL?|}om{Xl#JrbssRvtKWVupviu8Nb5a*p@>xVduYq8GFL1a^?Z(TRV@x^)A zjj+6U$*V;tUleF3!{!o#TJ57f3r=LXflC>~uZ=bP=&spbjI3hoA8qc3>N^DV_o4!p z&SM|y8rEE+z@;5WedP39fq$7UjPH%NX{)0~?C<2b*HjP~rKPb@KieBI?cW@M#U5H5 zJa2uqB8K~mMI-GW?k{7vzxmeflNi4EYrDYC+jCq`KYy?D)w?G8b0kXo?1Q%3-+r2! zxY}WnUe}4T%^|IL&Z``?Rb=I=#5816N+`aO{WfOETX3ghsSvw>>0Z>5Pvp}4Q*Y=I z(N<0TV1lxHTxfNb!;X>+B`Xmoqt~4fYnwHoSv4>TGi$WU)phOLP>kSX>e!C;enzFyI#1 zZb@h{$H~o#$LV_CX6s&+@QFcDLjS!0l%D)@%50hnf%9*N1I@WeH11JrMQZ}#U7$|= zY;CX;^3&@ISQi>LCN`r}`~&g55cza-f=Wg%bg}R6EQ6wj9UYn(R?wu(dHNy7J5b=OQ7W}zTQ(TK!!@5^$<(Q_s>Y@&t$XADRr2!d>+I2 zD028S8FfE}X?@%IX*0J>L zwS_>O#DdmgrP7k}oT_6%a!_z^wY+)Yz$Q~RrQy^Q7@ih1= z1eCdX1}(Kg@B!F;T{UPD0k_CH3WC2QJ$?}djINTs#F+=&y27 z615oG_@yT#!6aB0Y9B62TDt5U#@7{{& zqn~$@W^Nw;+)Il<9)_Q~EOf})H&V!edujX6q9;Z7O$J=~!#AUM`v2!dc*eWew}q>4{khq`N`9p?TPhL9qBk)d01pmUL`qDl%VO53O(cikNi9b z>yk>%H#v3|UEjGhif^MB_z=At@+(jZu9N1CsMhlALD45qd+&Si=V}uFS??@}W9(!* z%?H0d_Ts;DA#%W~jsIuHH*?GAGJyg;vbMgW^&mfG0@9R#JOA~uc^Jzi=iSu027LmU zfwZ%+@R9MjlcjDlM`B91mFAR+aMqJy%H(}ps*Pq&kBCe+UThRa5!@`##io^>uq`&j zTA+sgONAuJ+r!a{l%)QY8)b?4wb&EhH0>qQ86(XM|lRJL~2-g%Z$L-5agR z39t4bZ`n>3R~eXEnT?j6^n+ z>5wi@KPiKas|vi6mp?E!j>YyG?khBCG(0U8V`%&1(AGQssQzy`gB}xt zHJb-V9FGpbqzo-ck0wx$pfKA3;esTSQQ_kn@1a6DSKZ&sjaa|SHvqUP1c~0i*!t-< zEbQ!9@I7*Lcx$KjW!Kz~_^BM%@p(wgTLb%Zp;?!-v*;gxpiWnh6J6>^y;3Q+aS1ML z`8OyWVz7N2#p&*x_{RK0?j=uYLk0PV4i3T0N^;c;lg)=u>6j|T?-Gg$k{?SpB^0QQ zP4AT}+^ak2=o?Z%1~+q68H*f7cHp_#Gi~dujb%{+{p3E9NUc@una;C&(yp==J>>4Q zmX*?WSg=FN3FM>{jXq`9D-P>*3N_G)r_#E>w=eotMtj@IW6d06(9ko*Una3txO}UD zS5w_+*xy*v`^LhYgSjD@ka`}d!4zrK4mpf1?Ap_ZN z>G^didQXA~>CqLWQMQx&g%YoumaImcnG-FPkk;&|$lSV)$ExzZyum*XoxjuTXU8k0 zCi7I}SE1zn7~~{{T4;cQN5;BTiJlzn(y!~TFL-r|fD!lP=EBUF|E<+X3!6AX%6oNH zEAE>{j72({tq6%$5@UflEz>unzaSheH*?mo{^Pbe?qmL!Enl3*v6ulx{N04#F{ZEHVtPd9q`6!NbTIxS%mi<&=H|2Lea8W@V*pG&(Zgu6X= zEgg|WV!eGNuh^RXJ+ElxNlr}Te@x#jk(406bfjXIb|J9DU?L+u5n!pd@uv`hCIe55b7?|f4{PwX|$)Xp$DT;|u(?^VD@CH<SWtGC=D(?R5C?f4Ui=llr3_xovf!1cu)MSvt&&@s)yyVg-*Nu-6?y&5<05!EM)PVaK=Pu9x)5N&6)i>C9YlRXJKKn zP*J$5?JYE Kq|4oV@&5oNJi$l+ literal 0 HcmV?d00001 diff --git a/openlane/openlane.md b/openlane/openlane.md index 0b1b3967..e3f4191c 100644 --- a/openlane/openlane.md +++ b/openlane/openlane.md @@ -2,7 +2,7 @@ - Caravel top level signal routing is done by openlane. This is done through an interactive script that runs the openlane flow. - + - One prerequisite to hardening caravel with openlane is that the pad side pins have to be guarded with `ifndef TOP_ROUTING` macro. For example, the pad side power pins on the padframe are guarded as such: @@ -57,9 +57,14 @@ init_floorplan - metal 4 metal 5 obstructions are placed on the user project area including the core ring. - metal 4 and metal 5 obstructions are placed on the managent area. - + -- NOTE: This run is expected to end with LVS errors because none of the blocks are connected to power routing yet. The power routing is done manually after the signal routing is done with magic. + +--- +**NOTE** + +- This run is expected to end with LVS errors because none of the blocks are connected to power routing yet. The power routing is done manually after the signal routing is done with magic. +--- # Caravan @@ -69,15 +74,13 @@ The same strategy used for hardening caravel applies to caravel. The only differ - The gpio control block controls the padframe cells. Each gpio pad has its own gpio control block. In total, there are `38` gpio control block instances in caravel. These instances are placed inside the padframe next to their respective pad. - + - The block has two power domains `vccd/vssd` `vccd1/vssd1`. To make it easier for openlane to power plan, the cells that connect to the same power domain are isolated in a submacro. For this block, we only have one cell (`gpio_logic_high`) that connects to `vccd1/vssd1` and the remaining logic connects to `vccd/vssd`. The `gpio_logic_high` cell is isolated in a submacro `gpio_logic_high` while the remaining logic exists at the top level of the `gpio_control_block`. - +- The gpio_control_block pins are placed on the east and north edges. The east edge pins connect to the padframe and the north edge pins connect to the gpio defaults block. -- Pin Placement: The gpio_control_block pins are placed on the east and north edges. The east edge pins connect to the padframe and the north edge pins connect to the gpio defaults block. - - + - Each gpio_control_block has a `gpio_defaults_block` placed beside it. This block connects to the north pins of the `gpio_control_block`. @@ -89,7 +92,7 @@ The same strategy used for hardening caravel applies to caravel. The only differ - The block pins are placed in the south edge. The pins also have the same pitch as the `gpio_control_block` pins so that in the top level these pins connect by abutment with no routing in between. - + # Mgmt Protect @@ -103,16 +106,26 @@ The same strategy used for hardening caravel applies to caravel. The only differ - `mprj2_logic_high` : `vccd2/vssd2` - `mgmt_protect_hv` : `vccd/vssd` `vdda1/vssa1` `vdda2/vssa2` - + - The standard cells at the top level of the `mgmt_protect` are connected to `vccd/vssd`. -NOTE: The openlane run for this block is expected to fail LVS with four net mismatches. These LVS errors are true errors and are happening because of a change of behavoir in the pdngen code that causes all the power domains to be shorted. (https://github.com/The-OpenROAD-Project/OpenROAD/issues/1505). For the mpw-3/mpw-4 iteration, this issue was fixed manually by removing the vias that cause the power short with magic. +--- +**NOTE** + +The openlane run for this block is expected to fail LVS with four net mismatches. These LVS errors are true errors and are happening because of a change of behavoir in the pdngen code that causes all the power domains to be shorted. (https://github.com/The-OpenROAD-Project/OpenROAD/issues/1505). For the mpw-3/mpw-4 iteration, this issue was fixed manually by removing the vias that cause the power short with magic. + +--- -NOTE: The block was also hand-edited to add the iso-substrate layer around the different ground. This is to make it isolate the different grounds to prevent the extraction tool from shorting the grounds together. +--- +**NOTE** - +The block was also hand-edited to add the iso-substrate layer around the different ground. This is to make it isolate the different grounds to prevent the extraction tool from shorting the grounds together. + + + +--- ## mprj_logic_high @@ -286,11 +299,24 @@ SPACE 0 ; - Before detailed routing, obstructions on most of the core are placed to prevent having signal routing in the middle because this space will be occupied by the managent area, user project area, and remaining caravel blocks. + + # Chip IO ALT The `chip_io_alt` is the padframe for caravan. It follows the same strategy used to the `chip_io` module. -Note: The position of the pad cells in `chip_io_alt` must match the positions of the pad cells in `chip_io`. +# Final Timing Signoff + +- The final timing signoff is done with the following three top level makefile targets. + +``` +# Run at the typical corner +make caravel_timing_typ +# Run at the slowest corner +make caravel_timing_slow +# Run at the fastest corner +make caravel_timing_fast +``` # Improvements/Suggestions @@ -303,4 +329,4 @@ Note: The position of the pad cells in `chip_io_alt` must match the positions of - Avoid long li1 routing. - Avoid buffers after tri-state cells. - Avoid using DEF templates until the openlane script is fixed. This was the cause of the unconnected clock and reset pin in mpw-1. -- Triton route could create shorts inside the cell which aren't caught by blackbox LVS and are caught by transistor level LVS. \ No newline at end of file +- Triton route could create shorts inside the cell which aren't caught by blackbox LVS and are caught by transistor level LVS.