From owner-p4-projects@FreeBSD.ORG Wed Aug 1 00:21:23 2012 Return-Path: <owner-p4-projects@FreeBSD.ORG> Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C00121065672; Wed, 1 Aug 2012 00:21:23 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 823DF106564A for <perforce@freebsd.org>; Wed, 1 Aug 2012 00:21:23 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 6B6068FC12 for <perforce@freebsd.org>; Wed, 1 Aug 2012 00:21:23 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q710LNLn068855 for <perforce@freebsd.org>; Wed, 1 Aug 2012 00:21:23 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q710LNVP068852 for perforce@freebsd.org; Wed, 1 Aug 2012 00:21:23 GMT (envelope-from brooks@freebsd.org) Date: Wed, 1 Aug 2012 00:21:23 GMT Message-Id: <201208010021.q710LNVP068852@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis <brooks@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Precedence: bulk Cc: Subject: PERFORCE change 215204 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes <p4-projects.freebsd.org> List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/p4-projects>, <mailto:p4-projects-request@freebsd.org?subject=unsubscribe> List-Archive: <http://lists.freebsd.org/pipermail/p4-projects> List-Post: <mailto:p4-projects@freebsd.org> List-Help: <mailto:p4-projects-request@freebsd.org?subject=help> List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/p4-projects>, <mailto:p4-projects-request@freebsd.org?subject=subscribe> X-List-Received-Date: Wed, 01 Aug 2012 00:21:24 -0000 http://p4web.freebsd.org/@@215204?ac=10 Change 215204 by brooks@brooks_ecr_current on 2012/08/01 00:21:21 Add a show sandboxes toggle that lets you see what areas are derived from data generated in a sandbox. Affected files ... .. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/browser.c#17 edit .. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/images/browser.png#5 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/ctsrd/browser/browser.c#17 (text+ko) ==== @@ -64,11 +64,17 @@ #define vred(v) fb_colour((v), 0, 0) #define vgreen(v) fb_colour(0, (v), 0) #define vblue(v) fb_colour(0, 0, (v)) +#define vyellow(v) fb_colour((v), (v), 0) +#define vcyan(v) fb_colour(0, (v), (v)) +#define vmagenta(v) fb_colour((v), 0, (v)) #define black vwhite(0) #define white vwhite(0xFF) #define red vred(0xFF) #define green vgreen(0xFF) #define blue vblue(0xFF) +#define yellow vyellow(0xFF) +#define cyan vcyan(0xFF) +#define magenta vmagenta(0xFF) /* * Each file is displayed in a 266x40 box: @@ -119,6 +125,9 @@ #define SB_MINROW (fb_height - 38) #define SB_MAXROW (fb_height - 1) +#define SB_SHOW_MINCOL 606 +#define SB_SHOW_MAXCOL 793 + /* Start offsets for browser columns */ const int colstart[] = {0, 267, 534}; @@ -179,6 +188,15 @@ { 0, 0, 0, 0 } }; +static int sbshow = 0; + +/* + * baseimage is the black and white background image with any disabled + * protection modes grayed out. After init_bgimage() runs it will not + * be modified. bgimage starts equal to baseimage and is updated as + * the sandbox mode changes and showing sandboxes is toggled. + */ +static u_int32_t *baseimage; static u_int32_t *bgimage; static u_int32_t *icons; static magic_t magic; @@ -433,7 +451,10 @@ bgimage = malloc(sizeof(u_int32_t) * fb_height * fb_width); if (bgimage == NULL) err(1, "malloc"); - read_png_file(BASEIMG, bgimage, fb_width, fb_height); + baseimage = malloc(sizeof(u_int32_t) * fb_height * fb_width); + if (baseimage == NULL) + err(1, "malloc"); + read_png_file(BASEIMG, baseimage, fb_width, fb_height); for (sb = 0; sbdata[sb].sbtype != 0; sb++) { if (sbdata[sb].enabled) @@ -441,10 +462,13 @@ for (j = SB_MINROW; j < SB_MAXROW; j++) { for (i = sbdata[sb].bcol; i <= sbdata[sb].ecol; i++) { pixel = (j * fb_width) + i; - bgimage[pixel] = vwhite(((bgimage[pixel] >> 24) & 0xFF) / 2); + baseimage[pixel] = vwhite( + ((baseimage[pixel] >> 24) & 0xFF) / 2); } } } + + memcpy(bgimage, baseimage, sizeof(u_int32_t) * fb_height * fb_width); } static void @@ -464,22 +488,33 @@ for (j = SB_MINROW; j < SB_MAXROW; j++) { for (i = SB_MINCOL; i <= SB_MAXCOL; i++) { pixel = (j * fb_width) + i; - if (bgimage[pixel] != black) { - /* XXX: Assuming we're either blue or white */ - value = (bgimage[pixel] >> 24) & 0xFF; - if (value == 0) { - printf("unexpected zero value, pixel %08x\n", - bgimage[pixel]); - value = 0xff; - } + if (baseimage[pixel] != black) { + value = (baseimage[pixel] >> 24) & 0xFF; bgimage[pixel] = (i >= bcol && i <= ecol) ? vblue(value) : vwhite(value); } } + for (i = SB_SHOW_MINCOL; i <= SB_SHOW_MAXCOL; i++) { + pixel = (j * fb_width) + i; + if (bgimage[pixel] != black) { + value = (baseimage[pixel] >> 16) & 0xFF; + bgimage[pixel] = (sbtype == SB_NONE) ? + vwhite(value / 2) : (sbshow ? + vyellow(value) : vwhite(value)); + } + } } fb_post(bgimage); } +static void +toggle_sbshow(void) +{ + + sbshow = (sbshow + 1) % 2; + update_sandbox(sbtype); +} + static const char * get_desc(int dfd, struct dirent *entry) { @@ -555,6 +590,10 @@ fb_post_region(textbuf, colstart[(s/NROW)] + TEXT_OFFSET, FROW + (RHEIGHT * (s % NROW)) + BORDER, TEXTSPACE, CHAR_HEIGHT); + if (sbshow && sbtype != SB_NONE) + fb_fill_region(yellow, colstart[(s/NROW)] + BORDER - 1, + FROW + (RHEIGHT * (s % NROW)) + BORDER - 1, + ICON_WH + 2, ICON_WH + 2); fb_post_region(icon, colstart[(s/NROW)] + BORDER, FROW + (RHEIGHT * (s % NROW)) + BORDER, ICON_WH, ICON_WH); } @@ -595,7 +634,8 @@ } else { if (ts->ts_x1 >= SB_MINCOL && ts->ts_x1 <= SB_MAXCOL) { - for (i =0 ; ts->ts_x1 < sbdata[i].bcol || + for (i = 0; + ts->ts_x1 < sbdata[i].bcol || ts->ts_x1 > sbdata[i].ecol; i++) /* do nothing */; assert(sbdata[i].sbtype != 0); @@ -605,6 +645,11 @@ update_sandbox(sbdata[i].sbtype); return (ACT_REFRESH); } + if (ts->ts_x1 >= SB_SHOW_MINCOL && + ts->ts_x1 <= SB_SHOW_MAXCOL) { + toggle_sbshow(); + return (ACT_REFRESH); + } } } else if(ts->ts_gesture == TSG2_ZOOM_OUT) { if (ts->ts_count != 0) ==== //depot/projects/ctsrd/beribsd/src/ctsrd/browser/images/browser.png#5 (text+ko) ==== @@ -1,10 +1,46 @@ ‰PNG --È2¼¿?ø#ã9Ã&¼@ü|ªžª±ûíî·OŸÆþžÞ*""-÷Žüò—¿,ûRÉ{î¹'"VÜ´å–[®ÑúPÊ{@-ä駟Žˆ(ÊÊÊ:g?V¶lÙ²xî¹çŠÓn³Í61hÐ 8õÔSãg?ûY\{íµ1kÖ¬˜={vlµÕV1cÆŒ¸ë®»Öhý×kkkcÔ¨Q%몪b·Ýv‹¶mÛFÛ¶mãàƒŽã?>FŽù•ûÀæiKáÈÙgŸ]v|óæÍÓUW]UüÕëÂ/Ü j‹-¶(û‹\®ZÕò·Ùf›´×^{¥êêêž47t|¤àÈ#¬·½3 _ÔXüÌž{î¹´ÓN;•´©ªªJwÜqGJ)¥ÚÚÚU~¶›R}ö±í×÷7ß|sÖ£pdîܹõ¶©¨¨H={öLÓ§OO)¥ôÊ+¯”´qD)¥¾µÞoBÿì³Ïâšk®‰¿ÿýïqä‘G®ïEl6fÎœ£GŽÉ“'oì®dõÔSOEDÄí·ßMš4ÙȽÙôýêW¿Šˆ×ÔvØaeï¡Z¶lY\vÙeññÇGeee0 w7×É×uXSÿÉÛþËRJñÏþ³ØÿýöÛ/š5k¶‘{ÀưΗ`Î?þñ8âˆ#¢sçÎÅaûï¿œzê©ñÊ+¯Ä<gžyfœqÆñÎ;ïÄE]Tl׺uë¸øâ‹ãßøFtéÒ%¦L™o¼ñFüú׿ŽI“&Ûýð‡?Œ.]ºÿ{àÀ±`Á‚øùÏ^çfÇŠŠŠ8í´ÓâàƒŽnݺŔ)Sbøðáñè£Æ”)SÊö»í¶‹K.¹$zôè»í¶[L:5FŽ555ÅKV·ü<0Ž8âˆ7n\Üÿýu濦ëXpýõ×Ç[l—_~yl¹å–qöÙgÇþûï[n¹e¼úê«ñàƒ–½œ¡]»vѯ_¿ˆˆ¸÷Þ{cáÂ…å7ØztÑEÅ?þñèСC\yå•qÅW¬Õô¹>›ˆuûn¬OÇ{l|ðÁqå•W®òrÅùóçÇ€bÐ A±ï¾ûF³fÍbÁ‚ÅñmÛ¶óÏ??ºwï;ì°CÌœ93&L˜üã㥗^ª3¯–-[Æ%—\‹-Šo¼1öÙgŸ8î¸ãâÈ#Œ…Æ+¯¼¿þõ¯‹—®¬²²2Î<óÌøö·¿»í¶[ÌŸ??FûÛßâñǯÓvUûÀšìc+~Ä8ꨣâõ×_!C†”ô稣ŽŠ#<2FŽ>ø`qxá{qÝu×EãÆãÄO Œo}ë[1cÆŒxä‘GbØ°a±páÂØe—]⬳Ί^½zEeeeüãÿˆ»ï¾{ƒoÿõ¹í7'¯½öZD|qYÖo¼±‘{ÀÆ°V§LVw V¡~ûÛߦ”R1bDqع瞛RJéî»ïN×\sMñÒaÆÛôìÙ3Mš4©8nñâÅÅ¿?ûì³tÞyçÛ>õÔS%—ý¤”ê\Æ°ÕV[¥G}´l»Ù³g§~ýú•ô½wïÞéÃ?,¶[¾|yñïO?ý4í¹çžk´üúnÀ]›u,Ô§Ÿ~šRZq™Å”)SJ–¹hÑ¢tÄG”Lwꩧ۴iÓfƒJ[ù¬-Z¤óÎ;/¥”Ò’%KŠŸ×ÊUß%X9?›uùn¬ïª©©I)¥4vìد4Ÿc=6-]º´ØÿÏ?ÿ¼ÎúÔÔÔÔi¿Ë.»×ó¬³ÎJµµµ%ŸÁĉS×®]ëL×°aÃôÂ/¬r9+?Œ¡¾}`M÷±ˆHL)¥tï½÷–]÷¥bõV-S‹-J'NLßúÖ·R›6mRïÞ½Ó¿ÿýï”RJÓ¦M+y×Æ - ÅÏ~øðá%ý*@r6kûÝØõÈ#”|GÖ¶š6mš>ûì³”RJ×]w]Új«REEEêÒ¥KúÅ/~QÜ.ݺu+NS µµµiùòåéþûïO}úôI[o½uêß¿zã7RJ)3¦Îþtå•W¦”R=ztêÕ«WjØ°ajÚ´iêß¿š9sfJ)¥“N:©Ø¾Ü>°6ûXÄW ‹/NÏ<óL:øàƒSuuuºøâ‹‹kÉ’%i„ 餓NJ;vLgžyfúøãSJ)Ýpà ›ü¶_9€œxâ‰i§vZe½õÖ[)¥@xà”RJO>ùdÉ8D)¥¾6µvÈ 7ÜúôéS§Î<óÌô‡?ü¡x“á‚Ò.»ìRœ¶@RJiÐ A%„7ÞxcJ)¥§Ÿ~:UVV–,û7¿ùMñ€±0lU7ŸrÊ))¥”&Ožœš7o^ïü~øáâ°ÂÁç¿ÿýïÔ¤I“:íwÛm·âKÇŽW»ür_벎_L7.5k֬θ½÷޻؇Î;×ײeËÔ¥K—Ô¥K—:’뻾@""í±ÇÅ3çž{nöåHÎÏf]¾¢ÆŽ›RJéÖ[o]çytÐA)¥ò¿¤WVV¦·ß~;¥”Ò~ðƒâðB-÷ÜsÏ*÷µÝǾj¼AwUË__ëøUtëÖ-n¾ùæ¸ù曣U«V_y~_Å_þò—xì±Ç¢Q£FÅ{>V>(ÎùÙ¬ËwcCùÑ~3gÎŒN:Å«¯¾=zô(ióÍo~3žþùhÔ¨Q¼òÊ+që·FÄŠË‹ -÷Pš4iþóŸ£iÓ¦«\þÍ7ß»ì²Ka^xaì·ß~1{öìøãÿ“'OŽ¥K—Fuuu|ûÛß.™Ï{ì1}úôzoRŽXû}¬p£ò>ûì{ï½w±mEEEüéOŠ-Z¬rý6e_eÛo 4ˆ-Z¬QîÞ›úÎnn±Å«ýnðŸk›µ¦oB/W…Çð–{ôeÄŠGÚÞYðÑG¥[o½5þùé¶Ûn+¾Øðå—_.yügáÝ&LHC‡óØÔÂc,Xî¸ãŽtÑE¥o¼±Îóè[¶lYlß°aÃôÏþ³Ø‡»îº+ 8°ø(Ó¥K—–¼q¸¾å—{麮cá‘¢:u*ûÙMœ81¥”Ò‘GYgøÆza}ívÝu×⺤”ÒÕW_½Ñ>›µýnlÈ:á„ŠN)¥éÓ§§aÆ¥G}4͘1£8|Ĉ©ºººÎ´×_}ññ¦>ø`ºä’KÒþð‡4eÊ”4gÎœôø㧔Rúç?ÿYÜoW~ï'Ÿ|’>ùä“4dÈtÅW¤Ç{¬8îôÓO¯³¬ÿøÇÅý`ðàÁéÜsÏMçw^:thñ߆•¯[nXÛ}¬ªª*Mž<9¥´âñÞC‡MC†IÓ§OOË—//¾Íþ®»îZãïÅàÁƒSJ¥£ˆÔ·oßâ²6õm¿¾ß„¾6VÞŸÖæE„p@q=zô(»Oz¯RJýÇ×ÚM°!HD¤-ZŸÑÿe·ß~{jÔ¨QÉ4§Ÿ~zZ²dI±ÝÊÚ•••iÀ€uƧ´âÙ7ÝtSÚzëKæ׸qãôÿ÷ÅgæŒ3&}ôÑk¼ür_뺎ÿ)$"Ò%—\Rl»r\ No newline at end of file +++9_÷îÝ¡¹sçêÈ‘#Žký‹jÕª)66VûöíÓºuëüá 6T… +BΓ••¥ 6hß¾}®ª +…B¡ä_š4ibkÖ¬±¼lݺÕn¾ùæó<xÐÌÌ4hP¬Û0|øp33ûÏþ0|ÆŒyn—gË–-öòË/[DDD± +…B¡\Ü…; +…r!–ääd33[½zõY-Ç{ëž{îñÿÛáÇsçÎAóÝpà ¶ÿþ/…¿÷Þ{V¦L™€éï¾ûn33›0a‚=óÌ3þ´)))&ù%ô¼Á’d%K–´Í›7›™ÙŸÿüç€q[¶l13³¶mÛÚŽ;üõ¶iÓÆ$Y©R¥ìµ×^ó‡geeÙ©S§üÿýõ׶=ñÄff6oÞ¼ züüóÏffvüøq+[¶lÀ¸‘#Gš™Ù›o¾é×ù믿ö×sìر€}˜œœlaaa˸ä’Klúôé!÷yFF†uïÞ=¨NgÚ~ +…B¡•b¯+…TŠ½ +…rA–Õ«W›™Ù믿~VËñÈÚµkT©RãüêË/¿Ü$Y‰%lÙ²effvÿý÷-/66Ö_fóæÍýá^+ ÇŽ³ÌÌÌ€’Û¼yó¬B… +Aõñ.À333ƒ^´¿ì²ËüºvéÒ%hÞøøx=×^{I²°°0Û¾}{Pȸí¶ÛÌÌlÆ fföÌ3Ïøã"##íøñãväÈ? yw?î¸ãŽ õz¡hâĉþ°n¸ÁÌÌ6nÜhQQQAó¼ñÆfföñÇxû) +…\x+ùâyQ¼òÊ+:qâDÀ°uëÖùÃ.»ì2IR=Ô´iSíܹScÆŒ ZÎÆ5{ölI9MŸîÀzä‘Gdf…ª_xxxP9uê”?>))IcÆŒ zÄ“œœÐŒ¯$ÝrË-ŠŠŠÒÂ…õõ×_Í“žž®yóæI’zõê%I23}öÙg’¤.]ºøÓzÿ~úé§%I]»võÇuìØQ¥J•ÒìÙ³uôèQI9GJÒo~ó•,Y2`½Ï>û¬*V¬¨!C†øüwG^xá…JNœ8QRλA•*U*Ðö+SjjªvîÜ0>¯;)§ß©ð.Ä[¶l©Ï?ÿ<ßuFGG ;pà@ê[§NÒºuë´nÝ:-[¶L‹/V›6mÔ§O}úé§g\o½zõ$I›7oÎsëÖ“$Õ¬YÓöå—_êÔ©SjÛ¶J—.K/½Tñññú裔••¥Y³fiàÀjß¾½fÎœ2€Œ;Vááá9r¤ªVªÁƒkðàÁÊÊÊÒ‚4vìXMž<Y’t饗ªbÅŠ’rîdœÉùÞï+…TŠ½ +…rÁ—ØØXûè£,”ƒÚc=t§Â+E ’¬Aƒ¶pá õ-Y²Äúôé´œs@NwòäI[µj•}ðÁ6dÈ »;RÁ.À¯ºê*ÛµkWÐò7oÞlIIIyÎ׿Z¯£F¯\zé¥~°¹ë®»‚æ ·‘#GÚÑ£GƒÖ{àÀ{øá‡CÎ3bÄ;qâDÀôGµ—_~Ù*W®\¤í§P(Ê/%ìÿÿg Y²DûöíS||¼®¿þzÕ¯__ï¾û®6l¨‘#Gw•qŽ\HÇþÔ©SÚ¹sg¦ õ¹ž••¥E‹ ˆˆP½zõ§¸¸8uìØQýúõÓüùóϺÎÀÅ*!!A_|ñ…Ê–-«õë×kÚ´iÚ´i“*V¬¨ ¨ÿþJLLÔôéÓÕµkW-X° ¸«|ÞŒ;Vƒ RVV–¦L™¢¥K—jÿþýªW¯žÚµk§öíÛëPZµtÝu×ÉÌŠ»Ê8 +•X¼; wÜqGÈñQQQöä“Oú©õþûï?¯ ªtéÒ!‘sUò[•*U¬I“&[ìIó|—Üw@<½{÷Îszî€üRÚµkçï³Ù³g[5‚¦‰ˆˆ°·ß~ÛÌ̲²²òÝ·Rù5ÅqìÏõeË–i;¼; ™™™yNfmÚ´±íÛ·›™Ù‚‚¦áå×T,X`ffS§Nµ’%K¯]»¶ýðÃff¶yóæ€qÿKw@úôécffÇŽ³¶mÛ†œfðàÁþgÝÝwß]ìuU¸R¸rÎ_B?tèžyæ}ùå—’¤Þ½{ŸëU\4öìÙ£+VhãÆÅ]§f̘!Izë·T¶lÙb®Í…ïÅ_””óL}=B¾CuêÔ)=òÈ#Ú¹s§ÂÃÃ5bÄ×Õ,’_ë9PPÿËÇþtf¦ï¿ÿÞ¯«VY̵ŠGùòåÕ¦MIÒ°aÃü÷©rÛ´i“ž|òIIRÍš5ýžÖÅ¢gÏž’¤É“'ë»ï¾9Íرcýq:tpV7œ?E~ëL¾ûî;õêÕK 6ô‡µmÛV7Þx£,X ©S§jÐ Aºå–[´fÍ=ðÀþt+VÔƒ>¨+®¸.#××+s¬Ê—/ïOûÍ7ß|—(Q”oöìÙî+ÊuPß¾}ê’û:য়~ +ºnȧî@$€T©RÅ¿üÛßþæ÷HZZšeggÛܹsíÉ'Ÿ´k®¹Æ$Y¥J•ü…÷Þ{Ï6lhaaaV¿~}ûë_ÿjf9Ï@'%%™$‹‹‹³ÄÄDûuëf7¶ˆˆ©©©ff¶téRëÖ›U¨PÁZ¶li¯¾úª™åü¡vëÖÍŸ¾råÊ–™™if9MíÚµ³R¥JYãÆý?ðåË—hý¡.¾ +»^ñ.¦Ž=j6l°ßüæ7ЂƶmÛ‚Zâ*®+ ®÷Maÿ6ÎGùä“O‚þF +[Ê•+çI<ûì³vÉ%—XXX˜%$$بQ£üãÒ¢EïC1++˲³³íý÷ß·.]ºXåÊ•mÀ€¶téR33[¹reÀùôÄO˜™ÙŠ+¬}ûöV²dI+W®œ 0ÀöìÙcff×]w?}¨s 0ç˜töäøñã6sæLëر£ÅÆÆÚƒ>è®'NXZZš]wÝuV¿~}4híܹÓÌÌžþùþØç ×^{Õ¨Q#ß²|ùr3+Þ+#¯+Õ/„òk*ÕªU³´´´ óó矶wß}×î½÷^«X±bÈy½ÏV3³Ûn»-hü|`ffï¾û®?¬(ß±üãÍ,8d¤§§[FF†íÛ·ÏŽ?ðY>zôh33û¿ÿû¿ï‹‡~8èîÀÑ£G-55Õ^xá…w¼òå—_š™ÙÀƒÆÝtÓMf–lòÚ¹¿½òᇚYÎÅ¿7ìå—_6³œ€qúwfåÊ•mß¾}ff6þ|xîïÚÜËòJ•*Uüär7ÚTÔë¡W^yÅÌrž$ˆµFùw(n¹å–€i‹rÔ[7ÿoôôkø¨¨(ÿ{7..® ǽp'LAú1˹uÓ¿ÿ€y½+ .÷MQþ6ÎGÙ²e‹™™1¢È˨Q£†õéÓÇš4irüW_}effC‡õ‡åþPìׯ_ÈùÆŒcffï¿ÿ¾?ìÛo¿53³?ü0èØûÕ)wÿ?¡Îžcg@B}¹Lž<ÙÌÿôJ¯^½Ì,øëB<ö¹È‘#GìÀù/Üm? ¹ïrIëÄsüøqkÔ¨QÈí!€P~m¥téÒvÇwØôéÓýϬ܎9bÿøÇ?‚~(ñ>[·mÛr¹Þ]™3gúÊò럷eÊ”1)§u.³œÓ?þØÌÌzôèá/gþüùffÖºuëBí‹„„{å•WüÍN·lÙ²-`uîÜÙúôéã×/wéر£™ßõö_zzzÈ|ïqªY³f™”óýæŸ>}ú„¬¿÷jA^$¯þ¼GÀ¦NzVÇJÊyüÍÛ_|ñ…—-÷÷¸WŠrä}??~<d(ŒŒŒ´ +*ýèªù%ô•+WjË–-AÃ7oÞ¬U«Véƒ>ȳ‡ëåË—½@YZ5•/_^f¦¯¾ú*ä|Ë–-Ó©S§¡ h×®]ùÖ±Q£F’rz¢¼òÊ+ƒÆ‡……éرc*S¦Œ6l¨ôôtEEEùë +婧žÊwù9Ûª7鬬,íرCñññ*S¦L‘ëw><÷ÜsºñÆÕ°aC%''ëÖ[o 9ë}SØ¿óÕ_AZZšbbbTµjÕ"/cÛ¶m~ëIÑÑÑjÕª•âââ¯nݺù/:çeÍš5!‡{/Ö«WÏ6iÒ$µoß^жmÛ4uêTÍš5K³fÍRFFFÈ—Ös«VÚy=ÇB9ýe<I~#¡58uê”$÷ÜÎűÏíÊ+¯Tjjj¾Ó,Z´H‰‰‰yŽ_»vß"M~òzaòäÉ“ú÷¿ÿ4<22R—_~¹6l¨²eËjæÌ™êׯŸ.\xÆuÿËŽ?®wÞyGï¼óŽJ–,©-Z¨}ûöêÞ½»zôè¡ÈÈHÝqÇêر£Ú¶m«}ûöÌŸûeâܼïïs¬¨ß±7nÔÊ•+Õ¸qc%%%iÎœ9êÚµ«$iöìÙÊÊÊRÿþýÕµkWÍœ9SÑÑÑjݺµvíÚUèó{ÕªU6l˜† ¦jÕª©}ûöêر£ßK|Ó¦M5a•)SFo¾ù¦?_îÞâ7n¬Ë/¿\qqqªW¯ž ”ï:ׯ_²ïúÕ»nˆõ¿»NoÔŪ$ÏáÇó<V^ë^uêÔ‘tv×CÇŽÓ·ÞªøÐnݺUüブQ”ë o¿ýVéééŠ×ܹs•ššªO>ùD³gÏÖ’%K +Õ8J‘Hrr²Þyç"Í›»…*w‘³{÷n?~<ä|ÇŽÓæÍ›¯š5k滎K/½T+Vôëz&ÑÑѪ[·®$ÉÌ‚Zt8ÎÅ6žÞ’ƒÇ.ÐNyŽ?®{ï½WsæÌÑ-·Ü¢‰'jæÌ™AÓ¹Ü7EùÛ8_Ö¬Y£®]»*>>¾@Ó‡……iÀ€ +SjjªßZTóæÍ5dÈýþ÷¿h!dïÞ½Ú¶m›jÔ¨ryYYY!/Â¥œ‹Q)çÃÐ3vìX…‡‡käÈ‘ªZµª¬Áƒ+++K,Ðرc5yòä<ë>α%Jä;>¿–UŽ=zNêPçêØŸK'NœùÃRA9rDwÝuWžã5j¤9sæ¨zõê9r¤ßj€œ+™™¶nݪ6mÚ¨\¹rêÑ£‡$éÓO?-P}5j¤{î¹GGŽÑO<‘çt.Ô€ôóÏ?+""B‰‰‰úæ›o¡Ù³g«M›6Ú¿¿>øàÍ™3Gëׯ×Ò¥KUµjU¿ž¡tÿyÓ•.]:ÏiÊ—/Ÿç¸5j(,,,d=*Uª$)øº¦¨×CuëÖÕõ×_ïÿÿÁÔ¿þõ¯€0s6×A›6mRŸ>}£«¯¾ZݺuS=tÙe—iÈ!êׯŸ’’’ò| +ÊsÁ´´4IRåÊ•2a¶nÝÚ? ?ýôS¾ËÛ»w¯222tÉ%—h÷îÝ?~üëpâÄ I9½S§N!O k¯½Vqqqúâ‹/´jÕª3.3·s½“GyD}ûöUýúõõØcw¹oŠò·q¾x·lãââ4pà@M™2%ßéï¾ûnI9¯ÞÉ=zôhI9?þéO +šÇû•#”²e˪N:!Sò:½ò.”s;uê”fÏžÙ³gK’ªT©¢1cÆèÆoÔC=¤Ñ£G‡ü`÷“+Ê9ºßÔË/¿<Ïí»‹c1òúýð¾t_£¤¤$ 8P5jÔ8㣓ÞÝâü>ËÏäl¾cçΫƒ*))IuêÔQݺu5mÚ4ÿbzæÌ™4hÚµk§îÝ»ëÔ©S~‡ÄgbfúóŸÿ,)çß¼ –¤7êСCŠŠŠò÷Eß¾}Õ¦M8p@W\qEÐwYýúõT3ñö_dd¤ªVªÝ»wMã‚P"##ò.‰wÜÛçgs¬ÂÃÃõ¯ýK‘‘‘š9s¦Zµj¥ÆkôèÑzøá‡ýéÎÅuÐÖ[5aÂM˜0AaaaêÑ£‡þûßÿªfÍšºùæ›õòË/ç;ÿ9ï ½¨vîÜé?W|ã7†œ¦]»v’ržÛ.È°wÒ^sÍ5!Ç·hÑBûöíÓÆUªT)íرÃ\û˜[õêÕ5eʽòÊ+Eúõö|lãÅ"33S>ø $iĈþíLë}SØ¿ó%55US§N•$ÿ±¦¼´jÕJýû÷—$7NR·÷ç{ï½4O©R¥Ô¾}{Iyß!HJJ +9ü–[n‘ôK+ÕJAA;"U¼V°Bµ<#Ézè!3Ëiùô¶°cccýVcr·‚a'Nœ03³+®¸"`žž={šYN')Íš5W¡B¿ýã·ÞzË~ß}÷™™ÙæÍ›ƒêàu–³aÆ?T@EÙFé—}4hrßmØ°ÁÌ‚;jÑ¢…½òÊ+öÊ+¯X… + +}Ì +Zòjëôòßÿþ×r{ꩧŠeßåoã|•ªU«ÚîÝ»Í,§9¼P-‡\}õÕþvΟ?? Õ¯ÏÓ;,[¶¬M›6Íß×yµ‚µk×®€æ²%Ùý÷ßof9—ånÝÍ«çé I9m›¶Êê(ì9Ö¢E3Ëiu£iÓ¦þð°°°€¿§ñãÇøïbìرfÜ”ôK3ƒü±?×®\¹ÒÊ—/_ ’»•“Âô’»ÍÿÜ-¦I´‚Eùõ”êÕ«û}'-X° dǧöè£ú}zänfÖûlÍ«u@ïœÌÝ'EQ¿cs/ÏkÒ5w³ö111ffþµPa[ö{öÙgýùs÷»‘»4iÒÄ.\hfMÎ{õ:zôhP§‡½zõò›¸Í«¬¼öß·Þ´ÿ¼þ4¶lÙÔ±áõ×_ï®åÕ +VFFFPó´úÓŸÌ,§³ÄÜMåX5kÖÌïú w+“)))þ²r7·{6×È.ê§%<<ÜfÎœifÍ÷çS +wÒœÏ+#÷ùT˜+RJ–,iß}÷?ÿªU«ì½÷Þ³Q£FÙ¸qãì믿ö/¬·mÛÐœmµjÕlïÞ½f–Óá¨Q£lÔ¨Q6gÎ;yò¤}üñÇvôèQ3Ëé±ÝNE eÊ”ñûoÚ½{·7Άn“'O¶¬¬,ÿ»3T+ì =!!!àËÃÌìÀ6|øð u…‡‡ÛÈ‘#ýôÓçyøᇦÏë(ì9V»ví ¶áwíÚe·ß~»Ýyçfvñ³9öc+\ No newline at end of file