pax_global_header00006660000000000000000000000064131026275700014515gustar00rootroot0000000000000052 comment=0d90f140f8dd8b91f15809b7c68b940b28cc45e0 jansi-native-jansi-native-1.7/000077500000000000000000000000001310262757000163425ustar00rootroot00000000000000jansi-native-jansi-native-1.7/.gitignore000066400000000000000000000001141310262757000203260ustar00rootroot00000000000000.classpath .project .settings docs/out docs/webgen.cache target *.i?? .idea jansi-native-jansi-native-1.7/KEYS000066400000000000000000000030771310262757000170470ustar00rootroot00000000000000pub 1024D/F5BA7E4F 2006-02-10 uid Hiram Chirino sig 3 F5BA7E4F 2006-02-10 Hiram Chirino sub 1024g/6733C080 2006-02-10 sig F5BA7E4F 2006-02-10 Hiram Chirino -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.1 (Darwin) mQGiBEPspSsRBADdguKAxMQbA32vTQrCyONR6Zs/YGdvau2Zrr3SSSSR0Ge4FMjZ 4tzwpf6+32m4Bsf7YIwdLl0H5hI1CgT5gDl9kXvfaFUehFnwR+FDyiBRiyHjUpGF 4dgkQfWy9diYeWGtsvszsvWHXtED4SXb322StX4MfJj+YesA1iEdTiXK6wCg1QDa RucfjC+kx4zPsJwkJOgYpyMEAMTiXtNwQcke6nIFb/lb5374NjwwVAuuMTrRWLyq 5HodugEIHaw3EitQWtnFfXNkXTJZzS6t2HAGv29UTfhiBzKdkydgCkOk2MLWISOV fqcg0tNIp5ZJCmUHg3s+OFNSH4oUi65u+FyDseUid3OKtPI+ZhIk8N+DjOIg2Kvo /UALA/9q+WfBd7re+W3iUtU7TutUcwbKsjP+jpaJeUHg2ChOBxVfQKt4YlPHVdrR iCrfNi90Z8qbsZ0iAXuqexrfMq20pAPmpHRpe54mmP1CMT5m+Gq71eKIfkUrb3LC /zv08dLG2vm9oghd242wbcifaX+t7AhNAIpe/WTvQsB0gpdO4LQmSGlyYW0gQ2hp cmlubyA8aGlyYW1AaGlyYW1jaGlyaW5vLmNvbT6IWwQTEQIAGwUCQ+ylKwYLCQgH AwIDFQIDAxYCAQIeAQIXgAAKCRCf8lmA9bp+T/G/AKDM1QDs7il/CJhTycgDvE3c EOgUBwCfelsVK4sgBCooZptoaCCDgVtt71G5AQ0EQ+ylLhAEAJD25AWgwcNgBFKY svExQaGIojIGJyn4Cf/5U30cui/K7fIU7JtyNhKcfZdCrh2hKx+x3H/dTF6e0SrR hzKV7Dx0j76yhHHB1Ak25kjRxoU4Jk+CG0m+bRNTF9xz9k1ALSm3Y+A5RqNU10K6 e/5KsPuXMGSGoQgJ1H6g/i80Wf8PAAMFA/9mIxu7lMaqE1OE7EeAsHgLslNbi0h9 pjDUVNv8bc1Os2gBPaJD8B89EeheTHw6NMNIe75HVOpKk4UA0gvOBrxJqCr18yFJ BM5sIlaEmuJwZOW4dDGOR1oS5qgE9NzpmyKhE+fu/S1wmy0coL667+1xZcnrPbUF D4i7/aD1r8qJhohGBBgRAgAGBQJD7KUuAAoJEJ/yWYD1un5Pth0An0QEUs5cxpl8 zL5kZCj7c8MN8YZDAKDR9LTb6woveul50+uGtUl2fIH1uA== =RBPl -----END PGP PUBLIC KEY BLOCK-----jansi-native-jansi-native-1.7/changelog.md000066400000000000000000000101701310262757000206120ustar00rootroot00000000000000![Jansi][logo] =========== [logo]: http://jansi.fusesource.org/images/project-logo.png "Jansi" ## [Jansi Native 1.7][1_7], released 2017-05-xx a8cc48a Add a copy() method on SMALL_RECT for ease of use e2f6efb Fix copyrights 36a03b7 Fix build when openpty is in libutilext development iteration 915a7c6 Fix wrong conditions and constants 5beb0c2 Ignore idea files 8a83cbb Fix number of control chars in the Termios structure 84b9ce1 Update some plugins versions 674f287 Add oss snapshot repo 41c2f00 Make sure to include winsize and termios structures 9685c51 Turn on stack protection, fixes [#7](https://github.com/fusesource/jansi-native/issues/7) a1710c7 Make sure the build work on MVS2017 7a0a951 Pass the platform to the hawtjni plugin d3a5c4a Upgrade internal jansi version on windows 7b45d34 Merge pull request #6 from Aaron1011/remove-ttyslot 5f76e86 Fix ttyname method which is unusable (SEGV crash), fixes [#8](https://github.com/fusesource/jansi-native/issues/8) f825e18 Fix home in readme, fixes [#4](https://github.com/fusesource/jansi-native/issues/4) 216892e Remove unused use of 'ttyslot' ## [Jansi Native 1.6][1_6], released 2016-04-27 6160f07 More packaging refactoring. 24250c0 make sure native libs get packaged. 4a95522 Lets try to use different artifact ids for the different platform builds to workaround problems with mvn needing all classified artifacts to be part of the same build for SNAPSHOT deployments. f66eb6b Bump the hawtjni version. a18e87f Switch to sonatype mvn repo 1cb12b1 Update hawtjni version used. 6436a76 Tweaks needed to get the latest changes compiling on linux. ece5c44 Fixing function name. No W since there are no (wide) chars in the arg list. 7859ee9 Make constants conditional. ff3543d Update parent pom version. a597537 Add ScrollConsoleScreenBuffer to Kernel32 144f13d Improve JNI arg passing for Kernel32 library ae71626 Fix some javadoc warnings fbaa6fa Add FilleConsoleOutputAttributeW native method for windows a7c99e8 Add needed functions for stty support aebb7f4 Upgrade hawtjni version to fix [Missing barriers in cache initialization](https://github.com/fusesource/hawtjni/issues/7) ## [Jansi Native 1.5][1_5], released 2013-03-25 d5e1606 Add windows nmake Makefile 01cfbdd Add .rc file to the msbuild project 803ae7f Add the public repo 7dbe4f5 Switch to new release of hawtjni that allows us to force the use of msbuild on windows. d891301 Modify owner 9b30bc1 Add .rc file 5392bef Ensure we have standard file attributes ## [Jansi Native 1.4][1_4], released 2012-02-15 d2c93b8 Generating msvcrt.lib at build time (from msvcrt.def) 46e933f - Added License header (ASL 2.0 like everything else) - Added readme.txt to the windows directory with info of how .lib files were created 5b092a8 - Added support for isatty - Fixed values and conditions for STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO - Bumped version to 1.8 to stay in sync with jansi - Cleaned a few warnings at C compile time - Link against the system msvcrt.dll (so no need for VC redistributables) ## [Jansi Native 1.3][1_3], released 2011-09-21 44eb7aa Adding support for PeekConsoleInputW, FlushConsoleInputBuffer so that CTRL-C can be handled by jline. Discarding mouse events on readConsoleInput. b72fb73 Using PointerMath when copying INPUT_RECORD. e649485 Updated support for reading multiple INPUT_RECORD through ReadConsoleW (may need to check pointer arithmetic). Added support for GetNumberOfConsoleInputEvents and WriteConsol ## [Jansi Native 1.2][1_2], released 2011-06-19 892c45e Adding support for reading keyboard events through ReadConsoleInputW Win32 call. Does not handle non keyboard events (they are discarded). 658d8bc Upgrade the hawtjni version being used. ## [Jansi Native 1.1][1_1], released 2010-11-04 14cf4c9 Update to use fusesource parent pom and pickup new hawtjni release. e29d0fa adding SetConsoleTitle method to support setting the window title on Windows 71a95c0 updating to next hawtjni snapshot version to pick up Win SKD 7.1 fix 29fb658 allow hawtjni version to be configurable 6ced024 adding build doco for windows ## [Jansi Native 1.0][1_0], released 2010-07-14 * Initial release * Native bits extracted out of the core jansi library jansi-native-jansi-native-1.7/docs/000077500000000000000000000000001310262757000172725ustar00rootroot00000000000000jansi-native-jansi-native-1.7/docs/README000066400000000000000000000023741310262757000201600ustar00rootroot00000000000000--- # Copyright (C) 2009-2017 the original author(s). # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. title: Generating the Docs --- Overview ============================= We are using [webgen](http://webgen.rubyforge.org/) for generating nice HTML based documentation. Installing ----------------------------- You first need ruby and rubygems installed on your system. You should have gems version of 1.3.4 or greater. You can check this via gem --version To update gems do gem update --system Then you can install webgen with the following command. `sudo gem install webgen coderay feedtools haml RedCloth` Building ----------------------------- It's as simple as running `webgen` in the current directory. Output is stored in the `out` directory. jansi-native-jansi-native-1.7/docs/config.yaml000066400000000000000000000015171310262757000214270ustar00rootroot00000000000000# Copyright (C) 2009-2017 the original author(s). # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # The available configuration options can be listed using the `webgen config` # command, for example: `webgen config sourcehandler` will list all options starting # with sourcehandler. # lets turn off line numbers tag.coderay.line_numbers: false jansi-native-jansi-native-1.7/docs/src/000077500000000000000000000000001310262757000200615ustar00rootroot00000000000000jansi-native-jansi-native-1.7/docs/src/downloads/000077500000000000000000000000001310262757000220535ustar00rootroot00000000000000jansi-native-jansi-native-1.7/docs/src/downloads/index.page000066400000000000000000000036611310262757000240260ustar00rootroot00000000000000--- # Copyright (C) 2009-2017 the original author(s). # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. title: Downloads in_menu: true sort_info: 1 --- name:overview # {project_name:} Download it Today! --- name:content pipeline:haml,tags .left %h1 Just need a jar? .right Try out the nightly build: %ul %li %a{:href => "http://{project_id:}.fusesource.org/repo/release/org/fusesource/{project_id:}/{project_id:}/{project_version:}/{project_id:}-{project_version:}.jar"} {project_id:}-{project_version:}.jar .left %h1 Are you a Maven User? .right %p Just the following to your %code pom.xml :plain {coderay:: xml} org.fusesource.{project_id:} {project_id:} {project_version:} {coderay} %p You you should ensure you have the {project_id:} maven repository defined in your %code pom.xml :plain {coderay:: xml} {project_id:}.release.m2 {project_id:} Release Repository http://{project_id:}.fusesource.org/repo/release false true {coderay} jansi-native-jansi-native-1.7/docs/src/images/000077500000000000000000000000001310262757000213265ustar00rootroot00000000000000jansi-native-jansi-native-1.7/docs/src/images/after-jansi-jna-windows.png000066400000000000000000000154211310262757000265000ustar00rootroot00000000000000PNG  IHDRƎ#IDATx\qƇC 2!t2`J(ACXI, Je!q(@$DJ"s! # yYr ښ^޼vWW}U뷥Y`0wop';/vṕ!Rh輚  0  j<d[]]u,$!`v^ROv.r]dT 245qHeG G%lXYlYis eLHYe㦼TND̴TU0)2^0Umá^-|5gN>eV[8V\ܵwMGMς #B?sqM 'S9<E쿄<+m  f yο7^T'EX($@?__<'  LRrV?_3O;2:Ʃ%ϣ9Í6.?qHJOogOaY@yxHlS[|Wv~2Xj w_l+'p&  O 'lW:[v3+;o﴾P 5yySߧe9詻ngQqkq񭥗I#g?;/m,7ٵ;ׇ:H[]<{nt.mک B,186O}ˣ;Ii廧џço/+=sՋ⟹Pa+#/|Jѕ?}ׯ@OT}&K}/3:@~ g7NƓW]2xg 7/\{6E߿4xnds āߙ]9;Zxs`w>ޥۍ6~85>yK7P}o_PwW.NtWo⻛.rR:_O쬟o<%n>L v^[҂wH~`0|a{oyO4m{GGVGϧkG]סqae5+|ⳏ=c/~;[n:sb:|]\zG>˧]^zvGGgNI'_=A[[,=6*~8޸5/QlI)@/D<_8ڼɛ&vJg szq_i@۝p  A3/7Ynqyed}ۇ/{Skg~gOhɊ-^JLOerWzQM=ml:weV :)y}K)@:/>R﮼󲖵sZK,z8m=xMis[JQd`HA/Y]ײ'>m/I=-W}AT? Sbu:*h#'" %md7ZҼȉtjYN?ҒA|i)hFjX}JXEKt`"'e"F g 윑(R)zg6T'/ A%RRPYd b@Hv(]*֑UaY2-Yn_ Y$ db!71ɽ{cN&iS[fk)! %4H[U~cсDAq&"(cI}p+VkǷxUGŎE_QՠBz:BJj-]ƎLyP\8SI\ұz,QA#c*YC3oP7ChjV/cb* 2R(!wׯ-Nd5b$uJ%UV"3rҨzH?ʿ4SoaqqJHnʜB2„Iֱԗ*R |q"[QH)t1(/+  t(V)]&:,II%e[eKlTPPORqХK-{]cg,:~,}.[v-">dZd/L.E"x4r KHr+GDk)?Mş=AEMEY;QRȀX4 YYrJt1ZSvW ׉Xk7C/]'[HZq]:Hcߟ*J^(mwHUmY CS'D zL>%ΎsOSq:jZ]Gik#ijdxT$A=NkX97RNso SNڗg߶z,A6FݢVhC@VM `j ?a[b#  -9 #=:ll@%y[r(@Gy{t*@K P@谱U@mA @ac -!ے@ ="ۣVAZB%2@zDG:oKe:o[h tޖ=:[ToL_i:--oiζ t!z;Cͮꌊ봲~L*;o]݆ u %8K.9ā@]u!@@Kq  PP ܿqFOWW[ [d٫żJlGᙷ:+x@i8B@@  :oP [uVI 󹜕kwNk]W];E7MP*^f6Qi8UaW磌VՓC %ݳC ]%ՓC %ݳC ]%ՓC %6trwݦ|+eZ"nQՕ[Ȥۗ6N]LwYNJgWyIj)uM3V,7z,`=xZc'+o,T:MzRJ'վ,t^LWM6xSڧ7V?NSy^,TI/K"U{Z#SJ]?[*TRڗk骽oTi*o?T:eZdjWv${}ZycS4rK埊[*Tty-2]s3 M),48Sqi/g '9s._- \ZTySn"U^;gJ>l[Ne鐝uA~*gtT$ۮ?r_ =Kl=t:-{ZؼNn;:on-җnTʍ X}?UT:V=wXT~-{l^K'7+oG곹bշSMcisOoײtrysn<:g*7n*{c[ұkcZ:輹 K>O嗮r&K7<ƽbqSMycSCl=A A,2Z_ njsO)R 򒎕E5p :V=A{7ۈg܄ۢoʛJǪӲگek䶣&"՗ X}?UT:V=wXT~-{l^K'7+oGz@mE[O*o*N˞;o~*k=6ێΛp[c_X*շSMcisOoײtrysn~qmE[O*o*N˞;o~*k=6Վ6d"q~bշSMcisOoײtr̛0A@%@r@M  @u`  ܄֟ܦ7UgtlBTyS鄫oZ2TAFަl*!7PxatNX( u @'vP$B@]f@:ADŽ"A:B'6 輝8&  Py8N@1H"λPlj̀t:o' E,tޅ:Nl@y;qL(@`.qb3  ۉcB  EwtNX( u @'vP$B@]f@:ADŽ"A:B'6 輝8&  Py8N@1H"λPlj̀t:o' E,tޅ:Nl@y;qL(@`|nn޼)Ǐq+pWWfl٦ٸ3Z"}K½@ +w:;[c5Wc]qgZ[vnWm\] P@yVҹɢC(,"is[JQ|b f!PL9 MWĒuT.FND"Kn$n+/4` Բd]р.Iʲ$%vנeZsI t,O,i}TJ:/vX\2(-NL/_ڍ,4?zHegq-ž?y)gqrpiݷ2W9v(4MS)$QìyY\:!VZV|XG/ie1%_c?Db yʪQ+cyXGRzɷU;bb4 m1O95K\X]LyTy\z.q:y i)XjqVA wTǓVف<}X^:<*q*eʲăs.xM%jo^y\ZCCiNT HKWֱ౓hr1:S)Hj-Iٶ_jf z jW^.vj@m(޽{vVY]]|[677w*;Ϗv.S#E,=h tVPh=Rd8%6?{Di1 Mv-Li@ x^%s%b̯YdnRO?+_N (SpL1$v$ B@?=9?): 0{(O@?v`?aZ {EU*WA?7g~;v  $t@? ܱk& 6IAI]4II  Od2aΫFCC^nOrْܵZݘw'+X3's'ٔb*o~t-L4I=Iig ,ݗ\@i1KdlQ?iyo) =,R?e=uuw>z3 E{/ll>yTJOMc2D Psxx<)Eݍk ڤ_].om/G.^9Sp 07G yiG<..G*Gck˓s~Lݓ{}ƹ?Axޫk~9)>8v>(+擫˃'ŏƿݟ4奉`[vR@` lI/c?:I{E >z3/mpk@ zʭ,Ϲ}+b_Xizs z`p>Ggvi{gOivׯM|Yc[ϼ0}΍;k|8@_}u,wj$Xy~գϥ_X?&'/džˇ?oUp~ p=ȍ~wz$Z:q`;/Q='F/=4/-A`~  JCȿWߟْۧϭ9>@~)htɴ_|:_,ќZEx^qo0Qd173&g/'5OZppᓌcEE&k] Zݘ.Jx*9{䙌MWgx=*~uK 3   znĘ(=$q_=4 A~nB  "9N 5ts777;1  0{.zΝ+FI  ]y=v5NJn@=%znoHzn@zC=7G$@=7C@ !ۛFA !@Qc  @MP@o樱Q&p(@7s{s(@ ~ WxM)ԩS2.?`^fZ ->T?mf8w.Feͳg/GF qp 뫲?-;Udif'C 2[geeۙ_2qyN(:ll YuA\vLһl} pBYg_Q%Va%9)tV^+t=i Ҟї9R-zY2; WSV '"Y"S:2Ya^G D:LYAW϶4%e_^=My:HLMYY"AGC)zO˅ D4s✑h! HK]K=&W/^%RYd2Dha6HN,-VGfKt<[ E$ d!-..nmmiy߉xEcN#YI#uڊ}(B,OSf#,_fm ^S5g2z;)zZSfl-jp=gбw%:n8~.Zj%18{)Sz*ogTc';ЩAs+䛆r ;#ZsZ/c6AdҔ7(KN$[8 :+hSL9qoss ٳ0Y-_#KDΜB2(ÄޤYXqNKeYe3b')B-A:άڊOiAYJA/O6dsюx7/yߩZ^H@Džkq҉tkYzBN]$K,)ӻ%T*%ZH6b܊8 G//u|M'ˬei[3MNRkJ:]fl`* ȩ'gr8RԷ*,@XqMd[qt,#^Z܊kPPƎ[cYk >\d=!Z[X޸75L"IShk+,YY7L/g-M\Ҁle,Ӌx̕Hкd1rZKq-zr@[q :BG4YP]򲕬qgJ4@0AK,bm(bLJ.%:vc*;>: =]Ɖݴ^+A깜 ||kq,P]@Jy:` I=73EI|VsA[O/l1EwaC>QyjR賚Ijdb-Ǡ{hI@!A ^@1c @M P@/☱ID&r(@s{q$@"s9 蹽8fl@ 蹉^36  Dezn/Hzn"2@zA=njM$B=7@  YދcI7>+dl3Ȥ/uv[^ֿG{S}X'_[db\svvq*B= 5jsq*B= 5jsq*B?P8BPʗuZPEZ̹XˬVUUx- 2@=7DX@I%AA F (IC+  Xh0e%im[V=[5նBVŬBۙ R@ >[d \  0;蹳cL  {@fG=wv @s "LַCdV^KocXz+nV^Ko|,,ֆY w}Y@ϝ%m;ܾ?, {h?W7=+Helsyusxjn}ͻue[ʟc"o@ih=B.A@Z@@j@ϭA@ zn.A@Z\ߺ-e {y!;4Et>[9G,Uޗd}f8b[綂tMV=VVPX>mzbcqk_^\/.ݠi Vޮ->X>Abj{ފg,X>7O[捥-O}y}sX?ObVyccqk_^^,] Z[qg$s"%/-P>x_%ʃy>|˶VRX>%ˮ&Cϭ-U9qމtjCj}qjX>bXrt`KyeViC~l$nȼ7u#FBRVޮ->X>Abj0zoXi+oK[,Xzt5m֍HXi+oK[,Xzt5^c}ZyCcr-O}y}sX6VFx}ZyCcr-O}y}sX6}Qv%&EhL/g\s[Y~#}?I̹>!3˚ Nz8 Kp$4nO>A/ˇGF 1)\B M kCZ>sśY=ܲB M kCZ>scFt<Ah=>VX>VV鼡~xh^˧8znxS1Xg\-+м>VX>VV鼡~xh^˧8znxgdNK?K2H8Y[c# kbҧ!o!ˤK:@uyjש++p5 ʛ= I'$r.Ȋq)̠B2q5x΍3Q7 t<Gh=>VX>VV鼡~xh^˧8znx2>P}MCocciśKo׊|66!gHMCocciśKo׊|67Kм>VX>VV鼡~xh^˧8znx2>P}MCocciśKo׊|[\\9VVV677ܹ3u)تNJi˧]ܶ#>:  ܶ#/@ Աgm,wf^ꌕ7O(XycK߭sc{Z>3idTVm50^h>[V@'@9";G$O=7#B sD=w[HznGAz& <9:Ll@ y #st @s?" 0Gs0 &D(@`ab+ @MP @ϝV@'@9";G$O=7#B sD=w[HznGAz& <9:Ll@ y #st @s?" 0Gs0 &D(@`|^n޼)SNɸxwRvjm3Pllܹ#FE5F"V PH9WQ1-_[cWC\q粲/_a۸ J׌HY)/[ǭPX4; gM֟o:RX}D9[ c)Lg 7\f$[^JYKbU޸9-%2,)I.^fiYK2eu\р^mJ",wbyB)@"tK^2)."( 4s10 P𜛟n\~iER%Yg21UV͵ +-=)ٜBΞ3ڑ4zSHR zWes,Զa=i,:A*~%WV/bm%zch@kTn }EU6y-O٬Ͳ@Oe#z6;v DBGh̗dZRZ]\TzIYHSR`lMYzeY@ʬOZ҂vsS/q*sɶ {\7}:z蕏Yzqa ^tB1 @sCYKy$Kn:AR49I)Yxv뗚u݂$* ʕWK A#{{{[[[z;w!ehqfشe{\@Δd9豶)2),UZ/Aqrq J Д% V;x\K;-׉2'GK_N! %(2%r'POtckfD2A&jc9x #g [! 5Tl{H GȤЫ-9WǍ͂L=@z^@qc -@m@Ws{u,@s[>^76  2ܖAzE 4IENDB`jansi-native-jansi-native-1.7/docs/src/images/before-windows.png000066400000000000000000000213451310262757000247730ustar00rootroot00000000000000PNG  IHDRYT IDATx]M]y=6(F.\zN%.ܑ?pT.W<;5;ph ]?@^=} ʫ_z}qdX\OgֶysG.\<<;0kp-7=Yœ,K#=vշtq;p:^}n3&\H?뫂7KO}x{;_wȃ/,.GOs<,z^_=zbYrw^xҊ\Ww}io,zûLǾޙ{O?v.i=ީ+JC!4]y=鯼G~=N"Ё>x#\}tC Хw.;>MXϋ_zɧw_n}[z/}#H祉;кH_:PJW]԰w}/عo]W?Ïka>/7{}O|'|Xsrvuѳ// -{/>o=s;ǨɻW;Ϟgn?[='-vg%~fXVƒ>t&sgj zMH?4h,X<ʻx_<\/]|@ ( yȝ~??czL.37nY"_[NԐrwūoW]|;B3koW.y1Yܜ؁OL&߿pn|/@tsܹܿ%Irgxs߾owqı_ Fx_~_z^3yc:1)#I+_⧗ݏ%;Wvä[ܸq¿4;=E3 9&ҧtŁyQ$7ӨtV寞_%3KX4dAۂͅ+}0 ;ڼ/KrClAV+9>8:PpcrEj`6NjE{A7;{ _;%-1b&Mf~0W(q_?@i/xj<;0sJ{3_s܁Q豻{$gvA\;0Lduf3 . &2ۺ3s]Lm݁9{.q&r`f9{D{[w`f^0 r܁`"㽭;03꿛D/_{Wq{@ڸa3H4̮7̸K`G̬բ<k: 8ΦOTA`vîzo^:vկ®A`ؕMWjrWI S[ x-,ufwVr[iApz9{A/ۼ8t &X`T#u!lkId|y*)&IL Ov;@y/g7.3L[9{ -ywޒmYc܁A}yU0eM 06Ь , q.!T\Tf=v@^~Z[Ye3ɘz#8PNz:KUA\70׷^z[ ٪B6T30 E%DZ8!٩1R3JT~CLqb1fȫ&<] A1 $j1,Jr*ϭ9;Z2l6cmH\֙cBMF'ą,7᙮4ו[v]Zx݁@S]e6;{ry[:-K fp$[$^ѐpVk9^{-lUl J`b'X8i_go7p9ys-:ejJTtMen[]~p #؅Y OcRL|KdW?s<]_ɯW9w܁C8jTyOO+aT^; 2-ǹny\~,=9c 5uvb0e3)YY%_Mj]UUK(AE5V)ZaHČei9`vU@035] }s:suHmþBN:©U.| ?1{Tf'̶j]~W;7sӳ+R8vX07>0˼9Uv,n47s;6mf&ݣ `\nmFrPɾSAa-)rbJ@"I|NP0Pf%QI- .-Vɩ !<3i{[LRkia=bQȒ~>P6Z doy*af@!+ Á"1%+f6s~oQ̪j\N]6C'ax,d ZtMǒIc3М{~C 3րc}-r{EbEoS(ii6.4-L S ?SeFۛ16_`@ ݗ$S\^߮S%sDzbʌG3 r-׸+pul?oI37j`x wցq>#L]7xHa2^]>wūQ,Ú \\>(>˷Q`Ձ{9Z`^@#ORX*J $yIZgq&$$ Nn,TMJ] @9@ $K;&٢U$ m^@D<+ZH `)8- Yq_ +NC `1ŘU||b#C)$am@rPRRw A33q(N`GBi I3 Ip2ٺP%$ڙma{Uf˜1gw2O߼υ%l^gA 6goM{A y@X'=]VQΘzJ,[8WٕgBʕl9x;DO3VX:{ 1(GX}vs]j!j̝HJYA:T+ G!gb$yV`6N&ȉAUb$A 1+ ` J08䬝B$ lq;ۑ{f맇G,*H-̶eh ~Tbp_ZԷq DQdFIcRb),&o\! I=U~FX:i٤gX!} 9 KgȂLgþ l.lAY0Ԣ fkVl?wi67Xr>5\orp=9\~o{AN;qeӛ<NR5sl]̱1`}v Tܮ}ۢG(8UMD#> GBXd5}_lmɤ-mg|۵k>oy3gLcrRh13#A5C\13QۨDhWaC/laf,RJ 6ؤO\W.!7e0ġaFw`bZ?#*U]K8^G`#XmWI 8P/3@G; `kq;ہ{[>]yrf@wl*} h PI/CTl*xktWGZjqIUa4ZA.`(LinJ܆V4䴂!  z SJކ\v;xڎ?Ͽ;xE-6 ,Ix>Obᵟp<~T4qa"J!1o~|׳/腺 L )qVR0)'ch(B)DV*_}L܋ b?J74|" !x"t<}@HmMm^`%dGV܃} 1 i^TTXg|VJ吓T Ɯ_/zŭWkxU/i/SbPO/A8RD𔪠RD 9M(K(|+_ {x);v \w>0ԈԈYSֶȬp%M>zI=/Jz/0&ʌ-|p?J^*Եke׭eԫEqR%՞GNClyHγ WC\`QsOʔ|з\{r2tI$HK3)])}K}&)AtAjNL(s-?{\`fkǿߞ!e lv- @66HtH8-yOn$n漓BQyg퍕S7C1˺+ ?~0wͿO>]C_Wۧ6ʩbnsfwnC W~9VU[n";C˫]u+? [IpSQ*-LYhLRWB[whW%H*]@*SK,fm-z:Cc,W}Q_G?VV>V;?4_װ'>zTiGjU}w?]gYV QQsd?utTC?+&$|iݜ-eDYt1/4j,[6mwv-~9~wI30ґ`ٔ_`1kNU)}8wy\2T;6HUb P5d\D>O` o @2 Zg;󟆃 J!:[du$ 􌫋) +56J.@!-02%9K_0}$H\[KQѷ!yO݃;RIQid١[ `n2سhAF$7Hnɷ&ou72Y_"Q|vʑ>4v 8Xo<3-{?,aXr7%|ݨ-chV9 Se^F>1'Mɝ $N(,o#oWS+ڈO}[w3kɝ!ݙKI5 KS;TkR^}|wKnyAg Q+vBS]|g^_XJe}tCn\ј6Xn J5NqPYRS )OKN Ry;`< HOaAW(r@ ե;`;(,9 zC͑JMPdf6Wj8i.4}ugͰ[K/5#e.Sv^ >QPPo\9Ko]D{ЋGaU3*"/"WYk- o=h'7 3NmQ'; 7u=Qa u|+ن?6-n- " 5?N, Gv]oko*m^*\_|ej׿w=Q[e!}ƅ=}MjN=~f&6BbpF"=f tCΞ }xȿɏ>a~ 3n^w鯕 } 0 0 0 Se![nHmkBF)39KmkTSx}YwF.n:#Nz<u]D(Jh`- X'ҒCa*@ ۈ cշw}{]/ًb_ /f7؍m<-w~~Wyygz1?8П`xv't>7:}gwgt5Ӿƚ:]i7?<9`{/t>螎;'th9u̚wSP_:=:iNtsě_h{"nףзހ6's؇sygG|ѐr[՘wOulNtOM`7&nyf}>¾6&EH gmG}sK1*Ah$:G@{Ua:>Dhr1f0B#d1B#d͇_Y!|ư㔻1Ҏ2>@ /3P)Z>z[@iPzCIW..([~\ISw!L]Z,LzRFΰ$"黅Gt 'Э CxtIE#\ɮdU' <+e3@X-_@`jXc8!"NT+*[@:@ptL}rj;KJtZING_&16ϰavR0 h 'i.MO^1[^y +03'VaY}P e ԔGO h-o~`9џ(dmHI#7 $7vK,%Ai'2XN:w*<n7 p5SL6Uqդhعg{l cX ;}ZC3t[!thA>-%C3 *> d^ %2 ZMFh5y(3⇱/ e18W}Aaی"h1EbYŔ0.hh7D-mPм& Ng9H~/3 ie1Y4Pd`h @▆mb`~CLWŎ,HWU(=Sԥ\a}Wq2ք'+Nq qyv`z#MoءHiKH#qSʑUFŢqw*G!Dي&<ՈĬu&mE1zd,G$T)LKy?_{,4a`!q`━AoEޕ[8E0RhBA:X<,pCl|&G>n)1 1cCS]W`+)frfὦ \IBw-c$vHr6r~#!L:,1o"2S"R'Rol6YtY:jhWRr)78z/KJΓW>~%|:UidC 콆Ocdpc-oZ"f# p–L-X(`71q-y!oA jʇnzj32.uzƫ|,|ITLMJŲ7R^WKcIm }rn5-D23&(W|v1.6id8*=`.:4UsF4~9@,n6VQC G((l+$NK4A5\0m1l&1tK@Tҩ*^MI4֤-ަA 'IS5h2IuioXœa"M#^_;S_~0GrңA]`Cc+\W&εׄA LMX"E&g(, ;Q̙Klh_KezU}cXDćJ=C(ZnphXn"הZt.0l/6AyN/i:+\*)MdCSS84bylVW`f,2oxD"_gWg9̃7di-7t'1MImTƐ%8ZC+0BZt*`/I"OƼKyp~RxA3^U^20户#)O'b+$ؒ7E4@M#2Ej%B;;9VMr>KO4QFSmuIoh.oF>~xF"ӋۮC57+mw)]EM5#cthCqEmtPb~6v[ɣ7kyr.ke%x "N98@|)Z5NiXEH6LEJ$–$?8Z𿂊p)Ex&ajhV iZFm-}>|FNjƺܢBJqi&7&+b 鋔T g$;yRtzȦ~(R!7—[Lr@YSUn!':1L  }SJs E)jMe5u7[3xx9ѦgLu7Iq3Mؔ8K;`FAY,Np8y-_K}K~Ц~*f`Σߝ9*Uذl^'@کx?oF,UioqM5ennPK"絪@Y,]]ng BS>vmc7kfYebc{lX+ Ě? &SS{{^{35 TԌ{Co `*]P?of=2U{O 1:ԮDxowk&=Wj]qfZ65 >{? Ł}-8Ҡ?l:oS~j#Gk$|;%OBoE .9;^l=+tzy--g17r _R{O]W+>f/?!z[cWɥ*4d7oAkR4MIAO4v1f^&_-e]Kz_/4'٣'OH߂?S%,wxHwx+ +$qBP]kݞ/G.Cr1$]$1GW)FԮi I3`82Sc++q-ߡ=”ܩK!Sx[]~;4/a_^*0ƺ1%п[5C͚kC 5;rvf皝kvV5Grj9BiZB 9UsQsv5gz h}qyl\s%f >\5C5C ]3t Mj+Cוw5C i2멼.0t]yW3tE몼.s]yWsEk9.pt]yWstE89npv]yWsve_G]wʻkv.3kT }f舡pLWN^vښbY])~zQu\~f. stӓ4G i;+eu/݄Ut)٩SZ1>cm{"-nwdo{oHdrD~l+$>GOTvfOch߂ Bfh׬f蚡\rqħ$&M{ I:t,~ż;HGğS]J:wn׀墾[<ç0;g]C ߯Io4WboI^|VAK%ֆn.d K퓍FKނ? t˄OcҮI.y>i!ZlW9Җ* qz r@`̑!W!{U׻"^_SbL-dXJk Z֛>Q2#g; w p:bQko oM@r 6_^-LtE?S/@wyTSL@He ĘK|#&C6Hޱtkұ'ݽUҕ-!vIػA[1ZVUIׂ_ߴqē׼z/hUf]|şw|`慄ّGW}z'{,igYWD¢'>U"Qih#gtԈ5Dud&S=QbIH;?G>$fe>s,~OBm9]IX\{e>{tnmDۜoKPmP;m&l'aA j@.@+̣}m^0O˼磈חz߇K.p#e>᭽_=~;fkky=psB,P{v֡-ѫq4Lӵsegr-\4SKZ|;&d~ʧ1)țyYΨb}Ii$w>͏F\ (Zbu1?`}vM3=jV#Ž_T g5Y&*@c>+G.Q/7Ȃ#&[uޢlұXcO{k=+E?P;ǥ2 5?f^/غۄu|&lld/5eǝqǝϴ}hGʠ]Ь2Fa<oѸy礰6qFǰ e57Ļ( z{ 1& $@xW'~1s wMy~Wϻω]\wwjĺͼ6n>~Sm s/o4)á-5.ku+,jqK)}L-/u8c<4㈏%#F^:W[u}E}_=H5eBh2ז.IY`ێTַ)iNjuǔgHL_V$տhkd1^u>tkxNpV1i =_u Ԗ_:dJL]x.]h!Ve+z!Ϛk }]Amƪ 5 ;_ |k.ֱ2ߒW?[cnE(ęֲMimgb$JnO'?]S#'MAmJ"s t[Jݧ(KdΙܔlk~5=6GG|Ɛ}*.4B//'ѷKpiTZTբ(IMqIvyHOz=7X'F퉑 xj8_4xƧgtE Y|x!<69/b=ߒŲ^a~<;Ygb oo߼=ͻލ$$}/,g=ணnz_ 6ޠK |7縙;7AxC'~9Nc~ p?Z=:^Zߣrn4;z#7#I@=:ޤ? }?;Kvmpf/Ǜ6bfv_Oy{qa_Gx ;Q=p 7]$;tHlǼ݅F ҹc`vc?ޛ-Waq?k oq? =1y`.xuTrD4:;tvԙw3k9>FwsL} !ao~q=鑩!x7GC~1ߏ7;lS=56S6=nyl6JFiU@{Y[h[G%:j'B#cTF6#ÿHtI`o¬ ca;Ob|B|+O#i$rYYaW-7܍vkEzf*ERo (WJa(i4|"ܥ,\)?䂩Qi_oXav$>@$}5XX4v5a !Kr(yҨHv ?ar3e3@X-_@`jXc8!"NT+*[@:@}fz{z\=N`k%:-I$#/Kg0;)+YRHV@&$d8"|Arc$Ȳ_|~2(/ٌsi|3vsWc:edYYM {F1Ƕ1Űӧ1T$8 ? @ĤX)a:]E[ R.D?w5#Wb bA"ikҖfHGIE}/xOK ?vPll1̊|;RlpV9pt?̑bQCU )]F@ik7S [q`,,Ԁ5+)9pN+a%%+gb>@RQ42BVdMzs=[ &9r%b xT3dnB )S俴mA y[ \Tƾa^L> @:)G]jq _Dd\"n/%pp6>LT"ΙGm> NcfDR42rhsFf0kXS9#Ycer_x~{  7oRBxN_A{'% `sP-ư-aSJ~x5& jH[UV^~LK{f9,`E#(;\烴}K>N3gozTOgpt|E2%V*_ ɂStVX~lOJ!oJlS4,5ZJWX$RS>/}LbyB6]3dƣ+ӰB)O'b+$ؒ7E4@M#2Ej%B$Ƣ܊]uiFK3BC_gfqٵHON{/դbijiUV~I$J,c5i9,-Vi=-<Qqjl,۵,e&S)V?|e8䱜ZNew8VxGG<:RMf٤YRV-,i-*v? }w?vs|hأP] -8^ⶫޣk$oV:S>jG6D%=MvjQφ5n+yԲ|m3VΥ"y||~_°B)(= I4d"$M"%xaBAp-_AEߔ"<GG4+I4T} W-R azɶQ>BUZ>|St^CB5}c]nQ!ߴRAEJa*3 BҐJާRϷ5o)f.ؙTy-^|A\KWN~S_7U=R-d55_n؟|txįO\nOh |ܢ5bH'Hbrq=h-&)R!]]gj`u82Sc++q-ߥw;ƹo/f-ο[5C͚kC?H3f]s9ڪ9蚣K8kv^=;5;\sPᘫfU3tf蚡k.?½x4iO8֜]s9ۨ9욳Kx1ήf3̵5C 53B;f;u]_:;Gyv*j ]W ]3t+j ]W]stQyW]`f皝8ʻCוw5C ]ʻgוw5gל]ƫz*j ]W ]3t]8 ?&ի[E_'Z/[om͂ Y [k=H\:~._3bKY:I#M@^ЁZS,OלҺވkmq#{ }Ü؍/ؔ4&ciO2=Q]۵'Ϗ">} ./e_f蚡ksej\~6\m,n{X[/Sp-5B}x&ݧz^S,;B(SdijZ>Jis*[x>ZgյlV`J{*m{Oi34p6H҃{ihfP|b8;7k@rQ-OkS ^ó.Л_1Q߷]iG@ߓZ6)G=$b߄<M񑞰OecG!_U d q.:JE# XgGsA80 w%z ƙx7O^賝8v~lq+_/if~RV">~de7-,; JU(PXħJ$Jz]Y%U{eeBIgb/ԥIJ| ސV/! wTMr:y74>h4v}t?O4,R0cKv@};pHZAV^OBm7RS/R賦YgYtnJzoJڨd u;Dk* [8ӻV<><ғ #Lw.3ouVJ?+q -NC>~&` ȢzvFh¿Ql-EMPŪXV΋{<~\3S%SP>D 曵oÙG>^oCV8cDw/z p19]iWm&pC>RdwAa˖7B_ܼsRXxJ:~v`/ɯsicXigFdn/q$搥n"M*->u*Zs W[O.8+ES{~\Umkr9 YG6ؠ; 8d&I&X>~oMk!c ׾cMM|<@ij"-ְ!4Av׷144&.iNɠ,zЂ^^9:K)}L-/u9FX ˱KH}j%թϧLg4 [)+ٽޜ$B;>QWed4bhdQWυ?E-xMY+Z :*Ƶ%)뼵KR^fjq+;d#mJha=ʲ5 zNbO}tbQyG+l=K- g pO'v2+ Vl'{zfy=aJ+h|ʹʧi| lZ[J}B>u|6IIT;!1E>HD]ןD_y'l i`uБj/FxaHܡ|˔F8{gx\L"}Zn{|\FF[]rd3}S{dT鍨o^CV?腈 W4Ih6oiTZlQ>m;Z|ҽ]DSPF6yV)R&O.=J{%*xJ޻OsØd]c[4^o`q=ʠoϷ y%I+=P+1]wG\ʫ狼DXF[^Z$J5dxwEfj%fᚅ<v :ɓ`ygt3]|A{!OOsm7s3螎gpQ7{= /f|]yoХS>vsG睛Y}~9Nc~ p?Z=:^Zsyf;avQO;p:|9ޤ? }?;Kvmpf/Ǜ6bfv_Oy{qa_Gx ;Q=p 7]$;Op3]E1T яjV2ڃ-p uyGpodl`d/e>v 9]Aݩ6ٞGÃT{1H QlH':iуŏpa'D:__CEymkBT8x횉m0]HI!)$FR?6c>>~sm+vuՑνYu8uN?WP>1JsWiV_uKEϸ/rˆ_gKW]ױEYcl,[TYHT}xL#}A GV7^}>iҞ-i;}LJX&TP3T#ߨgJl e'=?͘ona|7>?ǐU%;/mN/IfQփz{G}?v✽3X~j{zTAO^ʰ>?sy|G)P$C,_;RC0HJ k`G>uf7o([9rH١mO PFDf`\B",9!q#Sr%ԴAYkf9Ċy,X:sIУhYYYQEa?,,ׯ_'$$x '&&$ƣ"8k7|ï_.{Yb۶mƍr_ }ݻwe/]į^*⾃awD\T٠"REꫯdnݺUʯEaSt>'O,~~>w)S,|ԩrLK5 =/..#FyÇ}_U=z:tF엇.}W_U׍ˇyW˗_M2ĉadh_?"""I'o7n\)M^.ӧGkɽ{v 2 .hx ⚢ 'l8sUпo߾|n/EHC,̽⣭iYJq\ ֐@jeƌ;w̘//vL0'&% 𼤯kp09Cn,9lsA{|}C˄Z |.k5k)m0-_~AZ¬v#ԙsSߟO4ɭ׵ܤ3́=q@'Nu𥥧3"ǭ?xwiL>52F?22R^xA;|!un󁽁Y/Ѿ},6M,`gFb/ǎ+Z? lp}=Xc}C"{mV[_/==]ҰaCۮ]o7n(cDcZ= i|c ,k׮<}nrssX\9c%VIӫV6sΕ׵A?jQ|Ν9i2=qKPG1;vHM6I`A27o_fogϞ{gΜsdǼ%MaBbnLƌʛ0vp_ 0@W}7f֭{(bMFh|_N砎K.ׯ_/+((oE=c>D;߬XBuVYo'ybzl1_> .ԩSO&jO"=^;BۡPE~BS9J-}X11>Gze̸&DQ^2@?ذazjiW@ѧ^l`߫W/=%ʅ8P᪬㿝j'߲ekSr'Ƈ[_3A~lЗa8M B'|޽ql]r_3Tz1U+|c.Gx|d.:* T c}lkJu.|h|U)&s<`zRy=[Ν-Ϡ>mPtU[6y~1D~4 Dzsf ` ګb_+*( 38c 3R39t@Lh+/ʕ+圆|ģlݳ~(1;\Aoب>)>AL bSmsNZ' bP6kW՝u&m/5>:i1?zU&c>=j1J{N/dħ)h vK,!Fī|;țQ CwyG}$mT9>06GjAW|~ȡrFݕ 42 rGjL@?yqv[A\~fk=9Uf7o\9{ #G+h9 a?l0 D#EO1a{@sK`|sr[io# `FlsQ>սqF,6fhӦ3MЏF oGnrbcȋ)))rT6 ú rp.ëWwh`E-Y^x+S=?v ƌr(x7~v{9gAn>`\opI/oC[o=t%8s? M̛}ј{>lƄH8 C]02g5]m  hlZQas                                            ;$Xj GmkBTxx흍) q ĉ8D^>׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$j?tU mkBTYxoKw׻ΉsΘs69$D$@qWa[fzfV~W)#͙L>2!/_D uؑϟ?uqӧOQ"@ȇ߉%/=ǎ{a!?~,'Xˉe f ?n\qF5r445 ]S a/gRYY)M(55RWW'R__/RW[~?,U͛'ӧO*ջW^=u K>}g:3Guޭj?tҮ\YoW;Bh[ܰA{k>bD?>cvâ[r?XwLsBJM'Twҿa-?,\q?n\q?n\qFvmmȞS=seE '=Ш3gΔ ʨQtߠAda0a6m3f,[L٣ѝ rm{ƬnԩSʛ7oرcrA׮]Sp<|P={&vǏ͛7N #{D/^u:w۷O@a!wYfo|}V^~i4} ~zߠr-}E`Qx|)SdС2~xK,~_b{{gGlڴI.X@-ZߗwB}x{ _yn sy5==rӻt?,>oqg׿7?LoOSL#wvv \}e:^ǯYF6FD[4eLO@o<rEv8獜ɓ'޽{K9r$g^r;k׮s?zH cD?VO\ /^ȃdܸq?~u\7j|eҥG :Ԟ8ߏ1B X<9|=Νy"73glި;3JΌtâ=sgt&_nv6 _a}5|֭sNN휶O[`G}<d`sFon-A"^ׯ`ժU؏:{>{ܹsGQNزe֕hg@Ā ų]>n#2wءm~:`Li>ߜ=.tCvM~9#G[r=aԲ$}> ?,4Z.gmwqǍ7t}5\o]ڭV< ,kAʱ+WTw&9"քx'ht}/{wP^r=Rjr&dk}K}Ir[kmO{i?h~tl?n\q?n\q?n\ߗ.R|WGF4F?ضmb=grFzݫ}8˞/,{M~Goଗk΄oٙrC_#hvx7ܸqǍ7ܸqǍ7ܸqǍ7ܠG9yp2%q*rq"ac؄z׿Ǚ_墥=qz(v9qqqq?g40J mkBT~x흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 ףMmkBT&xeɖy1Y)f,13CJLQ %TW*PIůك~; =ӽkvج7͛^T=O?<ÏsB.v\/ӟ??˿˿??(?!*Ҷ\ _ɿ$) sשׁqm]UY}wwQ*CU}0mHSEӟO?U1||7~'ܕ.?(?Z~$oN/nΓ3ȇ?2|\>S˯믴{ y ۏ>X>/˯O?Sg6:/?/>L^"7o|/t/ }1O7Wq|!_~)_h׿yQz^N,S|ч믿tL\<#W}^~yO^{grd.ٱ砼cY|\}_*/=}]V,Y(/|]Yz|7:ϬD6깣v^9{lؼW~ Yl\}@;VGOդޗw׌H?nhf|^ig4[n%RRG9p||rG>|ruIwc6[ׯ+7^˧Ɇ-s2{L9~L9Wv" -;wdæm:drS;oȮ]SO(oɮkdur~yreu"7_~Y^~u-=}IQT$瞹&+W']5W:Hk y䥛7W^^)W>+/ -۷dӦMr9Y~8}J~z Gu;6qǟʇw׾K}~-=̞6E ,w?{e}o߮0߿կW:7sDooMxC^}sl/ˇ'˛>TߔM7'F[v}8BN\\:VN>-gNgˇ'N-׭e+5eDaO՜Ke뀾smrO䙫Srs┼x筗3gȼJk붭yVt 8\_)쐲[o5e¸by7w~%Ξ3giӥ+ꅓ2qHovT=.OzWy¤|K"Wc0ׯ]_{U+oooݐ^zE^\~Z %/^e]t>_qy>|B/yQ}rBΟ=)k_9\8rwݏ>?Hqݻ[Zޒ߽#|{rm]O;w>0L]mi?;;LϻoC1|gWO?Q|-w*[:_|_wm~>ﻭq?sӦNiӦԩRRZ*SJKXk:EN)%ӭT^ORbMM iL2MOfJ1NuK(%vįد]Mfϙc}Z@bߓ>*^]Z\nS Fߴ3~JyeB7\"q#?A_j!}QSjw0៾IaB[4.l,ՓFIZ7l(ԗ HC-7lGu:룰kWF4/4jLzo|ƫ^gz޻R4qCsnXSN0q^WõyghGvϻeӵ ˝S7mTUmer6lL1]Fii2e;nM(Edzm3ZJȈe2x`)+/>f͐!z>l NSeQJJ1R4H&)1E4Tیiӧ33T6:|,)#F2|06cn5x7N&Mx;vL=ZeȑF;qLqq͘a3gΔ!C#FXQF5qD;6Ç۳cذa.jh+cyD_Tf̩YO'sεusH,ѨDc:*h ǩ%ن:柧<q,%+fϻ{\PǼ:81E+H$x?`q{ /p}r=C ~{O>+>ow,Eii^~j{] >ggg44|TvmѢ=i۶Ǧ:xtŊҿ?U 2Tv{Bw.={mOo^z- 4aÇImeҬE3T4Qhn}veVҧoֽtQ>U'mڴOt*5C2i$6V[),g-dґɘcdҥky'l|}5\ ͚5Z>}=p:}kn::]G:6o.]d2p@#\9p;'w(R~ε5o\9v̟?OfϞ-<̝7ӕΝ7O$YllظA-Y$V|,WȆMd,5_Q>L&N`oڼQ,],gϝ-[7ˊd5J˱G-eMlµK-3dr#R^^.{5 e ԬYS:t W^C… eʕm673glRf͚%k֬SNY_WsC5 dן~iY`_?0ܳ޹;w$z}ze;}ܷ__oZ]:رs^ dБ~0qty=zty}gsmx=vse4yC9Q/?` /Y).}۩S'W^&M0go8:uֶ߀5kར"{ \㞁wNj׮͖' jHZ5vŝרY#q|wvеį)t2;.}5:s=IVJdeeI~^(!RFMc'yy66\㘶ܯQoC_<[VLh[V-i :775JVVh?t|{93:F׮Sq At5ȀgaFRN-LYdZu|:''"HB/Odad5lsrrrb=Ξvs G/`>6E{s~3&ތ B7=7Nj18 xym#|<nڢKYt̝;{3?iRG}_lJ/ɡ#Bfoۗ?kN.\ @kgPޫL2w81`]*=Yz}Sfso>QM&gΜ1m͆lb|Kѹsg#O8!6lq҆<}tNWSرG{hѣGeuVYx}?w ?C~d͖?`3tP{}:ڱsU+g6|Ntn޶hk|vuWhDJu9Mr[h:X(^k.[c~!޳g@k9yBVO ' qɒ%'3|ݺuf tM Gygʕ+[Iޅ pe/]dVw ߸{nk,-cnMҥKMSNV-M'ٺuUY+}߁x.VdL\enQp4,y/ լUt T>]q8m;Y8[hiYo!!{ [YEE'EFۻ~ugm/2'\"onq}韵 oӎ=+:FP3>Y=&ߌEu0> ;Jux`۠'J6%ǒhY5`qt>5`x*{ Ru/QOɾJkaSǧ_(w%Zme}T _"WX[ׁ{1QpJG 09Kncñ@)0O gC8J+?tOW:̓G2hZIok8?U %P}h0}Jh.\Q*<`o`pN/mVk> g@YLYlM*R/YgMXƌ-Æ a#Irr/Z?J~: wYsW*}XYG`_ Cf>>ȝf ;~aac;LtЄp,uE y&`{~`_{[vΎݣ+U<"Y<JgzVZɎ(|ŇuNEx)9xjMg%y{.5oNaQoDO}8輸B=;tkZ`97+8禖D_uр ^AѴ~O益9.۵e\W*+Y, hL^ÇBϞpy*7Nʾ%J:#xͧ?}Uq= 9_Vs><;/Yv{v^dyv~]Oܬsm%}./= +|ݙ/D,zOzM];Ng`DS`mzXLjJ_ík@*M/6deW jٵSNo=^N{d=h .rAiڬwիo K/㛿ong[je8 zպu+ [@ֺ}vU:{ljԯ/^L4]Oh׶ԭ0͛I;n*v,_n޲dXcش6_fl-[^ǐpf⋀_|[^rŚƷ>}If5qYkwe3eyπwv^YgE 婫eŪ`ٵ{9,)֯5;O._bqBc'#-{3}GA, x:} <6m(s͕zѤ)eeo^)Yf+O'ѓ9rDN0{ޙglM.^خ^Z9T?&l~Akx%դi:} \ d5kg^{3A=?]7Z(\ʙ3#Vk6̘Ѳzjݻ@_('NŜ/Z|;nβve~?I@;ݧ1?e̙eǂ?R\WxrDpvlY5`OG>k,-9cS}vYm2N>Q|cG흌yQ6CmXg~\ӶlV۔eb1/NwlѮ+̸{8n8d> ?biXmRljl+ á>?]H?N¡c;X^Z ?v!^ >ps\w6:gI}ve%jJʽX ?tL8x̞]nG3x2Ne"s8T]q[obɌ5q<ъŃķϥ="gCN8 $Ck׭-e3,fa|rr<{.  ?z<3A?@ L~"/ӵ5g\9yzկ_taN.>3g duk^PH??;O xdSrC8Z|=qt'J$DnZӭK}tĂjJc}N ʩ.YX T\ 5y{?US\Vu # ޱL=;GgvD[<x/jq=c}>v]fݹMW_ӯYb=O;uh{< .xzB>Lx&+;nΉKæ _n,RG4jШ|5gxcK[]7 7Zukٳ;VmZruR gq8Z`qco;X3_uem&[6o^zp7q]9?=CΞ˗/Yl_2zztEnf}uQ^^f₅qӦ{yP*1:vrWb#7ztgXn92glC1Wh~޻_o7CZ;!5S ;;h_u{9QY\\bc_hjco yDw&_ `fW#G#b;rPU:#sy!6_k)gKܹq͍7:st Yxcd_x]ϸuhgN]Ե[/}V ~'gķ3gZ 7|7h,h8qh |kpS2=Hr 74vN+5`Cb[a/~kz&w6GQwz}'5|3hJPOJi 88~Y8cx;}vwh''ݔG9w3v$~aȒf/6 ?"iܩ1NV/&3sJ^n3ÿ2<?=P 7 /@SYH]'Xt]!w$tBo" _;{&Mx<=;pX`G|{W7;~s\y,'9 ù.njgdt;{h\Ǐz. iK W7OܤIc}v5xF Mq]Œzh&kԕuwߨͭ ܃oڼjt>>/׍<=t9YZ<Ц]ok{"O8jnoxrqO`ıf@V.>1ǘ^*m٧;q8xȪ5e䘑kV\㯧 a`?=[Y-}`رc; 2eo9|YK5z`iT9s̷~xЏ=wk>gi>U9BYh5ufk9 0:"ڢ70[6a8=. ۷H6u[h.ykA*%WvYRM7RX{`b=zx?tJ'{nx};v-Mmczg͵力k>&u}vFc?=kڼSӡ=zv\LԪe+ӷXW|KԫkuE\=LGOީK'ړw|/ѓCE{8.ދ.C07~1sߡ9kXqOsi.*._rox21#/(U}?L +Skf<= [k ݿE8wzJlGr.G?Mog8={x'"W0xk~~:/e=Ña},^e}/sxtv7e3P6m/kcT>.=\RWqO]?a[(jO\8[kmרU``WeIÎ<ȳ/ҲuK żKA_V-UV[F]ސw0b0`3tt}?5ۧ`Iq H榭k<< 6Ϝ6sNkY;FfïA``#:r7 N};FY+14;Ͽ`5V,{vߩ#N9<?-Y;b-c9Ԫ5+Lw1? \u˜,]r=.ϸLy /-Fѱ#)oݲUz-Ye/ɾf]?~ ^Wbm?ح';^q;o|[9+^?iQ|G.YԜslbq[;AG 8T(96_oQVfV=!q!8x]0[jL8k,9z2f90T9wJ)?yFs5ߏv0f+ >ف5Fu;vm~o(I)5 k}dϳG߀'xyAx!d};?b;wL>z.MR g/|w ͂&oOL]C<,%9}gوnp<*sX~N|?+pǻXnt?<mkp:wN)ؔ)gyckΎIaӆJK-O8sb)9\q$gO|!~%9l C1/ 1_|%Kyߑe6)#."!?o/Ii<+'U[n_+.״ISsbc{qy.CE?ptyپnϝ'Jg/_*Oe^}/ +9vpAέ K's}:q{}XAB,8xY… wtgF) Gyכ xAv6@ 9ւk]s.~Q+y1L~UY23,+ICQ(9ݧ<BA\;2&|p[|&tTߘȒ#A5k䩓FM}%ps#fʭTqs+V%j Tfpx'Ï@g?XУs t@Eҡ}?yހ}wD^/s: .66+NLncOVI\ Zo d=B;љ˸͇ƹ8 r˥g{dxm7b  x Sh﯑[y: dNq?ߋ j+q&Oc8*/~SKMn'fNjI].#sG2v u wuz_N˞Gߧ>ex}zf} #ρ 6r(\= E.FLȠZdh/&Ȧ胨+ѱHڡ 0s@;g}yCݷüOf+ӯrcȑFX_u'0hԉ۹=}=4d5 Xe61cFٳo+*XFG7_1cLǃ 2>`3:'>|`| УspN\?X;GCYDL|DS1A?i6.nݧ=Vm8Kg/^F1S_Ms؊w`Oov|U:J|ikkpyLMWK(x!D'E琎 dzڵ< |2 rǯ{=Rg 8>|-{6^cqhmڶ=?>#I+aQ9BhL;mN/l <)q/wƫe \ڽ̼3d"kx&tgl+xq9Q?>\O(+~ݠVF5_8nbfyWaB׏.gHr@&)帒ؘ؀W+/'O{>.h*0\zX\&*@4|qcYr=4KW,u3X\Rb986'|".x2<׌m{?;33xPAeuv| .#?:gl-[Y?e}ׯtv6=d tH 4pτs:ʧ{ yذLl+Ô/3t'e撔=>{@ۼ_}^l.d}krz6|,ԙdlvXa>)Deׁ dzYz8 '? W\ 1RPuV a2u*TU*{EME7ckpJ 9@Gxmp9"\-ؿWIt1[No ?ɀ9X'EDTW]*a œ9q(vݳ+ǜ<חٱC8~+~ޗ%KKM- t&=_ 4^ZOwK0V'W=#>/0S.o≦X &_X_X;5z>[s2Cazʐa'~8A:z)2b}u 6Hf^7#F |'뷎5^soy :'yD,~wb^ϑ0O>n-}83閆}@ؼYsC`ʌZ-}z jt@xȻ>>C r}XD?aaB!5nM $5w4qЧW{m迣A#ҋ߶M}zc룙4,ldĦط6qCwJ-lE>`򀣣jܤҧ~?Ɖ3Ө9G755ڶ'k+x|y}y ؤ`ˁJJzkk!?;UMWge/b{% {89&)[!6̭1'*߇=~l~ˍ><8|IrNglKB&ɤ≲yF_tLcVrRAu4A\I#?߽Vw0wNg%{׏^灞[yBeG >ӹѻy^gᏠP=;NDX %_Y^-_Jߡ w'B _P+g}gzg=B yx&'?p*/ kQ* ;N )!t^ ya?3H_c*y✠gs*Av9'%J-ܼlEjIy:kuדzϿk[b{cvy6c悚yңw7DiӾP^c!z4olq ֓ uߴYc)lQN~&W0|sS:mr&ߵW-9@,U6KGlQ9sʋ.4=Ƒ'{lcmdղS*]۟mJɏZR߶M[HL2q\QӉg%_2RfbJ*7ͮ@L[ޒǎ˚uNoM e^G'8ߝӵAx-k>?P)tb)G5t=O=鉸N vW!7%`YzlڼAycC8ix#{n }!& eμ2(S/ϱqˇ 7G?\}zn*\ßg i{zlgoWtI(|E.̎Iӏ4Xjtn)NRWBʶ(~nt9"|_\e%[KchScF::A6 Xw{.\g%'Z@ҵ2?%X9#k0vN!Fm {xܣUU16e_cXDƒ6|]~O {9kz:u>?Ȁw9[Ξ}ã , ~S {. C\/ y'SU A%.LxyG9?JkwW<Ϳѥc;\NxTy-'(RtVrS4U3Xzpʃ[Yk#b3B?n`cGowEyM zy}f>u䅳n{U'Ft=S)xĕ]rb?*OCZ9ȑCg7vD`| &7칳- ;%|> Ǐ+Tt ĝ''2?Tݒ?¿w2~MOOa,.-\cSJS;IB'F?t"0 60? 8#ız W+?sg_y?=g ĕ"ù6xqs35 Q =>#A 0x+lȧ-[4t|6_$bU*i%+?\\Rz$7=}ɧB9>!kΨt< - >ER AmP3'%Ot>d̸g~~qmb='qInx#dy(q5yͮ1^~=OOd4)qyg_??|l?kňy|wx$'|z" |Q/m4ӽX$|4q=YA+4wSs'}di~=\ 7utG-(\,(`۔L0z_`_Ԏ':zlm! r ~>/⻦+_M4^ƌ&}w?t`O6o+S30ˌ?FO2Y3B->Bl9`:;9ƥ>gcKL+1}#} 6Ⱦyp|Ɉ59L&M`VP4lSc|F q"W><^>s;ⷠ ^kΟEOB{9\;` @CF|L5rayx7b&MkV]cjk;<mwjWJ{֯k&X.EŜPhufu~}"Ԫc}r\듶g y~kZ_5^Yv'umgji|r-<sj2׃+qϸyO#6XöF2i-_#r3c#3OtՙJgQ'|=c.+@Jk_7ŤSHUu>?|HN*?b%Y pv&/ H8_`rȏQqWc2^> UQRIȽKE?$xAF*?aH_1 H&9U;<6,<?d+,=TG DkS@ Okx7T{<\,+zϷ MHm2_K^Zi7?pe!ZjYetmMDtQJ?'.z>VH⊡z>Zkt# Kai:, k'|VHzy:#aCƍ2aBXez|32`@X*㣪t=r/T̸ ւa5g~7>/% q>lu=] l儖-}wF@J47('+窼4*Jzaa))%|H-i!yh`cWXf ˶m!>3$7uhkDd֜Ma:5 $ׄlM5ѤG;hϛN1eaJЄdp`-x2h^Cc R!Z:4ZI jmVZ:jiz 뺺LW*h]#F/UNt>};IaixZݞa-!igOV<4iM^yrF~:mR+V7ߗNx>+VBurBG_K &mתL3Y|{a(8X_y}~0O3kP̻Cmp-ClЋeMYcﰏs{ 1zH2sG|orw@f Mxqr`PN ="dÄۃ8>.?6K.%xpqKTe~֗x4?|P=q@jn=&?`~k׮)[&؃: k2#~7ܓ%x^W\N'̱I)K)~>?ᏽ[~@dufZ|a#p,!N[Y k d '-_OtV@@Wր+? ; t  *քÇmS/-Krq*Zi)ҲDodix`7U"!o uqy\qy\qy\5b})MnmkBTxe]GyX%fYU%3333%ٖI dnl7w#ݷ߻wL733kַs9uTRے{rΝ+sZ[.~\('////?I?OZ/'_*_M'Yx{ge//iϊkR8*{No_!mL}_'Oŷ}+}?;wGƥK͏???ɛ/"'oxI>o'g.Cw??oF>r-}ܣo|o׵ͽ{slmQym{ogRјo{^}߳w޻W׷~t?8(~S<}h5W!L>sJ[YKqjygo9P2U?<☼<ژV>~'A֛sV }CO?Lkk-:~Sv?O>TKϽ{rjA9kF͗_<~KWWߑ7򕶡/~ڛ:/ =ꫯK-_:?Ws O>H>|ًgs/ȏ:}Vk0/\)wt,- ןw~g ŷޗ￸+VmϾV\=wTl#gO;)˖.s^>X?uϬ VѣEu[ʫ#;yo_.:Rn){yeꙧ?͒m^-}}ܑt>_\~]qxukʍ򩃲~6~̚>C?/Ǐ3ec.9g߸UڼNxZ>xMٹs\׹}d߶ o1ٹm,YV?"矹*_9DrWWnںB3 ddʵrd>ٹ\{%'u~)o|7ܕ%ceem69}lܸQ='׭O~G]娎R4f3qi|oYS'ˠdӮ'xhYWV\7F'rȶqқok~*w͗Dyy֭7eA Oȝw?z{~ŋ]7ޒkW+dR2Hm٦sK/(kȪe%mY6gLX6k[vl#ʲ sⳗdź2k88|:S_';9Ⱥ d?+ΟO˙SSvɦd%b"gu5{٪گܼeSye9y=8%)yeΌ2w^ڲulZE.9*oʱۥtRy[a:7H{Myȹg̙rZt5sCzᤌ9\.kkgرS卷ߓw߹0)?/Dy5D)gk_u{[+7ŗ_o%_8%|FnZ9NeoK/d>lymz}Ezu\gCNȁdݺ?/sO_g.۷˵O8}\tA//\^[_KirhNٿ\~E\yZhۃ9<}oi7U]kV+ʩd3'ʾG҅+%r{_(}}MyK+rء}r)۶5I^^Wzw?x@ rrAK5-=-׮\CO'e˺>^1gwSnG+D޹{W޹uK{w?O?x_n閖z~·?~kᆬ}zmw>P?Eǩ|~so(4޽c;JS|~ӵ+c4O?6:>}~Zm{+>cS{}yy2s:O={<*_٧ߕ߾ensvKo8>}?gzn)2u2DKJdrIi͹])2xܛ+㒢V){2Օ)ZʴS5[?)z1خ+S)߬ٳOkh^{2TGKߍh}x&O7/S\(zR'.֑p>W) +GU_t QԮ]K6:uH N]חJ7ݣML-}QHx}նaוZ4I>Ynmv]}uu|YḾ9 Z7lU\]XX83S_uf#X2Ω7n,x?M2sV 2XM&G 74bpM"SOs͸&M1cĉU+GIt|#GJQQ >h:i:΁:|ƌ2h >l0k?b{Əo\:tP{} 2E me <Ϙk׌9u}=K_9|Μ9.~ %qs4h,VG%X8$PǣV8ŵdywkW67hD8x,n߷ιO[g(ou gE-~_(-3Z%~k쬟:1͚5o`?[ش_c._\ʖK.OI׮]{VnZmJϞ=`;diӶ7V4k"'͚Z]vQKt";Ou>}HV-S]:KA|i׾L4Q縕EJn~٬y3tm62j(ׯtIz)_޽f/pm&M}-W^vγݻ{ڥsg֭|j۩S'ٷoyY _rm͝;G;*͕Yfɳ>+s6}4sU:6Q,],7U+m0|Ū~z2|2'w(Y*'7n ,-dfju؉v iF]lµK.eera)++={mW.ڵWeb ٺuX͞=[7o.3gΔիW˩SUV9nx  <̟?Y GW;w={H^=ee2l0]{>ݧ-KNm l߱ /a12ZyCKm?N:=nݺ<ӾZ[x~3C6~=RI2{, ?EAx]Oިy℅~(m{ξСo߾vQFv ~ ٷjs޲eKouބ ]+p{<:YC?;7[+,^ jTw^zyZ~^yw~zNF/v"m۵Eq*A^%yRJj H^^IV\scRsZj }l50m51x\[*(YYqIWgdjv\VM54}#KrrslHZ5Ot09g j" 9^x<_“͝^ɱo?9O8{͍/7| 8/5g ~y1jԨx36hx݀+80;xo٦M÷XsWwh.eŊ[0glٻĉ/282⥋wWzT>h2{޾x9}ݷVurZS6k^ed'Q vީ2~:V7*mf0{UnR|6mdxmqQNyX+ŋmݻ>y}9`pB_9p;t萷cǎ6Fڟ8qB֯_o yޫپ}ƣGʺud˖-h"~ ^x[.[6Zf.7|u}6+W3=ccHRб Mݴu5$q٬RkVɄI㍇+V,6y:,f2ʁM׳vZpcY|#+{8^Ν;m/e_3{ݶ^Gm Y>+[7 xŋ̜k{8gš&'0^5'瞓+Wl'mx~"/:t钝\3|] 871K,1oL;-Z47d˖$7'Wes3~Q#Zr 2:Zp={GKѰxkP+T\VFuSw1HX>dZncpf lެc̫Od9>1p2{oem]{nRC~/{Ȝ7sɻ&N;8z`#f@cy'Cwgx0_|3mf/l*UUmp(ڔ:Kښ UGh\Pkfsր>}ӭ<׀.Wrjӿ_+>JrnD#1D=}$+Y ~WykQ!\#^am_<;DyW)7~n, ~Bػ}_y}<3_P*MK8Pî zx>&?]dޗhza2v]r_@yD;x`OQө8(Wys`}{&8?#C4Xf{EwpTs{<`K-YlYvn2+2LVl=FezlU>ۿ:|toЃ;`~8?H pa,0wbg.5}l;+Wf:a܉n@ϱ64NMB X}>igpO7e}J{iq~|^9/ |?t6g'X|X甇wCq_[$ T؇2?$0t>߳SM%Jƹ>sRnjIX {pMNOTrZ]Xvpi0u<UŒ:?z')=O{P=A;| W%ףrC%ju<7p ̳ \eY geKggDJ=vZ2〿۝BĢ)ԵtFH4֦gŤF4=z a BܴkkO^8;p<,O]Ki85sxGcF~g$M~Nf;7~Py{=۹{>'Ymtƀtϓ3fΗ  pbJ_]˅jmݾU~f]TW==3 Mގ4vt4׭7Wd:t]y9>LM b42~|;gP<:Ag/ad;78{K}& r*(b $2y2kVs >d{⹋&`H'|rc;wdBus㿎n!df|DF'3bpFG>p}p_: y\YMʲ+܍g- ,Vd,tC 1(5~Ts,vUnmӅ9ϰ}'X<֕xA#?j'ptV CZmmaK %(^&N]ڵkL.!g Nʕ+,A,;}ۣ?+bɯd $S~-D=F+VM[Nrr[es׉7X&7c?{^,3 2 kŶHaثO/נ#~^zfSg#)/mmtoXOjԮa϶mZZjn~..K+Ğ}lPh/k}uC`|sn{jcۺml޴I^~%ącw!x޼ 9{._d[}=\ұc'ٲuŦ"GYYKOA%_ >İkK:_]pщ7nifٳ Q$^uyFssG_K\x>=D9hx䲃OB,4d}7LOn"FodQQ}1=ޙ|y6!굫nD^9؏f-C!VXu`b~vڊ^=N<,q.ƕ67nHUg͟kW]:.<ر+nݺli7nPo>5w\VrJo"LElם~--*?-Xzxx~Z.L»kO1)yMޣ6k֯5g;2;gɜsk&߯b/J9V{ zؒ&Mh1bZn?zA 70ؓ[,u=sڒ}\Ɂ=&u@7x>Xs 8Ϻjjl Y. 5~DsNLc=il-<9^jrooG30&8m"Ob"Ilbc9D>wb=X5kג:zԵ[W6|BN6X XM2h1|wZ{v8Z;B/!oȫWb2㍑}uy?jӮ:%wQ.lHǾ[%\.8\9k  ݠ `~|A~ rq/]f_cZ^x\U) X/l9m;c`g&[Q$c_=yObcԋ2X$7ϙm)J㡏m<с'iq<6x@s1㮝9|:jC~֙Q̉;O^`oYgWlcW uXDgAɌ{>>' {b-gu$gq7[yl{nrΗd;=/skm rXm)MJwu?s_xt\W:na=L>hl0o o,?9+]$x}ɒ^ޔ}-9郵8묱Bq;֯[fؽR2 > mۇirvoI6*uz[KGO|`)Ad^{葖sB!KX?ϊsh8}[E6̰M+{U/ @ Be4$ ^=NE#tINb1iwܙ.?s4 Έ|d~=:7s>=bak"A\^'b W]9sx sszw籜~; +J3nAHnJs?:v0-y2_@>esF M_D=׌7]JuKvycթW[ށ?º6'p>qF}_\LdP!dk)j@6Lɯ݋x>Դw[j.ݟQGzCء#:j{`_N '!<M dD;[r3:"p=-*d;^ Vk֭>pێ`|Gǃ=o>[V(lӲelY KnKspB]{^w[.L'|29ἽoIRVZfl-9 _:7\✵cq/>ky臼r¿е[;f=s?Y^zhwΑe/UWO:pS &F\ح{7C*t~[7ױcҸIVw7oTn8crQKj֭i4 гMk?5,i?ѭ{W[D-0}M~VچXWu:u=yW=9quhgX, <3rKp8]sg9>,6 O4b*h>-9΍.:*3®]SdoP2vosܧbΰ [sq0Fh}=-wrD;ыVl|ӽU|/Y.rнXcrP118=N'^]x?׈'@n7zS:]g? l"8 M/iY`ֽ%VFپo޲k[~/ {^x1HC^<"[670] WQm߂ ^k5lE 9y/Ƽ0cAASsL }$+0xdn&S@?hsi9;v0,icdv7x [v@6ÇY[x#lnkC#}‹_tRٱ{>┘^lLQpGln—m{7wlo V^nNsM gMƿATY:B9%FA~:Rd?6IEeYRMe™sf̗4Kw̸і̹SrPA 0ŸEq~;'81^Oy)lWm5ڮݾsQ~#,5OyOJgX3'{= |8f?3 q۱cd:GՃoCLTUmѾp9{ _h4|}dJ\zaq(5= =|~ Fw7__vLY9~l?r8toπ^бcODLq<ˋG[kvvL WZ2hyDZ#K@Nw17Є %9{ .`F^4pxyMNgXj+_".,xNq9$ yG|{HOC\9l/Zr3^q]Nw:K܋syu{4&_ [.7?Ӿw'ŃlmUhH`SB}܂ 3iw%s^cV[Q3}TxEހTy-Rbr;1[UCpZ]YHZr!Tt fE߰X8gr:\<El=>}iSM3d|]赑C9:iE/_'v1bB o##Fzq|`7A6ED _AD]vDd,lh1>#[D4[Q>=,K~@1B8yo}MF[?έ݀Al W@"O}A5ž|ۄ k>jxеaDg~4<~fS'oϛgtzT?uI1]~+k77}>菉h<qD-H-^+klN6Һ4g[}9b;}Zzܢ^Ӿv)alxK5: J+i=ں[5l3L^g>v|u9CIW/m4st . b%9O±?D:dґ;فcr?>LTTQO&2x\aU\ G3Gϱ=cK{<.޵U떶Gg<:AJ8aU\-^i~O2't/8~xKOW UC׃?Av^yݙ5 ?y\9pfbgk =pO==tȵfOЌR/x \ѳSpxLI~2`~@H$WW3*Q>}ɓgn}et><MW˖xfM7?nl:V,vW`eM [9 `{t=p?5w Lk!sߧtY0m?:H翋5[){yO}Yu>h]Mw+t<`3);p>;Bl6,ED<  L*:p@4}$wO!6W_Ŀ;< oߒ?M"oF2u&; ?-|4?}J(QbuDlmV.~ɏyḂ{Te$q؇z8:Gϖl18xLz2h@Il'p೎d A_2 p' סoǰC=1:Ia|[}&o 蟘Wjp0 s41}Ϣ/DoKv"_s{v~8Gs6m/X2#:i3;G߃t^5;Og}탾\V;-OXذtH yuF Mux@7ⷭ}~8h" !) onXƝRx {}Q".<6j`a߄oOa" 4j0FMM{jw= ^7_^_G^6x=@<r ~:💠^ڽxȏNc3 ;?{'dzNxe=XWlq:|brc8>sFO\NqC/~Ȉgd|ߠӳ9DB&c֮W {aGm-JQþ/cюsKA|Nl2kؓ[z*$@A}@^+_|-+/p]~}+ ^6 7߿t1_udthǎ_z 43Dxt5˖/#[\#w,.xl6yb-fFyLb}жu6rD.@ K^i ?e+Xݻd |B˂9i`B'ci%|H Y"N/i}EdR ==BKqngv˶-?p|w`WC[ $9'Wulr?6Z.&Ģi_dOcVrRAu4A\Ac?߽w0wNg%{׏^灞[yBeG >ӹѻy^gᏠP=;NDX5%_YN _Jߡ w'B _P+g}gzg=B yx&'?p*/ kq* ;N3)!t^ ya?3H_cy✠gsAv9'%J-ܼlEjHy:k֑:ujϿk[b{cvzj׫eyҭgT;iնTS^cAz5mhqבM u߸IC)lQN~&˖/7|sS:er&ߵW-9@,UVKGlxS:G1=WA*?䦘6X(V+yb'Nk|d]_aܣ8$̞[j>? aZgum=z䍄/bn|'Wz=zxb3j+tYbC&,U]?s; 7@_ѱS#!k/# -S8UuuV_Ev_4Ur@2r({?PN 8teJ-١s{zu:uhs $VȚ< -ǿS$w;w9.'z'yx M?rh<3Q_b>_-~l_^N2 tgh=E'_TÞ˾&w|ࡃ| " HIzUoG>^c'5Ĭ9, ;%|/˫Tt ĝ''"?TՒ?1¿w4~OOa,*)\cSJS;JB'F?dB7 ?? 8#ız U+?sg_y?=g ĕ"ù6xqs35 Q5=>#A 0x+lȧ͛57t|6_$bT*i%+|0\\Rz,7=}ɧB9>!kΨt< >ERrA܃mP3'%Ot>d̸g~~qmb='qInx#dy(q5y.1~~=OOd4)qyg_??|,?kňy|wx$'|z" |Q/m4ӽX$|4q=YA+4wSs'}di~=\ 7utG-(\,(`۔L0z_`_Ԏ':~lm! 2 ~>/⻦)_MT^F}w?x@O2o+S30ˌ;J&M4Y3L->Bh9`:;1%% >'<'#G4ZlF8d}Mao5UkrN.h}M46nM>)1Ɖn\9xpF|z߂x6x!9+zZC= hr%t9B3]y݈|h7f /gP[5_Q#Y?`|sB! rյ ׵j5R׏quOZ>u~n}QWw{}gvW۵񞩡}]ȵP;̱\֮=j=`Y͌0>Ag?6Vg*ҟBx'+}݌O#wP&$kA[:)ѧ ЂZhWo 5^KKW7lÍUXֽe¼U__@S=1z&ǯjEc'EqHu K B=k I#ݻ٫IUKʓ7"uyn=^t:YJ`6<Z׬0hnmdҨIҰ CibBȃm$x\b/ Gkhh.ӿEϟ/ӧObzKyӧQӧO͛~zʕ+ry\vM9"3fP(رcrIzYݓ˗/˙3gTߣaÆĉeΜ9}MM;V  ÇW?i$2d>s{ڦ TUUy|>9Ϲ7.?Ө쐺N/etنc.8[L6ds629KN7wѽ\UNl|FѼ\Uugs464JssjJeּTJf[*\m+ٟojlmmmmuCBVv5`:cd幂V͋wۑtyп y'*V=( nՅj :ݡks3}s<ykz@g{aͧFul~G-ROOn8O'ڏӷG}|c|=: l|ggXO5ҷo_Yb,X@kk׮M5S/ЛA k{\Ԣcvb;FLԩSr}y=zTYκu\88ƃ??˗/Ç2n8mO<:A,xަMX|sݻwԏ[j]9x{ ,Ƈs=H&9;w<0c;zh۬/8w8S 7'Olihn{-[9~ӗӾmoH|7EZ!Z6V0-ǵhϾw>_q_v;ZѕgPwGj?)>KmW4?}!%\/YDdOäd8ݚ5kt0GDžz"c]eNpȑm)H>$}lPubiZ,wO56ظaa+?ZjD6ojtkZZZ4ea @>U4;~kBU{ ..T}6ڳ-F`p]k߅~b  О$wݓٱ|sCoA+q3lOx@(0a+? T,_7s\Ϙ^Bl1)C+k(FyN"8dPC_9>O0&l4Im+nwGrŰ)/tihf ѸX>E)<,6s45zb?J\<OM%O#(76:= ӋYAƒH Ls6MXBcX&ǘJte. 3.je(??Lj=%wZizFTx$kP8Em jAOހ>~؆B9 ֤8UKCvjbL Cy ;mj P. DkwUE€3ܨ8xUJs\ɟ+;}sFQ(KIXݛƨ 1 +KdX];Jģcx$D׷X`i @l̏rnm$^9΄zBGϞQ=nfkDe; <a>,⢞jk0B[p($Ǡp4 nq`XƓ vϵ.xHnorJ5Hu뇗 f a[Z:>36[g RL؍?( &w.7C#~B{] UW 71jk~ecGrD.=K@WDZM0倐0\xvqNZ ># BE )&yA}t?B Ym(WIpɱ |2+\2 )l8tl@Z.Be񅋍RSƃm>dIl'N adĢG3%#)?$s _5=YBR#-k"qGP-e"f%֩-ϓ378M9ϊ,_*n;HEBƱcl~ ˝[/sagIE2,z1t:kLș壋G){7ond{@rP>kwk׽ #kXfyEAB9uM4P=_lgW؇N#_nGpp ,ZUu6ȓVӰ0EK7*|]{75F\ԶzQz! uH>upT٣o3P)[^6` -d&*=%fY<^ط`_6|h3ء>2 Pq7ώ ,NsjF=B` 큳CiU)R鐏@LҮǧmb<2FHRqùFXi䎲OmGA}:*u f:@ʫRH.66jcGOpO- 6HKJU:Jǃv,3DZEƮqq7p?ȌK%ȧ$;?Qr6pP7`a^=R_)m>D3#£ _' Iɭu͋C-Rne㯄ssL<ȭ/R)|Lt_1Lk=rr 4/gEr~PnB[\g[{gYvRW' {Fem1{ wL;7&$xc0 n&u@5sCCձm8Heft x{q(aтa?Q%l4ςxmWI׆GC1kQ3iJh,KRO`ʲ4)%b6B8\pe;u)ko)#WSncRx{[sXv195_0Kՙ7>Tp5ٴl3S"؝LX睫[5m Q="u}pϘ*xbՉ#iM+@Z! Ϯ~jYݬ$?5mtu] %@݅:4h8ۃtu3; ΑO1A/r R*5i&j#Y2:$Z(ad@>'z L뇶6Z8|`6"X1_z' F-я?X^ A:?1;h/KVB' vOnFS ƤQ{=kh7MwXQp\v͓O/. N3HKRlK"q^Wh1wt h@3e6N|I;y?8t[[! $,ήLe"z%IކAkRl!3u8ځy?_W)AbCO!rza5Sn֗#<43y6"R߃CQ&>[# BHǽ{vekOTlq(UH͵h ݔ8,@tՂL{p/*L"d_y k,4 G̖bD>,.ok"D;|7[.DCA#ilϟI֬Dq]+eE _-- ڰc^Lq1~CCC9gNH8BkhJ#Z-`VoMa 9r$պZ-hkh ?C$ ^tď9d(8P݅]ڶw[wl;dn׆oKd Hބ(DInI M_(5)6H/Y1 QRk,nXHʉ?>df&6^EJmt{CCc`0ʅv5x<\9Yc}106"״!֏9dl:' 1H"z'7QqɌ#KR./CVgQȬ\ `?d1yuM6Ƶ8ZX]8^pwQE &1frRKi$GݜЕh3'{;;~FK37ku<pdʎ+C RMzƏ7)nҀ lEGyl:̑IoBS%|ЕsTulebA}Aʹ10A{KʘӺtjdLI=r PRg_LbR Şl?␔)![Fo wi&k^CV(t@pW2{hxHGRn͉eCbxԉ6GQd27\ثdS=\Ff*0ۣOP5(rZߙxQZ>~GAeN-jY7Ҿn;n?ӹ"Px}/NW:݊&׾:x" ꭥу;R펔 c䛅љElmG§a= h¨BG_uYnZ쫭FYs U"zM&:Gnu.DX5Xn;}ԫ%XO?~2&Frjj8 yA*W I9/ub)Zl: s 85J>~iI3Yԕ;:#hELם[ROd^GA˩f~Y!En0~/A Km>^WYq"<цF*c:xw|͞w%ehRgd9̕v3v Dgh>>?3hYDkgC(ʹƒԕSԜ| 2Q94(?OGQ34 fccPopTYaW(>@tX4`LGٞpɄaŰl\[9c26U M6f,'C4i?W~psϠ?kAKrŵk@I|>^xs?\`,D̒5W^w DMXf_8<%|8_왉pP1Wlm߃f?4:́_Ԕv M;k:p_sj؎qw]$F}y ,b'N=o0, ~M YR46+!}@~ujctCP.Y(x׎z?70WXFܣo3z0c8RGg0 TU򄽻w"/4֏CQ`[{Ocn]+{{ N!33+5]qpj' r9FDȬ)~: 9Gmx2-?sraG"yvUpa;Ră A\& ?#n 0eed~oq嶭!!DzP^H)>oȑ.ļԶ=Hy7S-M ?8ycߧq|#5"2Б lm#UeΤVbM͘jAc7Z ]> 4gb s 2WRsKg6 's8qzTT[R[w)I95xWj #!nN+zPڔ KgTE,?{^RDݥ=Ru^zîc&D'i74SJߔ&HUG[crͦ<׿~4}څh;lpAZ%XZ;tQ?yk1+Ƴu6[ Dc4Ɯ*dB#!}e>samhG3c^8u9󼵕⸈߂UyB;f "Yi=D =4&|C3g]~WgjhSIXU"1A5Fr4{AljwTt6</N \Rta| i>T.Wo>>xϯY{緷m,J{gg}v~)]s!?wXGFl!7U|Cnfﳅ:.@mq%臔Ru?.:aBֺE#Gg'yXDuSWNJD)21ѵVagWPqȒ s?¶@g")s\T{f3go^w:^"{d#!φt},nyWFKv„X4|VB~,˘_&fjp/WԍwaO H 3I`u1ͤ+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_Wݚw)WmkBTxܹKy/Œ3; LlXZ Vv**ފ"x x²("vZXXh!l$K4Cf1^D 'Q1ߙn˯A\JL ܺy׫UEw?\rw*,+\_ǀ]w(IJJ+11Q"L?_um\\I>Yȿڳ3͍7}u1߬߬߬ߛ/q?Iee+)))~OOOVXX(Q&JL1;ZXX=||;mJ&guqq!WWWryy)2??/ ===r}}yxx cW Tdee+WT̐566fsbY\\ߥӣca)++d?gddx?77GGbbb$;;[ZJJJ^˾̴gY=6ˬ,,_˾liii(RTT$~399swwf$'69::{?22b]]]rrr"rxx(-;J__5O777_UU%G CCChzzڎz>٬4{_NOOe^裾/_ԔҒlyyNj4b???ߞkjNYL;}g@vnn]{=_] O|\ޞ]_ϋlښ7z`ggǮ F}ew6z{O~///>uww;NL ;ނ˒5|??[pc a2iTXtXML:com.adobe.xmp Adobe Fireworks CS4 2009-07-06T16:49:55Z 2009-07-06T17:03:11Z image/png  IDATxip$u˥2k/ hr_$Je-$,-Y dz-;^F)ٞ'yLMIDQ%q&w  }}ȪDPؚlD!w9{eY-,7[-[ x 7n*n1-Tb[ŀpSqoM-[ x 7n*n1-Tb[ŀpSqoM-[ x 72_Xwmyˍq#nL, ?(0 r6eYXXd>QɗAV[i (eˤo2S,B4͆t`Y_^0MDI2ͺ("ndԣ P]$ ]睲g̀eݽwS3WFzj(qY!y*˗ X$M==AK[|!]P$D,D41MBEZet]D,t>4ӴEi0A% LDRi.2L %k$ae!" E V īdz0 [X,]1d/|/~IbUNqoG;N{/ֿ5M/3yhްd_?IGJÓ;?ۣR,u~WzSOOpqdV2UĢX*!nȏW@7Mk_@ 2@P@R]^;ħ2i].Coɉ n/ 'Vez|}L^F4(Y.}"BQ1S@vI\[tww3::LY ݶ+>h}av4?=wM {^\.O_W'sWnfǦS32٣?OZaXBdb] Z[f1L  @xC$RyYz"D>̏~-b4EMj&0~.~K3u'NϥBoo ዌ(zx2e X,B'ᅨl=ͥ #ٽb`7iX*BZ 8>i5\"EeDW H'S@_[Z^Z;$$)JZe)Ʀ(JDg}YzP$N m\8G<.[;LMst |%EU(s%W/Nq};h.Hc3(hs3Q dYXR<M_">kr﹟man۱tl\aLYZCO%\L#M aN!~dö}793{y䙊i De`d:I2ALC9>F<6,{1[Be:M:iR t t^ ٍ*Gi8'0zO̽%y4M^[%;7Oqp&/7EL3%4)0;=A4[fKCӾ~#dd*AW{YqkMuN~1MD147 ]]g. Hx\ [,ô(S>su[ve FHB.M%$9JI\2 ctr7Pjtt2;=L&N2emtE9زaJ8D{H!( MyfA[g?#eY|ߴ,A@xX%]b@r# 2^Dt[%,-$T)j,W,rt).t@qEJrpIrUUELK@qɔcj9:zyܘNJ dt.[5bY&KR*D.ETҐ%]$V^^,rYCx( (JȒr躉ףR*jen\nXH"膅&ˢ;B _ee'no´nvib"bZ"`" #KX=Z( yϹf{iV2 %3lI߾X~Ւ#"v) 5uY,kC5egοZsi˔'fyO SL1UNݨEܵzT?P?R6k?'x' o6Y2 ((V֐eБE ò~0-Pk&dJ.UT*ZV)JJ\BQ4MG|#TfR& $YFt\.W%WUNRRVSiuCX)S].R UUnbe\.#I3B~}Y劜Y,iseʲigǒr;BЄήN$mmqB LOTA5 UQ ~R$twv3=5E{G;SSttt0d"? RL,TU% IRNtfNb-XHKM_(D>0}a4QUB#L,i:;;Fttt055E{{;sssA,^MEIRMMM$ ژ)#,Ht:T*!˲-Vr2 @D"AKK 333}UzO"xWUe!4]IN"?ƖڣaH XS*JEʑGG_˪LD5=a5-ע: bsr$I¨|6n(}fdDAT* bbbロItDQ"^p8L0DeG'2L^J$!}{YNkk+O<[nŶwBFByx/s=:nT2A{G;>t&[usnmٺm P*e6, j 2<2̾{i iem۶399A6%+DQn{;'O+CٹcMd2A<gNaÆ $?<Μ9ƍ9rdHh eĪ|ȏ5&8וk@]]d8Q,k͛esW b׮]:qRt]^vP(rRۉL(JeYD7t\ 0 26)&$"i!RT=(JEQvOmKqx1-!J麎$JHEL&0/|/ 6mS\| C7$ Yymn,nMא]2tRk~Z& `|t>111AXV>Hk3,3a4) ȊL _jExAS+ۿ}1<={~ a"buQ(ze|>9=,J ###N~~7r\/hx<^WFss3}$ ~?a`&8i,]]]l޼d*( y:::Ї>$d;vw^hjjb::(\#R@ (ٶշ ׁ80Ȁt\.{vٳg)Jlٲd۶c! $qy{3O?úuwy'X>B!N:0]]]ݻ{lܸ+W 2 ͩSعs'O>${/O?4eɓ'r  X~==_9x X|>xf:;;9q۷o祗^{LСCyraisR{)֯_W.^ȯ}vyf޽e{]F(B<QN:}<OFۈbb1N:ŹsPU-1`-|>8$3T*y/#I2q{$#^gݷ H%"U,tΑɦ8|o=N8%d29;:, ;`]\2L|>G.C]|>JOjxǏg>Jsss,ҥKr9FGGx<3==(nR 5tG200گ23==M0t ۙL7""J4uRu۔i$I;<#<2ڕ+W@$^/H7299^X,a<Pnrv4 ( T UU^+J9ST .0;;˶mۜt|vrvo e@I$Q:d2YSSabttխ2n˗/ىis  ň'U7}}$ {MllΎEr,01L r)HȕIR'chxrL$R\l۶~;v8CQ46mD2DUUga||.]D\UU| sNϲ,nv,"Dxavva.\ؽi_ /# bљ, E$q>.]ijjb׮]|>ϟ4Md2X4xYQ++! mvh&l+Nq`v|$Cd+ɶt w#,N\EMӜ|iWͪlFݼt5_\v昫v6W|G $EYlH3!PqCk`{jEib תP^lΕ{`GK`p2^X1C,g,jiPv-r*MA,hj媛\nhrϺL:{vu~V7b =WEmc/(J)Q˲Kc5ÀV!c *$ =i4`,unZay?3Rʒ S0-Qct" V4@uh F <_eyf^>RmZkaRak3鲝‚ ϫ*VFM "%bHQ+m!ro{;[6oG?z|. (B:2-7 == ]"a&\Ap3Rb1o7J  ~ƵjY"t[z_X$^J⡨sb=[p~nBOOO˗hnnfeؼy C×xfLOEeN< C--r_M7ZϪ/dG ذȥ+gt52oUfZw ,XdӢ 4: 5r/>R%I&mwzkEK DoO2Us\7]Rі2-[5*3Ą&HKva&ex[E,*k4MCgQ&lG:jj/Zq^*Eh0 Y[E2b UK.ga 0-6P)Q%"ꥳr4[ZSo*Ca-9Xxs VUBQ:cߴ5ˋ`'M]Vzn}'u#yu F ~ LL%Pezba`va-2` X.}vV".,w:*ޮk X]6w 5 j/Z5(\(ρ5ʇ%[uê XȅZ{ҘM1v_e--2'Xo97+a%J#fZ{I4|K(,}]p?Tȯ`ueU%(avj֊a/z"/(/Y Y+ eaU,"Bh5NTiw j @Na1Ky[7r$X^4\RsfcԚpw1q' ~zL&ѣGW,44Ć V,mu}\)Ts_ֲHv c ݮWb;mmmKuKo;|5?C;&ZVi(5 `77 Krk6A.gϞϟuQiYn]ݹuZZN['9rdM :a':ZĈFx[M_2^)c/Z%ԙ{*+ [vXX*ޒ K啃~.\{Nżt[Cu󕛮'IkCkk+>י%` ]._/Vπ22O=o&bt:'> |%HH"O !X.G(RG}t&v~_%Ni|s[Z9wy;%K*zˑK͉fyyy ] u?br9,<岆[X,.WʩmZidҰ#W5EMVFJ=h##ak[Hv EQjDBB|`3x<L\%L.Nn@5ZА0%X$=nKa'px܅WBZ^ldR7\jXwu5ziYL-3-k,ep)F, KM`+k)|{Gi tE3! .+[B˪v%X933D y6l@TQ{@Ӳ5Y_EVS  (K&}^-sElNwxLh4֕P.WݴPQ'Z:]s:vp˲ּELt/2쀆M\;‘9,VG8*rlVTPS݉z4TZB9QoKuk߫1Y(7\0 q).]`E`hh??gnn&fffP`0H<wAf||}LMM d2_[sBK60eݺuH=zY h՞$_%4Mc\rxphhq^/\nti8pQ:::x"CCC\zHi[ (pAΞ=Kss3\t T۰yuʘdjjiʕ+tvvR,Ql6atvvrU0lܸ{P(fUԇa6o(sssJ[lȑ#455qQxcI+.n\.]QUY<{X,*Dm۶fٷo/_0[W$!B!8?O  L&% QN`Cͯҥk:~L&"NbXE4rQ,IR$I"nh4F6EUU8v^zmbBUUIӄB!gk-Eջ PԊ4JIJ,Bb&(Qd2IGe{`0l^&/q t]G44ft]5Z/2ZVQizz*L4btΒfd2|>'O4B$I$Un`O{.4M&xhnnv6 ('H9Gj!%8/null,^a]#|f(i266Foo/lP(Ĥ]!`R p̖۷ogvvАSO(ٳkD$^MӰ,1d2tvv.چV<1ApdYn]J;!I`б 2G^?__9eHD8& 9{9#chhYv*b]v}Y:r94:Y;JvIR~G9==lyz->(x^ R)<rٺJ#;_H py<4MW:<^ -L&(P,zd2\-,pI.R 4zJW[ZjL;c0\'Nz)JyVIKkK+a8{iPǃ8aq)FUUx UUt:#9d&;[*RGe._])x:r9ZZZ]b:?7/Y$ZZZfN$vI&F{eyQfD|nڊH$hm-iZ((B$P(8LnurBQ۽Y&&ikk0 ڈFOu;45(v Ôe ȲL(rޣapx<<gUttt 2MMM:rdkk+R UR:#Ap0̡CLOOa.^lxWFGGikk#K/DWW rgS徾>N:É>|R\.s:::!jM;v@ @4e;Dgg''O8~g``W:y:::V|E0455q)xWx˖-\lt1ϙ3gFݢ(:;yVyWiiiavvvQp8ӧW|/xE^ۢ\zŠjaq/{kO` i&˽#k3Ǘ85 ޷=V 1cs7JKo4p5[be2K.WkYrܛƨ^0^sc Vy2ocOqHo$cBh9ci8|X{yxXQ4OXK~+6S)k876٭}1᚛FzpgTzDUmflw -E[גgE~6V/V%ύ[Zc fw |FF 8ba(#0;w׏cNt]?!y{eh4ʶm׿$IQ(|KP(x<RKvԍYBA$tMCv=r[P(pn"y,U)K0tI-r B(.bGuS,pbP.Pd#i9[e K2J2nMXvS(q+*r UQ%LӬs%Sב$!K2es st\'aeUޣ㪼GeT1BJEeʲȟ:u'ISVme֖Q{zTOMM9eBZo{KEpQfff긴{(ڢx^oho S՟FjYOTDʆ:}]Z^eAB mDLD\WȆFIѪHe˅(HW㷸0RǕHkZm\/8CNI@>oɩ)2 OΦb5553re ܊;w2<20۷%3| ;!`p`\>oOie::vAl6Ɔ g||u9rME)TWL]k_B%~W.qV_b**;ܼTMBza_5ZX, kC%p³">@0o|TE!6;KkkGv}v~s#Φ)BA‘0ws'|> 55iW^&Uvǹ;ijjF=L$) ~~^yDaBh }=P]՞N۴3}ߛ(! 2=5i㥗^Fe.\8ϋ/(n122:DI6oH>#IJ, mmmW^"WǯbMK!HnFUT‘Díd+O=fЇ?Ѝ!5zNk1#ל[YDKdh?p0gxGϡu&&qQ$сklټuxǑdw0<2B__/W^x"Φ JF$db!_Z5U2YSIGo||d:G'47p1 $V^"7Al?ja6_+X߿.k+KVCp (!XuV24i20 :::p{$)"T,qUW(1/Z؋=fZ&>@p 2`Qp\33 ],aQ0]M9Kc^Vh.ٍ,)P֞/ް%6JS-)z+!(9wu477Ÿ{Opd$MM|.lij a~[ U0 ^Ya=/t͸,T 0+<_Gc͵!y^fjM]˺!QZZ"Dgtvt1==E{{GW -$SI>?|^;bXA6nkÑH sHD2IS(TqwS,p) a`ڊO6&j"6;K[kMg[;3ZۉFiok'>7GRiȢ(J>tD֖6tut1,-D&,Qs9L?@" 0WbD"fggD"WUWUtCTDۙכq+%ɶxɤSf$!ЗH$hnn&Iӎs"P,#B|c#lٲCbm/ؾ}_?!"]ݶS1<{ q6_(q{(n\FmCX1cYHubDC5,/`cQ@@:RkYhn:b-=Yev"Iyh=~:zu9xœ$:k9BTfjjPs ikogn6ǎ 9s sp9BM!n7;v2-ׯȑLNE_~ ?/} vwM&aӦM\plP0KvN"2Z[ٽ{7_D1w)"$%X,A5|7fgvu 1-pcVMYX\3?pBAH&EgW7r9N8_yB$h]ѱ+syW9~(i%t]%˨n ~(5JMM!2fbsLLL.㙞;gRHT²,GFlE ٳg$Jpb,PJʼn6{VggFj *[w?%qU^xEr,1, GF6ݵ6:7@_n2L&i 51ôL\Hxb^i`VLDY.p).Zۈ7ۚV8L"Du$qDI x) $RƢd; UdDHV+0 PT(4 $I4L\-p%OI0J* "岁 txUexʃiϗ!uV2 %O)KtwwR\S)bȲ̦'LOMU]K?'x=v$۰%elL(ih3Dž( vځ똞­-|.$IwOΟG+ittax&l۱83͑&242aRDFunΞ=M:O2@Q, tEuit"#>N8κ~fs8p^~ !dl[??~w/7vLt;wp z{x[mh4Jt:Js >_r}]w7qY~o?Ξ>K0|'> "9}`v֎O'?I\.\6?N&gpȇ$xaH/_Aҙ uDgxȽwLOrϽp% =2HLbc=FQ#kn#\.&&cZ#&''9s m ]"#pE"$ 'v ۭR剄#U0l<Ε+Wx  E;:/g{e8s {y߻(@ϲαDٵZnؕǞ63qBz\3i{^鴪w\SQGDR$xO }zX$ۃDܿFŞ9y-bc'~ʱcO8 Y*`~z|amciٜKzAqmIDATwanv%2οy\aooLF# 3jgvW`9 u},['m[#:PNٸ;_oNVzB.MNkfiM&gŘ06:9`> Na ?/2++,-UxW)ﳱ8Td:2<2̏~7|M#9z(kiLy.oC&''Me랦f)`;6cTVV8y/~9c[6C!~Lgjjfk 29n)+g)ʙ+%N؁mBrNƎrJ@|r=6i8`ABX,rwV<9N8AP #FFݥRRi2Sqv,[[5rcN(0558OlRԷϲٳg_qME*KK>exd_NLgΠX;zr+"4Q C:U(_T̚eDOiaH$31O=AN<|=xȕi>uy(eaazCۯz{KeBm{ PخoUbzr8O_ryk~Cyv}z4ڞ2`>£E,1K:sl.G__=~o3VWy!33ewǿ?.NF'ahSF Ņ3 /ݧ63P-BBj.Ӊ>RtL^zy,1>=mbHZ6ci88 Z ) 4\@cp ϭp-{P/Jllnr؍svv|>>FL6d4&Rj.~=Gy'DGFs-t+KaZ˲X[[Cmos\z>951Er0yTL#Yn `RZ.Q>6V7(gAC%jLq%Te\B4UB:P{}ދ\:Oc$6wWr &'&ն>C2 aϔu ʶ{%.S'ՇM:h""BSO9vt6's'>sD2cQ MmI0Mc~1 /iq,./>GY0Ifd~~RiGLё1"0U"{wt'&#ZEJY\\Y"[qM6s=|_-\c0_HiG#FGG KKK \Pmv~Vk NssLM<##,Ut{Y񷾾AOONDZA0-l5c{<++ X^^eblJJtН+|hܟB2 >1hӊP(,J+#:긧˗/7 y9rwPTկ 0 }r9z{{^;:y2 űu ǹܸ0imG3DHMxyX絲pmsu+,,D|e`)K g[v@v鍀)p]2r2dK/A$be&d n:7abM@ZӸ1!v_=ͱ:?(١ MFcgiڎ^a(tnji7ϟ<ʲЙ2QZ$.>0>qJl{3zv=13mŶO~yeab~L#yNa|ippINM* >Z7">/ߖm}nJ#*hR?MD.1k/u0zl_&3@@|2,S!# a1#[zhzbM$6Oۯdh7tjU_>m, \$\{ݢ3b[^@5M:Bs&mwˤ⿶#KO.˒ɒzF*yO@<1a|o5\ю1㾠0xĄW·y;80ҟ=tfcV@_lO4aTt47 =s_T]p,8rT]m)Ӂ ©ԾMO@ u)CC`c< lk&:7^GL:B7C tCp82 ׷*w|\>A@eA>UuxPBÅg?BTQ>-<)\WUdlj5PbuE8z E iY!QQEE+#aFdA"'/ʈ/B#ߏhS2C=dia0BeuӜ9u9+$ɰLnPAX4@-f X`iYX;I θI W^czu?g$=`EhZTl>m,!d >=]'HE:vem~"l;m|x+I3ΤLm6=`(+++ȗGImi$e-tyΏ5V&3b:l5_Cb;m7oSOnoodplۦ8ZQ b!w\;9Jqz&cͼ 4v U_ ᭷ {,//sm67uGhF۩o[+D#G:<)*/K{ Z5J<0b(gdUVV\\.Dbhy`V!LFꡚ5_BsbB\T)knAck3oAE#Et<1џCIs0StPm)9w 5wc &Gu#.1KK],f~`!8F-F-964t$|խ'5۞KUH0EW `"]E*)TSt*RLUH0EW `"]E*)TSt*RLUtov;IENDB`jansi-native-jansi-native-1.7/docs/src/images/project-logo-full.png000066400000000000000000000033431310262757000254030ustar00rootroot00000000000000PNG  IHDR(NIDATx휁8C/MhH-ڔny2!&570000000000000000AklDΏzs~дMP:>`?'x/GdT\ 1'gNPZ xYdds"#Gd{ bLOD Gwk;@% /L>XOAO.K3'M/{JNէGV9 0Jѳ;7?>%͸j~4 xnm+(_&x'܉Cy*ܡ3hI6ϡjN&gwz2`$]O&|l[.K.W{VUؿϪn5Y}&_*Lԯ6޼!_뽃)ûи9v{C_{MNQނiI->%Wuw>W}>U:EqoF9۷93CW(&etf>=?Mկ}ΌmfJ ʪtf>=?Mկ}t4QO ʪtf>=?Mկ}ΌmfJ ʪtf>=?Mկ}t4QO ʪtf>=?Mկ}2K)2_TbjQf/._*qy+c4/^RjQK:VtM|-,jQFRa(P7E]RYd\iUT*v}Y}UtW/?:EuTu~JDѾY_nӿjnOÿ^D0/pQY~TG:lh}Gd7+ެuׇ "4yP̓t^uQtPpѾ.Ot+Z?6G<|U:>F^lPgٱ9Y}ԯU頜>ڗW:t/?Z߭"Ҭa@/ɣU4 =b`s5O?뛬vl))J ͣ}Y}UtW/6N]Tn؜>WtPNT~QE:gGY!PTgmY噥3qUA7}M?t!=ԅ~X’Hk8R3*h+䞟srVPr/;<5n_)=e\]oiq!rDS?Iת'5^(˪^nO'?UCokp[xPf}?qECog\MZO>}z܁qQS(0d.b1~?6^B& r,o~:d 6\ꗜҗf ^1?`G5WV7]I5?_s y*ma$_-._n> '_A<.qɛiig~>RPCT1'նX䈭_؍nO+2ǴMywS BP( BP( BP( BP( xuj8HmkBF)38mkTSx}wƒ>&7-Yޒ{2sf~t}ryIQRl/> Hؚ(GxxOUu7f .r04~mN_S7x?:Aߎm:>:akgmoAǟv=?Swn9>oi چ6<&%|;.#(لK(1@'q;'#1yjlMAslA}PCZ]:iХ>mZt+m]n}Y ZCV8dwC`ky҃Ήq>mtN,t m,w2ڶGo`v %Ubf3cY=iW'hLll$]%3 ,a3x\i0x F0轅o{'%/8m#(GT .~fL1i:Yh9Д4- MIZ'AX) ZdqHqH[d}>ևox*4|{vky%-jimq!^.n їͳl? )׏֌ٶϚmKPz@yjH>'r"`uI|8Y 'O1Z;c9 !!DY Bؿվ|}F`rL.Ik´hfPs%9[g A3ht~' z,8J;+[3"ҟF٠%#K d49L(kGCC?d2L͠T6f39æи3`ypְ 8C0\>  _8?p_*$0uQZ#&՜Ok=Q?J%>QT8jkĬ(F6{g%1Kte%2N5cQPqde wҳفSaD]\AH4bgEbYS Nkjg\>@#T æBz9$3l^Bo̩WirsQ+4ɁC6C"`zSu8mrzR2ĦY%^q۵y8[c{) ' %Ӆ,0 edhriLr*:~&cE ~wHZ[' vBzgN&pw# /%!yoEq L$~Cps=ٺ*}<]x\h#3.)KN)pm#}+{*xRxpf%3Erq"}W qqmG 'VYVpm\4A`aw}zlp=6[A!BƁW69)xc>fC9j 䡄)'R!Z1FP ,,S7cȧnI < $:Km#Wvfd].FI0&5aDPqSߩR'פנR#u K0P  Y"ĝjN)iI`̗!MCz@ 4&USf hPI?y:SY)v>E}{b~Y]BjlM2?ίaI>V?jKw_j>Nbc3 kI ֔* da2Sғ&7uZejWzh?]_e_lQަ@|.e w.;N݌H0ܘ7χ07g';\e; RdPؒY5>b U7hR7#*-F!G9LəMf#9z *MyjIXC^p9mģ-$$0sy?ɟ4>ݦBaFi!|atQs,$߫+&(M=\`Y%mȑyR~ !PNby纉 Si8+] s6F Kp W$4g(l~8yl!O ~'HOSK8]]A K;tJ 7A7>c ~1 U)^rZRJ&lx (UO:"y| {O +n~z .{ŊN"C`,~-D׍g'<bYUfUr+"\n}@ƃb$T8D]&Qhns8~l@f$gW+cL7xI>49wbWèDZDo۽e=)ˉar*iVH/|ABq4x9iՙꕴHKCVFmuHhfJDŅsU^vݎس{vbow = `Qg\M1#h'|j6uiX#ȣU-YpzZ$iM}kHW+_^)۵|$~wI Y8g\\:, ř?f7Sw;ƹDyW5W ]1Zڊ+:>mb芡е+@KAٛ+v^:;\Qs;go3tghb芡+Л GWt+863OϧETqg/͊+ή8;l&wF̻i]˼>0tyW1tEɼ>0tyW1tE"F]̻+v.?;wC2*:CwG2*8:GWwgή2*ή8;gTk:%Z-[oM͆X[gkYeŖ!~n3Z2ˑ D>m't9ޫ|sVOkºވkSm~GOq}C,%iL/*{L_'*cݞh55zdە'[CоC _e_b芡+be'jL~6rE"f0 SY;M M"xg.||Z1RdzӍ`Xk{mm3|cw+b?`&b>}&@s%ڞG8(fsYZ -J ]_L=O}4up- H!4 I g[LQpUS"URF6we;t6G:\U^x}5I^=2y;//WjIjX<Ԟ2L~x Ǡ#I 1U4B~A^CF? + -]RWWȀOVJ)RY썄Mc/s9 *dS W/C;y\.]ـ1`,mCO tjZUMz$+<kT'&y߈^iLuIOb#_FOR#Y'>)rOyJksiWT¼'>S"ih>GiAյqjNU' 4T'm&a v~d|H|&`{?)t~vy|N\qAIOmBڸmf;mS7]ws񮃽No&Î`\="^_} \]ץݏ3E>᝽_#~{++y(elx"E]uhJ1ljD>-Sfd%F+٪C'ƚ} ui6a#6ߎ~8 ?⪘IL]&ؼ,($wu}ftQ-^͢Cm!?C3=r#_Tg5L2V`@O}buѨ)e`EE6IGi~ġE8P֤1J'何%"vRFQ}OWl]"[}:>G6BIWˢvgcSw\ۃz}9͊/ q=[N [[|aÌE/JĻ(7qX R#6YOk:e8k/w_F8tMuzmz(sz&IF̈́G4LHtj ?RVZ |40v7%h-dz Y9Q7h*Q.EQe&&UD*j+Q>xl5o2{8X#4#[xfFphB87+d]cdc:ɽ&jVA1^b1 @[N[_{/By?ywѻ^ʟ;')w:n6 {t:gels`xֺ?/QN_p@+i>0<.FYv=bڇ}%"Io #Ӧmp zK_S{6=~{_x ];2h=B+78cStpcI=8½sfhox72*A[J7κtا9ͻgp-8>o|Z h㳍6mq=9;huJilw/iwvhst;= '=N}FG3ӐD@G$!1f UMJRL݁][jZ qppȄ$yL=1m6A9akhtBv=GjAwOf[{mU0d߁y엿FSՃ)ekjlMAsl!K!.4 *haɨ6c~Dҭ.1pdX?!G~ls␶n P1oE8jXXv48F42q@?P}9C0GFlh1ha:CG~l08 Nbpw MuhI HA&ѳ@AZ85*#=jbN#PohNTig#ɁL1SRPcn(\$%|<7J<{h,F[v@ w, [2~>GB&MbCFr_P?_=Ǒ)93l$#SA#O- k ?xf?1>Ƨ4@((4^ 7ޞ^4.j%{udE"ǝ l"ļ 92O fożȱPNby纉 Si8+]r6F Kp W$4g(l~F["Ny69v?Se~S[,&7[=rαKJi(#99)'QIԭ$ZD%\'ee$g3ٕآp$[Ts;aT"-"ȷr^QӔ0q9HGN[> 8~rLZJZe%D_MR/'VVi= Q?ŝ'\>3NQNM&f%"|e٢Yp\V'-''ɫTDNmJG%<*)'1ٸY^^-jӔ5aҚT*3ES?zӌrDŶB5WwHhfJDŅsU^vtĞس{CkQ>jiF;WUN3EGUwl9Ȫ$ -Vywu-yC3KlB.R֭#3^7-YT|HfpƷaɲ2/qRTG {ئ$mUmufH6i4nxRKk91SEwiWs(wyI8r_o֩FR }cD׀cum\8tfP{Aߎj_P 6vf״TFߤKWl^S[ZM yJouK:J\E/Ӻ&| :M&.eFҐ k;ߒZ H!yؙGy木A\eHWA Ȇ_POe9=p`KXS}?pc٪ǮТ1BuevE]rUf-}V#$F3+ۧ #Hj7d?ҼT|!֐3R5Vr#Rkn87H|v<{UCW tb芡+b>Cbe3tb芡+.RPb犝2WT\sY[*]1ڪb芡s0,CkfG/튣+8:Gir\qvKl슳+9[dQ=`*b:;Gyv2* ]eU ]1tv2* ]eU ]1tǷyW}`*b犝N]̻+b]̻+U]̻+Ύ8gqvwV.[S35Z,+qfyys{d#v%nsr8+=O ]){bN*ߜդZ7b~k[ߑG\#~/? gIX'Z}!v剦Vħ1}x9!fh׬b芡XbIħ8%Mbt H:T%~f8{>`$CisBk Vtc8?X@[[ j<ؿ 뇽Oz@mƿ>\񾃶'69{AVBKkCSrxOS=y>6/t˂o#Үq. |BSr\UŔfHѽDj$j͑!W!{׻<^_M|Lˤ)hZoV23g; ӽ3%1Gixyk r _אJdKgxU82zS~(##Tփ4{#aX>\(Cd C"i#ŕːkfNt0kVU{5I_8(Uk>pI^7b4Wf|ғWHV룫>Ii~ܴ1q=U0ϔHyϑ#:jDFuPud&S=Ub1I $g_h329,y {]GY.zbz{buWaq?P>i{;pO8TB&$qid֦OLOHb~W!YM&hPSc{'4j:0~J!#mQz(8nlM:oQmq@tQ:5i| yo%g|IGx=Qd_S[WHVߡфm"粨ݙT]>^)vN⋰h\Gֽwg5_X0GhK?5.MD\.q$ yMįea~3t"<ĮQ;λr6]Sbݿ^e7w}ZkP0liIr#Fw&\za.P^}3֮(2\fyZMLo+օz'gPKZJ,Ų,A{k'b(zMOe_Ÿĸ?g\vI\* ߡ^o;*)oruGgH,u=w_V$_k'cXx5dY9|Iygz&3? EԮUW0?7yyVVU,}vKP̝U+X} 5f+#bኅz,«X͖?Տ>Ū2o",c3 Vp]lĊ_#!&1W)2&͢Z9trE,ֶ}G)\IRѬn3!:4R><+e󅷕m. ̆ cr9!a-,?#٠^|BVb Ǩk c|eege}" yk[ͼl{L9o1f]i[ڽ Dk@ 7ѷKQudA"uʈSfQ_w ̶vyLO({=p+Vg!Mw{,ޢYd/xƧq=M !Y:٘`r %8EP{X̀+>wH-sUaޤ7fiN6{xS==a^=/<Dž.~!z)n:1`$n{9~3`e?<›wBP]-g]:?Jܜuv3ٷSs>`]8mvC^U:[};;9vTÓ?GZ'K>#cxqi\m ȃ#Hma(Բ.8 XЀ&O6]@ P p {>&_j+qQ6m}ocg']Z6Ed5MYi3i$8VOjE@KW+V HmC<<+Z #AegmsOɷg&gpy^>`q2 B<BJ=mkBSx]N0QʫajohlU&fnÃsfd,>Op3]E1T яjV2ڃ-p uyGpodl`d/e>v 9]Aݩ6ٞGÃT{1H QlH':iуŏpa'D:__CEymkBT8x횉m0]HI!)$FR?6c>>~sm+vuՑνYu8uN?WP>1JsWiV_uKEϸ/rˆ_gKW]ױEYcl,[TYHT}xL#}A GV7^}>iҞ-i;}LJX&TP3T#ߨgJl e'=?͘ona|7>?ǐU%;/mN/IfQփz{G}?v✽3X~j{zTAO^ʰ>?sy|G)PEݭuVZZcQSf1̐T}* gq KX0&6o#XSJ!~#X!:4x Dsdெ wJ5AWb.:Y_AA 6!aHbZ֧RpL 0/utq6ܿIIIYMc\r@תU˾}wHPx4ׯ_VWRd6رc^㬊MIc']ߕk?PoCbd"g[ _C|р ,%}?j|@o߾]:|&xf̀7^?W^Կik^iaȑ#msA~7I.b۶mb'湂C3d& |GPM}[׿@bmA;]ヤ?1`!7ef 8|p@ܳgOo?HoG-[曮׫W/ף*Ux||_|a7֭[6ُƽ[˛~>}<ֳN{Ϟ=&*U2nM6wuߊGJZǏ~A4aaaYj{L)Eߑx曎ʣ=F2޼nsx}W[(i7vT˗[IҢRށLHkaԩS Lvg 'O߾}{^bE۬_^K&KXQ:Ck(a!w]޾}L?e3g8j'*T!!!f-HA=C}6ym{̋p-fj(>c >m4[oy,4H+..EEEŋ999%??_׿m[f͒> Oyioܸq|ƍr?Se˼Dԩϟ:xbDw^!CHfEBo'Nnj'L१q8O2E ٳ͚7sܹ{?s0ޮM;VG{?{hxaÆK׿I}@ |S* '? ί__B8>bp.]WgΝ;gʟ8K{?cL>;ErssyiibN9_ȿw޲@X,[̑ 6sÂy`laNxh"yq?$ "A?=K'e esU>4uԑ?Qw `a{oJBW0O:t_mG~SVau~KJdd>PHO+[|F {].,}я Ν}C/ 0@'Nb-ĢݿNS_"jZn-x}WsŎPϜ9SO-AlyfATTJ|Vk0d<%bcc%xGh?+W/+Vm?>7o<_z|Μ9|͚5z |_z5_d oҤ ]NhH,{3ʯ]ܹStӜ?ܺu뤽_;YW^G}$r"a#xvl{n9v6m$G ucQJ#yS|2gϖySuUsX+ .\(a&)xѻ I)IRO WqF{o|oSaAE( O), qT}V{ns_GFzEGlRCa=}|֭1T}iߕȇ:wKn OKJ6le`aiQc}TwP i#(4`fj'N?ʡP߱]G*׿ornT~?}ǾoVCyhb4t}a5Pi'h~O5<F,$?bgI˚G 6 MOyB[ {|>yy]+@[sU~n]97ɖ܋XyIHHW1Wp6jK'ٯ/p~ӇsP{h+X9O>nH#^h;=ȃ#s6Vux^]z+478܁zឋXMhO玝9c+_6#?" žwhAP^9҈-κu jNTyJBܔ&h (8xbvE˼)))b}bbbxjjL5з998@f͚)>ߡ|5&"e\73BPQE>i/--Mﲩcb⤯DVZ5i5+>,l^XCyPFi?@i8Xj&@ }c返gA we,XSρ=<3mdzr/lQ3mcss_;浶Lgwo׻gI@XjjgiЃ`0 `0 ?ϟ|:seQ3|ӧO|:2|.};7eGFO6_Qv]T]^ˮg{>pjzkuo{yye?{-x/ D:3D&򈼹e^Hyi#/OGzϪ߯_~ :sMe#M3Y#=2 QЙ[\s=E8}E>GȩT ڲTg-}VfoSVwzV}./>~!?U1<#}=F[ ~QڋBN..+푹^edLo+[\-k dW(}6q$#?z6Bөi?L7!3O_Q}Пuo[=tkȋM!'}/Ƈdr2_Cﲨ: `0 :8o=+8-4}۞cĥXdq{bUq©ήm!ƶg*ΪU\z[GA=^+ru{LV U?)V>ғ)x|Yҁgi\yi^cUo*= !TY?rfgWsʽVn*VX#=Fϫ+[F~yH\L~[O҇h5ݵTow|Sfӟ+);F;:x )/OS yUo2e)Ve3'wgGg=J^`0  ľu kU,Ksؑ5nY,bXw{ w&3QהNQev ]ƷgcH˞i{A3I8hwduwUIWq8I>+@pQşGcZ\ƪUߝ]/:3d;ɫ:gB9R|GW~w2;fzt|+i5nΟgZY|<1NyŬ|E7k?z/k><=Α}N΅>uWydʬdz `0 *\?W8GY:Dgcg< 2+'W6qn؟{ru"wU쏘~c#T?+y{Q,,^qF/Xv8.֩g3}ȸOP ~n%hUG4(_sn|W}Tg&x^c,Fѭ+ <#+}/Uw8BRh_|33!mr\7U9m({ѝpvew[xG]߱?g;,nҽow8]וb?OV=Z_#ve?vN_WrYLo;1g9pV^G~>[_vNOS3 `0Q[ veO\k^8֔v<Zbz\Opbn$~}oz3ј mK vU]^iNWA#x딫jt q :E= z%օq)CcYEqyRG-+u (K\hP'*^ء^q=m=y|Kvūe\rȊ4={W1;=ݷxp;o@>ȘT\Ԏ+C=*ɫ|GJOCW]x1.ﵠ9_Eб Vq)v(ʑ}[GwǺ{-oSdו_˞׃2;iT&w*w:g׭SOsj%Z[~_˯d֮+w]7 `0]kIu+eL]ւoA^;=GR?v쯱;<y o$N1紈=:ߥPVu< <&3KyC/4r)i=*/|Ύ^]QNН1qGw>ù{ ?Kv:A}E:_n+{u=rq͓̳]>>d}+|L01`0 leg:׺񶊝`W,3O?]\9P~[kOWiGc~)-<w.3q}'vuw$Vnv(r52S;Wk_Kϔ8B/hEՠ'9w?K;x:x<|@cϽVyc@ۖSw8Bq]=2lBe6V}eR( VeZT4ade2ޒ+nYBTqSߔ<[&=f[|szP)G}{Zׅ3n7jpWwftEw[ǽ;`l? `0 `0 `{~i`oLy>uoi\qK|}7Svu9G쯿c¾#>,jow{ՆݲL=mW2u_8دjo?kD߱mw>#}E:OۡO;y`$j?tU mkBT~x흍8 FSHI!)$FRHnw HYx3ꇤsaaaaxIǏ'U{o_ھgW9 o'GW {>~Jlo߾)*/N\ϱov[iZ_ձaJΝ/:6O- 92b?Tlk%?_21B sY5>:>c=1Ow y^- ڶ,XzusM#גU]>H_yYv!ۉ_mi Rus]Xm_g)YY)m]y,m z1aaaxEߓGקo/Y\k6xjgH|yu.\aæM&wk#ϐ$?]Mo\Ⱦ,/ڥQ@~6s?)}, l gX #vQg Bٙ^uのuhm?}{].~}v_J;xogJY]޳@.)oqC?}>@Xߘ'-(W? źvƔOʙRv[K?[A}?-wmՑ}g\=c}M ggg DŽ-B^k_g?F? v0||؎=ǧHPgs/hؑI t~{n^}ZyD5XWvO)"c0vY Z|~_%/,p\ɹyΰZ/;/xs_9?Pܯ5ݻ\[y|č8gʱL{? 0 0 _k3>z_\S |<)b|7aaaxn.ta?l^Cvkؽ#~e)3<3^kdlc&jK+o"e<.ʞ`^(3zu l+6v<ï k7]/lc[`On}򚄫 G뎱zt^v2)?;Wmr5ocIz?Ozx{&!ez."ѯ 1Gg{+ҏlw<=}GݽFƨ^)zIpG K֜{{e G12ۭqiumf>.}~a? 0 0 [u+7Svq֭y΅ ?ނ}XwŶv?ߩDZۓ-q/?߳=<~#>Fk"qzrQo 9r,nY[;o:)@-`ק-7({߯S@µK9֠ɸ>:n3 _[_*mtcmC>qSL=<6;ǫsaaa{xˌ\ފpx?0׋#5zяc]x^l򼠕(f:~٣^lin59W~\;?vn6erUbS~v^U O7O(|;+SG4|?f*?rW~2oNٟS9~daևmH6mX[J~s.ym4ٶO|Bd/b5ɿyU? 0 0 0 0 0 0 0.P~*1@G\⟿KrKXs2(ߥ纎J8'>X@▼QQbqwx b)_K|v 1M6kee-2Ǜ59?K^E~9ϱQﱮYF8N?~;:=J<-tĒyNAgC \NXKs)'^Kg\~2}6}Գ)n]Or^j~"{p29w6/.z-v:+M{WJYZ굢`% Ҥl9ힶկ#OUz+U?;sd~vND7*.Y+v:ye;8}~|+ÑޅN9}{Bƞ#txխsXɿkSV/uJ=o G<ջL'L:D]6jfgLz/+ؽ[{rCMYq~[{yy czA;w9zszWHVax3 ף*mkBTx}+(H,"H$"#X$,QԈZs>U{ ..T}6ڳ-F`p]k߅~b  О$wݓٱ|sCoA+q3lOx@(0a+? T,_7s\Ϙ^Bl1)C+k(FyN"8dPC_9>O0&l4Im+nwGrŰ)/tihf ѸX>E)<,6s45zb?J\<OM%O#(76:= ӋYAƒH Ls6MXBcX&ǘJte. 3.je(??Lj=%wZizFTx$kP8Em jAOހ>~؆B9 ֤8UKCvjbL Cy ;mj P. DkwUE€3ܨ8xUJs\ɟ+;}sFQ(KIXݛƨ 1 +KdX];Jģcx$D׷X`i @l̏rnm$^9΄zBGϞQ=nfkDe; <a>,⢞jk0B[p($Ǡp4 nq`XƓ vϵ.xHnorJ5Hu뇗 f a[Z:>36[g RL؍?( &w.7C#~B{] UW 71jk~ecGrD.=K@WDZM0倐0\xvqNZ ># BE )&yA}t?B Ym(WIpɱ |2+\2 )l8tl@Z.Be񅋍RSƃm>dIl'N adĢG3%#)?$s _5=YBR#-k"qGP-e"f%֩-ϓ378M9ϊ,_*n;HEBƱcl~ ˝[/sagIE2,z1t:kLș壋G){7ond{@rP>kwk׽ #kXfyEAB9uM4P=_lgW؇N#_nGpp ,ZUu6ȓVӰ0EK7*|]{75F\ԶzQz! uH>upT٣o3P)[^6` -d&*=%fY<^ط`_6|h3ء>2 Pq7ώ ,NsjF=B` 큳CiU)R鐏@LҮǧmb<2FHRqùFXi䎲OmGA}:*u f:@ʫRH.66jcGOpO- 6HKJU:Jǃv,3DZEƮqq7p?ȌK%ȧ$;?Qr6pP7`a^=R_)m>D3#£ _' Iɭu͋C-Rne㯄ssL<ȭ/R)|Lt_1Lk=rr 4/gEr~PnB[\g[{gYvRW' {Fem1{ wL;7&$xc0 n&u@5sCCձm8Heft x{q(aтa?Q%l4ςxmWI׆GC1kQ3iJh,KRO`ʲ4)%b6B8\pe;u)ko)#WSncRx{[sXv195_0Kՙ7>Tp5ٴl3S"؝LX睫[5m Q="u}pϘ*xbՉ#iM+@Z! Ϯ~jYݬ$?5mtu] %@݅:4h8ۃtu3; ΑO1A/r R*5i&j#Y2:$Z(ad@>'z L뇶6Z8|`6"X1_z' F-я?X^ A:?1;h/KVB' vOnFS ƤQ{=kh7MwXQp\v͓O/. N3HKRlK"q^Wh1wt h@3e6N|I;y?8t[[! $,ήLe"z%IކAkRl!3u8ځy?_W)AbCO!rza5Sn֗#<43y6"R߃CQ&>[# BHǽ{vekOTlq(UH͵h ݔ8,@tՂL{p/*L"d_y k,4 G̖bD>,.ok"D;|7[.DCA#ilϟI֬Dq]+eE _-- ڰc^Lq1~CCC9gNH8BkhJ#Z-`VoMa 9r$պZ-hkh ?C$ ^tď9d(8P݅]ڶw[wl;dn׆oKd Hބ(DInI M_(5)6H/Y1 QRk,nXHʉ?>df&6^EJmt{CCc`0ʅv5x<\9Yc}106"״!֏9dl:' 1H"z'7QqɌ#KR./CVgQȬ\ `?d1yuM6Ƶ8ZX]8^pwQE &1frRKi$GݜЕh3'{;;~FK37ku<pdʎ+C RMzƏ7)nҀ lEGyl:̑IoBS%|ЕsTulebA}Aʹ10A{KʘӺtjdLI=r PRg_LbR Şl?␔)![Fo wi&k^CV(t@pW2{hxHGRn͉eCbxԉ6GQd27\ثdS=\Ff*0ۣOP5(rZߙxQZ>~GAeN-jY7Ҿn;n?ӹ"Px}/NW:݊&׾:x" ꭥу;R펔 c䛅љElmG§a= h¨BG_uYnZ쫭FYs U"zM&:Gnu.DX5Xn;}ԫ%XO?~2&Frjj8 yA*W I9/ub)Zl: s 85J>~iI3Yԕ;:#hELם[ROd^GA˩f~Y!En0~/A Km>^WYq"<цF*c:xw|͞w%ehRgd9̕v3v Dgh>>?3hYDkgC(ʹƒԕSԜ| 2Q94(?OGQ34 fccPopTYaW(>@tX4`LGٞpɄaŰl\[9c26U M6f,'C4i?W~psϠ?kAKrŵk@I|>^xs?\`,D̒5W^w DMXf_8<%|8_왉pP1Wlm߃f?4:́_Ԕv M;k:p_sj؎qw]$F}y ,b'N=o0, ~M YR46+!}@~ujctCP.Y(x׎z?70WXFܣo3z0c8RGg0 TU򄽻w"/4֏CQ`[{Ocn]+{{ N!33+5]qpj' r9FDȬ)~: 9Gmx2-?sraG"yvUpa;Ră A\& ?#n 0eed~oq嶭!!DzP^H)>oȑ.ļԶ=Hy7S-M ?8ycߧq|#5"2Б lm#UeΤVbM͘jAc7Z ]> 4gb s 2WRsKg6 's8qzTT[R[w)I95xWj #!nN+zPڔ KgTE,?{^RDݥ=Ru^zîc&D'i74SJߔ&HUG[crͦ<׿~4}څh;lpAZ%XZ;tQ?yk1+Ƴu6[ Dc4Ɯ*dB#!}e>samhG3c^8u9󼵕⸈߂UyB;f "Yi=D =4&|C3g]~WgjhSIXU"1A5Fr4{AljwTt6</N \Rta| i>T.Wo>>xϯY{緷m,J{gg}v~)]s!?wXGFl!7U|Cnfﳅ:.@mq%臔Ru?.:aBֺE#Gg'yXDuSWNJD)21ѵVagWPqȒ s?¶@g")s\T{f3go^w:^"{d#!φt},nyWFKv„X4|VB~,˘_&fjp/WԍwaO H 3I`u1ͤ+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_W|+_Wݚw)mkBTx?H$Wٹ[,DS!9upޡwpE@@BTS+F1%6Bo!,H,ABJ_KV'n 4fgv1FoLKhDsG{L&eD]h?`&=*'H23XTeALCv뇩JoooG?>ܸkkE-3r]www?^txx}=|}}jLJ pr'1V"|vٿPEEE9%I|Me}Ӝ=|&)=ޞ/d>TPP$L"ccC:;;s=?trr]sWRggsttDɌp3TWW65551z@Xp#vŝckonn'ᄍjmmUCCCw@{_@X߯5MNNjeeEzKύ?aI[Ԕ;='.M|IeO333u2_sJӪz7Qoo411klυ'=]{zz4??9?88mϋGeCCCns}iiIn Sn~/..VEEJJJ߇VBsYw{L+sž˧/=&aݗG4=k/_12iTXtXML:com.adobe.xmp Adobe Fireworks CS4 2009-07-06T15:13:32Z 2009-07-06T16:49:06Z image/png aJIDATx[WZut=_ $+J@q<%$+%Kv!JH˲"v_DnD] K,~XE!y"'gcLOwUwuWtk<"_*Ows9 ;X;0G`nOlֺc āN{%Q/%,~;$py@3FO XHF9_ZI l@ NF̋] ~""p??<Lˍ'A*#_4a/鷣 Ano`t @Ggzw⹋x뚿uVuk<+JL',L}۶z`qغf;oN,S+WݥM>FIr,zakrT>}t{RP@)K\)zK8s.AݼwMw´9-x>\t)R{i>5~!ޜuuBW@b"I/NwԤkkHu |D0M>BthP g? 4$o\WN_C <؀A}!z0s@7t)`@|7mvt,&2a5 |x #TmVgT7\(B/ܩnhV)vemw|46  zM\D"ijjJK+%-Lt:lۦ\.3(xd2_Y\lbF|!7n>7o~?Q_z5"P}ROOb&9#uϜ9#z ߿0Ms_}?O>-H"w#GKC?tP~O<)wg٩v3Ȧm yj5bB>1ǏqˏKV.}bW_}BNywd2޻f:XX̨EpQ&'{vG)$v YmRMz+ՀyضM^Vu5nAmj5:jrqbs`p]۶qrY|RT*u/B.J[YqcA?#[^uW?b8r<1٬*c`x 6i;z#/=qMW<.|X~HGځ?j;l4́laۂmgPAvS{ [8uұ.eDR>ް{?~K_D^8{lD l6ˡCH$%Qڥ04h&DT@oewV2 |إ]Yec]!^=caas.C9,4m9rUiH ^b1T3ST 44 Pu\׍,o`MӔ #&kP1 !i4F}Gu 񝰽^7oOwA8<*\xPV#gחs1UaÆ ;vbi[p-jy_N<<֯_ϵkהK{n._L:q{1nܸ^^Bԩo>2 Wɹs:ީ8|0i:rY ivv qe9B*RZt≮,..~ze,,,a%`]V <3T9ŃD"˗`ꝯݾk# o!x%M0hoQ0c op=#!Dtw {_ MC/ _c1[:m]m8f~D5j"images/before-windows.png"} %p If the application uses the jansi libary, things start to look much better: %img.example{:src=>"images/after-jansi-windows.png"} %p But wait, it gets better. If you also add the JNA library to the classpath, then jansi provides an even better ANSI handling implementation which use a few windows Native methods to properly apply color attributes and more precise cursor support. %img.example{:src=>"images/after-jansi-jna-windows.png"} jansi-native-jansi-native-1.7/docs/src/metainfo000066400000000000000000000025761310262757000216200ustar00rootroot00000000000000--- name:paths # Copyright (C) 2009-2017 the original author(s). # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # You cand define metainfo for mutliple pages in this file. # **/*.page: # <-- That means the following attributes get applied to all pages # in the site. # ------------------------------------------------------------------- # You can easily switch the site from one look to another here: # ------------------------------------------------------------------- template: /styles/default/main.template # ------------------------------------------------------------------- # Define the project properties here, these can be accessed in the # pages using the {var:} syntax. # ------------------------------------------------------------------- project_name: "Jansi" project_id: "jansi" project_slogan: 'Eliminating boring console output.' project_version: 1.2 jansi-native-jansi-native-1.7/docs/src/styles/000077500000000000000000000000001310262757000214045ustar00rootroot00000000000000jansi-native-jansi-native-1.7/docs/src/styles/default/000077500000000000000000000000001310262757000230305ustar00rootroot00000000000000jansi-native-jansi-native-1.7/docs/src/styles/default/blog.template000066400000000000000000000015751310262757000255200ustar00rootroot00000000000000--- # Copyright (C) 2009-2017 the original author(s).\n# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. template: main.template ---

