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/**!/***++++""++;=,''''==~,'~`::::~:_`~

源码:

package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObjectContainer;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.net.FileReference;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat; /**
* 分析图片生成文本表现形式
* @author:Frost.Yen
* @E-mail:871979853@qq.com
* @create: 2016-6-28 下午12:25:01
*
*/
[SWF(width="1920",height="1080")]
public class ImageToText extends Sprite
{
private var _charArr:Array = [];
private var _text:TextField;
private var _file:FileReference;
private var _ldr:Loader;
public function ImageToText()
{
_text = new TextField;
var tfm:TextFormat = new TextFormat;
tfm.size = 8;
//tfm.leading = -2;
_text.defaultTextFormat = tfm;
_text.autoSize = TextFieldAutoSize.LEFT;
var text:String = " ";
var min:int = 32;
var max:int = 120;
while (++min < max) {
var c:String = String.fromCharCode(min);
text += c;
}
text += " .'*#@%+-)(TiI?><~";
for (var i:int = 0; i < text.length;i++ ) {
c = text.charAt(i);
_charArr.push({d:getDensity(c),t:c});
}
_charArr.sortOn("d", Array.NUMERIC|Array.DESCENDING);
addChild(_text); var btn:TextField = getTextButton(this,"浏览图片",10,1000,100,30);
btn.addEventListener(MouseEvent.CLICK,browse);
_ldr = new Loader();
_ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad2);
}
public function getTextButton(parent:DisplayObjectContainer,text:String,x:Number,y:Number,width:Number,height:Number):TextField
{
var button:TextField = new TextField();
button.autoSize = "center";
button.width = width;
button.height = height;
button.selectable = false;
button.border = true;
button.htmlText = "<a href='event:#'>"+text+"</a>";
button.x = x;
button.y = y;
parent.addChild(button);
return button; }
/**
* 根据图像渲染生成文字效果
* @param bmd 图像
* @return
*/
private function render(bmd:BitmapData):void {
_text.width = bmd.width;
_text.height = bmd.height;
var x:int = 0;
var y:int = 0;
_text.text = "";
while (y < bmd.height) {
while (x<bmd.width) {
var gray:Number = getGray(bmd.getPixel(x, y)) / 0xff;
var index:int = int((_charArr.length - 1) * gray);
_text.appendText(_charArr[index].t);
var r:Rectangle = _text.getCharBoundaries(_text.text.length - 1);
x = r.right;
}
_text.appendText("\n");
y = r.bottom;
x = 0;
}
}
/**
* 获取文字的明暗值
* @param t 文字
* @return Number
*/
private function getDensity(t:String):Number {
var ttf:TextField = new TextField;
ttf.autoSize = TextFieldAutoSize.LEFT;
ttf.text = t; var bmd:BitmapData = new BitmapData(ttf.width, ttf.height, false, 0xffffff);
bmd.draw(ttf);
var c:int = 0;
for (var x:int = 0; x < bmd.width;x++ ) {
for (var y:int = 0; y < bmd.height;y++ ) {
if (bmd.getPixel(x,y)!=0xffffff) {
c++;
}
}
}
return c / ttf.width / ttf.height;
} private function getR(color:uint):uint {
return color << 8 >>> 24;
}
private function getG(color:uint):uint {
return color << 16 >>> 24;
}
private function getB(color:uint):uint {
return color << 24 >>> 24;
}
/**
* 获取像素点的灰度
* @color 像素点的颜色值
* @return uint
*/
private function getGray(color:uint):uint {
return getR(color) * 0.299 + getG(color) * 0.587 + getB(color) * 0.114;
} private function browse(e:Event):void {
_file = new FileReference();
_file.browse();
_file.addEventListener(Event.SELECT, onSelect);
} private function onSelect(e:Event):void {
_file.load();
_file.addEventListener(Event.COMPLETE, onLoad); } private function onLoad(e:Event):void { _ldr.loadBytes(_file.data); } private function onLoad2(e:Event):void {
var content:Bitmap = e.target.content as Bitmap;
content.x = content.width+100;
stage.addChild(content);
render(content.bitmapData.clone());
}
}
}

[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. ABBYY如何把PDF转换Excel

    我们都知道2007以上版本的Office文档,是可以直接将文档转存为PDF格式文档的.那么反过来,PDF文档可以转换成其他格式的文档吗?这是大家都比较好奇的话题.如果可以以其他格式进行保存,就可以极大 ...

  2. python3生成标签云

    标签云是现在大数据里面最喜欢使用的一种展现方式,其中在python3下也能实现标签云的效果,贴图如下: -------------------进入正文--------------------- 首先要 ...

  3. ios 获取屏幕的属性和宽度

    app尺寸,去掉状态栏 CGRect r = [ UIScreen mainScreen ].applicationFrame; r=0,20,320,460 屏幕尺寸 CGRect rx = [ U ...

  4. 【linux】/etc/fstab修复

    /etc/fstab在修改后,如果配置错误直接重启的话会导致系统崩溃.建议大家重启前执行mount -a ,mount -a是自动挂载 /etc/fstab 里面的东西.若不慎重启了,会出现开机错误, ...

  5. 使用laravel的Eloquent模型获取数据库的指定列

    使用laravel的Eloquent模型获取数据库的指定列   使用Laravel的ORM——Eloquent时,时常遇到的一个操作是取模型中的其中一些属性,对应的就是在数据库中取表的特定列. 如果使 ...

  6. 剑指offer系列35----序列化二叉树

    [题目] * 请实现两个函数,分别用来序列化和反序列化二叉树 * 1 / \ 2 3 /\ /\4 5 6 7 * * 序列化的结果是1,2,#,#,3,4,#,7,#,#,5,#,#,. * 而反序 ...

  7. Node.js 相关资料网站汇总

    地址:https://cnodejs.org/ nodejs中文网:http://nodejs.cn/ nodejs中文网:http://www.nodejs.net/ 相关API地址:http:// ...

  8. C3P0数据库连接池的相关bug解决

    数据库连接池的几个常见bug: 1.警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@76c7022e -- ...

  9. Hadoop学习3--安装ssh服务

    题前语:为什么要安装这个东西呢? 是因为我们要在多台机器之间通信,这个服务就相当于支持这种通信的一个桥梁,打个比喻,相当于windows里,通过远程桌面连接到其他机器. 所以,安装这个服务,的目的是: ...

  10. Redis内存使用优化与存储(转)

    Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部 ...