PLP%uffs??1ti4b5I3iI5CMMGGE8Ta8?c8[mm3CF9sLaXZDll6kpjmhGmhE$GONEENhhGl6OWXb9lkNk0kkNpklZW6&bDN0qSVHCbC))U%H%KpkppOK0&6Z#dDX&KWDZ#)(PF5L5Y)25n##w3JI
lAKGhm[]d%&%K9C#3lbdLIw7w))#m62?3Uwu?evsi3A%k&NG$E[GjEGGmGGjjjj$$kkkkp6DdXkjOWpphplkN0ll6WN&WS9qZS)(VC%CV&p0phOl6ZXZbSqqSqKK6&lKbD9)uwA44AAtIiTatYoJf
dHHqdZ&NOmphN6qVu))))V)((ng##HSutt5LwTtiiLWSWk0Nm$E]]EmGMmG$$j$[jOkpOlWWhO6pkpm0kOkW&hN0NXDbSPP%SbnPUkk00kNklDbZ#S#U%qbZbq&WXZDXSAP((n)(wwL4AaIT
kW6d#C2ATT#Dl0&N%Uw((2w5LP(()Vl6d6dC#%q9KkNphj$[GG]$E]MmGGm[[$hOj$0p0pmO0WpjmWh06WhOO&W9#SSqHdZwbK&W&DD%%%CSSSHSdZW&XW6DD(uPI3L3To7????f7If
XS#DZq#t5iaL#6&W$dq%JTorr??????roiuZDSlNUqZSkOmO$[GGMG]MmGG$MEjjjEhpkkOmpkNOjmWh&pOOOWKbX%dZX)(nd6WlW&ZXHSqUU#SS%SH##bX6D&kklKKq(Lf7tLIfs7ss?r???ov
09S##V(2wiatPD/*^*****/\\//<\\\cc?fYtAuP2wPnZW6Npmj$]][GM$[]MGGE]]G$jG$NhNEGONhEEOpp00NOO&DdXdZ66ZCCSD&6WKZ9Sb9S#gg#SS%S#UC#SSq&mjNpNXdDPIiLiiTeTeve?>r
Zd9HV(wPFttI>[[$5#6hEE&%i7re>orT?e?<!!!*<1?JChmmG][$[[G]]]G[G[][[GmGmjjj$[$OpOOEOkNpNNppkW6DXZWHSZ66ll6WlKDZKqH%nCH%%gngn(((Vb&Emh$EN6bSU7fwfreroe>??T?
qqH#gU2wAttIfq]mtu45(pdS$9NG?TJTsov><<<1oI)kjm$jEGM]G[][G[[[]]][G$$EjjjjEGEhjm$$hkpONjjjOkWll6XXd9S%dZKl6l6KDX6Xb#ng##%%##U)u4FL5P#dNmmE$E0WdSw7FtJTr?see??vs
MRR[]MRM[M7D][+L(JslnnKXGvTTrJo?1><<>oA&m$j$[jG]G[GG[]]]]][G$$$E$GGEhEGjjjNNOhhOkWXDXbSSSSbZKWKZXZZdZSgnUC%C)Pw5FAAAF5uUKGG$EmhN6K%3Fas7r1v?e?1e>
$$G$[MGpk06YFj$GS4\!<oL#kJGkWe?1??e><<rs3)pE]G$G[[][[[$G[]MMGE[$EE][[$hjEOEjhhjmmkW666DZ9H9qqbdXZZdbddZdZS#VVg(uwLiatY33Y33tttaiA5V&GGEmGOWXLfLITs?????vcc!
E$G[O]$mk&KI)jmrO>!!w(D8fhbO7??vcc>>>ftFDGGE[][[]]MGh$[[]G$G$$G$EmmmjhNk0&00&l66666DZbqqdqH%SHSSH%PV)VuAatttt3IIffffJJJJJJJfIYtaiA)q$$GE$GGhNKZ4IwIsr??vev1c>>
GGGGm$O&Wf9OR%5Z9k4$HG(>?vs1>c>>eTalpGGmG][M[[[]MRGG]M$hjmEE$$$EmmmON0&kNppk&KdH######ggU)))))(wAaaiiiiiiiiiiiaa3IIIIIJ7TffIYtiA#jGmGGGjO0K%f4fsT11c<v<>c
][[[[[[[G[GEjhm3qmeRRKCjAGZW?eT>c>c?sJwZ$[[$EGGMM]][[GGG$mjm$$EmEEmk0ll66lllll6lWKdS99bqH##CCC#g)PP(()UHqKlW0pk0&0&W6DZCAt3aLbG$G[[][[$jNW9II47r<',,+v!<>>
GGGGGGEjjN0it2OM886%9c9jGIfr?eoc>c>?sfwlm[]M]MG][GGGGjhk&Op&&hG[MmMM[EOKZdbH%#####U(PLittt33IaF(ngU)((()VgCgCnnU%ZKW6bnatiAW[][GM][EhpKZw3?1^;;"<<>>>U
GGGGG$EjhpN)ASG(WaHa\>cc>o3fYo?1v?eo3VE[]]MMENp0$j6H%S99##%XkOWU#][GGGjd)XZ%gU)(PLAIIIf77T77JIYiaiAAiAA3YYIJ7fJf7JJ77TTfY5ttag[[M[[MMGOkX6H7+:`-`_~'<11J)O
GGGGGjNphjGh4wE81>><<>>>or13?rv?????oAX$[MMM[Xl6$$C3T?oo7fYiiAu#bDq#2#GGGmLL%#nV)(wiittIIfTToTT7JJYaiiiiAFFAiaAiiaIJIfJffTTsr?????rfYwGMRMM[Gh&DnSe^^^^*\!\<)d&
GGGGG[[[G$G$)32hM>c>>>><>c111ftorrJfJI(dNGMMRRhSWd7?1<\\\\\\\!<>1?oIa52)#S9#VV(()nHbZwuuuLittIJ7oorooTfItaALLwSnnNpahm6FHkditJor????ssftiC[MR8RRMGklKZ)(g\+++/!<THq<$
GGGGGG$$$EEj(wX[Cvsc<?re<sv>>e?rJaYsYCjm]MMM[]EClqJ?1><\////******!>sfIaLu(()(()nn)(PAiaiiiAiaY7s?????rsoJIIYtYFgnA3SjmpjjjhFs7P6hwJor???o39GM][M8R[jkWZqA(vc11v?)Z&?)G
[G[GGGGMGEmW(W6?orrccr>>>c?ccorsTaL40$$GMM]]]$GCw?v><\\\\\\\\/\/**/////!<erTJIYYtttaaattYIIIYYfJTr?????rroTfIIfJfIaiiiPVPnWjp#3ItF(V(uufsr???oJVGMMMMGjOZDg5iT1ei5bkkYs%G
]]]]]M[]][[[G$mjh0)CGn?rTo?e<?<<?ccvssoftYUm$$]]]M[[G$jknfr?1><<!!!!!!!!!!!!<ce?oT7IIIIff7TTT7JfJ7To??????sooTJfJJJ7JfffIYaF5L2u5uwwatYTr??e?rs7UGMMM[G$ElK0X(C=+v\>"eoTF*c+
BQQBBQB@QBBRbnW]T?an?I1c>>?>>?1ToJYOG$G[]MG[Gm)ATe1c>><><<><<>>1e?rrsrrrrrr?rsooTTo?ee>>v?ossooTTooooooooT7777Toso??????eevve?TDMMM[[GGG66&n)(If*--_;^*****^/
dq600WK6dZbHS%H%Os?er1c>???vcccevoffYj$$G$G]]]$GG&?o3T??vv11>>>>><<<!!!!!!!<c1e??rs???1>/*+;;;;"+<vrrssosssrr??rr??r???r??e???e11ccc1c1vevsIq[M][M[[G$EWXqn%L*o??\+`'cTorso
X#VD00kk0&W6K6Z%GD??71vT>c>cee??rf#K$EGG[]]M$G$3rvJ3YTr??ev1c>>>><<!\/\/*//*/\!!<>>><!\*+^";="+*!<erorrr???eevvvvv1vv1cc>>>>>>11vesJ#[]][[Ghjjmj0&DDHiAI2L7Ifs!+>,?JJ7
l#n(H0k0000&Wl6KDb0G2eev1cc1ccce1??e#9EE$$Em]M$G[K<<sYI7or??ev1111>><<!!\\\!!!!\!<>><!!!\*+"=="+/\!>>?rssr???v11111ccc>>>>>>>>>c11e?o%]]]]$mOEmW6WSwitI5<!A5\v\*<^++
(S&RZk&0&&WKXDq$Wvevv1vcc1eeeT#CmG[[m$]MMEEjjXirTiaYTor???ev1v11cccc>>ccvee><!!\!//*+=="+*\<1??rso???v111ccc>>>>>>>c>cc11verJu$[[[[EmNjjj&XllXZFt3tuIo?iw<+1P?\**
]MOp&&0&Wlll666D6Z]]Pcevvv11vv1ICPKN$]]Mm[[MEGGm$$[#Li3IJToss?????ee??eeee??????s?><!!!!/*+^^^*!<e??e1vso??e1ccc>>>>>>>>>ccc1v??ofUGG]GmOjhplWklK#5J3AitJo((#2JTcec*
ENd)0Kk000&&l66KDDkpZe??eevvev7(PZEOG[[[Gm[[[]EE$m$EGDiit3YJ7Toosrr?????????r??ecc?ToTors?c</*/\!>v???e>ceos??e1ccc>>>>>>>ccc1ve?r7i(E$$M[$hphjm6XWb#F?I3tFiYJ(PU#q(A>
q6%d6kbpkppkkk0&6KKXpjqs????ev?si#%Nhk&[]][Gm$$][mE$mGEGUat3IIIJTTosor????ee1c><<<o54P)uI7s???rsoJffIf7ooTr?evv11cc>>>>>>1c1ee?oftt2mGM]GmmhlDZ6lZ#u\*rrt7YftL2nbn)PJv
C#%(V&0kpkkkkk0WKDX00P????eY(9Z$p0DGR8]$jjhE$$jjEGmGm$$)AYIIfTToosr??v1><<!!!!!!<oJYiALtYfJJIIA55iaYo???1111ccc>>>>cc1ve??oJtPEG[[]][[[$mEODdWH#P<vreoi4JIAo*>5LI>
Vg%6Hl9pkkk000&KXZZbENJtt77S9O%u#pM8RjmNm$$hjmhG$EEG$pFt3IIf77Tos??e1c>>>><<!<?TJfIII3iiiaa33IIfTTr?evccc11c1cc1c1111ve?rTfb$][[[GGGGEEmXZ6q%%d+=*>TroIL=~+iPr/
USKN$klqW0&lWWDXd9ppaInukp((AiLEM]][EjNOm$jmmh$mEEG$GpAIfJ7TTorsr?????????vc<*\\\\<oo7ffIfII77J7TTos??vc>>>c111111vve??sTiV[[[GGG$GG$EjkDZDS%99Xv"*<!<>J?ro='=3i7
mG][]j#Wk0kkkk0&WDZDZ0bW7U&OOhhmhlWNOhjNE$Eh$mmm$$GE%IffJ7TTTT7Yw99#V)((2w45AIIIYIIIffJ77oTsr?vcccc1vvvve?e?so7i(hGG$GGG[GGEEDdW%9bbXhm><11T11t57o??7o
MKbUZ9OWkpkWkWlKXdd6%*>b6KWOjjh$mhOpNkkjjmhOEjjhhEE$mhk0iIJ77J77JfIItttttttaPU##SqdbHnn))))))((u5AIfoos?ev1111v11??sTffi#[$GG$GG$G$$$$&XlKH#)2))X[$j$jis<</<vJTvsfiY
nq%#Xjdk[lOpppkkk0&XZ99k5!;__;,:',=///\<>Ta4UKpkkNhNhkOjhNphmk0066WS4JJJfffJJfJToooTIaiiitf?crTiF2n##H%####nwIT??eev????rsTfaZE$EmmEE$GEmjpXKZ%n(uwS$O$G[[[G]H!/">7sJro
CUg#kqMN%NNpk&6Xdq9%`_....-----`_~`~'~:~/<oL#9Z#SkkkkkkOkl60lXdS%qS#Cg%IfffJJ77TTTJIaai5wF3IfJ3iALwPP(2LJ7Tor???????rTff5W$$EjjjmE[Emjjpp&dd9%Vw420S(V#E[[[[][[GZ*=!sssT
)UjWMjC##6pkkkp0l6ZH#o- -- . ... ..... ... ..-`__=IL2Laia333YI7JYSCV)(gCnUP2)Vg#2IfJJ77TTTTfYiaA44555FLw5AaIJTossssrrrssJJI5Wjmmhhhm$mpk&ll6lX9HHq#4frJ6#wP()nd]E2dhk&WL+';>>
VH]jm9gwPC&WWbHu=_..  .... .   .-...__-~>T<'~'=+e?rev<>!>r4#))((2uw5L54w(VCUiI777TTo???roTT77fffIIIIIIIJ77osrrrrrsoTfL6km$mOOhEmOOWDlWH(FiiiataJT -^vuwu()nG]dwkpll6&6Ko=,!
g<fn))%)P)))%Xjjjh0S*:_-..-...  .....--'',/1?f^-.-~-~`'^~""+;=!>????rf(P5Fiat3tt3ttttaAL2))2Pi3f77To??eevv??rs?rrrosooTooorrooTIA)CSDSjOOOhOhOpWlkk6H45L4371>!+*+<w2(P(%GPdS666lW6qq%
!Y9#))V#Ug9)#nCC)(F=:-----.-.--_'+v7<`''`_-_`'-:'"<+!**\!<!!<!<>PLAt3IIIIIIYYtiAww5A3IIf77Toossrrsosossssssooooo7fI73(5nnH)nu#9Z00000WWbn2(n)wTc*+\+*++;"+\eA(wjGl)#W66lll66d99SS
ZnH##SCg#9[%DV/,  _``----`~,"">J?=__---__`';"^""'=::`'`~`:~;^"+***>Aattt3IIIffffIYtaiiiiiiiAFiatt3Y3Iff77T7TTTTTTT3F7TofYAiun5PiiitttAFiiiaAF(PL5u((Fv**\++*/!!!<<+*/\\\/\<(jhmS9EKKllWSSHH
lb%2(2%SqpEV)%3+;,,'-._`~eiiI+',~~`:``:~~~=";;=':~::'+`'=--__~,==,=^1I7JIIIIffffIIIYIIIIYtiatttt3tttttttaattaaaaiiiA5((io?or??rJILaFLiii3fTT7YffJYLLJJJYT+<++**!!<1!!`  `~`:;;;;==;+>ICHXDK6#U###C
##%6]][E[kn%kDlDr;'~`'+I>`_':~:`-',';,==^=~'',+:!=:='~_~~-----_-_----:~?><<>erooTTTTTfIYYYttttaAALw2C)r>cc1v?roo733iAffooec1vvee?TTs?7TT?<///****\\\\!<>+':_                 -``~~fbdXD%(Vnng
#DZU6HHnbOpq#n**I/~''''`-_^'~";"+;;'''`-.---:;=`::`:~':... ..-''':__`_`~:_-----'++++!!>v???rrsssoTJffIYttttiAu())Pe>>>>ve??roJf3IsoTov<<>1>>v????srTv*+;";""^++*+,':-                ... ..      ._~';<#D#CVV))2
%Zu2C)V%ZOpdPi<~....-....       :'.--`-.-. ---~^__:..--_```~---~~~::_---_-:'~~:`~+++*!!>1ve???rrssooTtiAw(a?!*!!*><<cv??????rr??Tv>!!!<<>>ccerf33>**++"^++,`..-.                    .---...-..   ..-'=/Iq#))))))((u
#CDHSg)N0WhkZe----......--.-     .----.....--``'~-   ----..-``---...  ..-_:~,;,':_--_`_~:_\>\///!!<>vve??rssoTYiF3/+**<\!/*\<c<>11>1?rre<<\!!!!<<<>c????1>*;;;;;===:`-.       ...  ._-         .                 .....`:`^i4n))))(wi
g##ZVnjN&6kO%:.- `-. ....  ..--.  -.--:_= .`'~    --.``..--.-    -:``=   .---_--``:',=~----`~`,<v>>1v??ssTfIIYI<,+"^+^;=/!*++\/////!>\!<<<\***!<<<<>>es?>+''~~:``_-. .        .-`~''=                             ............-=v!*1IA
##%EOpk&&l6(F'`-_-.- `-..      ..  ..------`-   .--.-. . .-  -:-.  -- --~_..-:~::````_-:~';,~__`--:cJJ7JJJfII33ttI*+"+*+";+*;""++++*\\///\\!!!<!//**!<<<>>c>e+`-...-..-.-.           -;;",',:-.                               .....-.........-.   .-~t
SH#bjhpkk0&duw`-.....  ..... -- ----. .--_.      ... -:`-~:-~.      -:~'~~~--``:`__`'''=~-_:~'~:~_^iiiiiiAAiiY/+^**""=++""++^^++\!*!/\/*////!*++/!<!<<><>*'_..  .....         . ._',=----.                                      ........-  ..._ctt
[###%&&WP5L/~--.  .-..  .  .  ..-  .     .-  _~--.-.- .-    ...`''=^";+=..   -::,:``~~~':',=_:~'--~tPFL5L"=""*+""+\*=;**;=+;"+*+**!\<*<*^++**<<<>>^~`-.           .-   :=;;,~     -_`-                                    .....  .. ... --'\T
mUCS&0XuLito, -~---_.....    -_- .._- `,'~._     ...   .-_-:~',`--_'=---......``_~-:;=:`:``~:',~-:+2if\^-`,=*/*^+//+";"+^="+"++*+"*/!<*^+//+***\!>!<>>`--~-.       .   -~*+",`--.     `,'-.       .-                                  ..... .-`:=
9#gnC%Z4AaataI>::_--......-`-    _~_:-....`_ . .--   -__`:,,_:~..--'`_::``-.---._'-.--:'=''~'~~''~'"='''=*;""+!*++\!++;+*!+*//\<!*+*<\!\*****/\!!<<<*'_--`_-.    .-_,;*<*- .     -                                                       ..  ...-~
nnCnU#%ittiatt3I?;+:`--. _--.  `:-.-_-.--,~..    ..-_~,_^,:+`-_.:'~ --.---~'':-.-. -.-``-_:_--:~'"+^**^=;++++!/+*++***+**. :"/!*"+!*!\+*^++*!!*</,_-..-...-:_ .-'',"^<'-.    .  ...                                         .               --_::,
AAuP2uIIIIIIIYT!\*':~=-...--__,+::_   ..- _~'~_-'''`_';``.-..'=..- .-_-__~-..-`-~`-..---`:''',=++^++^"++**+/\**/*/**++<!*/+****<*!*\*+//\\***~----..-.--`'''~  .---_. .-.....  .                                                      ...--    -
tIIIfffffJfIffIIIIIfIr*+'~'_--,~~-`'.    ....._~=`.-`--_----~-`-... -'-...  -~.  ....-. .-----''=+^'=;+*;"+,"+="+++**/!<++*!<*///**+*!<++***+<!*~:~---      ...`=>*+/":_--__-         .   .     ..                                      ......-'
iaaiiiaiaaiiiiiiiiiiiiA'~"+/;'_-`--:-`. ...-__='_-,'`--:`---.----_- :-.  ...`~-..-._  .-:`:''`:=..--__-`'=^"^++++*+/*+!>*+^^+<\/*!\*/****/+1/\//\*/*+";'~':_-------_',>?1<//*,'~-_`-...       .                 .''.     .                             .-
JJffJIIIIIIfIIIIIIT_"*=^*"~`_-~`__'+='~: -. .--_-```-..  ...-``- -`...-_._-    ...._"`-. .  -:. -----;^""";^^""+,'=;=+^+^+<!!*//*+/*\!!\\\\*\<<*\<*'~'~:```-----..~--*??1<!+',,':_.............       .-         ``-                                  . 
JfIIfIIII7IfIIffIo`'=^=+\!/+ -''',,='-+,..- .'~  - ..-_-_-... ...~-.--   ..   .  .-_'`___-...    .-.-..-;;"++;"^++"";;"+\*+^+**+++*+*!!/+*.~*>/**,~:'~~~-.-.-`'`.`_+ev1\+:`_   .-- ........-               .                                    -.. ....
fIIJffffJfIIfJJJ7/,,/*  =++!!!!<*;`_'=~`;^   . `:'~-.-.---. .    ...-.-.. .....-.._.~_ ..... -... .  .--....~,+,,^+^+"=~  .',^,'=++***//***\!/++^<+==~--__-_-.--=__"?Ifrc</+'~__--_-                                                     --       .. 
I7JJJJJJfff7T<'+***/!>~^+*<^''::_-=``-.,;`-. ..-''`.- .--   ...--  _~-:::=-..._`-.....----......  ....        -:-    ....-'~~^^-:`:=*^\\****\\\*"=++:_~~~__-_-:~~-.:~`''+IIYIY^--  ._,=~~:_.    .                  .-_      ..          .              ...
fJ7JJJfff7T!,:,**!*,=<>=',;***''''':_-`=- -..~':_...-'`....  ....-:~''";'-~----..---..  --...--- ..  ._.  ..         .--`:-.-``--_--.-`~";"""^^,''''~',==_:'~_:__--__`:-+`='^?3I71''',,''''`'~::~~"^"^;;;=~-.....        .---     ...-     ..                 ..
fJfJJJJJf7ffIfffs^;"<+;====^>==''~:`-:-...-~-_~        .._,"=- -...-'- ---. -..... .--..  ..-     .- ._-... ...-~`-.  .......----....._`_`-.....--_~::`::_`''~``~--::_`_`:~:';=\!f(PI!\*<!*=~="=,'~__---.       .-     .-.--  ...             .            .--
J7J7JJJJJfffffIfT*;=!>///!>>*+>+";=_--~`__--.  ...-._`=`.-``_......-~- . -- .-...... ..-...    ..-~.~`'-.--:.....       ........-..---_..     ...__-::~~_'='~`-:_`_--'-:'~="<iF))aoo7I7>/+";'::`-.----....      ..                   .                      ..---
fJJJJJJfffffffffo;';+,~"//!!*^^e>c<\\\+_:,`-``__-_`-,;;"^``-..---.......--._-`---.._ .....''-......-`~..-.. . .~    .....  .......... -~  .--.     --.-__``''~_``~==-_'~.;<~="*?iiiL()#P2(5>;=~_-----__:-._-..           .-           .               .--.--`
JfJ7JJJJJffJJJJT==~~~;=+*+**<>/1!+,~:~. ~=~^*':_-':_ .--`~_----.--``-  ....-~. ....---~'```:~-...  ..-   ............--.. -~"':.     ----_`:`~''~:`~``_,,,~-.-,===\>eIiiiiiaA)Av*+'''''=:`__-___--                                -.             ----
7777JJJ77JJ7Te+~~=+ ,+1oTeeecc1>+= .=,"=~+~_`::-___:~-~_-----`-:':-.   ---_`';;,'~','_--...   .......-..----.-_-'~'~.    .---_`:``:'=`..~'~:`:~'~-_:'','~+/>73taiiu(F<^+**++;=''''''':_-.                                                     .-
ff777JJJ777T77T*+~+<>;~`:~*rfTTs?v*>!><'~;'::,=~`-_-`:-_''~.--.-..--`_..-..-:~;"'~'~--_-~``_....--.......-----`~::_`:~-..  --:~,,,'',;***!'`~:~-=^^+*"+>eiiiati4(U5r>>>/*+^='':`_-..........     ....   ....                               
J777JJ7777TT7?+!<<>*++;+++++>fTrc!='=':=':,,'','::_'''~--_---.---`:,'-~',,="~,~~~-_-_.-`::-.. --..---__:`--_-~__'~-..-:~~''''',,=\*+\/^',,,~;"//<?esTttiLAaLn#Fe<+'::~',,''':---.  -------..-........                     .   ..      
fJJ7JJ7J7T77T>;**,;*/*^++++,;;^"=';!/';cT>*='':_''~',,=='~~~-~'-_-~'   ~~,=/+'=`''~---.- -~-_`---_--`:::~~:':````~`~',':_:',=~',""+;==,=*>>/!<>voIYYii3aF(Y2TT>+'`_''`:~--...----__...-`---    .._-      ..       .....-    
J777J77TJJ777"+'':_+~''~::::::~::::~'',="=,^/!c\\*"=::''~===''~~"~__~-~;"+=*=='~-----..-.---~.  .:~:`~_~~`:~~~,=:~=;,'~:'''',,=+"+"+*"+*coT77fIIf?11oiAw))((if?""'   .-:,,':::_..-`::::```--..--.--.      ..        .            .-. 
7JJJ777TTT7T?\=~';=,','''''''','~''~'"';=;^"^>?o?!+=''`_''~*''=~``:''','',"^;"*//+`~`:'~__--.-`_-`~~;++'`:':''''~'~,;=";;,'~=",,===^//*+^*++\\\!!<f3iaaA333Lw4u((((uf*^:-.-`:~:~~_.._''~-:_..    .--                              ..  
J7J7JT777JTT77c+'~*,'""*^;=+*++/<erorsoT7s1>*^',''''~`~''=**+''`:~'::`:~~:~~:'_.~~_``:~'',;+^~~',=^=^,,,',;^''+==,=^;;^=*+\*+/**<>coIaYIi5uwuwF5P((PA1c/;~--:``:''~`------`''`-.                           .    .-..    
f7J77oTJJ77TTT7T??e<++\!\<c??<<**===^/<TsT>*"+^++/!*"~''':_:~',=~''~~:`_~,=`-:';"+!+"^+,''=^;;=^^+^"^*,-=/*,=+!!/\*!>*1>rTTYTTA4w45LoA((P3ee>",:,;++''~:::``_--.... ..---..  ...              .......      
7IfJ7TTJ7JJTTTTs<?osr??+"<!**+'~,~=''';;,,=++oY?<:'"*\/</++=':~^=,,^'~,''~~__'':`_'=\!>!**!*<+'=***^+"""+c1s*';=+>\!>>evrvrTfIT?TAwu4iaT>u(u(w?e*+=;^=^\*"'~_-_`--.......  .   ... ......-......      ..   
J7T777JJJffJ777TT!++\\*+!>e*='''~'',=;,''',===/>IIs!+\<<==,=++~~':`:::~_`:'`.--`:~ .~"+=/*^/<<>v<\*+//++^"+!cc<!<*"^+>versoT7fo<o5uuuwAfTTItiA45J>;=,;"++==,,="=:`_----      ...----.....        .     ...
JJJJT7J777777TTs!!\+!*^=\<+=,,;^='~'',';=\"=*^\e>oati5I>"="=+"'"*',";=;='',~--_=+++,"=:~,"+<ce?1<**++*>v>eroT11><<oooTToo?JAwPuP4Aao!JsJwFa<==++^=,''~'''``::~,~:`--..   .-`',,~   ----      .--`~
77777TT7777TT7e</+++^"";,,;;"=,==",+\+*!!><e>??Itt3atJ1+;^*/+*"=,'''~````__-`;*+""'`:~'=`~=;"+*>sT1+>1eT1?oTTJfIIffTec><?rTo7IiLttYItAFAfiF4wttiiA<^=*+^=;;='''~''````_-`':-....-',='_    -_--.....----
7JJ77T7TT77TTo>*<>****+*+^+=!>!++=,,'=;^+*>sTL#q%<+***=+'=:_::~;=";;;,:``_:~-:~=<~>=*^*".+1?o77ssTJfYfIIIY3YI77ov=?J54wP5AiAt7?TiaI>!/+!*+**+","+^"~~~_~_:','__-:,;,'`-------.-------_
J7J777777777T7T!!**+^^++*,^=='',,,'',,,',""*\//<3(gHbDj0S)wJ7?<\<<+;;;="*"==";,'=,,~:~=="+c+~;+<??rooJI3taLAFi3Y33YttIIaT>*>T4uFYsve7?v?T?r>+  ~***<*+"^++"'''',,,;=`-_.....-~-.  ...... ----........
IIIfffIffffJfT7JYJffoe<!</*!/***+=+<soiLwITJJIYL(gbpWFLYo?Tsv>!!!\/+'~~:="''"~'',='='~;^+'^^<??oIYYYYY3IYtiiiiatY33iiFiaaaL5itIfIT?vrr?c?7oooe**+'=**++;;;;;"^='~`--_.. ......--...------.........--.
IIIfIIIfIffJJIJJJLfJJJIIfI#U%#Cpq#n4af7oossro7JIItiA)#SOAJItIIoosrrfifT>*++";;+;*=^,:~=",;;;+,**!!?ifItfIJIYa3aatiiIiFff77iFPLLL45555Litt3fJTc?TIoT/^"=;"^;='''','''''''~~~-.-.-.-``-_---.--.  _=_.---......--
f7fJJfJ77777Jfi7J77Jffff##q9OmEVLitIff7oossoTfIta5(VqH1cTJo??or?osrs?o>^"';+''^='',+*,'=^+  `<>/<esr?*c?esffi7J7JTofIAwuLFF5L52uuLitttIJsoII3IT\+,^^^;=*;";='''''':``:``-`:`_-``_---`__`-_-`~---.---...-
f7f7Jff7J77J7A7J77IfJII%hhOE$GCuAt3If7TrsTJJI3iF2VK!\/!<oTToTossrr3fY<!<+!+/+'^="'''!vvsT++!^;=/**;+"*++>""\viiIatLF5P4Fww5iitIT?sfFuuP3>*==^""";=,'~::::::_----`~~~`-_-`_:_---------------
7fIfffJJJJ7fftITJJJIIfIIi&jjhh$$$$Ed(wit3IffTooT7fIti5u(V1***vrevrrrTs?soTossssv!<****^"";"+<?!*++"^;+;"^*+\^+;";;"++\/!?>oiIAP4LT7YiIo/;!ei2P()uf?1>\+,"+;"=`_''':~=~```_~:::``_`-``_----:::-..--~_--
ffffJJJffff7iJ7IfffIJYN$jhOhjE$$[]M(uA3II7TooTJI3iAPC1!+\*\!**><soosT???s?JT7fIoT1>>e?r>\**///*/*+++>=+*<^+*<!+>\c/>fJtFPi3oJiIiL(2P2P()SPLiiiitio/<\/\*"=_'':--:`::`:~'~`--_`_-------.-.---.......
fJ7ffJffffItYJfffIJY$G]mhjjm$[[]MG)watY7Tooo7JIIa52nis>!//***++e>>seer?oTfYtttt3aAttatf?e<\>*r<<><!!<>*!>!><s>!<\\>e<eItiL((V))V2w2P))uPwwF>*_   ^/+=::~-`~---`~`_-.```-....-_-.-..---.--.-
IIfffIIIff3JJJJIIYamG[GEE$GjEM[MW4it3If7ToooTItiiLPA>!<**^"=^+^;"+/>?soIfIIIIf3tA5wuFAT7???c?esT7see?sT/<fYf?TotIA(n%UU(n()(((P4itJ7o7TY5Le>*+\/+''''`-.---_``_```_-_:':_--~:_---`::_...-
IIIIIIIIIItfJffffIY(j[[[[[G$]$mGj$]M]$n2FaIffJTToTfItaFwT!\/*++;=^^++^+!!*+++<e?JawLiuP#nV)PiiY7o7fI7o??c- !?aCUCg###%H#Cd9S%gUw77rTaP%H3ITcc>,'~````_-----`',,~_-`~`---:'~-----_---
tIIIIIfIYJ7ffIIIYa0]G$[]]GmjOGG$jEG25Ft3Y7ToTTfIaw(T1*/++*"^*+,=***++++<1rYr c5VUgn##gZ#)VVVVC(L5(Vn##%D9)inU]MMMMMG$$jjjEGGXi31',==>>"=~'''~``:~'''~~=~__~~----:~:~
YYIfItwfIIIIIYYijM[$GGGmG]]G]8[G&u5ia3IfJT77oTtAF(sT*\!+++++=*!\//!\<r??TiAww)2n)()()(u)(n()(ngUn(CgS%HbdK$]MMMEMRM][GGGGGmhjmGS!+~="+**<!++=,'''''''''''','''''''''''''''~''''
t33YIAfIIIIIIY335GG[[][[$jGGG]E$mG)2uLiat3If7TTTI33L%r/\>^+^+*+*>c<<TiitYIaT7iAiIrffiL5(()2V%DZKk$G8BRRRM8RRMMM]]M]]M][[GGG$G$hu/**!/***++++""++;=,''''==~,'~`::::~:_`~

源码:

  1. package
  2. {
  3. import flash.display.Bitmap;
  4. import flash.display.BitmapData;
  5. import flash.display.DisplayObjectContainer;
  6. import flash.display.Loader;
  7. import flash.display.Sprite;
  8. import flash.events.Event;
  9. import flash.events.MouseEvent;
  10. import flash.geom.Rectangle;
  11. import flash.net.FileReference;
  12. import flash.text.TextField;
  13. import flash.text.TextFieldAutoSize;
  14. import flash.text.TextFormat;
  15.  
  16. /**
  17. * 分析图片生成文本表现形式
  18. * @author:Frost.Yen
  19. * @E-mail:871979853@qq.com
  20. * @create: 2016-6-28 下午12:25:01
  21. *
  22. */
  23. [SWF(width="1920",height="1080")]
  24. public class ImageToText extends Sprite
  25. {
  26. private var _charArr:Array = [];
  27. private var _text:TextField;
  28. private var _file:FileReference;
  29. private var _ldr:Loader;
  30. public function ImageToText()
  31. {
  32. _text = new TextField;
  33. var tfm:TextFormat = new TextFormat;
  34. tfm.size = 8;
  35. //tfm.leading = -2;
  36. _text.defaultTextFormat = tfm;
  37. _text.autoSize = TextFieldAutoSize.LEFT;
  38. var text:String = " ";
  39. var min:int = 32;
  40. var max:int = 120;
  41. while (++min < max) {
  42. var c:String = String.fromCharCode(min);
  43. text += c;
  44. }
  45. text += " .'*#@%+-)(TiI?><~";
  46. for (var i:int = 0; i < text.length;i++ ) {
  47. c = text.charAt(i);
  48. _charArr.push({d:getDensity(c),t:c});
  49. }
  50. _charArr.sortOn("d", Array.NUMERIC|Array.DESCENDING);
  51. addChild(_text);
  52.  
  53. var btn:TextField = getTextButton(this,"浏览图片",10,1000,100,30);
  54. btn.addEventListener(MouseEvent.CLICK,browse);
  55. _ldr = new Loader();
  56. _ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad2);
  57. }
  58. public function getTextButton(parent:DisplayObjectContainer,text:String,x:Number,y:Number,width:Number,height:Number):TextField
  59. {
  60. var button:TextField = new TextField();
  61. button.autoSize = "center";
  62. button.width = width;
  63. button.height = height;
  64. button.selectable = false;
  65. button.border = true;
  66. button.htmlText = "<a href='event:#'>"+text+"</a>";
  67. button.x = x;
  68. button.y = y;
  69. parent.addChild(button);
  70. return button;
  71.  
  72. }
  73. /**
  74. * 根据图像渲染生成文字效果
  75. * @param bmd 图像
  76. * @return
  77. */
  78. private function render(bmd:BitmapData):void {
  79. _text.width = bmd.width;
  80. _text.height = bmd.height;
  81. var x:int = 0;
  82. var y:int = 0;
  83. _text.text = "";
  84. while (y < bmd.height) {
  85. while (x<bmd.width) {
  86. var gray:Number = getGray(bmd.getPixel(x, y)) / 0xff;
  87. var index:int = int((_charArr.length - 1) * gray);
  88. _text.appendText(_charArr[index].t);
  89. var r:Rectangle = _text.getCharBoundaries(_text.text.length - 1);
  90. x = r.right;
  91. }
  92. _text.appendText("\n");
  93. y = r.bottom;
  94. x = 0;
  95. }
  96. }
  97. /**
  98. * 获取文字的明暗值
  99. * @param t 文字
  100. * @return Number
  101. */
  102. private function getDensity(t:String):Number {
  103. var ttf:TextField = new TextField;
  104. ttf.autoSize = TextFieldAutoSize.LEFT;
  105. ttf.text = t;
  106.  
  107. var bmd:BitmapData = new BitmapData(ttf.width, ttf.height, false, 0xffffff);
  108. bmd.draw(ttf);
  109. var c:int = 0;
  110. for (var x:int = 0; x < bmd.width;x++ ) {
  111. for (var y:int = 0; y < bmd.height;y++ ) {
  112. if (bmd.getPixel(x,y)!=0xffffff) {
  113. c++;
  114. }
  115. }
  116. }
  117. return c / ttf.width / ttf.height;
  118. }
  119.  
  120. private function getR(color:uint):uint {
  121. return color << 8 >>> 24;
  122. }
  123. private function getG(color:uint):uint {
  124. return color << 16 >>> 24;
  125. }
  126. private function getB(color:uint):uint {
  127. return color << 24 >>> 24;
  128. }
  129. /**
  130. * 获取像素点的灰度
  131. * @color 像素点的颜色值
  132. * @return uint
  133. */
  134. private function getGray(color:uint):uint {
  135. return getR(color) * 0.299 + getG(color) * 0.587 + getB(color) * 0.114;
  136. }
  137.  
  138. private function browse(e:Event):void {
  139. _file = new FileReference();
  140. _file.browse();
  141. _file.addEventListener(Event.SELECT, onSelect);
  142. }
  143.  
  144. private function onSelect(e:Event):void {
  145. _file.load();
  146. _file.addEventListener(Event.COMPLETE, onLoad);
  147.  
  148. }
  149.  
  150. private function onLoad(e:Event):void {
  151.  
  152. _ldr.loadBytes(_file.data);
  153.  
  154. }
  155.  
  156. private function onLoad2(e:Event):void {
  157. var content:Bitmap = e.target.content as Bitmap;
  158. content.x = content.width+100;
  159. stage.addChild(content);
  160. render(content.bitmapData.clone());
  161. }
  162. }
  163. }

[ActionScript 3.0] AS3.0 把图片分析成文本表现形式的更多相关文章

  1. [ActionScript 3.0] AS3.0和AS2.0的相互通信

    AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...

  2. [ActionScript 3.0] AS3.0 让一个视频无缝循环播放的一个偏方

    一个视频要循环播放,通常的办法都是播放完后再重新播放,但是不可避免的播放结束和重新开始播放这个时间点上会有停顿,如何解决这个问题,说个偏方吧! package com.views { import f ...

  3. [ActionScript 3.0] AS3.0 下雨及涟漪效果

    帧代码: stage.frameRate = 80; function init(x1:Number,y1:Number) { var mc:MovieClip=new MovieClip(); ad ...

  4. [ActionScript 3.0] AS3.0 将图像的Alpha通道转换为黑白图像(分离ARGB方式)

    import flash.display.BitmapData; import flash.display.Bitmap; /** * 将图像的Alpha通道转换为黑白图像(分离ARGB方式) */ ...

  5. [ActionScript 3.0] AS3.0将图像的Alpha通道转换为黑白图像(复制通道方式)

    import flash.display.BitmapData; /** * 将图像的Alpha通道转换为黑白图像 */ var p:Point = new Point(0,0); var bmpd: ...

  6. [ActionScript 3.0] AS3.0 本机鼠标指针

    Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标 ...

  7. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

  8. [ActionScript 3.0] AS3.0 涂鸦及擦除功能,撤销重做步骤记录实例

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMo ...

  9. [ActionScript 3.0] AS3.0 简单封装Socket的通信

    Socket服务器 package com.controls.socket { import com.models.events.AppEvent; import com.models.events. ...

随机推荐

  1. 1.Nexus安装与配置

    1.Nexus下载下载地址:http://www.sonatype.org/nexus/go/下载后的文件:nexus-2.11.4-01-bundle.zip安装:直接解压到某个目录即可解压后,会有 ...

  2. OpenJudge计算概论-二维数组右上左下遍历

    /*====================================================================== 二维数组右上左下遍历 总时间限制: 1000ms 内存 ...

  3. Maven中Spring-Data-Redis存储对象(redisTemplate)

    Redis是一种nosql数据库,在开发中常用做缓存.Jedis是Redis在java中的redis- client.在此之前,希望已经了解redis的基本使用和Maven的使用.建立Maven Pr ...

  4. Mysqldump参数大全(转)

    参数 参数说明 --all-databases  , -A 导出全部数据库. mysqldump  -uroot -p --all-databases --all-tablespaces  , -Y ...

  5. [oracle] 设置PL/SQL Developer 字符集

    我安装的是PLSQL Developer(10)执行SQL发现弹出的错误提示对话框都是??表示,显示不出正确的提示信息.后来才明白是跟服务器的字符集不匹配的问题.方法如下:1.查询oracle ser ...

  6. ajax简单案例:字符串返回类型

    小知识点: implode("^",$v) 拼数组为字符串, split/explode("|")   拆字符串为数组; "你好"-> ...

  7. MySQL数据库表中有usage字段名后的后果

    一个很奇怪的42000的错误,折腾了我一晚上.... 我的系统是Spring + SpringMVC + MyBatis结构, 数据库的mapper以及model等文件都是用MyBatisGenera ...

  8. [转]java生成随机数字和字母组合

    摘自 http://blog.csdn.net/xiayaxin/article/details/5355851 import java.util.Random; public String getC ...

  9. MATLAB GUI对话框设计(转载)

    原文地址:http://blog.csdn.net/shuziluoji1988/article/details/8532982 1.公共对话框: 公共对话框是利用windows资源的对话框,包括文件 ...

  10. css3旋转小三角

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...