From cbe4eb65b37453aadd5ebd1f94501bfa7f4b1f29 Mon Sep 17 00:00:00 2001 From: Scott McKay Date: Wed, 12 Oct 2022 17:45:52 +1000 Subject: [PATCH] Add backwards compatibility for all versions of ORT format model in full build. (#13242) ### Description Add ability to upgrade an ORT format model when loaded in a full build by inserting the kernel constraint info and ignoring the kernel hashes. This also allows upgrading the model to the latest format by saving the model after loading. ### Motivation and Context EWrj$!tqqRMHaHv^FZ8i34iAaUjpeNB z@AvEsiF~R=E}eguBz_(Rv3;(D7ux+|deZ*xl(cQ@r${0@EU_o;Z?!~TA(2b{^!xQ! ze~vRhp>6yGGG6MZ9pi=m2=veQO;1UkG0O#f(tRG4$nF0j_mjxIBy#Dz5PS>vMeK|t z*paS_g6Nh6V>IJ6Bs^nflo>C@SSV>P>=)a<$IB&h;mj+vk@j0SgA4xd{6j8$9}wip z5*$)|O!Vhm@%Ox72cuA?Bh-5ZvNLKMT-zBh?3V>Qu8bFQDNa90*^A|ZSQtAYl}K!H z%+?oHC-E!uhVjz28Irbwy?>5Fp`Iw>xRTxct#FB19tf5-*jf{rrFS@!q*6wWh$&k43xu%alD zou`C2c`-WM2JeI|2;ogl}MjaTVH>#OMidbYxn2$ zD$G2gpMs5F0c;LR@UWr`$9QSn8YCG0Ep9E6x^FBO+DYG2omqQ9U!CP`lU>R3&oBn!xrP?V04S7)kq5DDf{m z|DzZgGZJu?OXR2jfvfIsTpIraE=A@+{?9jtzwoR7m!5QeV#mh+j0ro32}u~^cz^b1 zl1OyGoINj$9+Be7t26 z_LEmZg%CIFIW7eQ`^RI^*DX-CXFM0MdtK?vaW_y&dm!%eH3Y$)6qga>|JP@WVYS-v z9~|u&J_AO=#}0*pQZoJ6H!`NGka+0+B#BO!AaTbt$eyGD8a*yR`8*wTs!$^j=efd$ zKJDq`bZwe5{4-=K`_i2oX5q53J2ZA|7#1=UYicto3zn9y5vYeg0Asq(enzJ^*DryVHBLnHl_JdE*NMK{ zC5L7eH#nX18hqN(fwZWD3XEJ@$IlE=pmu(aAYVU`n6(_`W-mKe`exop7+GS1jxX!T z%^p_R@8?lEd|5vn6=6=Tp(BoZVS`6rYs2;-reyJ27y7n`6}fe$7cL##Kohs;kYgH; zFm~SvvVZP;Jm^>nUp8OG)4vdlQx;SAB!#l=MxC76cUN<=tiK6;$J^6&KN~@9mI-+8 ze+CX?^-K4tdX(xcx(5AzZs9)TdVn|4P~LikJgto&S|{ykUef~-e98@D#>#QKcEyk( z3E^Bcw;pU7?vYh*m!RnBVoo+^KW2?mgn}m~sJ2$ysb!zTy!(Os^Niy}y$ixjRlj-RDKx(dR`8cWZ0{d9_L#hxV)`Jy*5I>z9MbbK||>)BdHnb&od|+3NYMT+=#Cs`?EkA2mC}FPcZRmK-1xeyC9S&N0yU)CuvJk=sa1<$3>R>*AhRv_Ru+;;xW!QIY zC-3BBXw(lHZ}tSdKa(Vyti!HjQc3oq)o9&+6V6ZHMJ;`+pybR+S{T$GcOF>;@%crh zUD6Yh z&+X~GpO&B3#61n`vE8~@d}V(T${RJEzIES#ldLHXtO!M3(UH1-Fz1_x8o=O9MUar# z!zm`jlFqy%L)F(*fSJccS{{}}pY5JRlIIOBTTt$a4dai}ljqyx*!m3W+BA_ax>QMu z`YyniQ@YcAcC)b0hSi+uc}MPBpe>bKF^afv*hT`^ilNVx3a-3p45*VIc;b8_gnCqy zVSy>MqHA}MU0XrwEli-kb_=}Nckk4+1_g4oC>PhxEh1@SGts(Y2k4GkK`Y<(a+>Oz ziP7FisB+Ui9IhD+RvG3*-}Wqg($>HUe%fU6J4IY-;J{hbSi<;|S9#gg0a%tWj9eZ0 zQmp)=BV6h76*j*%Aa)_cF|babwz?&gg+uOf8Cx9jbhuU}3hdTP*;R~~#jRT;YX zcqV`MDB*LO8;S9e0^Cg$al4TgUXhtfTYG0x71d~3VA_wW-KrrAdc@&@h-Z**8xAQ0 z)X8nTUQnfa0&Y%7=MSvtNYZXxhwfHu$j0ew>F`m>Bz~m@u1HQImzSAgce7er+b^1= zxW&S_3F~lhl9(!4{-(2QRWf(Un~9j$h#F#R59@L;HIM4~gt`lU%{@%M#|L7-fc&06FUN@1NolT~{M?NBh->*fB3wd<9MjHK~aRv`$ z^)72a;4Y4TY>UaWrqkwaicaRVmCpMtE}JGjh@ZhI%Zv26%kj_yDcWnU7r-JMEje{|&r>&W4S7h~y!hDuWZ z;eBaM_fmMVhT{3VWyGmR0IjCi#O-#vLKdaYA!)5giP?#GRLdPr`oznS*!$T; z=I|s83M06*Hice&I2W_(qiACN1gagYT&6s72UOo5N2B&w(R?=*ry%!HsOnc->i=>W zb`!Ng>Wox!XyKaQT;RzNA41^sgtC!H?kJ_f6stee=ofX~CeG zq`=m13#xPV9hfdspu4BNC1yGYNQ7-ibhBPl8hk7pDr~cfMv*p+ySV`jpPJ$3(L-U% zx0ghJqd8X3x(r`N+Mw3W3gQ*&M?7C^keLIM9I_P~K(CsLbOPDH-D=)Arb=ySIh?eS{``sd3N zlbvTt^@>=sX>=v6oLz-}_Jh%5^kTen8R?x@$MJMfq4<6md(cdsM~*us;yrOVD7zG4 z%{y<}d15NvoIi;wicaEtO$|QXy$WrLrgAP%?{Ml_o#@;EPt4l4hRSxkU#w<06epCK z(2`NW_uBBBdyw~ze9X?^2hN%aUN3gRX#Gu4)9VJ5T(lzcuMg9SvPGzG6HiWbLXcB` zM@-jGq${VarVb9mwai`sJvgBYjw$=|Py~icc6IG57?Oq6f$P^H?aNy-EN2mSXzF8bTF?i+=>9PhG1iLSwY~?932(tNrvp0bd-7vKZ<1w? z*8^W~MP47v@-!vYJN7v|)@T7E1QrOHLAGMELTCtj_M|;q|mKVsx{U2c1 zqA#RzZW_OPohMnnyPo)uw*sBF&-se!)9DCr1*)Pk4$eEblEkxz$?%pD#IV$r_MV@I zzGMtK|BAqN7t>HDe=(VPb{OqryoR^Xl543LG4hkI)^4GkLoLt(;q59AgphkCK z|CLO-_+t=E=`)vfJh>0L-`>W_zc@&9H7(#{7hCivN_55XP<~GL5AY#sHMvz`1!v7W zQQtYSB+Otamb)~<99LKV=9>FNBR!kW-_Z&SN;^Y@%0?<0o`{|ECqj-&A>6C~Mw-(^ zyi)2W{AQ6y?dP1=YQGg2?c%NDn7h)a$5^KYW5nk*z9K8}^&esUN{d7v&TEumn<+9SMhz zcfoJ6^0Yy93C-MQi8F2$k-z{Aa`#OUSbK4$CBs#4(~=NW{AEP+hgjm5Mmze<_6!u& zZsrTU+tcjU-57Fn3f23uj~9Q2s)>9K<|8L<`mjOs=1RI7l=f^-hOJ`%^r=t{DJ5t>18+<$TDYCo9Be`;F;}`B#a5kPj+mo`&HG zv2?CjAGc+m!Pnh%>BanOq#e)TLuXx6`SevA&;otl1LI1FT+Q9okN*1 zQ*r!@Xu9H|4LwrW4|mKk#3oAzT4!;RCeE~loz_TYkG;U(8htrh*E`p_ph zI+&epyz0rwskT@(z6i)QYufHp1Z+uoNwTcX>1KuFXv}qhj$!YiWugks`rI9L9Fu5T z-+Iz)dJ?wIvB3eWrhxStF}XS{kDT!=B$=+eNle;8l+8k_$XA2!d}Ay~^&)W@qv(h8 zOR!$89px%JiU;_#@`0(}NaH&hOzk!p*B!8+yK=vCmgfy=h3q&OI`B5P`PD4c->iba z&1Sx)V2U$n@TEsLxAMJDdpinG3UAvky_ zRgi6_qmS3YgD)4w4I?N_oBSQ4&3llfkb`7kf}B&qP`1Z@rArs4nSx9I$vE!f68dp) zJ3Q`ti=Dgdo!;2W;yTMDd_LhPi87lZ{xsC6tm;xM@u+>zby7P(n^QmVJ>BZbsY~o! zX6uR5t}mj|!Sy72$sWAm(+Ov_#=-5nsv(tXrFa0{mXGB4e2D#CNV5p;dgQX0|KohoQO zhhxKH&~88@)H>(m;6W2`p=~xaj=n$_2Z!UBSJ$b>(Po(WvIhy67)FxE-lv7M02>Zw z@o$1R;|h~gAb0)-Otl&<_9zzN_C^D^xU?4CW+Hdab|9)}@20IsVsX^SC!}u374l}8 z9Hk3Jh@BV6Q6Jgs(Cj*g%D>G;?U&kAWaC5b&T*h&y|%&{tvIgOY%w-2+d`fC+(Y&F zRdk(+0om&s!yTQogHDSnyu;))a{a`4ar!Gqyma*>5y!vbH05={#{VaY zzqEq%YOE*6XO@6+aUZ&H+8!KnR~;K_Z^9`59bfUZ` zC*KeO{`X#pm0f#KyF72=v`-0^cy`91zLror=_0qtvou2YTfEQJfc708e!C!EL@Lz3XI6 z>k9khyVo|D7@SI<+}s0SzN{lBnx13Er&VN2^K#g(nnHh#Rs-_Tp4`!E$j9u8FFEbkmchy6*y7pJ#z}p}o*K}%z2h{z!2lm;t|xPM7SdT$qWL`^w{R<`JqEAxj;J~`pBP2%px@u^q$k^Jl@_;C zB6j5)Vfm7|xC-_W7`TthpK5}2KRe*1Mem96qh`>(znESMx8$~c>WPV~FT;4bT8KK* z2~2K`#8s0BmAz`|IJU7r|IwSmBONw}^?k8L&6?jE`Ix9a-i^xf0Z`qXN&Aj;rvwaYEif)L6%)H(q^GAI!-Sca z!PKgj?tR>g+Q){`u&w#9N@E^YXD^`EN^SJ`^x#YmDI2gKcB|olr7y5DfEx5l> z27BuFK-1J`+%7XKblK94;_feG{3A0AC@ZE0(aD(6sT0b$o+ILd7_#^6T?~DP(5pC= zbl!7=^q6#l>P#@_Jo5HHzz9!h_sSjll0xoU2uIfj_Q94FMOIDRkdnS^O>h9DaE)RD4 zx!^8^gK+p{A$0I6D(&0X4~qvMBF=}$h{KvY6Ytx4B;xZonB8)dTdO!bba5Pm( zdITPyy5iT%Y5Flf#Lcynt!?YVvm72hf(WeXN!^wSmG#0YKL8Wuylk`k!e zqeu4-vIDYDh00XRV$XeU*grat4t@`KIsX)XyV;8>mX5&Y=85=Yk~clJKps=u4~1Z} zkL0nU2EV!@g*4>N!#VE~#dji(;^U+otX(04YUykET|t&G+q|0k`V2td1xeKF@&LBB z>5;9|tYP8Ux!5y2oE*7igpbwTxC!AW$(zdl`20cuDKF@W7=DD9rPk2k!<#U%VkMdw zYSV|o^7Q`GTNu5@pL`1GiphyHXp~<8@p12oU!00zkltW&v$2K1!ee}XT`@dn@0ej# zm*9s6N6pz@P@J{`^Utwwu^;5XBvP54JF*bGaSQ2MX@h#59oRRXtvKrZ1F|uwRqWt- zluU|G$3fm2STjPdZ2z4ZwEq|xx=VKzO(fRvc#2cm`O&V#V!kzP35v)2)kB@S_o_nc zbLTKONXtp{d@R;B4{$oLHyTfG*$a29Woc99V%Yg2lx8Wu;&ffl!1yVzA#INe>2i1o zz1Nrqg|mi3qUUP(Im`zJ#P`SPx)go&Pr&YHCbT?Mhul@%NA|6=BMpmh^Alk$@X-&6 zj*%j_SgS9V>@%gGF6{&pCqJ_AP%teI*^1uP56FNQQ^`ZeYgD^(G}kSVpi@jWG5h+F z+p!=JcW=E1Ck|%di>iL&+Jl?+PALmS$5BUa*b)rbEf()+z z6^e_#Y=D8@v5v*6i}|mEN8;|{K{z2wmEPGqj_xlx&Uea9;RBo7(U<90$o`r}dTmcH z)SECH$4pA+QsO7z)1w#R+cgjBvNM66pFfEPf7GM{>kf&}%=$q_t!V-NQ!ID%mMo6u z3Q66FAj}z7NNnc}gscl@u(4Zve#H6*klyqX*P$xK7Bpk|IMh59#+A-@#VL~wFz1vNeWzeJ%^h9JelJ?_29rB+)Of}b?%dB^@Ka?Kx5jM% zn2p*(c9nIY>SgojsL8wd^$jUx{>?RzvBZP?zOPRP*!}>1%~6PmiG^1+eWFvl_H)HxbpK zp0s{`PpVLzN#?vy#+L(ANQ$o;o!q@2J)=~BjZ4Slch$pObzu+aTey#O4Ic?F?D~NJ zrioDD8AhMVrO_2`y5#bn2r82k#@*gp19dS6$?BxhkaWFM?W(gnZj zLA^1FrkqiNvaV%NXQ_tqX6s08`viJ_eqWlG5sSwhXTiYg4Wzq&6ikfg;pXibxZTVU zZ*<&TVv(OrlXPS#_iHy*Tq=(f`j`>R)dqNDMiWgN8I61A?g73-7mW7UL~fMtMeVVv zFd^}mIHo$9SJV%uxAouB-sNjB>`oV4YL^4&N6)8`7T(~vUgWfDq(YgSeizQRxG%4l zd7gGG?1rP=?{m4q(dhqHnHr6o$qm^U%zkq_OFx(9lXuhu`t(T0&`e!APG266SJsfY z!$qLcunVS|JQjbRtc8cUW_ThxLay)r1uCyD(g8`s#b=90!VI;kSXya7H|wgrCT@>B0c((y|t^FuAF;Mma;h&>j^g?>z_oGqJ!Pt@ADcCW#s4mtI#v0oR`1uPD~sO`F=8YNvGYr ziIK4`Chl8L+E2?TeX14dwp6xL8e9pZDBihI{PLGK zzBxLJI6v=6OJ;S$$MRReTV^%+abQ1)lvWV+)C5!?D8~B}4Dn&{H0m-Zi+U~WL@jzg z}||V_HDhVG`S~MZg2T9qHF? zHSLk~u=K4=CHTwyEHg8uubtTMXjfaw(vPoU!`B&T_+}38 zx3`2ee>23fZ2zP+;v6j6zXOMD?MB@mwZ|Z(2D02{xMSi1TN-Azo@zVwpp#>rP}{W- zg4yq6Wmm3{1-DK>(cvU+k$(cHgte#U;uvhaxsX0j@S&9*ZDGpvcv^jM0M&o0LZ7GX z!cIe~_+FmNu~%a-c5vTFRoQpYjDDG=9x>}lzhk>;m0AWVTh+O=viE&>%l3hZO;II3 z7p1ai^gh`CNWlqiWuRbt0xfj1F~RpZHN2Gs4VgRfp=~gpu$%^Ik3Q1TBX-b_&?LT* zaRG-oR>PrZ%b^7^>x+JmvXzLR~ zpPYih`z)#PgHTjboQjL~jlk!|-^nNWRb+TKEm}Vz0F9F;U)ho8n2_3uPL7I3 zbNS`mRsJx|@H>LP`tIk-Kjctf+b|-kp~U|9GG2Dr$(~tT6?sLw4l$&DUjmO2gKjC7fk77Qre)OLv^P2#`2JL`22GbecRiJ%C1V-Ne0%Sr=}=ak^qS}V?vQg~PL3=W%y z(1d&GV7NV+E|UF7TJ18a?7r=&;{BY=86aQQN#P{@bz>+ly44?dP!}-#ZAed@Dy3CB zE8%^j6I|TqM$3*Wh0jK#>v9|1F-MumoCt#z+PS6WBL`!Y-AAI| zxdgteogrrT)ahQ6X|&782CmL(2ArE`Lfsx};;=w7x^u4qDyUoH+3l9(RsatnE$4`G z1ylBZ1btea_`wwTD-4MuT;s#9UrQ4BJV=`(XEtx6?id3#REq!nGSv=28yg ztgGNuwujoMq+tBjk;HG?UE2zWck- zyvoO5Dwl%Cc3aW&Pq*QWFa^wdH=M-2HNoB=SMsV?Mw1oYJ5t?qx8e9W9ehyL8^xMA zFovDc)NZ(x&L3ij8z#ANnF({i(Vzi7uerwCu3t~m8s%urln3zkq#hJ(V&DHh%;r0E zd=93kk*@#ki;;P1^ud!lI2`OvZ=))zoY>7_^u5&&7qkdDhZ+e#Ru?$=2e>gwj18+ zb`f@!&jhzK2SC>=1I9KP(GgD^=wwSvY$-ScFQ$KmDz9wrYidt=yeSoo-p(Wb?tNk7 z>rT`~rYHJ!p%@8~#N0TA+8=wu>mE_WG+$e~%v%q+0tK2|XoX7Ix#X&H24=hbAdSZW z4#c#lkMDb;w!;kZj$~(AH2o##8L7wj`&7(Lb7jxh3wu1exQSMb?uo5^tH~Ur?R+d* z2LZ9Y;XvPJF`qsTWbEI9{16$`T^vP5=4;@=rkk*>gE{H)x{0i8{0tG!{psE~TQvC+ zM=Q*G(+v(e{Lk+$sOzDFy_9w6xtZa3ed9xt?K+MO`W%DH>MH5dh>xWrm#^S0uZCZm zFM>#Z7;$v(i;wP2Bpu9Bh)4DbZs6zK;(;!5Ag>q+6JwLfwjTOKBYr*nJUW;Ea`+M$ zE)0dHC2L^%vz1`#@(7MyR;79`?~+BTR_Imfg5e``FG$-Yc8JC(8D z-9yN_H58GoAnZu9{Teom!7(zlbt3-3bwhS}tM#ueVqPXWBy+VyphHPou7 zkj)=*xDjjRss1)a)KRJ-O{SOV+s*;#Ibl^BLTq~S}Z9WRl>BVHgO)bv4 z!%gw(l(S;~finNV#17ZacutFd8{&(~u{e{(D9WiPeLgq=e4i9Kesv|-{OdW8uUBB4 zd?lIP%^iCg7Kv>=N@(7^=cIVjTkN%UDe2`~hAXejJN!x3F^p=S(}ry?zLP(9l7-8JEJ^Rn{%?2U7gYY|9$|mh#)Xk^mGD!^K(HCz zDxSY+6`6P9GnX`924gmKq#@zc;E?MGXm{iQxe(+JfTjX1z*}w~(xt025H`Z}4}G8lBV?(&@0Vcw(bYc4>^g{&NXxrCm$L0m^22mCb^ zR_o`GelzcIazEqn`Tliivcne-t9ZZQy(%+2)Hj3p#}ND$urIt95+M<8xd2eLi( zJGuKn1CN!cQGCgtF-s6ilOGFRoHN&T1Y z;O6Z-fUU8CX!E)UX05cO^9N5 z;D4Enc{hyh6)GWPc`E8m*2R)RhroJ+j5s-YGFh_3iJbXhiuaBqH-23LS#@J6TRRt# zFvl_6$nR&s{P-QHyfd3N^&d^I>z@MirOR{yVpSUl-Jx1Eji2#pM~>sQqUtznYK3M zlAkwzf$kG6)KIg*s^HCJ@S}l)4Jh}W@AwQGMmru))ACz+EdwQ(R4^J zTau_+iI389A!xlW9oEg8hIpyt>Wf1$F53noDo&AMZc}JSl><<(<%!#h6)`Tg3ao}b zF8R=l$Ha@Op?*RaX$F2ss;PETIA&H_VjF$E(|s) z1JrI1Z@RaKOAehwZ{88d=U zM$Uj2o6nKzaW}yBejnV@y&ICd?;M?6E5yy~&zIJ!`O&!#V~N%zbLzG;jm}s;2ZHR5 zlJ%}Sl$5B_?rsMB>5F6T?1PNBy}ETBb&!Kf11p6~v|4KF?|0*8}! zxVdp8Mul&~#A6LmKKm0WoVOsBdK~vGsTdL_^}xgxJ#g`vGPvn-l{9tn12+O+)>0!?>~aSr7pG{tRgixK9Napf@!JME56lq0C67GjfV8$ ziRi^Fx_{46{_AiT>iBvi*)YS6JlJdu>q?wK6g(S!m9=1hp*b1#eH*+ul7P!DmO!zl z4T{wx@n+#ocBi+MH-8gbn&>+UT3LJ_MNFZ7%iW>&y(PH6j)C-UX;9mw$|*!Hrq+%f z=xea!RVQiS<*84})r%X5>7`?^yw7l=pXLM~RGjhGbPIf2O;h3ea@o$5m^0+ z;;exm#Pjl0(dg9z1kE&DZEzR%nU5_YY1<$#=Q+9eqJkv3nt(|+Ia)`Lkxh}QbjfN@ z8W`DlnO&f-D_okv(m@!_{zQ>O`RZcceP~!u}Eaa~>4@85G zVGts>6Oz9NU;>MOoQrH(bBiVLq5dZQ3hotcvzgm7T+!)zRiZxZqXLiRW$e|U~2c4oDGPckcTf5VZ zi{Fz~a{Z`z`+y`p*@8-Q)?~)%2-hkTsT4L2X7RZ)&(1B;)uwQ4wID_qE zzrqgAYS~?K+Gih8)ik7AI&H$75*PF;+yF)wh7g^D9(35XY3SjbfnzEwak-5=T8>{0 zmR7O!diq7;yKx@e%WaP@<6`jDy(D`7nFD$CZ3XH6a3ED*XiM!pPLR{%fUAHU`2LRV z(~BvHRv&-~W8=XyS%hCq4uJEiS==(UPUPt(GrSkQ1jXF}FW$7rkELof;mkEc%Bo(OTk6(qgf$OlidJ>X$o1l8H8;YK-LYrBM=y#qX-k(8D;}3Ep-uO5g z4jss?u1+N0-&H_sfj4Tc8iVrleQ@xCoqWY352BWuEiTYv_lg?k)9oMQKu&HVnT9F! z*_Xrgd*Em~7j9s;4$Dxr^(JT~4TQ7XA8*R<0o1^5wkW1iwRTZBN_X0i7?ies*FEMMLNAwQO1XFgW zT8$U6_heU^_eP!l_k}z@Zl5_`h}ef)vVzcDZ3CA(Js5eJH6&|wE4e(Og&f%C4!&K{ zan|XJ*jZ!T6K6wM3bH@+O?(bpu`SkHdX)2eZberqy zwH_6w7~%UdZ-Krs$6D=S>`q)Myc~T9qu=GjxtH3wxs097GvZ+Xk=w*PUV#)YFok=w zE#dTAZG?rC@O@pdr^ZFtOz-n$MQVKf9WmZhS0G9Erjh|sGfB92F-fx607b1m$v35S z+?fmPzbU*aB(u~v5_iu{(E2dvHZ1*PGHx^8T;KagkI;*Lva6vSoixesO@S6{oAg1$95c^k~s-oi=RPL z+z5Pf;w4Pii-d$em&lmI!%A;Coh7+5(l9dtP{Oj~dRin1Sbw z_d|H(Ic{l*DgBn;4Nqx?<19@lyjZu7oPYdFth8`29(~Xm>@zxH!D})5e=s_vvVJX2 zT5gUjz7X_THwX8xv4e}|KB#NB5-y*=%kTP949DKA<>g;az!)Vfw0q?NiIJvs`jT6a z!*e)3G!HiBUf}M&+(Em($>--@)`78HET8va4T*VKLtSfK=!Ft}Jo;@nD6AMv_ur4D zck_$Ii4L(~y!|x46JB!lJs*Nx>UJo8(IEC&@R=VK?M2(kTqiI5mlE#v9jMmIA$?vZ zI}W_&LLJ7;Bis7;;epBqaP!co;|#jM*%y;xWZVpJ6!)QPm2K$bKI@^~YC{YkdXc<5 zco_6{>ye>F-(b_O{&;nYF4S6n16B6~C~YGAgK&zIFWAz=V42(pzK8NTno8f3?9v!cGjkx0G+E0pR=Z7Jdc6=I z9uWn5wq%r!x!e&?Tuz2k>tPt^=>naKXK;S2$AeMkMdDxLNH0aLqINfR=w<7AxMNgV zI@KwZQ_^nYLy8tnRY*>kBM6Yuwl$bjK8}cUWEF= z5U;f)RL_z+H1(tliX7mOpE+^^x}kW>VYt1qBft1e0=VC9f(3G!C_dK-^Tg?J++!nD zZ+0d@=hu>Trzy8*RfXee>lC_v;tg8*W*_akU_5DhSpvz+OJM%%-QZWd4Yu9XM+^Hk z@FR`g<h_$t^!imU(8DUXD&9 zwp=sU<+CCLj^7WrIvc}CV=XenX#sfsK12qsNP|PC^+@OaFGy|g4W*(SACT#k1ckS| zLSVZLe#@1~=$4vJ!q*PvR6RPvGqD5bSeSOr9j?lb`oy;C<0G*xbDyWM@=BLF`X{&z?cl zq;3E?vnreSOm2s^&eph0-hul1JtV!VV|me3Rh-q;AEWLygRc?8z|I;*wNYTZ8=>@u z86H@f20p)M5YOm*Qu0CuU;WA>?v&+kz1c{RECb2p}Tdd9x{jK}RUwlFYe3CgZZ|Yq*e(z)>3~qnxTD_V_d%JwjtJ$U6nzHOZl4 z#WT*8ea~uNw2xo1;t+Urv!Il`<}he-D|yG>%|?h zkATCghR{^Wr(Cx&;LM0?2Q8`9~R&Z?zP4?24z}iUt@EG=g;mzJjHl zhruG+h06Y(reo*&vKjsXtZdeI?!;aj-sAHkiV#Kd&JITG%{(o(>(v&}uoy0!e>xYO zsR$M8?(mLPbv&P8&6jlQfq(H|k#XY#c=g!`l&E@Z z08N$s3DU)TAp7q}j93&)9TQ*T!RN)yO8PuJwjxkmak6Ur6%KBMJr;0(33yw14=g%A z3{oOvc>6QMQDXm48g=+DR2=YRHyq{plh(0ZV5ck_F>D892t0-Kb50mp_51Vw81Zvl{!5wTvHf zDH8@s%J4c(wHW)pn1BAO8%EEOW?MY7;F0JI_!Z3o$;`>1DVmAd#k!!dKLWU+hhc8@ z6c*aev3_|`I5TuD|Fq&NtkayvPPWyegM==f7_*EDBX?r?-3(NFkO7ao%-}^>1jdc> zqc{yMDzNof85V<&BGfMtXW0ol2ad` zr(edN)L^<5lXq03=gX1D*Lv8N$5D)p&@NUA%w&`d1+6RMKE^w8 zCFkR~h7H{~d;3_@YkUaTVJ1DWA1QWnJB*uyqxnF)0QS9LGC9s2O&4`yu(zcoSSwB^zO;6mp zZwK^PPVho_J>8GEVZz*T+9Z@xjRoH|*Z7V5Jn3AQEUmVl#oib0XB&#I(u!p{Hs%|2 zS@$({wswFiMI;7OUD;1e6u^ihejUTzZ&y>Okq4>48&q>Uga%uG(T2!adK*y#$DP-p zfr=@~aJ5+P9?I<6JGtjyr2mJ8PJsUMr=kcTO!-Qd@${g|6Q5cb#YfObBcdwBA-c)pgl_@lZS z%S=0qe?BMhK93#5uT%9w93jVg+fAfbHChmSAOrF@55w}E)0sFe0H6PorJzT~^j%-T zbTJhO7%I!2ep(0;8wSzse0TI6aGe_$RSQE8mqXMij#3KpDP)bQfQQ@6{{DOcY4d-g zdUPBet`EezNu|uamnm<1wGUaFRP$27BWRz79HV_gUsY3s6B1SI!L(BG$3JH8dOeygx_y_;m9(V3E&3FuFjxrfP6gXqBLKC0%I9+Viuy8G)M&-sy)YK9 zWjAr1uXr%L)rYrA5%Xm-Pw{%9BjjBxgCp7}v9R+FerO1zaJ_Zhmb)43*#}t|abYwK z|MCbzXAWS>+9O!9$}OxPx{w|6JP7X7l|gO33LkedlId(SgTXIknMcS+{N`f^c(@n! zOOvK&>04QPttu;d9K?MvvZlEt#JyQYWlQgT?x!tS3z>8}zeWOe)?n)W7#+CNXqB+r3`kIQkk>nlA`G z&@i~Zst}?>eqv?cb|_PbWO%QXtv{>FzbAFRq-brIzv z_RzgaQM7u%KDwCbN_j&z(#a27sYvPpeh3{xAMeZ3vfn3Y!TnRTwd@h^E@O@CmpnUd zybVg6+u>&l#}0+eV2vKb$SbHn)fNC|?i4tHFd4>=vZhvrwdk0%gnZ*(pzHE@O4(6_ z_Z!F2(dGof|38-O%a@|Z^Juz0r;McJiYQ{AEIE2>P}V&WzSw6)nflrM=l%p+!m_yB z*Ir~gQOr$rlSg#{75;TyB1Q@^yP0aene@9_Xqajw9-F8@V`g5$uNTxAoIeCc^P|!9 zYA=)mH_H9B3EVblQR^&4b}DfI$g3w)!o6$=43dGO=5)?JwHp-;_M_2JL)M&U$(E~V zuo<4?sn9eHO2d`eqV+nw-WeYnn(mBph4#!cQmX1j$y%z`Rwa`;a`^bzeHa&;L&

zq$Dv@bot02hS9+^bXOE+RC?1|S7X@ovIKG0z*8@ION1a7$YVv+mYl zk}vJZBO#GL_3l1=cZ{cn7DsTY#eJ|jI1W!n#gf(y8@hMy3GfMeloVtMM+E%OaP14Q zRmYVd+x;BZyG7#J#0;);>ji{WM5O*5<^*W7;{A-t-{WK=6)eK33&)Y^6 zPf3{~k~^7!72<*Pt>1!Kz zOK}MQ@s~Lra6F64PhLaZf0&mvjKPA7e&Q2Kj^r%$S#(Ki7UZn5W9fM{te>$AtJGP> z!jco%5~T^O@bf|Z^QVB1Zf$^PYnsIeguD{h`|V}%ifWiCwSbMTwPA11>d?-?+u*&! zT~yo3Xxh$HEc7wK!`a0kee4KTM%TfKcxjsZ$r$plE7A4hxmfc#4tM67VIN(NFXNx$ z%d~v{+24azbCs|1GbGdTVo5eruWR7f3>nLI=oqmbW&yBy@(LEe)g3e-AMYjPh!d_g zp^Px!7j2cM5$0DpWfg*xnH9Kkr$1de-GO@6#qgr{KvGzePO>XQQ9{#$Su05JOWcRD z1Z8<{j#iTJj5eeGK_}z_VtK`}@4(}$9rQhQ62+<;>5X&_g|~W>_nkPt_k|{!Cs{Zx*h!Z%HM_jabaLB^||HZC-}0(ynyJ?J6(*WgEV-bc67Icc5YXFm_ht zNW&WLV0VrhJNWY|e4Ww6jj&rqo5N1=-&Z73yq5;;STT|{^{xbc^?9%^-J3M7o5QYU z0nGP_BAcsfCo=TDkGyMd*0IHc8}M#5Gu11i(7>}e=H4UKRU1?md5ch~l6Vr!+ zCUW-ph)E8`y#LfM@Zpp>JL)hT&S_dxU;d(Ko|WMHPUwI$VRzWDl~0g0H$cBn+Qctb zW-15vGwYLQxg(02^tvNkobD*inx4F7Z@=$_!p+hIQS#)oG*DFN=)snMQ{|qj+yc3j zWd3Mu1D>9_9d~-1z}O!@gjo7SrZT9J|8Xmgcc~DtK|@Ngz~eKo!#R=ih~MaTxspEJ zY{NX?+c;RBaQEoJte1@@>3A-p?|N$VS!*!)MP7&Y4XK=L`byR~t_2bz`r)xvv(RhL zF6{NY58GaBz@j52k#pW>*wj*vS2o$g$4~+Pm+>7pwdHV)2MuWPa49$yzlRRX$I$$n zM>$W$ceuV`CR)18q8oRn;O_A|&{VXI#CvriSaCd6NnOCG){8j)>Q*$Cm=0wJk3eaT z5=F8>)CV4b)4LCN{Cq7YZi}aaTc7xi`lihL%Ncz0%GJ;(zD2=Vk$lNl%VhhZ7?IDgX^~R!3F&i>Bw?t{GoRW zH4ojx<|nBbb;OfuatD)3y)BnxCQF54MS9YqNPnz9fbxkhzVn0?Z601Hr!=~i(<=oayrAGXvKe-L!11<*LP zznBqf&RR6ANF_=dQ_mcsb1vRwWoAgSvfD%s$!j6jAR8Xb4nmLYg?zMH3oZ?M1cSd1 zW!F$c2tT4WaEzv*7JxSSxehp{P>!2{_E^);t7!Pg&Cg-P5zWC+KC@y}6 z1v&>c!k*S;wE4>=tkBwzSruWBX>G;y-Shc_n`S|9?@ZVtlYxy6zu=}X2hp{!;NTGh z_B>*$_}k3m=#*$e^Ilt1?YSw`aO4@Et#KDOnP^knx@_FiYYrZ=O5zNcSmC$ITl|<6 z>oH;ZF|K6OHkhL=MLSKh076Ew!CwY~&+(=7*J8bcGU5yL(9S5d%;uB*A2D`6 z4G|~zccT|Zz3F%JImFW=MQww%xNE&#Kx$|#v)j}QZf3`0z2Q=vzs`Y;pEH9yWGPSg zzqrwk)Mwc0sY40_-7qI=BRw=9Ni8f4E?G^$I-5hhOt=x*M^=hXd^muCdSfVP%PIUV zYe?%~KEsevLvXmm7&h|nY<6JSa+n>gfR6bMIO5(z2>vC+&1EOxzO#;$<=2jiUmWR& zxir0V)T8Z-5@=9FE1s@U6W3jq$ICHecu7A!TKifa{jyv*&n=Q5pZ*5+`|ZbFdP-Pw z@i~8^cR%(nCt6&7{42KIo+{EB&d5aX z15qGZidbd4f@+j4$UUqJ?3DzNVcgkv zfp6dRhF@cRh`Y7Sk;NL%VD&+1HgRh{Vd>aVX6`wkJ(^z*n{P!?vV9(w_^+n0-wLcK zU5*jEXvN5=D5YM_SV5{e1#UBS1k}PxPKQ@t0kb-Ly9~z zW4O6Lu4Bujk?`xyF*v#~ioS*%;IcGVirdl)`I+h(c!;ln04%~k zpTBT(h6K(^O{B)pr=Y%9HRz_ygvz=ZZ2$8;%s<%x*5@0M_l48kr`rDbbj~42HTlLl ze`&{cn$mRQt0HLb-vnDbda;GRjrbrXoV5SSaEg0Z!CG)(_uW@2`I{`ax$puP zGhB<_H!PxO56tMJ>q$&&%EzesdQRuMD;X&rq6hxlXtUKU8n;h^Hvg>QQ}zs_8nGHZ zJbN3WXo#CHV2XH`*=Vgr}^kAg)cFyO?AI35#{<+=?;$xbdFYacnFrUFQay zRBqrjttot83l|vqYA78G3IwZFS76|9S&GuR%WW|$;MR4g!Fsc9c>YlzXN~TL+eeZ( z9p@VSplAxO7HNR{q=$IFVkIx1-^Tq)%c?Tl)0YIdKh=6FGKG*mc*bS|bDuMtnPq+v zuN+klJ`WXP^1uYnd;cQNdYS>OC$K+d(T)H&gHvxi;YuX>Zp1#%%VyC;@Z^N7Lo^y7W@Ci;Meh0&Nv7 zpm{E*_Pi70^0~>F8+8+Zh`s6Bg+3t_)>l`%$|4LoR!{ z4mz*&q`dfF_*do@_sDGs_@8J8+w!kCQ^=9lu;CJ3`aPXZdvDLiI2z*a8@6yEc&>nj zJb>BqdH8$TV@%4F7H~5Md7t&O=w%-Xx^C}*P9QJf31aACw>|!h8w$H}^l0}7dm6YP zoSgdCz)T_M&x%-6R`^bX-KdNMkx3$_w{jEp-MtHLJSYUU^QuCiSe*q|nozX=Ib3qn zO_cS>4o0m~hh^)}V7ZzMxNaCrXxNfdb$%%o!lN$|%fO&qYH1W9KC z3|r~VS+^U&V&y{^d%+TXo@YYiwkYv~pz)m5{AElOpac{84xmW~uZW}9JO`;<9TqUY z9A8Sh(h7T54D+w6dc95yE#3~t!k{E>-{e`MX-c+~U%!=k&i^LbJ2zawxd_+Ib%A{z zt)MG6n2t&8r5XV<*q(Tg@8iCJJRB4#%y1^1nyWxNgYr<_(Sc4sk*B+TRViojLVTR7 zM&IX7fSa2_prp8jAC(=$ZHi>9!Fmpiw2S8g=RZQ3x*?);CqvScdBJZ9+KYHzm8?#> zQb)2jx4`8u@7`E~P7aH4md+1O>6se&&57i_e~g8kUsthL;SLxb-j7Z@WuwmOb;Yki5(gK4Y9O-$yY7vmyhiD8mvHhxEnLP)pij7bgn+7=_Iy z=V3&@RXA{)fWdE*LXVxh`3*w@IO7!#@WOXI_D_?iOhprPY>>sXp$0h5tDSq59Km9O zr&37hR&jfi77NT8M@1@jV&&1R`P~a9G3zu1*sQ$`$LV>(oz^V^UvL|U2CpW%h8cqHbNEHX)k|OIDl2BwEwJJZu3w)sy^@J+FX6+MZDf}!;2^>`!0d|2= zZoVs>@Y(@a)=0sl?jtO}zXt1El*G%fp2E~#nA5<;!`Yx`ACMGHsAN=tNIvK--Z7Mb zwqzJ4GgUw0ui};u~Q|3&S}?xqmYLn zPqPz^KToG!mi1^hy$Dvsr_y$dqxAGeKU$oS1sB5>!K28Du=1NBReO)2%7Pe*a5%-y zEg%N~S}Y|+y05p>pFWGJJ8UX0 zo$UlibDS}}L5>Yxk`LS0?!`N|5R6)8!|WTkq4mR9F5$~3Ong3rv-~8_bXUCxxL`wH z?bETXTZL6DnEE!?{%h<)~t-0m@g%v&;P-aD{rKx!9B+5a#>?q>ja7_smJ~GO!JrZ=``* zsS9}86ruIzHuUVA&R2c^fi&wBI=&diz8gr8({L?zJ^2>eKTW2W?Ji`KHIVu5`Gj_} zMhJ18P!dfVK=n-p;9zu3G@$i2w@2VVy{K}c1A(fzdbc)>v7bzLiw={cR5+>h|H*Yd zIYg5Ui%50e8H#HD2KefShU zd}z$BZyLe&Zj&JXkp~$Bx#1s|Mo<{5ME9ntvKM>~mg*DEz4MzN_g28K9`I((iV?7; zEf)q(nS@P;-t(QxLoqe>DxWF&9v?gC06mbzW8cH+_~HK8sdfqVpT>c+?oNKY(GA$q zaTi5;!Wg+#nSO|OQCD6zo8&zj6OZ}Ok}3mKe$kth6C-ffz=_az!WpQje+ZSaA?%IG zNII{!j1FlGrFoeLah_wkxJ+U`?BLSz@tk@-*~y5>4=x7NUE`R|H(!XA>f#nCs4z{} zYvAI!oejy62TP|uT##oX>pjq)`70j4i5>E6%9UK`TIR(Xrp#l|bs7KIL}90R1RvGU zn$D&=6R*pW*UG2p@F9ci|4o^Fax`QM6IF0>%58LU4M&ES*dU3b_=sM}4^|+WYIT^3Jpk7l&!Q~oh{v1ttS(Y9kI)l+DmvN~DKxWcDg z_M*E&8_!u10NSTt;LLXxtSjySx;&c*ryl!K+vux!?KUt8DWEHsg?PL8A%E@WBYgSm z2JU0tpnpl5bU#F6cjpyw`O?Wf7;(vF^6FToqQ3yH4GE#D&@7SOUo$%N&4rmQ*$D?0 z$J+Gu*bHAL|3=ds71AwJr+Z5{QWtXRH3i#}|86sqowr@|wnBjt%>A*KpO~w?7=XKX zSa9n^f6<^?4|l5hFe8^MFt@!J>J_&LbDVql;J1yV2MO}{jh z-gXZG@8C}T`^ICz)*5ELEg3dUKa1^WPotWUw*DclocBF();)-u!ym*y15bYk+&0_uvehp+RapnB5`VSJLOH+DtXzwuA5=YcI;s;wFHFIvh^tGUA^3j7Vt z{$`XrTah0S{1VsGTevUG4P!(CM}7A;^cegKl^);3X9osQ$%$|H<-lT6vROkpndKN* zEKe3^YDG&EGfC6KhdZ(EG0k<*VrB*Dt>s3|l`&ndLTZ`-W%%Vjd z?vSOaB>YF{o+LHyIx(>;1J%-msl!C1s%R9~BC&8cQorY@j@eb=Bo&RIihATuFP!N+{U@wxcpLZI+FcGB-UFG|T< ziiX7_S;iwhHYMpY`3cxO+3;>STxp6J-Y6H1}tCAVEkYKyRE!X@SiDG$DNHp z4c!LTHD@_Ld(;2F+;)DOvF$oO zl)V#tUf5bhYcD%e%Wz-l?owh&4kD&BtzWg1YshI&v9;Y!q$P zQhce%bMujh8PD z3|kStV!;E5m{#76-2}7POcbhX|sxJvMXy!@lRY{Kx)(+QkWW|M2~K&fC)t z|JW@T>RIp~=jqYW_+NE1UcPKW@Vr&4!xl#dhlTgL{~z`}T5bQ^J|u9_nn2