{title:}

Posted by {author:} on {created_at:}
<% if node.node_info[:page].blocks.has_key?('full_story') %> <% end %>
jansi-native-jansi-native-1.7/docs/src/styles/default/css/000077500000000000000000000000001310262757000236205ustar00rootroot00000000000000jansi-native-jansi-native-1.7/docs/src/styles/default/css/site.css000066400000000000000000000070511310262757000253010ustar00rootroot00000000000000/* * Copyright (C) 2009-2017 the original author(s). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ body, html { font-family:georgia; color: #666666; } body, html, table, tr, td, tbody { padding:0; margin:0; vertical-align: top; } h1, h2, h3, h4, h5, h6 { overflow: visible; color: black; } p { margin-bottom:0px; } a { text-decoration: none; color:#00AA00; } a:hover { color: #820000; text-decoration: underline;} img {border: none;} a.main { font-size: 12pt; } .wrapper { min-width: 762px; width: 762px; margin: 0 auto; } #navigation { width: 100%; clear: both; font-family: HelveticaNeue,"Helvetica Neue",Helvetica,Arial,Verdana,sans-serif; background: #0F0F0F; text-align:center; padding: 8px; border-bottom:2px solid #00FF00; color: white; font-size: 10pt; font-weight: bold; } #navigation a { color: white; } #navigation ul { display: block; margin:0; padding:0; } #navigation li { list-style-type: none; display: inline; margin:0 5px 0 5px;} #overview { width: 100%; clear: both; padding: 0px 0px 20px 0px;} #overview div.logo {padding: 0px 20px 20px 0px; float: left;} #overview div.message { font-size: 14pt; } #overview div.message h1{ margin-bottom: 5px; } #spot { width: 100%; margin-top: 15px; background:transparent url(../images/spot-banner.gif) repeat-x scroll 0 0; height: 277px; } #spot div.title { text-align:center; height:25px; text-align:center; padding-top: 2px; color: white; font-size: 10pt; font-weight: bold; font-family: HelveticaNeue,"Helvetica Neue",Helvetica,Arial,Verdana,sans-serif; } #spot div.content table { width: 100%; text-align:center; color: black; font-size: 10pt; } #spot a:hover {text-decoration: none; } #spot div.spot-balloon { background:transparent url( ../../../images/spot-get-involved.gif ) no-repeat; background-position:center; height: 121px; text-align:left; padding-top: 25px; padding-left: 35px; } #spot div.spot-balloon li { list-style: none; } #content { width: 100%; clear: both; } #content .wrapper { min-width: 700px; width: 700px; margin: 0 auto; } #content div.left { float:left; width:200px; text-align:right; font-size: 18pt; clear:both; } #content h1 { font-size: 18pt; } #content div.right { float:right; width:450px; text-align:left; } #blog { width: 100%; } #blog .wrapper { min-width: 600px; width: 600px; margin: 0 auto; } #blog h1 { font-family: HelveticaNeue,"Helvetica Neue",Helvetica,Arial,Verdana,sans-serif; font-size: 18pt; color: #00AA00; } #blog h2 { border-bottom: thin dashed #DDD; font-size: 16pt; margin-bottom: 5px; } #blog div.post p { padding-left: 10px; } #blog div.post .details { padding-top: 5px; color: #ccc; font-size: 10pt; font-family: HelveticaNeue,"Helvetica Neue",Helvetica,Arial,Verdana,sans-serif; } #content .post h2 { margin-bottom:5px; } #content .post .details { color: #ccc; font-size: 10pt; font-family: HelveticaNeue,"Helvetica Neue",Helvetica,Arial,Verdana,sans-serif; margin-top:0px; } img.example { padding: 10px; }jansi-native-jansi-native-1.7/docs/src/styles/default/images/000077500000000000000000000000001310262757000242755ustar00rootroot00000000000000jansi-native-jansi-native-1.7/docs/src/styles/default/images/rss.gif000066400000000000000000000022161310262757000255740ustar00rootroot00000000000000GIF89a9ܵx]sX{8XQofb+Mó[Ii᮳㲹,H_~6T&D9tse~AŎRxAav=cQmEh4Tk/Lꖴraz-P떫Lq@[g|kPq\Fe)I=Jj[굺Xo䑬pZt}x[tCcik!:k茵2W0Pk:Zn0MX|Bb!BJkAb+P[z{JiSs骶Jc3Qd|Sq1RbjZ^u!,!t"t@Ə#Hq ?(!e AnA2g&YeŊQ8d +Kx` '#j‰;!K:M:B]6dSy0M><' =AʒL!𤧍< AxD4wxQA>9@えAX@ix 8I͙cE3x#HF5 A6+ &IށH@͗N A^\kP0`@A>hqC[AÎ"-@/d/4ET@!P1v衇#P0(āF 4`@;jansi-native-jansi-native-1.7/docs/src/styles/default/images/spot-banner.gif000066400000000000000000000002041310262757000272100ustar00rootroot00000000000000GIF89a!,1pI$s`(Fihjlp,jxKpH,Ȥr;jansi-native-jansi-native-1.7/docs/src/styles/default/main.template000066400000000000000000000042501310262757000255120ustar00rootroot00000000000000--- # Copyright (C) 2009-2017 the original author(s). # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. template: ~ --- {title:} <% if context.node.node_info[:page].blocks.has_key?('head') %> <% end %> <% if context.node.node_info[:page].blocks.has_key?('overview') %>
<% end %> <% if context.node.node_info[:page].blocks.has_key?('spot') %>
<% end %> <% if context.node.node_info[:page].blocks.has_key?('content') %>
<% end %> <% if context.node.node_info[:page].blocks.has_key?('blog') %>
<% end %> jansi-native-jansi-native-1.7/docs/src/todo.page000066400000000000000000000021741310262757000216700ustar00rootroot00000000000000--- # Copyright (C) 2009-2017 the original author(s). # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. title: TODO in_menu: true --- name:overview pipeline:haml,tags %h1 The TODO list Stuff that still needs to get done. Contributions Welcomed! --- name:content pipeline:textile * Figure out a way to detect if the stdout on unix acutally renders ANSI output. * The default color table can be adjusted in Vista/2008 Server, via SetConsoleScreenBufferInfoEx. Consider adjusting some of the colors (especially the bold red color) so that they match the colors used at: http://sixteencolors.net/packs/2007/sense27/smi-ar.ans.html jansi-native-jansi-native-1.7/docs/src/virtual000066400000000000000000000016561310262757000215020ustar00rootroot00000000000000--- # Copyright (C) 2009-2017 the original author(s). # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. in_menu: false --- name:content pipeline:tags \--- !omap - /javadoc.html: title: Javadoc in_menu: true sort_info: 60 url: http://jansi.fusesource.org/maven/1.2/apidocs/index.html - /development.html: title: Development in_menu: true sort_info: 60 url: http://jansi.fusesource.org/maven/1.2/project-info.htmljansi-native-jansi-native-1.7/license.txt000066400000000000000000000261361310262757000205350ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. jansi-native-jansi-native-1.7/pom.xml000066400000000000000000000273021310262757000176630ustar00rootroot00000000000000 4.0.0 org.fusesource fusesource-pom 1.11 org.fusesource.jansi jansi-${platform} 1.7 ${project.artifactId} Jansi is a java library for generating and interpreting ANSI escape sequences. jansi JANSI UTF-8 scm:git:ssh://git@forge.fusesource.com/jansinative.git 1.15 native http://${forge-project-id}.fusesource.org 2009 jira http://fusesource.com/issues/browse/${forge-project-id-uc} ${forge-project-id} dev ${forge-project-id}-dev@fusesource.org ${forge-project-id}-dev-subscribe@fusesource.org ${forge-project-id} commits ${forge-project-id}-commits@fusesource.org ${forge-project-id}-commits-subscribe@fusesource.org The Apache Software License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0.txt repo scm:git:git://forge.fusesource.com/jansinative.git ${release-altGitURL} http://fusesource.com/forge/gitweb?p=jansinative.git jansi-native-1.7 sonatype-nexus-staging Sonatype Staging Repository https://oss.sonatype.org/service/local/staging/deploy/maven2 sonatype-nexus-snapshots Sonatype Snapshot Repository https://oss.sonatype.org/content/repositories/snapshots chirino Hiram Chirino hiram@hiramchirino.com http://hiramchirino.com GMT-5 org.fusesource.hawtjni hawtjni-runtime ${hawtjni-version} junit junit 4.7 test org.apache.maven.plugins maven-clean-plugin 3.0.0 org.apache.maven.plugins maven-surefire-plugin 2.20 true once -ea false ${project.build.directory} **/Abstract*.java **/Test*.java **/*Test.java org.apache.maven.plugins maven-compiler-plugin 3.6.1 1.5 1.5 org.apache.felix maven-bundle-plugin 2.0.1 bundle-manifest process-classes manifest !org.fusesource.jansi*,!org.fusesource.hawtjni*,sun.reflect;resolution:=optional,* maven-jar-plugin 3.0.2 ${project.build.outputDirectory}/META-INF/MANIFEST.MF sonatype-nexus-snapshots Sonatype Snapshot Repository https://oss.sonatype.org/content/repositories/snapshots true sonatype-nexus-snapshots Sonatype Snapshot Repository https://oss.sonatype.org/content/repositories/snapshots true org.codehaus.mojo jxr-maven-plugin 2.0-beta-1 true org.apache.maven.plugins maven-javadoc-plugin 2.6 *.internal true http://java.sun.com/j2se/1.5.0/docs/api org.apache.maven.plugins maven-project-info-reports-plugin 2.1.1 index sumary plugins dependencies mailing-list issue-tracking license scm org.codehaus.mojo surefire-report-maven-plugin 2.0-beta-1 org.apache.maven.plugins maven-plugin-plugin 2.5 platform platform org.fusesource.hawtjni maven-hawtjni-plugin ${hawtjni-version} generate build package-jar package-source ${platform} jansi false false msbuild org.apache.maven.plugins maven-jar-plugin 3.0.2 ${basedir}/target/generated-sources/hawtjni/lib mac mac org.fusesource.hawtjni maven-hawtjni-plugin osname=MacOS;processor=x86-64 osname=MacOS;processor=x86 osname=MacOS;processor=PowerPC * --with-universal osx jansi-native-jansi-native-1.7/readme.md000066400000000000000000000014371310262757000201260ustar00rootroot00000000000000Jansi Native ============ Description ----------- Jansi Native implements the JNI Libraries used by the [Jansi project](http://fusesource.github.io/jansi/). Project Links ------------- * [Project Home](http://fusesource.github.io/jansi/) Building on Windows ------------------- Download and install the free [Microsoft Windows SDK][SDK]. The SDK includes all the headers, libraries, and build tools needed to compile the JNI library. Set the `JAVA_HOME` environment variable to the location where your JDK is installed. Use the "Start>All Programs>Microsoft Windows SDK vX.X>CMD" command window and change to the directory that this file is located in and then run the maven build. [SDK]: http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505 jansi-native-jansi-native-1.7/src/000077500000000000000000000000001310262757000171315ustar00rootroot00000000000000jansi-native-jansi-native-1.7/src/main/000077500000000000000000000000001310262757000200555ustar00rootroot00000000000000jansi-native-jansi-native-1.7/src/main/java/000077500000000000000000000000001310262757000207765ustar00rootroot00000000000000jansi-native-jansi-native-1.7/src/main/java/org/000077500000000000000000000000001310262757000215655ustar00rootroot00000000000000jansi-native-jansi-native-1.7/src/main/java/org/fusesource/000077500000000000000000000000001310262757000237505ustar00rootroot00000000000000jansi-native-jansi-native-1.7/src/main/java/org/fusesource/jansi/000077500000000000000000000000001310262757000250545ustar00rootroot00000000000000jansi-native-jansi-native-1.7/src/main/java/org/fusesource/jansi/internal/000077500000000000000000000000001310262757000266705ustar00rootroot00000000000000jansi-native-jansi-native-1.7/src/main/java/org/fusesource/jansi/internal/CLibrary.java000066400000000000000000000143701310262757000312470ustar00rootroot00000000000000/* * Copyright (C) 2009-2017 the original author(s). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.fusesource.jansi.internal; import static org.fusesource.hawtjni.runtime.FieldFlag.CONSTANT; import static org.fusesource.hawtjni.runtime.MethodFlag.CONSTANT_INITIALIZER; import static org.fusesource.hawtjni.runtime.ArgFlag.*; import org.fusesource.hawtjni.runtime.ArgFlag; import org.fusesource.hawtjni.runtime.ClassFlag; import org.fusesource.hawtjni.runtime.JniArg; import org.fusesource.hawtjni.runtime.JniClass; import org.fusesource.hawtjni.runtime.JniField; import org.fusesource.hawtjni.runtime.JniMethod; import org.fusesource.hawtjni.runtime.Library; /** * Interface to access some low level POSIX functions. * * @author Hiram Chirino */ @JniClass() public class CLibrary { private static final Library LIBRARY = new Library("jansi", CLibrary.class); static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static native void init(); @JniField(flags={CONSTANT}, conditional="defined(STDIN_FILENO)") public static int STDIN_FILENO; @JniField(flags={CONSTANT}, conditional="defined(STDOUT_FILENO)") public static int STDOUT_FILENO; @JniField(flags={CONSTANT}, conditional="defined(STDERR_FILENO)") public static int STDERR_FILENO; @JniField(flags={CONSTANT}, accessor="1", conditional="defined(HAVE_ISATTY)") public static boolean HAVE_ISATTY; @JniMethod(conditional="defined(HAVE_ISATTY)") public static native int isatty( @JniArg int fd); @JniMethod(conditional="FALSE") public static native String ttyname( @JniArg int filedes); @JniMethod(conditional="defined(HAVE_OPENPTY)") public static native int openpty( @JniArg(cast="int *", flags={NO_IN}) int[] amaster, @JniArg(cast="int *", flags={NO_IN}) int[] aslave, @JniArg(cast="char *", flags={NO_IN}) byte[] name, @JniArg(cast="struct termios *", flags={NO_OUT}) Termios termios, @JniArg(cast="struct winsize *", flags={NO_OUT}) WinSize winsize); @JniMethod(conditional="defined(HAVE_TCGETATTR)") public static native int tcgetattr( @JniArg int filedes, @JniArg(cast="struct termios *", flags={NO_IN}) Termios termios); @JniMethod(conditional="defined(HAVE_TCSETATTR)") public static native int tcsetattr( @JniArg int filedes, @JniArg int optional_actions, @JniArg(cast="struct termios *", flags={NO_OUT}) Termios termios); /* * Commands passed to tcsetattr() for setting the termios structure. */ @JniField(flags={CONSTANT}, conditional="defined(TCSANOW)") public static int TCSANOW; /* make change immediate */ @JniField(flags={CONSTANT}, conditional="defined(TCSADRAIN)") public static int TCSADRAIN; /* drain output, then change */ @JniField(flags={CONSTANT}, conditional="defined(TCSAFLUSH)") public static int TCSAFLUSH; /* drain output, flush input */ @JniField(flags={CONSTANT}, conditional="defined(TIOCGETA)") public static long TIOCGETA; @JniField(flags={CONSTANT}, conditional="defined(TIOCSETA)") public static long TIOCSETA; @JniField(flags={CONSTANT}, conditional="defined(TIOCGETD)") public static long TIOCGETD; @JniField(flags={CONSTANT}, conditional="defined(TIOCSETD)") public static long TIOCSETD; @JniField(flags={CONSTANT}, conditional="defined(TIOCGWINSZ)") public static long TIOCGWINSZ; @JniField(flags={CONSTANT}, conditional="defined(TIOCSWINSZ)") public static long TIOCSWINSZ; @JniMethod(conditional="defined(HAVE_IOCTL)") public static native int ioctl( @JniArg int filedes, @JniArg long request, @JniArg int[] params); @JniMethod(conditional="defined(HAVE_IOCTL)") public static native int ioctl( @JniArg int filedes, @JniArg long request, @JniArg(flags = ArgFlag.POINTER_ARG) WinSize params); @JniClass(flags={ClassFlag.STRUCT}, name="winsize", conditional="defined(HAVE_IOCTL)") public static class WinSize { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(struct winsize)") public static int SIZEOF; @JniField(accessor="ws_row") public short ws_row; @JniField(accessor="ws_col") public short ws_col; @JniField(accessor="ws_xpixel") public short ws_xpixel; @JniField(accessor="ws_ypixel") public short ws_ypixel; public WinSize() { } public WinSize(short ws_row, short ws_col) { this.ws_row = ws_row; this.ws_col = ws_col; } } @JniClass(flags={ClassFlag.STRUCT}, name="termios", conditional = "defined(HAVE_IOCTL)") public static class Termios { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(struct termios)") public static int SIZEOF; @JniField(accessor="c_iflag") public long c_iflag; @JniField(accessor="c_oflag") public long c_oflag; @JniField(accessor="c_cflag") public long c_cflag; @JniField(accessor="c_lflag") public long c_lflag; @JniField(accessor="c_cc") public byte[] c_cc = new byte[32]; @JniField(accessor="c_ispeed") public long c_ispeed; @JniField(accessor="c_ospeed") public long c_ospeed; } } jansi-native-jansi-native-1.7/src/main/java/org/fusesource/jansi/internal/Kernel32.java000066400000000000000000000750521310262757000311310ustar00rootroot00000000000000/* * Copyright (C) 2009-2017 the original author(s). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.fusesource.jansi.internal; import org.fusesource.hawtjni.runtime.*; import java.io.IOException; import static org.fusesource.hawtjni.runtime.ArgFlag.*; import static org.fusesource.hawtjni.runtime.ClassFlag.*; import static org.fusesource.hawtjni.runtime.FieldFlag.*; import static org.fusesource.hawtjni.runtime.MethodFlag.*; /** * * @author Hiram Chirino */ @JniClass(conditional="defined(_WIN32) || defined(_WIN64)") public class Kernel32 { private static final Library LIBRARY = new Library("jansi", Kernel32.class); static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static final native void init(); @JniField(flags={CONSTANT}) public static short FOREGROUND_BLUE; @JniField(flags={CONSTANT}) public static short FOREGROUND_GREEN; @JniField(flags={CONSTANT}) public static short FOREGROUND_RED; @JniField(flags={CONSTANT}) public static short FOREGROUND_INTENSITY; @JniField(flags={CONSTANT}) public static short BACKGROUND_BLUE; @JniField(flags={CONSTANT}) public static short BACKGROUND_GREEN; @JniField(flags={CONSTANT}) public static short BACKGROUND_RED; @JniField(flags={CONSTANT}) public static short BACKGROUND_INTENSITY; @JniField(flags={CONSTANT}) public static short COMMON_LVB_LEADING_BYTE; @JniField(flags={CONSTANT}) public static short COMMON_LVB_TRAILING_BYTE; @JniField(flags={CONSTANT}) public static short COMMON_LVB_GRID_HORIZONTAL; @JniField(flags={CONSTANT}) public static short COMMON_LVB_GRID_LVERTICAL; @JniField(flags={CONSTANT}) public static short COMMON_LVB_GRID_RVERTICAL; @JniField(flags={CONSTANT}) public static short COMMON_LVB_REVERSE_VIDEO; @JniField(flags={CONSTANT}) public static short COMMON_LVB_UNDERSCORE; @JniField(flags={CONSTANT}) public static int FORMAT_MESSAGE_FROM_SYSTEM; @JniField(flags={CONSTANT}) public static int STD_INPUT_HANDLE; @JniField(flags={CONSTANT}) public static int STD_OUTPUT_HANDLE; @JniField(flags={CONSTANT}) public static int STD_ERROR_HANDLE; @JniField(flags={CONSTANT}) public static int INVALID_HANDLE_VALUE; @JniMethod(cast="void *") public static final native long malloc( @JniArg(cast="size_t") long size); public static final native void free( @JniArg(cast="void *") long ptr); // public static final native void memmove ( // @JniArg(cast="void *") long dest, // @JniArg(cast="const void *") long src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *") long dest, // @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) byte[] src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *") long dest, // @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) char[] src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *") long dest, // @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) short[] src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *") long dest, // @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) int[] src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *") long dest, // @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}, pointer=FALSE) long[] src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *") long dest, // @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) float[] src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *") long dest, // @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) double[] src, // @JniArg(cast="size_t") long size); // // // // public static final native void memmove ( // @JniArg(cast="void *", flags={NO_IN, CRITICAL}) byte[] dest, // @JniArg(cast="const void *") long src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *", flags={NO_IN, CRITICAL}) char[] dest, // @JniArg(cast="const void *") long src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *", flags={NO_IN, CRITICAL}) short[] dest, // @JniArg(cast="const void *") long src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *", flags={NO_IN, CRITICAL}) int[] dest, // @JniArg(cast="const void *") long src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *", flags={NO_IN, CRITICAL}, pointer=FALSE) long[] dest, // @JniArg(cast="const void *") long src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *", flags={NO_IN, CRITICAL}) float[] dest, // @JniArg(cast="const void *") long src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *", flags={NO_IN, CRITICAL}) double[] dest, // @JniArg(cast="const void *") long src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *", flags={NO_IN, CRITICAL}) byte[] dest, // @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) char[] src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *", flags={NO_IN, CRITICAL}) int[] dest, // @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) byte[] src, // @JniArg(cast="size_t") long size); // // @JniMethod(cast="void *") // public static final native long memset ( // @JniArg(cast="void *") long buffer, // int c, // @JniArg(cast="size_t") long num); // // public static final native int strlen( // @JniArg(cast="char *")long s); // // public static final native void memmove ( // @JniArg(cast="void *") long dest, // @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) foo src, // @JniArg(cast="size_t") long size); // // public static final native void memmove ( // @JniArg(cast="void *", flags={NO_IN, CRITICAL}) foo dest, // @JniArg(cast="const void *") long src, // @JniArg(cast="size_t") long size); /** * http://msdn.microsoft.com/en-us/library/ms686311%28VS.85%29.aspx */ @JniClass(flags={STRUCT,TYPEDEF}, conditional="defined(_WIN32) || defined(_WIN64)") static public class SMALL_RECT { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static final native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(SMALL_RECT)") public static int SIZEOF; @JniField(accessor="Left") public short left; @JniField(accessor="Top") public short top; @JniField(accessor="Right") public short right; @JniField(accessor="Bottom") public short bottom; public short width() { return (short) (right-left); } public short height() { return (short) (bottom-top); } public SMALL_RECT copy() { SMALL_RECT rc = new SMALL_RECT(); rc.left = left; rc.top = top; rc.right = right; rc.bottom = bottom; return rc; } } /** * see http://msdn.microsoft.com/en-us/library/ms686047%28VS.85%29.aspx * @param consoleOutput * @param attributes * @return */ public static final native int SetConsoleTextAttribute( @JniArg(cast="HANDLE")long consoleOutput, short attributes); @JniClass(flags={ClassFlag.STRUCT,TYPEDEF}, conditional="defined(_WIN32) || defined(_WIN64)") public static class COORD { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static final native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(COORD)") public static int SIZEOF; @JniField(accessor="X") public short x; @JniField(accessor="Y") public short y; public COORD copy() { COORD rc = new COORD(); rc.x = x; rc.y = y; return rc; } } /** * http://msdn.microsoft.com/en-us/library/ms682093%28VS.85%29.aspx */ @JniClass(flags={ClassFlag.STRUCT,TYPEDEF}, conditional="defined(_WIN32) || defined(_WIN64)") public static class CONSOLE_SCREEN_BUFFER_INFO { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static final native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(CONSOLE_SCREEN_BUFFER_INFO)") public static int SIZEOF; @JniField(accessor="dwSize") public COORD size = new COORD(); @JniField(accessor="dwCursorPosition") public COORD cursorPosition = new COORD(); @JniField(accessor="wAttributes") public short attributes; @JniField(accessor="srWindow") public SMALL_RECT window = new SMALL_RECT(); @JniField(accessor="dwMaximumWindowSize") public COORD maximumWindowSize = new COORD(); public int windowWidth() { return window.width() + 1; } public int windowHeight() { return window.height() + 1; } } /** * see: http://msdn.microsoft.com/en-us/library/ms724211%28VS.85%29.aspx * * @param handle * @return */ public static final native int CloseHandle(@JniArg(cast="HANDLE")long handle); /** * see: http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx * * @return */ public static final native int GetLastError(); /** * * @param flags * @param source * @param messageId * @param languageId * @param buffer * @param size * @param args * @return */ public static final native int FormatMessageW( int flags, @JniArg(cast="void *")long source, int messageId, int languageId, @JniArg(cast="void *", flags={NO_IN, CRITICAL})byte[] buffer, int size, @JniArg(cast="void *", flags={NO_IN, CRITICAL, SENTINEL})long[] args ); /** * See: http://msdn.microsoft.com/en-us/library/ms683171%28VS.85%29.aspx * @param consoleOutput * @param consoleScreenBufferInfo * @return */ public static final native int GetConsoleScreenBufferInfo( @JniArg(cast="HANDLE", flags={POINTER_ARG})long consoleOutput, @JniArg(flags={NO_IN}) CONSOLE_SCREEN_BUFFER_INFO consoleScreenBufferInfo); /** * see: http://msdn.microsoft.com/en-us/library/ms683231%28VS.85%29.aspx * @param stdHandle * @return */ @JniMethod(cast="HANDLE", flags={POINTER_RETURN}) public static final native long GetStdHandle(int stdHandle); /** * http://msdn.microsoft.com/en-us/library/ms686025%28VS.85%29.aspx * @param consoleOutput * @param cursorPosition * @return */ public static final native int SetConsoleCursorPosition( @JniArg(cast="HANDLE", flags={POINTER_ARG})long consoleOutput, @JniArg(flags={BY_VALUE,NO_OUT}) COORD cursorPosition); /** * see: http://msdn.microsoft.com/en-us/library/ms682663%28VS.85%29.aspx * * @param consoleOutput * @param character * @param length * @param writeCoord * @param numberOfCharsWritten * @return */ public static final native int FillConsoleOutputCharacterW( @JniArg(cast="HANDLE", flags={POINTER_ARG}) long consoleOutput, char character, int length, @JniArg(flags={BY_VALUE,NO_OUT}) COORD writeCoord, @JniArg(flags={NO_IN}) int[] numberOfCharsWritten); /** * see: https://msdn.microsoft.com/en-us/library/ms682662%28VS.85%29.aspx * * @param consoleOutput * @param attribute * @param length * @param writeCoord * @param numberOfAttrsWritten * @return */ public static final native int FillConsoleOutputAttribute( @JniArg(cast="HANDLE", flags={POINTER_ARG}) long consoleOutput, short attribute, int length, @JniArg(flags={BY_VALUE,NO_OUT}) COORD writeCoord, @JniArg(flags={NO_IN}) int[] numberOfAttrsWritten); /** * see: http://msdn.microsoft.com/en-us/library/ms687401(v=VS.85).aspx * * @param consoleOutput * @param buffer * @param numberOfCharsToWrite * @param numberOfCharsWritten * @param reserved must be null * @return */ public static final native int WriteConsoleW( @JniArg(cast="HANDLE", flags={POINTER_ARG}) long consoleOutput, @JniArg(flags={NO_OUT}) char[] buffer, int numberOfCharsToWrite, @JniArg(flags={NO_IN}) int[] numberOfCharsWritten, @JniArg(cast="LPVOID", flags={POINTER_ARG})long reserved); /** * see: http://msdn.microsoft.com/en-us/library/ms683167%28VS.85%29.aspx * @param handle * @param mode * @return */ public static final native int GetConsoleMode( @JniArg(cast="HANDLE", flags={POINTER_ARG}) long handle, @JniArg(flags={NO_IN}) int[] mode); /** * see: http://msdn.microsoft.com/en-us/library/ms686033%28VS.85%29.aspx * @param handle * @param mode * @return */ public static final native int SetConsoleMode( @JniArg(cast="HANDLE", flags={POINTER_ARG}) long handle, int mode); /** * see: http://msdn.microsoft.com/en-us/library/078sfkak(VS.80).aspx * @return */ public static final native int _getch(); /** * see: http://msdn.microsoft.com/en-us/library/ms686050%28VS.85%29.aspx * @param title * @return 0 if title was set successfully */ public static final native int SetConsoleTitle( @JniArg(flags={UNICODE}) String title); /** * see: http://msdn.microsoft.com/en-us/library/ms683169(v=VS.85).aspx * @return the current output code page */ public static final native int GetConsoleOutputCP(); /** * see: http://msdn.microsoft.com/en-us/library/ms686036(v=VS.85).aspx * @param codePageID * @return non 0 if code page was set */ public static final native int SetConsoleOutputCP(int codePageID); /** * see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682013(v=vs.85).aspx */ @JniClass(flags={ClassFlag.STRUCT,TYPEDEF}, conditional = "defined(_WIN32) || defined(_WIN64)") public static class CHAR_INFO { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static final native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(CHAR_INFO)") public static int SIZEOF; @JniField(accessor = "Attributes") public short attributes; @JniField(accessor="Char.UnicodeChar") public char unicodeChar; } /** * see: https://msdn.microsoft.com/en-us/library/windows/desktop/ms685107(v=vs.85).aspx */ public static final native int ScrollConsoleScreenBuffer( @JniArg(cast="HANDLE", flags={POINTER_ARG})long consoleOutput, @JniArg(flags={NO_OUT}) SMALL_RECT scrollRectangle, @JniArg(flags={NO_OUT}) SMALL_RECT clipRectangle, @JniArg(flags={BY_VALUE, NO_OUT}) COORD destinationOrigin, @JniArg(flags={NO_OUT}) CHAR_INFO fill); /** * see: http://msdn.microsoft.com/en-us/library/ms684166(v=VS.85).aspx */ @JniClass(flags={ClassFlag.STRUCT,TYPEDEF}, conditional="defined(_WIN32) || defined(_WIN64)") public static class KEY_EVENT_RECORD { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static final native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(KEY_EVENT_RECORD)") public static int SIZEOF; @JniField(flags={CONSTANT}, accessor="CAPSLOCK_ON") public static int CAPSLOCK_ON; @JniField(flags={CONSTANT}, accessor="NUMLOCK_ON") public static int NUMLOCK_ON; @JniField(flags={CONSTANT}, accessor="SCROLLLOCK_ON") public static int SCROLLLOCK_ON; @JniField(flags={CONSTANT}, accessor="ENHANCED_KEY") public static int ENHANCED_KEY; @JniField(flags={CONSTANT}, accessor="LEFT_ALT_PRESSED") public static int LEFT_ALT_PRESSED; @JniField(flags={CONSTANT}, accessor="LEFT_CTRL_PRESSED") public static int LEFT_CTRL_PRESSED; @JniField(flags={CONSTANT}, accessor="RIGHT_ALT_PRESSED") public static int RIGHT_ALT_PRESSED; @JniField(flags={CONSTANT}, accessor="RIGHT_CTRL_PRESSED") public static int RIGHT_CTRL_PRESSED; @JniField(flags={CONSTANT}, accessor="SHIFT_PRESSED") public static int SHIFT_PRESSED; @JniField(accessor="bKeyDown") public boolean keyDown; @JniField(accessor="wRepeatCount") public short repeatCount; @JniField(accessor="wVirtualKeyCode") public short keyCode; @JniField(accessor="wVirtualScanCode") public short scanCode; @JniField(accessor="uChar.UnicodeChar") public char uchar; @JniField(accessor="dwControlKeyState") public int controlKeyState; public String toString() { return "KEY_EVENT_RECORD{" + "keyDown=" + keyDown + ", repeatCount=" + repeatCount + ", keyCode=" + keyCode + ", scanCode=" + scanCode + ", uchar=" + uchar + ", controlKeyState=" + controlKeyState + '}'; } } /** * see: http://msdn.microsoft.com/en-us/library/ms684239(v=VS.85).aspx */ /* @JniClass(flags={ClassFlag.STRUCT,TYPEDEF}, conditional="defined(_WIN32) || defined(_WIN64)") public static class MOUSE_EVENT_RECORD { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static final native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(MOUSE_EVENT_RECORD)") public static int SIZEOF; @JniField(flags={CONSTANT}, accessor="FROM_LEFT_1ST_BUTTON_PRESSED") public static int FROM_LEFT_1ST_BUTTON_PRESSED; @JniField(flags={CONSTANT}, accessor="FROM_LEFT_2ND_BUTTON_PRESSED") public static int FROM_LEFT_2ND_BUTTON_PRESSED; @JniField(flags={CONSTANT}, accessor="FROM_LEFT_3RD_BUTTON_PRESSED") public static int FROM_LEFT_3RD_BUTTON_PRESSED; @JniField(flags={CONSTANT}, accessor="FROM_LEFT_4TH_BUTTON_PRESSED") public static int FROM_LEFT_4TH_BUTTON_PRESSED; @JniField(flags={CONSTANT}, accessor="RIGHTMOST_BUTTON_PRESSED") public static int RIGHTMOST_BUTTON_PRESSED; @JniField(flags={CONSTANT}, accessor="CAPSLOCK_ON") public static int CAPSLOCK_ON; @JniField(flags={CONSTANT}, accessor="NUMLOCK_ON") public static int NUMLOCK_ON; @JniField(flags={CONSTANT}, accessor="SCROLLLOCK_ON") public static int SCROLLLOCK_ON; @JniField(flags={CONSTANT}, accessor="ENHANCED_KEY") public static int ENHANCED_KEY; @JniField(flags={CONSTANT}, accessor="LEFT_ALT_PRESSED") public static int LEFT_ALT_PRESSED; @JniField(flags={CONSTANT}, accessor="LEFT_CTRL_PRESSED") public static int LEFT_CTRL_PRESSED; @JniField(flags={CONSTANT}, accessor="RIGHT_ALT_PRESSED") public static int RIGHT_ALT_PRESSED; @JniField(flags={CONSTANT}, accessor="RIGHT_CTRL_PRESSED") public static int RIGHT_CTRL_PRESSED; @JniField(flags={CONSTANT}, accessor="SHIFT_PRESSED") public static int SHIFT_PRESSED; @JniField(flags={CONSTANT}, accessor="DOUBLE_CLICK") public static int DOUBLE_CLICK; @JniField(flags={CONSTANT}, accessor="MOUSE_HWHEELED") public static int MOUSE_HWHEELED; @JniField(flags={CONSTANT}, accessor="MOUSE_MOVED") public static int MOUSE_MOVED; @JniField(flags={CONSTANT}, accessor="MOUSE_WHEELED") public static int MOUSE_WHEELED; @JniField(accessor="dwMousePosition") public COORD mousePosition = new COORD(); @JniField(accessor="dwButtonState") public int buttonState; @JniField(accessor="dwControlKeyState") public int controlKeyState; @JniField(accessor="dwEventFlags") public int eventFlags; public String toString() { return "MOUSE_EVENT_RECORD{" + "mousePosition=" + mousePosition + ", buttonState=" + buttonState + ", controlKeyState=" + controlKeyState + ", eventFlags=" + eventFlags + '}'; } } */ /** * see: http://msdn.microsoft.com/en-us/library/ms687093(v=VS.85).aspx */ /* @JniClass(flags={ClassFlag.STRUCT,TYPEDEF}, conditional="defined(_WIN32) || defined(_WIN64)") public static class WINDOW_BUFFER_SIZE_RECORD { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static final native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(WINDOW_BUFFER_SIZE_RECORD)") public static int SIZEOF; @JniField(accessor="dwSize") public COORD size = new COORD(); public String toString() { return "WINDOW_BUFFER_SIZE_RECORD{size=" + size + '}'; } } */ /** * see: http://msdn.microsoft.com/en-us/library/ms683149(v=VS.85).aspx */ /* @JniClass(flags={ClassFlag.STRUCT,TYPEDEF}, conditional="defined(_WIN32) || defined(_WIN64)") public static class FOCUS_EVENT_RECORD { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static final native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(WINDOW_BUFFER_SIZE_RECORD)") public static int SIZEOF; @JniField(accessor="bSetFocus") public boolean setFocus; } */ /** * see: http://msdn.microsoft.com/en-us/library/ms684213(v=VS.85).aspx */ /* @JniClass(flags={ClassFlag.STRUCT,TYPEDEF}, conditional="defined(_WIN32) || defined(_WIN64)") public static class MENU_EVENT_RECORD { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static final native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(MENU_EVENT_RECORD)") public static int SIZEOF; @JniField(accessor="dwCommandId") public int commandId; } */ /** * see: http://msdn.microsoft.com/en-us/library/ms683499(v=VS.85).aspx */ @JniClass(flags={ClassFlag.STRUCT,TYPEDEF}, conditional="defined(_WIN32) || defined(_WIN64)") public static class INPUT_RECORD { static { LIBRARY.load(); init(); } @JniMethod(flags={CONSTANT_INITIALIZER}) private static final native void init(); @JniField(flags={CONSTANT}, accessor="sizeof(INPUT_RECORD)") public static int SIZEOF; @JniField(flags={CONSTANT}, accessor="KEY_EVENT") public static short KEY_EVENT; /* @JniField(flags={CONSTANT}, accessor="MOUSE_EVENT") public static short MOUSE_EVENT; @JniField(flags={CONSTANT}, accessor="WINDOW_BUFFER_SIZE_EVENT") public static short WINDOW_BUFFER_SIZE_EVENT; @JniField(flags={CONSTANT}, accessor="FOCUS_EVENT") public static short FOCUS_EVENT; @JniField(flags={CONSTANT}, accessor="MENU_EVENT") public static short MENU_EVENT; */ @JniField(accessor="EventType") public short eventType; @JniField(accessor="Event.KeyEvent") public KEY_EVENT_RECORD keyEvent = new KEY_EVENT_RECORD(); /* @JniField(accessor="Event.MouseEvent") public MOUSE_EVENT_RECORD mouseEvent = new MOUSE_EVENT_RECORD(); @JniField(accessor="Event.WindowBufferSizeEvent") public WINDOW_BUFFER_SIZE_RECORD windowBufferSizeEvent = new WINDOW_BUFFER_SIZE_RECORD(); @JniField(accessor="Event.MenuEvent") public MENU_EVENT_RECORD menuEvent = new MENU_EVENT_RECORD(); @JniField(accessor="Event.FocusEvent") public FOCUS_EVENT_RECORD focusEvent = new FOCUS_EVENT_RECORD(); */ public static final native void memmove ( @JniArg(cast="void *", flags={NO_IN, CRITICAL}) INPUT_RECORD dest, @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) long src, @JniArg(cast="size_t") long size); } /** * see: http://msdn.microsoft.com/en-us/library/ms684961(v=VS.85).aspx * @param handle * @param length * @param eventsCount * @return */ private static final native int ReadConsoleInputW( @JniArg(cast="HANDLE", flags={POINTER_ARG}) long handle, @JniArg(cast="PINPUT_RECORD", flags={POINTER_ARG}) long inputRecord, int length, @JniArg(flags={NO_IN}) int[] eventsCount); /** * see: http://msdn.microsoft.com/en-us/library/ms684344(v=VS.85).aspx * @param handle * @param length * @param eventsCount * @return */ private static final native int PeekConsoleInputW( @JniArg(cast="HANDLE", flags={POINTER_ARG}) long handle, @JniArg(cast="PINPUT_RECORD", flags={POINTER_ARG}) long inputRecord, int length, @JniArg(flags={NO_IN}) int[] eventsCount); /** * see: http://msdn.microsoft.com/en-us/library/ms683207(v=VS.85).aspx * @param handle * @param numberOfEvents number of unread input records in the console's input buffer * @return */ public static final native int GetNumberOfConsoleInputEvents( @JniArg(cast="HANDLE", flags={POINTER_ARG}) long handle, @JniArg(flags={NO_IN}) int[] numberOfEvents); /** * see: http://msdn.microsoft.com/en-us/library/ms683147(v=VS.85).aspx * @param handle * @return */ public static final native int FlushConsoleInputBuffer( @JniArg(cast="HANDLE", flags={POINTER_ARG}) long handle); /** * Return console input events. * * @param handle * @param count requested number of events * @return null on read errors */ public static INPUT_RECORD[] readConsoleInputHelper( long handle, int count, boolean peek) throws IOException { int[] length = new int[1]; int res; long inputRecordPtr = 0; try { inputRecordPtr = malloc(INPUT_RECORD.SIZEOF * count); if (inputRecordPtr == 0) { throw new IOException("cannot allocate memory with JNI"); } res = peek ? PeekConsoleInputW(handle, inputRecordPtr, count, length) : ReadConsoleInputW(handle, inputRecordPtr, count, length); if (res == 0) { throw new IOException("ReadConsoleInputW failed"); } if (length[0] <= 0) { return new INPUT_RECORD[0]; } INPUT_RECORD[] records = new INPUT_RECORD[length[0]]; for (int i = 0; i < records.length; i++) { records[i] = new INPUT_RECORD(); INPUT_RECORD.memmove(records[i], PointerMath.add(inputRecordPtr, i*INPUT_RECORD.SIZEOF), INPUT_RECORD.SIZEOF); } return records; } finally { if (inputRecordPtr != 0) { free(inputRecordPtr); } } } /** * Return console input key events (discard other events). * * @param count requested number of events * @return array possibly of size smaller then count */ public static INPUT_RECORD[] readConsoleKeyInput(long handle, int count, boolean peek) throws IOException { while (true) { // read events until we have keyboard events, the queue could be full // of mouse events. INPUT_RECORD[] evts = readConsoleInputHelper(handle, count, peek); int keyEvtCount = 0; for (INPUT_RECORD evt : evts) { if (evt.eventType == INPUT_RECORD.KEY_EVENT) keyEvtCount++; } if (keyEvtCount > 0) { INPUT_RECORD[] res = new INPUT_RECORD[keyEvtCount]; int i = 0; for (INPUT_RECORD evt : evts) { if (evt.eventType == INPUT_RECORD.KEY_EVENT) { res[i++] = evt; } } return res; } } } } jansi-native-jansi-native-1.7/src/main/java/org/fusesource/jansi/internal/WindowsSupport.java000066400000000000000000000074031310262757000325660ustar00rootroot00000000000000/* * Copyright (C) 2009-2017 the original author(s). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.fusesource.jansi.internal; import static org.fusesource.jansi.internal.Kernel32.*; import org.fusesource.jansi.internal.Kernel32.CONSOLE_SCREEN_BUFFER_INFO; import java.io.IOException; /** * * @author Hiram Chirino */ public class WindowsSupport { public static String getLastErrorMessage() { int errorCode = GetLastError(); int bufferSize = 160; byte data[] = new byte[bufferSize]; FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, 0, errorCode, 0, data, bufferSize, null); return new String(data); } ////////////////////////////////////////////////////////////////////////// 00 // // The following helper methods are for jline // ////////////////////////////////////////////////////////////////////////// public static int readByte() { return _getch(); } public static int getConsoleMode() { long hConsole = GetStdHandle (STD_INPUT_HANDLE); if (hConsole == INVALID_HANDLE_VALUE) return -1; int mode[] = new int[1]; if (GetConsoleMode (hConsole, mode)==0) return -1; return mode[0]; } public static void setConsoleMode(int mode) { long hConsole = GetStdHandle (STD_INPUT_HANDLE); if (hConsole == INVALID_HANDLE_VALUE) return; SetConsoleMode (hConsole, mode); } public static int getWindowsTerminalWidth() { long outputHandle = GetStdHandle (STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO(); GetConsoleScreenBufferInfo (outputHandle, info); return info.windowWidth(); } public static int getWindowsTerminalHeight() { long outputHandle = GetStdHandle (STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO(); GetConsoleScreenBufferInfo (outputHandle, info); return info.windowHeight(); } public static int writeConsole(String msg) { long hConsole = GetStdHandle (STD_OUTPUT_HANDLE); if (hConsole == INVALID_HANDLE_VALUE) return 0; char[] chars = msg.toCharArray(); int[] written = new int[1]; if (WriteConsoleW(hConsole, chars, chars.length, written, 0) != 0) { return written[0]; } else { return 0; } } public static INPUT_RECORD[] readConsoleInput(int count) throws IOException { long hConsole = GetStdHandle (STD_INPUT_HANDLE); if (hConsole == INVALID_HANDLE_VALUE) return null; return readConsoleKeyInput(hConsole, count, false); } public static INPUT_RECORD[] peekConsoleInput(int count) throws IOException { long hConsole = GetStdHandle (STD_INPUT_HANDLE); if (hConsole == INVALID_HANDLE_VALUE) return null; return readConsoleKeyInput(hConsole, count, true); } public static void flushConsoleInputBuffer() { long hConsole = GetStdHandle (STD_INPUT_HANDLE); if (hConsole == INVALID_HANDLE_VALUE) return; FlushConsoleInputBuffer(hConsole); } } jansi-native-jansi-native-1.7/src/main/native-package/000077500000000000000000000000001310262757000227345ustar00rootroot00000000000000jansi-native-jansi-native-1.7/src/main/native-package/license.txt000066400000000000000000000261361310262757000251270ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. jansi-native-jansi-native-1.7/src/main/native-package/m4/000077500000000000000000000000001310262757000232545ustar00rootroot00000000000000jansi-native-jansi-native-1.7/src/main/native-package/m4/custom.m4000066400000000000000000000046371310262757000250420ustar00rootroot00000000000000dnl --------------------------------------------------------------------------- dnl Copyright (C) 2009-2017 the original author(s). dnl dnl Licensed under the Apache License, Version 2.0 (the "License"); dnl you may not use this file except in compliance with the License. dnl You may obtain a copy of the License at dnl dnl http://www.apache.org/licenses/LICENSE-2.0 dnl dnl Unless required by applicable law or agreed to in writing, software dnl distributed under the License is distributed on an "AS IS" BASIS, dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. dnl See the License for the specific language governing permissions and dnl limitations under the License. dnl --------------------------------------------------------------------------- AC_DEFUN([CUSTOM_M4_SETUP], [ AC_CHECK_LIB([c], [isatty],[AC_DEFINE([HAVE_ISATTY], [1], [Define to 1 if you have the isatty function.])]) AC_CHECK_LIB([c], [ttyname],[AC_DEFINE([HAVE_TTYNAME], [1], [Define to 1 if you have the ttyname function.])]) AC_CHECK_LIB([c], [tcgetattr],[AC_DEFINE([HAVE_TCGETATTR], [1], [Define to 1 if you have the tcgetattr function.])]) AC_CHECK_LIB([c], [tcsetattr],[AC_DEFINE([HAVE_TCSETATTR], [1], [Define to 1 if you have the tcsetattr function.])]) AC_CHECK_LIB([c], [ioctl],[AC_DEFINE([HAVE_IOCTL], [1], [Define to 1 if you have the ioctl function.])]) AC_SEARCH_LIBS([openpty], [util], [AC_DEFINE([HAVE_OPENPTY], [1], [Define to 1 if you have the openpty function.])]) AC_CHECK_HEADER([pty.h], [AC_DEFINE([HAVE_PTY_H], 1, [Header pty.h])]) AC_CHECK_HEADER([term.h], [AC_DEFINE([HAVE_JANSI_TERM_H], 1, [Header term.h])]) AC_CHECK_HEADER([termios.h], [AC_DEFINE([HAVE_TERMIOS_H], 1, [Header termios.h])]) AC_CHECK_HEADER([sys/ioctl.h], [AC_DEFINE([HAVE_IOCTL_H], 1, [Header sys/ioctl.h])]) AC_CHECK_HEADER([libutil.h], [AC_DEFINE([HAVE_JANSI_LIBUTIL_H], [1], [Header libutil.h])]) AC_CHECK_HEADER([util.h], [AC_DEFINE([HAVE_JANSI_UTIL_H], [1], [Header util.h])]) ssp_cc=yes if test "X$CC" != "X"; then AC_MSG_CHECKING([whether ${CC} accepts -fstack-protector]) ssp_old_cflags="$CFLAGS" CFLAGS="$CFLAGS -fstack-protector" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [], [], [ssp_cc=no]) AC_MSG_RESULT([$ssp_cc]) if test "X$ssp_cc" = "Xno"; then CFLAGS="$ssp_old_cflags" else AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.]) fi fi ])jansi-native-jansi-native-1.7/src/main/native-package/src/000077500000000000000000000000001310262757000235235ustar00rootroot00000000000000jansi-native-jansi-native-1.7/src/main/native-package/src/jansi.h000066400000000000000000000034141310262757000250020ustar00rootroot00000000000000/******************************************************************************* * Copyright (C) 2009-2017 the original author(s). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ #ifndef JANSI_H #define JANSI_H #ifdef HAVE_CONFIG_H /* configure based build.. we will use what it discovered about the platform */ #include "config.h" #else #if defined(_WIN32) || defined(_WIN64) /* Windows based build */ #define HAVE_STDLIB_H 1 #define HAVE_STRINGS_H 1 #define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 2 #define HAVE_ISATTY #include #include #include #define isatty _isatty #define getch _getch #endif #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRINGS_H #include #endif #ifdef HAVE_JANSI_TERM_H #include #endif #ifdef HAVE_JANSI_LIBUTIL_H #include #endif #ifdef HAVE_JANSI_UTIL_H #include #endif #ifdef HAVE_TERMIOS_H #include #endif #ifdef HAVE_IOCTL_H #include #endif #ifdef HAVE_PTY_H #include #endif #endif /* JANSI_H */ jansi-native-jansi-native-1.7/src/main/native-package/src/jansi_ttyname.c000066400000000000000000000024511310262757000265360ustar00rootroot00000000000000/******************************************************************************* * Copyright (C) 2017, the original author(s). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ #include "jansi.h" #include "hawtjni.h" #include "jansi_structs.h" #include "jansi_stats.h" #define CLibrary_NATIVE(func) Java_org_fusesource_jansi_internal_CLibrary_##func #if defined(HAVE_TTYNAME) JNIEXPORT jstring JNICALL CLibrary_NATIVE(ttyname) (JNIEnv *env, jclass that, jint arg0) { jstring rc = 0; char s[256] = { 0 }; int r = 0; CLibrary_NATIVE_ENTER(env, that, CLibrary_ttyname_FUNC); r = ttyname_r(arg0, s, 256); if (!r) rc = (*env)->NewStringUTF(env,s); CLibrary_NATIVE_EXIT(env, that, CLibrary_ttyname_FUNC); return rc; } #endif jansi-native-jansi-native-1.7/src/main/native-package/src/windows/000077500000000000000000000000001310262757000252155ustar00rootroot00000000000000jansi-native-jansi-native-1.7/src/main/native-package/src/windows/Makefile000066400000000000000000000231441310262757000266610ustar00rootroot00000000000000# Copyright (C) 2013-2017 the original author(s). # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # @author Mladen Turk # # # ==================================================================== # # Common params: # CPU Compile for specified CPU. Supported CPUs are: # X86 (Common x86 architecture) # X64 (AMD64/EMT64 architecture) # I64 (Intel IA64 architecture) # If not specified it will default to the # BUILD_CPU environment variable, failing that # It will default to the # PROCESSOR_ARCHITECTURE/ARCHITEW6432 environment variables # or failing that it will default to X86. # WINVER Compile for specified Windows version # WINNT for Windows 2000 and up(default) # WINXP for Windows XP and up # WIN2003 for Windows 2003 and up # VSITA for Windows Vista and up # Deprecated targets (may not even compile): # NT4 for Windows NT4 and up # WIN9X for Windows 95, 98 and Me # BUILD Build version # RETAIL or RELEASE (default) # DEBUG # UNICODE Build unicode version # If definded and not empty -D_UNICODE is added # to CFLAGS; -D_MBCS is added otherwise # Environment variables used: # EXTRA_CFLAGS Added to the common CFLAGS # EXTRA_CXXFLAGS Added to the common CXXFLAGS # EXTRA_LIBS Added to the common LIBS # EXTRA_LFLAGS Added to the common LFLAGS # EXTRA_RCFLAGS Added to the common RCFLAGS # # Compiler tools environment variables: # CC C compiler (defaults to cl.exe) # LINK Linker (defaults to link.exe) # RC Resource compiler (defaults to rc.exe) # MT Manifest toolkit (defaults to mt.exe) # # Originally contributed by Mladen Turk # # ==================================================================== # # C/C++ compiler !IF !DEFINED(CC) || "$(CC)" == "" CC = cl.exe !ENDIF # Linker !IF !DEFINED(LINK) || "$(LINK)" == "" LINK = link.exe !ENDIF # Resource Compiler !IF !DEFINED(RC) || "$(RC)" == "" RC = rc.exe !ENDIF # Manifest toolkit !IF !DEFINED(MT) || "$(MT)" == "" MT = mt.exe !ENDIF # Project Target TARGET = DLL UNICODE = 1 PROJECT = jansi # If CPU is not defined, apply defaults !IF !DEFINED(CPU) || "$(CPU)" == "" # Set BUILD_CPU if it is not yet set !IF !DEFINED(BUILD_CPU) || "$(BUILD_CPU)" == "" !IF "$(PROCESSOR_ARCHITECTURE)" == "" !IF "$(PROCESSOR_ARCHITEW6432)" == "" # Default to x86, will be upcased later BUILD_CPU=x86 !ELSE BUILD_CPU=$(PROCESSOR_ARCHITEW6432) !ENDIF !ELSE BUILD_CPU=$(PROCESSOR_ARCHITECTURE) !ENDIF !ENDIF # Check BUILD_CPU and reset value if necessary !IF "$(BUILD_CPU)" == "i386" || "$(BUILD_CPU)" == "x86" || "$(BUILD_CPU)" == "i686" CPU=X86 !ENDIF !IF "$(BUILD_CPU)" == "amd64" || "$(BUILD_CPU)" == "x86_64" || "$(BUILD_CPU)" == "x64" CPU=X64 !ENDIF !IF "$(BUILD_CPU)" == "ia64" || "$(BUILD_CPU)" == "i64" CPU=I64 !ENDIF # did we manage to set CPU? !IF !DEFINED(CPU) || "$(CPU)" == "" !ERROR Unexpected value of BUILD_CPU: $(BUILD_CPU) or PROCESSOR_ARCHITECTURE=$(PROCESSOR_ARCHITECTURE) or PROCESSOR_ARCHITEW6432=$(PROCESSOR_ARCHITEW6432). !ENDIF !ENDIF !IF "$(CPU)" != "X86" !IF "$(CPU)" != "X64" !IF "$(CPU)" != "I64" !ERROR Must specify CPU environment variable (X86, X64, I64) $(CPU) !ENDIF !ENDIF !ENDIF !IF !DEFINED(WINVER) || "$(WINVER)" == "" WINVER=WINXP !ENDIF !IF "$(WINVER)" != "WINNT" !IF "$(WINVER)" != "WINXP" !IF "$(WINVER)" != "WIN2003" !IF "$(WINVER)" != "VISTA" !IF "$(WINVER)" != "WIN7" !IF "$(WINVER)" != "WIN8" !ERROR Must specify WINVER environment variable (WINNT, WINXP, WIN2003, VISTA, WIN7, WIN8) !ENDIF !ENDIF !ENDIF !ENDIF !ENDIF !ENDIF !IF "$(WINVER)" == "WINNT" NMAKE_WINVER = 0x0500 _WIN32_IE = 0x0500 !ELSEIF "$(WINVER)" == "WINXP" NMAKE_WINVER = 0x0501 _WIN32_IE = 0x0600 !ELSEIF "$(WINVER)" == "WIN2003" NMAKE_WINVER = 0x0502 _WIN32_IE = 0x0600 !ELSEIF "$(WINVER)" == "VISTA" NMAKE_WINVER = 0x0600 _WIN32_IE = 0x0700 !ELSEIF "$(WINVER)" == "WIN7" NMAKE_WINVER = 0x0700 _WIN32_IE = 0x0800 !ELSEIF "$(WINVER)" == "WIN8" NMAKE_WINVER = 0x0800 _WIN32_IE = 0x0900 !ELSE !ERROR Must specify WINVER environment variable (WINNT, WINXP, WIN2003, VISTA, WIN7, WIN8) !ENDIF NMAKE_WINNT = -D_WINNT -D_WIN32_WINNT=$(NMAKE_WINVER) -DWINVER=$(NMAKE_WINVER) -D_WIN32_IE=$(_WIN32_IE) !IF !DEFINED(BUILD) || "$(BUILD)" == "" BUILD=RELEASE !ENDIF !IFDEF RELEASE BUILD=RELEASE !ENDIF !IFDEF DEBUG BUILD=DEBUG !ENDIF !IFDEF NODEBUG BUILD=RELEASE !ENDIF !IF "$(BUILD)" != "RELEASE" !IF "$(BUILD)" != "DEBUG" !ERROR Must specify BUILD environment variable (RELEASE, DEBUG) !ENDIF !ENDIF # Common flags for all platforms CMN_CFLAGS = -c -nologo -DWIN32 -D_WIN32 -D_WINDOWS $(NMAKE_WINNT) -W3 !IF "$(TARGET)" == "EXE" CMN_CFLAGS = $(CMN_CFLAGS) -D_CONSOLE !ENDIF # Mark that extern C newer throws C++ exception CMN_CFLAGS = $(CMN_CFLAGS) -EHsc !IF !DEFINED(UNICODE) || "$(UNICODE)" == "" CMN_CFLAGS = $(CMN_CFLAGS) -D_MBCS -DMBCS !ELSE CMN_CFLAGS = $(CMN_CFLAGS) -D_UNICODE -DUNICODE !ENDIF !IF "$(CPU)" == "X86" CPU_CFLAGS = -D_X86_=1 MACHINE=X86 MACHINE_LC=i386 !ELSEIF "$(CPU)" == "X64" CPU_CFLAGS = -D_AMD64_=1 -DWIN64 -D_WIN64 MACHINE=AMD64 MACHINE_LC=amd64 !ELSEIF "$(CPU)" == "I64" CPU_CFLAGS = -D_IA64_=1 -DWIN64 -D_WIN64 MACHINE=IA64 MACHINE_LC=ia64 !ENDIF !IF "$(BUILD)" == "RELEASE" !IF "$(CPU)" == "X86" OPT_CFLAGS = -O2 -Ob2 -Oy- -Zi -DNDEBUG !ELSE OPT_CFLAGS = -O2 -Ob2 -Zi -DNDEBUG !ENDIF !ELSE OPT_CFLAGS = -Od -Zi -DDEBUG -D_DEBUG !ENDIF !IF DEFINED(STATIC_CRT) CRT_CFLAGS = -D_MT -MT !ELSE CRT_CFLAGS = -D_MT -MD !ENDIF !IF "$(BUILD)" == "DEBUG" CRT_CFLAGS = $(CRT_CFLAGS)d !ENDIF CFLAGS = $(CMN_CFLAGS) $(CPU_CFLAGS) $(OPT_CFLAGS) $(CRT_CFLAGS) !IF DEFINED(EXTRA_CFLAGS) CFLAGS = $(CFLAGS) $(EXTRA_CFLAGS) !ENDIF # Cleanup CXXFLAGS CXXFLAGS = !IF DEFINED(EXTRA_CXXFLAGS) CXXFLAGS = $(EXTRA_CXXFLAGS) !ENDIF # Linker section LIBS = kernel32.lib # Extra libs from command line or env !IF DEFINED(EXTRA_LIBS) LIBS = $(LIBS) $(EXTRA_LIBS) !ENDIF # Run-Time Error Checks !IF "$(BUILD)" == "DEBUG" !IF DEFINED(RTC_CHECK) LIBS = $(LIBS) RunTmChk.lib CFLAGS = $(CFLAGS) -RTC1 !ENDIF !ENDIF # Always add debugging to the linker OPT_LFLAGS = /INCREMENTAL:NO /DEBUG !IF "$(BUILD)" == "RELEASE" OPT_LFLAGS = /OPT:REF !ENDIF LFLAGS = /NOLOGO /DLL /SUBSYSTEM:WINDOWS /MACHINE:$(MACHINE) !IF DEFINED(EXTRA_LFLAGS) LFLAGS = $(LFLAGS) $(EXTRA_LFLAGS) !ENDIF !IF "$(TARGET)" != "LIB" LFLAGS = $(LFLAGS) $(OPT_LFLAGS) !ENDIF # Resource compiler flags RCFLAGS=/l 0x409 !IF "$(BUILD)" == "RELEASE" RCFLAGS = $(RCFLAGS) /d "NDEBUG" !ELSE RCFLAGS = $(RCFLAGS) /d "_DEBUG" /d "DEBUG" !ENDIF RCFLAGS = $(RCFLAGS) !IF DEFINED(EXTRA_RCFLAGS) RCFLAGS = $(RCFLAGS) $(EXTRA_RCFLAGS) !ENDIF # Build Target dir e.g. WINNT_I386_RELEASE_DLL !IF !DEFINED(WORKDIR) || "$(WORKDIR)" == "" !IF !DEFINED(WORKDIR_EXT) || "$(WORKDIR_EXT)" == "" WORKDIR = $(WINVER)_$(CPU)_$(TARGET)_$(BUILD) WORKDIR_DLL = $(WINVER)_$(CPU)_DLL_$(BUILD) !ELSE WORKDIR = $(WINVER)_$(CPU)_$(BUILDIR_EXT)_$(BUILD) !ENDIF !ENDIF CLEANTARGET=if exist "$(WORKDIR)\$(NULL)" rd /s /q $(WORKDIR) MAKEWORKDIR=if not exist "$(WORKDIR)\$(NULL)" mkdir $(WORKDIR) MAKEINSTALL=if not exist "$(INSTALLLOC)\$(NULL)" mkdir $(INSTALLLOC) !IF DEFINED(JAVA_HOME) && "$(JAVA_HOME)" != "" JAVA_INCLUDES=-I "$(JAVA_HOME)\include" -I "$(JAVA_HOME)\include\win32" !ENDIF !IF !DEFINED(SRCDIR) || "$(SRCDIR)" == "" SRCDIR = .\..\.. !ENDIF !IF !DEFINED(PREFIX) || "$(PREFIX)" == "" PREFIX = .\..\..\target !ENDIF # # ==================================================================== # INCLUDES = -I$(SRCDIR)\src\windows -I$(SRCDIR)\src $(JAVA_INCLUDES) PDBFLAGS = -Fo$(WORKDIR)\ -Fd$(WORKDIR)\$(PROJECT)-src OBJECTS = \ $(WORKDIR)\hawtjni.obj \ $(WORKDIR)\jansi.obj \ $(WORKDIR)\jansi_stats.obj \ $(WORKDIR)\jansi_structs.obj BUILDDLL = $(WORKDIR)\$(PROJECT).dll !IF "$(CPU)" == "X64" BUILDLOC = $(PREFIX)\x64 !ELSEIF "$(CPU)" == "I64" BUILDLOC = $(PREFIX)\i64 !ELSE BUILDLOC = $(PREFIX)\x86 !ENDIF BUILDPDB = $(WORKDIR)\$(PROJECT).pdb BUILDRES = $(WORKDIR)\$(PROJECT).res BUILDMAN = $(BUILDDLL).manifest all : $(WORKDIR) $(BUILDDLL) $(BUILDLOC) : @if not exist "$(BUILDLOC)\$(NULL)" mkdir "$(BUILDLOC)" $(WORKDIR) : @$(MAKEWORKDIR) {$(SRCDIR)\src}.c{$(WORKDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< $(BUILDRES): $(SRCDIR)/src/windows/jansi.rc $(RC) $(RCFLAGS) /i "$(SRCDIR)\src" /i "$(SRCDIR)\src\windows" /fo $(BUILDRES) $(SRCDIR)/src/windows/jansi.rc $(BUILDDLL): $(WORKDIR) $(OBJECTS) $(BUILDRES) $(LINK) $(LFLAGS) $(OBJECTS) $(BUILDRES) $(LIBS) $(LDIRS) /pdb:$(BUILDPDB) /out:$(BUILDDLL) IF EXIST $(BUILDMAN) \ $(MT) -nologo -manifest $(BUILDMAN) -outputresource:$(BUILDDLL);2 clean: @$(CLEANTARGET) install: $(BUILDLOC) $(WORKDIR) $(BUILDDLL) @xcopy "$(WORKDIR)\*.dll" "$(BUILDLOC)" /Y /Q jansi-native-jansi-native-1.7/src/main/native-package/src/windows/crtdll.c000066400000000000000000000021101310262757000266370ustar00rootroot00000000000000/******************************************************************************* * Copyright (C) 2009-2017 the original author(s). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ #if defined(_WIN32) || defined(_WIN64) #include void __cdecl __security_init_cookie(void); BOOL WINAPI _DllMainCRTStartup(HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) { if (dwReason == DLL_PROCESS_ATTACH) __security_init_cookie(); return TRUE; } #endif /* defined(_WIN32) || defined(_WIN64) */ jansi-native-jansi-native-1.7/src/main/native-package/src/windows/jansi.rc000066400000000000000000000071161310262757000266540ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 the original author(s). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #include #define STR_LICENSE \ "Licensed under the Apache License, Version 2.0 (the ""License""); " \ "you may not use this file except in compliance with the License. " \ "You may obtain a copy of the License at\r\n" \ "\r\n" \ "http://www.apache.org/licenses/LICENSE-2.0\r\n" \ "\r\n" \ "Unless required by applicable law or agreed to in writing, software " \ "distributed under the License is distributed on an ""AS IS"" BASIS, " \ "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. " \ "See the License for the specific language governing permissions and " \ "limitations under the License." #define STR_COPYRIGHT \ "Copyright 2013, Red Hat, Inc. and/or its\r\n" \ "subsidiaries or affiliates. All rights reserved." #define STR_COMPANY "Red Hat, Inc." #define STR_TRADEMARK " Red Hat Inc." #ifndef STR_PRODUCT #define STR_PRODUCT "Jansi - Java library for generating and interpreting ANSI escape sequences." #endif #ifndef STR_INTNAME #define STR_INTNAME "jansi" #endif #ifndef STR_BINNAME #define STR_BINNAME STR_INTNAME ".dll" #endif #ifndef STR_VERSION #define STR_VERSION "1.7.0" #endif #ifndef CSV_VERSION #define CSV_VERSION 1,7,0 #endif #define PRIVATE_BUILD 0 #define PRERELEASE_BUILD 0 #if PRIVATE_BUILD #define STR_PRIVATE "Initial Prerelease" #define STR_SPECIAL "Basic functionality" #define STD_FILEFLAGS VS_FF_PRIVATEBUILD | VS_FF_SPECIALBUILD #else #define STD_FILEFLAGS 0x0L #endif #if PRERELEASE_BUILD #define PSTD_FILEFLAGS STD_FILEFLAGS | VS_FF_PRERELEASE #else #define PSTD_FILEFLAGS STD_FILEFLAGS #endif #ifdef _DEBUG #define APP_FILEFLAGS STD_FILEFLAGS | VS_FF_DEBUG #else #define APP_FILEFLAGS STD_FILEFLAGS #endif 1 VERSIONINFO FILEVERSION CSV_VERSION PRODUCTVERSION CSV_VERSION FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS APP_FILEFLAGS FILEOS VOS_NT FILETYPE VFT_APP FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", STR_LICENSE "\0" VALUE "CompanyName", STR_COMPANY "\0" VALUE "FileDescription", STR_PRODUCT "\0" VALUE "FileVersion", STR_VERSION "\0" VALUE "InternalName", STR_INTNAME "\0" VALUE "LegalCopyright", STR_COPYRIGHT "\0" VALUE "LegalTrademarks", STR_TRADEMARK "\0" VALUE "OriginalFilename", STR_BINNAME "\0" VALUE "ProductName", STR_PRODUCT "\0" VALUE "ProductVersion", STR_VERSION "\0" #if PRIVATE_BUILD VALUE "PrivateBuild", STR_PRIVATE "\0" VALUE "SpecialBuild", STR_SPECIAL "\0" #endif END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END jansi-native-jansi-native-1.7/src/main/native-package/src/windows/msvcrt.def000066400000000000000000000422051310262757000272160ustar00rootroot00000000000000EXPORTS ___lc_codepage_func ___lc_collate_cp_func ___lc_handle_func ___mb_cur_max_func ___setlc_active_func ___unguarded_readlc_active_add_func __argc __argv __badioinfo __CppXcptFilter __crtCompareStringA __crtCompareStringW __crtGetLocaleInfoW __crtGetStringTypeW __crtLCMapStringA __crtLCMapStringW __CxxFrameHandler __CxxFrameHandler2 __CxxFrameHandler3 __daylight __DestructExceptionObject __dllonexit __doserrno __dstbias __fpecode __getmainargs __initenv __iob_func __isascii __iscsym __iscsymf __lc_codepage __lc_collate_cp __lc_handle __lconv_init __mb_cur_max __pctype_func __pioinfo __pwctype_func __pxcptinfoptrs __RTCastToVoid __RTDynamicCast __RTtypeid __set_app_type __setlc_active __setusermatherr __STRINGTOLD __strncnt __threadhandle __threadid __toascii __uncaught_exception __unDName __unDNameEx __unguarded_readlc_active __wargv __wcserror __wcserror_s __wcsncnt __wgetmainargs __winitenv _abs64 _access _access_s _acmdln _aexit_rtn _aligned_free _aligned_free_dbg _aligned_malloc _aligned_malloc_dbg _aligned_offset_malloc _aligned_offset_malloc_dbg _aligned_offset_realloc _aligned_offset_realloc_dbg _aligned_realloc _aligned_realloc_dbg _amsg_exit _assert _atodbl _atodbl_l _atof_l _atoflt_l _atoi_l _atoi64 _atoi64_l _atol_l _atoldbl _atoldbl_l _beep _beginthread _beginthreadex _c_exit _cabs _callnewh _calloc_dbg _cexit _cgets _cgets_s _cgetws _cgetws_s _chdir _chdrive _chgsign _chmod _chsize _chsize_s _chvalidator _chvalidator_l _clearfp _close _commit _commode _control87 _controlfp _controlfp_s _copysign _cprintf _cprintf_l _cprintf_p _cprintf_p_l _cprintf_s _cprintf_s_l _cputs _cputws _creat _crtAssertBusy _crtBreakAlloc _CrtCheckMemory _CrtDbgBreak _crtDbgFlag _CrtDbgReport _CrtDbgReportV _CrtDbgReportW _CrtDbgReportWV _CrtDoForAllClientObjects _CrtDumpMemoryLeaks _CrtIsMemoryBlock _CrtIsValidHeapPointer _CrtIsValidPointer _CrtMemCheckpoint _CrtMemDifference _CrtMemDumpAllObjectsSince _CrtMemDumpStatistics _CrtReportBlockType _CrtSetAllocHook _CrtSetBreakAlloc _CrtSetDbgBlockType _CrtSetDbgFlag _CrtSetDumpClient _CrtSetReportFile _CrtSetReportHook _CrtSetReportHook2 _CrtSetReportMode _cscanf _cscanf_l _cscanf_s _cscanf_s_l _ctime32 _ctime32_s _ctime64 _ctime64_s _ctype _cwait _cwprintf _cwprintf_l _cwprintf_p _cwprintf_p_l _cwprintf_s _cwprintf_s_l _cwscanf _cwscanf_l _cwscanf_s _cwscanf_s_l _CxxThrowException _daylight _difftime32 _difftime64 _dstbias _dup _dup2 _ecvt _ecvt_s _endthread _endthreadex _environ _eof _errno _execl _execle _execlp _execlpe _execv _execve _execvp _execvpe _exit _expand _expand_dbg _fcloseall _fcvt _fcvt_s _fdopen _fgetchar _fgetwchar _filbuf _fileinfo _filelength _filelengthi64 _fileno _findclose _findfirst _findfirst64 _findfirsti64 _findnext _findnext64 _findnexti64 _finite _flsbuf _flushall _fmode _fpclass _fpreset _fprintf_l _fprintf_p _fprintf_p_l _fprintf_s_l _fputchar _fputwchar _free_dbg _freea _freea_s _fscanf_l _fscanf_s_l _fseeki64 _fsopen _fstat _fstat64 _fstati64 _ftime _ftime32 _ftime32_s _ftime64 _ftime64_s _fullpath _fullpath_dbg _futime _futime32 _futime64 _fwprintf_l _fwprintf_p _fwprintf_p_l _fwprintf_s_l _fwscanf_l _fwscanf_s_l _gcvt _gcvt_s _get_doserrno _get_environ _get_errno _get_fileinfo _get_fmode _get_heap_handle _get_osfhandle _get_osplatform _get_osver _get_output_format _get_pgmptr _get_sbh_threshold _get_wenviron _get_winmajor _get_winminor _get_winver _get_wpgmptr _getch _getche _getcwd _Getdays _getdcwd _getdiskfree _getdrive _getdrives _getmaxstdio _getmbcp _Getmonths _getpid _getsystime _Gettnames _getw _getwch _getwche _getws _gmtime32 _gmtime32_s _gmtime64 _gmtime64_s _heapchk _heapmin _heapset _heapwalk _HUGE _hypot _i64toa _i64toa_s _i64tow _i64tow_s _initterm _initterm_e _invalid_parameter _iob _isalnum_l _isalpha_l _isatty _iscntrl_l _isctype _isctype_l _isdigit_l _isgraph_l _isleadbyte_l _islower_l _ismbbalnum _ismbbalnum_l _ismbbalpha _ismbbalpha_l _ismbbgraph _ismbbgraph_l _ismbbkalnum _ismbbkalnum_l _ismbbkana _ismbbkana_l _ismbbkprint _ismbbkprint_l _ismbbkpunct _ismbbkpunct_l _ismbblead _ismbblead_l _ismbbprint _ismbbprint_l _ismbbpunct _ismbbpunct_l _ismbbtrail _ismbbtrail_l _ismbcalnum _ismbcalnum_l _ismbcalpha _ismbcalpha_l _ismbcdigit _ismbcdigit_l _ismbcgraph _ismbcgraph_l _ismbchira _ismbchira_l _ismbckata _ismbckata_l _ismbcl0 _ismbcl0_l _ismbcl1 _ismbcl1_l _ismbcl2 _ismbcl2_l _ismbclegal _ismbclegal_l _ismbclower _ismbclower_l _ismbcprint _ismbcprint_l _ismbcpunct _ismbcpunct_l _ismbcspace _ismbcspace_l _ismbcsymbol _ismbcsymbol_l _ismbcupper _ismbcupper_l _ismbslead _ismbslead_l _ismbstrail _ismbstrail_l _isnan _isprint_l _isspace_l _isupper_l _iswalnum_l _iswalpha_l _iswcntrl_l _iswctype_l _iswdigit_l _iswgraph_l _iswlower_l _iswprint_l _iswpunct_l _iswspace_l _iswupper_l _iswxdigit_l _isxdigit_l _itoa _itoa_s _itow _itow_s _j0 _j1 _jn _kbhit _lfind _lfind_s _localtime32 _localtime32_s _localtime64 _localtime64_s _lock _locking _logb _lrotl _lrotr _lsearch _lsearch_s _lseek _lseeki64 _ltoa _ltoa_s _ltow _ltow_s _makepath _makepath_s _malloc_dbg _mbbtombc _mbbtombc_l _mbbtype _mbcasemap _mbccpy _mbccpy_l _mbccpy_s _mbccpy_s_l _mbcjistojms _mbcjistojms_l _mbcjmstojis _mbcjmstojis_l _mbclen _mbclen_l _mbctohira _mbctohira_l _mbctokata _mbctokata_l _mbctolower _mbctolower_l _mbctombb _mbctombb_l _mbctoupper _mbctoupper_l _mbctype _mblen_l _mbsbtype _mbsbtype_l _mbscat _mbscat_s _mbscat_s_l _mbschr _mbschr_l _mbscmp _mbscmp_l _mbscoll _mbscoll_l _mbscpy _mbscpy_s _mbscpy_s_l _mbscspn _mbscspn_l _mbsdec _mbsdec_l _mbsdup _mbsicmp _mbsicmp_l _mbsicoll _mbsicoll_l _mbsinc _mbsinc_l _mbslen _mbslen_l _mbslwr _mbslwr_l _mbslwr_s _mbslwr_s_l _mbsnbcat _mbsnbcat_l _mbsnbcat_s _mbsnbcat_s_l _mbsnbcmp _mbsnbcmp_l _mbsnbcnt _mbsnbcnt_l _mbsnbcoll _mbsnbcoll_l _mbsnbcpy _mbsnbcpy_l _mbsnbcpy_s _mbsnbcpy_s_l _mbsnbicmp _mbsnbicmp_l _mbsnbicoll _mbsnbicoll_l _mbsnbset _mbsnbset_l _mbsnbset_s _mbsnbset_s_l _mbsncat _mbsncat_l _mbsncat_s _mbsncat_s_l _mbsnccnt _mbsnccnt_l _mbsncmp _mbsncmp_l _mbsncoll _mbsncoll_l _mbsncpy _mbsncpy_l _mbsncpy_s _mbsncpy_s_l _mbsnextc _mbsnextc_l _mbsnicmp _mbsnicmp_l _mbsnicoll _mbsnicoll_l _mbsninc _mbsninc_l _mbsnlen _mbsnlen_l _mbsnset _mbsnset_l _mbsnset_s _mbsnset_s_l _mbspbrk _mbspbrk_l _mbsrchr _mbsrchr_l _mbsrev _mbsrev_l _mbsset _mbsset_l _mbsset_s _mbsset_s_l _mbsspn _mbsspn_l _mbsspnp _mbsspnp_l _mbsstr _mbsstr_l _mbstok _mbstok_l _mbstok_s _mbstok_s_l _mbstowcs_l _mbstowcs_s_l _mbstrlen _mbstrlen_l _mbstrnlen _mbstrnlen_l _mbsupr _mbsupr_l _mbsupr_s _mbsupr_s_l _mbtowc_l _memccpy _memicmp _memicmp_l _mkdir _mkgmtime _mkgmtime32 _mkgmtime64 _mktemp _mktemp_s _mktime32 _mktime64 _msize _nextafter _onexit _open _open_osfhandle _osplatform _osver _pclose _pctype _pgmptr _pipe _popen _printf_l _printf_p _printf_p_l _printf_s_l _purecall _putch _putenv _putenv_s _putw _putwch _putws _pwctype _read _realloc_dbg _resetstkoflw _rmdir _rmtmp _rotl _rotl64 _rotr _rotr64 _scalb _scanf_l _scanf_s_l _scprintf _scprintf_l _scprintf_p_l _scwprintf _scwprintf_l _scwprintf_p_l _searchenv _searchenv_s _set_controlfp _set_doserrno _set_errno _set_error_mode _set_fileinfo _set_fmode _set_output_format _set_sbh_threshold _seterrormode _setjmp _setmaxstdio _setmbcp _setmode _setsystime _sleep _snprintf _snprintf_c _snprintf_c_l _snprintf_l _snprintf_s _snprintf_s_l _snscanf _snscanf_l _snscanf_s _snscanf_s_l _snwprintf _snwprintf_l _snwprintf_s _snwprintf_s_l _snwscanf _snwscanf_l _snwscanf_s _snwscanf_s_l _sopen _sopen_s _spawnl _spawnle _spawnlp _spawnlpe _spawnv _spawnve _spawnvp _spawnvpe _splitpath _splitpath_s _sprintf_l _sprintf_p_l _sprintf_s_l _sscanf_l _sscanf_s_l _stat _stat64 _stati64 _statusfp _strcmpi _strcoll_l _strdate _strdate_s _strdup _strdup_dbg _strerror _strerror_s _Strftime _stricmp _stricmp_l _stricoll _stricoll_l _strlwr _strlwr_l _strlwr_s _strlwr_s_l _strncoll _strncoll_l _strnicmp _strnicmp_l _strnicoll _strnicoll_l _strnset _strnset_s _strrev _strset _strset_s _strtime _strtime_s _strtod_l _strtoi64 _strtoi64_l _strtol_l _strtoui64 _strtoui64_l _strtoul_l _strupr _strupr_l _strupr_s _strupr_s_l _strxfrm_l _swab _swprintf _swprintf_c _swprintf_c_l _swprintf_p_l _swprintf_s_l _swscanf_l _swscanf_s_l _sys_errlist _sys_nerr _tell _telli64 _tempnam _tempnam_dbg _time32 _time64 _timezone _tolower _tolower_l _toupper _toupper_l _towlower_l _towupper_l _tzname _tzset _ui64toa _ui64toa_s _ui64tow _ui64tow_s _ultoa _ultoa_s _ultow _ultow_s _umask _umask_s _ungetch _ungetwch _unlink _unlock _utime _utime32 _utime64 _vcprintf _vcprintf_l _vcprintf_p _vcprintf_p_l _vcprintf_s _vcprintf_s_l _vcwprintf _vcwprintf_l _vcwprintf_p _vcwprintf_p_l _vcwprintf_s _vcwprintf_s_l _vfprintf_l _vfprintf_p _vfprintf_p_l _vfprintf_s_l _vfwprintf_l _vfwprintf_p _vfwprintf_p_l _vfwprintf_s_l _vprintf_l _vprintf_p _vprintf_p_l _vprintf_s_l _vscprintf _vscprintf_l _vscprintf_p_l _vscwprintf _vscwprintf_l _vscwprintf_p_l _vsnprintf _vsnprintf_c _vsnprintf_c_l _vsnprintf_l _vsnprintf_s _vsnprintf_s_l _vsnwprintf _vsnwprintf_l _vsnwprintf_s _vsnwprintf_s_l _vsprintf_l _vsprintf_p _vsprintf_p_l _vsprintf_s_l _vswprintf _vswprintf_c _vswprintf_c_l _vswprintf_l _vswprintf_p_l _vswprintf_s_l _vwprintf_l _vwprintf_p _vwprintf_p_l _vwprintf_s_l _waccess _waccess_s _wasctime _wasctime_s _wassert _wchdir _wchmod _wcmdln _wcreat _wcscoll_l _wcsdup _wcsdup_dbg _wcserror _wcserror_s _wcsftime_l _wcsicmp _wcsicmp_l _wcsicoll _wcsicoll_l _wcslwr _wcslwr_l _wcslwr_s _wcslwr_s_l _wcsncoll _wcsncoll_l _wcsnicmp _wcsnicmp_l _wcsnicoll _wcsnicoll_l _wcsnset _wcsnset_s _wcsrev _wcsset _wcsset_s _wcstoi64 _wcstoi64_l _wcstol_l _wcstombs_l _wcstombs_s_l _wcstoui64 _wcstoui64_l _wcstoul_l _wcsupr _wcsupr_l _wcsupr_s _wcsupr_s_l _wcsxfrm_l _wctime _wctime32 _wctime32_s _wctime64 _wctime64_s _wctomb_l _wctomb_s_l _wctype _wenviron _wexecl _wexecle _wexeclp _wexeclpe _wexecv _wexecve _wexecvp _wexecvpe _wfdopen _wfindfirst _wfindfirst64 _wfindfirsti64 _wfindnext _wfindnext64 _wfindnexti64 _wfopen _wfopen_s _wfreopen _wfreopen_s _wfsopen _wfullpath _wfullpath_dbg _wgetcwd _wgetdcwd _wgetenv _wgetenv_s _winmajor _winminor _winput_s _winver _wmakepath _wmakepath_s _wmkdir _wmktemp _wmktemp_s _wopen _woutput_s _wperror _wpgmptr _wpopen _wprintf_l _wprintf_p _wprintf_p_l _wprintf_s_l _wputenv _wputenv_s _wremove _wrename _write _wrmdir _wscanf_l _wscanf_s_l _wsearchenv _wsearchenv_s _wsetlocale _wsopen _wsopen_s _wspawnl _wspawnle _wspawnlp _wspawnlpe _wspawnv _wspawnve _wspawnvp _wspawnvpe _wsplitpath _wsplitpath_s _wstat _wstat64 _wstati64 _wstrdate _wstrdate_s _wstrtime _wstrtime_s _wsystem _wtempnam _wtempnam_dbg _wtmpnam _wtmpnam_s _wtof _wtof_l _wtoi _wtoi_l _wtoi64 _wtoi64_l _wtol _wtol_l _wunlink _wutime _wutime32 _wutime64 _XcptFilter _y0 _y1 _yn abort abs acos asctime asctime_s asin atan atan2 atexit atof atoi atol bsearch bsearch_s btowc calloc ceil clearerr clearerr_s clock cos cosh ctime difftime div exit exp fabs fclose feof ferror fflush fgetc fgetpos fgets fgetwc fgetws floor fmod fopen fopen_s fprintf fprintf_s fputc fputs fputwc fputws fread free freopen freopen_s frexp fscanf fscanf_s fseek fsetpos ftell fwprintf fwprintf_s fwrite fwscanf fwscanf_s getc getchar getenv getenv_s gets getwc getwchar gmtime is_wctype isalnum isalpha iscntrl isdigit isgraph isleadbyte islower isprint ispunct isspace isupper iswalnum iswalpha iswascii iswcntrl iswctype iswdigit iswgraph iswlower iswprint iswpunct iswspace iswupper iswxdigit isxdigit labs ldexp ldiv localeconv localtime log log10 longjmp malloc mblen mbrlen mbrtowc mbsdup_dbg mbsrtowcs mbsrtowcs_s mbstowcs mbstowcs_s mbtowc memchr memcmp memcpy memcpy_s memmove memmove_s memset mktime modf perror pow printf printf_s putc putchar puts putwc putwchar qsort qsort_s raise rand rand_s realloc remove rename rewind scanf scanf_s setbuf setlocale setvbuf signal sin sinh sprintf sprintf_s sqrt srand sscanf sscanf_s strcat strcat_s strchr strcmp strcoll strcpy strcpy_s strcspn strerror strerror_s strftime strlen strncat strncat_s strncmp strncpy strncpy_s strnlen strpbrk strrchr strspn strstr strtod strtok strtok_s strtol strtoul strxfrm swprintf swprintf_s swscanf swscanf_s system tan tanh time tmpfile tmpfile_s tmpnam tmpnam_s tolower toupper towlower towupper ungetc ungetwc utime vfprintf vfprintf_s vfwprintf vfwprintf_s vprintf vprintf_s vsnprintf vsprintf vsprintf_s vswprintf vswprintf_s vwprintf vwprintf_s wcrtomb wcrtomb_s wcscat wcscat_s wcschr wcscmp wcscoll wcscpy wcscpy_s wcscspn wcsftime wcslen wcsncat wcsncat_s wcsncmp wcsncpy wcsncpy_s wcsnlen wcspbrk wcsrchr wcsrtombs wcsrtombs_s wcsspn wcsstr wcstod wcstok wcstok_s wcstol wcstombs wcstombs_s wcstoul wcsxfrm wctob wctomb wctomb_s wprintf wprintf_s wscanf wscanf_s jansi-native-jansi-native-1.7/src/main/native-package/src/windows/readme.txt000066400000000000000000000033041310262757000272130ustar00rootroot00000000000000Using the Windows msvcrt.dll ============================ See message thread for history: http://groups.google.com/group/jansi-dev/browse_thread/thread/e7867408d43660e1 Benefits -------- No need for the VS redistributables. crtdll.c -------- A minimal entry point (_DllMainCRTStartup) The "official" _DllMainCRTStartup is way more complicated (and has more dependencies), but most of it is not needed if the thing is small, and plain C (so no exceptions and other fancy C++ stuff) msvcrt.lib ---------- The msvcrt.lib files (32/64 bit) are generated from the Win7 msvcrt.dll. The msvcrt.def file is generated once "by hand" and submited as part of the project The msvcrt.lib file is generated ad build time from msvcrt.def - dumpbin.exe /exports msvcrt.dll > msvcrt.dump - Created msvcrt.def from msvcrt.dump (just removed a bunch of extra info) - The msvcrt.def file in this project is an intersection of the 32/64 bit versions No problem, the excluded functions are really-really obscure. In fact, it is enough to list in msvcrt.def the few functions we use, and add more by hand as needed - Added as a custom build step lib /machine:X32 /def:msvcrt.def /out:msvcrt.lib (or /machine:X64, of course) vs2010.vcxproj -------------- - Sources: added crtdll.c - Sources: added msvcrt.def, with a custom build step that generates the .lib - Linker - General: added $(IntDir) as "Additional Library Directory" (for msvcrt.lib) - Linker - Input: "Ignore All Default Libraries" (/NODEFAULTLIB) - Linker - Input: removed user32.lib; ... ;odbccp32.lib, and added msvcrt.lib;RunTmChk.lib instead (RunTmChk.lib is in the VS lib folder, and needed for security_check_cookie) jansi-native-jansi-native-1.7/src/main/native-package/vs2010.vcxproj000066400000000000000000000275601310262757000253160ustar00rootroot00000000000000 debug Win32 debug x64 release Win32 release x64 jansi jansi $(ProjectDir)\target\$(Platform)-$(Configuration)\lib\ $(ProjectDir)\target\$(Platform)-$(Configuration)\obj\ false v140 DynamicLibrary Unicode DynamicLibrary Unicode true DynamicLibrary Unicode DynamicLibrary Unicode true <_ProjectFileVersion>10.0.30319.1 $(ProjectDir)/target/$(Platform)-$(Configuration)/lib\ $(ProjectDir)/target/$(Platform)-$(Configuration)/obj\ false $(ProjectDir)/target/$(Platform)-$(Configuration)/lib\ $(ProjectDir)/target/$(Platform)-$(Configuration)/obj\ false $(ProjectDir)/target/$(Platform)-$(Configuration)/lib\ $(ProjectDir)/target/$(Platform)-$(Configuration)/obj\ true $(ProjectDir)/target/$(Platform)-$(Configuration)/lib\ $(ProjectDir)/target/$(Platform)-$(Configuration)/obj\ true $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\src\windows;%(AdditionalIncludeDirectories) MaxSpeed true Speed WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) MultiThreadedDLL true false Level3 ProgramDatabase StdCall CompileAsC true Windows true true MachineX86 $(IntDir) true kernel32.lib;msvcrt.lib;bufferoverflowU.lib;libcmt.lib $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\src\windows;%(AdditionalIncludeDirectories) MaxSpeed true Speed WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) MultiThreadedDLL true false Level3 ProgramDatabase StdCall CompileAsC true Windows true true MachineX64 $(IntDir) true kernel32.lib;msvcrt.lib;bufferoverflowU.lib;libcmt.lib $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\src\windows;%(AdditionalIncludeDirectories) Disabled Speed WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL false Level3 EditAndContinue StdCall CompileAsC true Windows MachineX86 $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\src\windows;%(AdditionalIncludeDirectories) Disabled Speed WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL false Level3 EditAndContinue StdCall CompileAsC true Windows MachineX64 lib /nologo /machine:$(Platform) /def:%(FullPath) /out:$(IntDir)%(Filename).lib $(IntDir)%(Filename).lib;$(IntDir)%(Filename).exp true lib /nologo /machine:$(Platform) /def:%(FullPath) /out:$(IntDir)%(Filename).lib $(IntDir)%(Filename).lib;$(IntDir)%(Filename).exp true