Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Pygments / examplefiles / output / all.nit
Size: Mime:
€]q(cpygments.token
_TokenType
qXCommentqXSingleq†q…qq}q(Xsubtypesqcbuiltins
set
q	]q
…qRqXparentq
hh…q…qq}q(hh	]q(hhXPreprocq†q…qq}q(hh	]q…qRqh
hubhhXMultiq†q…qq}q(hh	]q …q!Rq"h
hubhhXHashbangq#†q$…q%q&}q'(hh	]q(…q)Rq*h
hubhhhX
SingleLineq+†q,…q-q.}q/(hh	]q0…q1Rq2h
hubhhXDocq3†q4…q5q6}q7(hh	]q8…q9Rq:h
hubhhX	Directiveq;†q<…q=q>}q?(hh	]q@…qARqBh
hubhhX	MultilineqC†qD…qEqF}qG(hh	]qH…qIRqJh
hubhhX
SinglelineqK†qL…qMqN}qO(hh	]qP…qQRqRh
hubhhXPreprocFileqS†qT…qUqV}qW(hh	]qX…qYRqZh
hubhhXSpecialq[†q\…q]q^}q_(hh	]q`…qaRqbh
hube…qcRqdh
h)…qeqf}qg(hh	]qh(hXEscapeqi…qj…qkql}qm(hh	]qn…qoRqph
hfubhXOperatorqq…qr…qsqt}qu(hh	]qv(hhqXDBSqw†qx…qyqz}q{(hh	]q|…q}Rq~h
htubhhqXWordq†q€…qq‚}qƒ(hh	]q„…q…Rq†h
htube…q‡Rqˆh
hfhh‚hwhzubhXNameq‰…qŠ…q‹qŒ}q(hh	]qŽ(hh‰XTagq†q…q‘q’}q“(hh	]q”…q•Rq–h
hŒubhh‰XEntityq—†q˜…q™qš}q›(hh	]qœhh‰h—hw‡q…qžqŸ}q (hh	]q¡…q¢Rq£h
hšuba…q¤Rq¥h
hŒhwhŸubhh‰X	Exceptionq¦†q§…q¨q©}qª(hh	]q«…q¬Rq­h
hŒubhh‰X	Decoratorq®†q¯…q°q±}q²(hh	]q³…q´Rqµh
hŒubhh‰XClassq¶†q·…q¸q¹}qº(hh	]q»(hh‰h¶hw‡q¼…q½q¾}q¿(hh	]qqÁRqÂh
h¹ubhh‰h¶XStartqÇqąqŁqÆ}qÇ(hh	]qȅqÉRqÊh
h¹ube…qËRqÌh
hŒhÃhÆhwh¾ubhh‰XVariableq͆q΅qρqÐ}qÑ(hh	]qÒ(hh‰hÍX	AnonymousqӇqԅqՁqÖ}q×(hh	]q؅qÙRqÚh
hÐubhh‰hÍh¶‡qۅq܁qÝ}qÞ(hh	]q߅qàRqáh
hÐubhh‰hÍXMagicqâ‡qã…qäqå}qæ(hh	]qç…qèRqéh
hÐubhh‰hÍXGlobalqê‡që…qìqí}qî(hh	]qï…qðRqñh
hÐubhh‰hÍXInstanceqò‡qó…qôqõ}qö(hh	]q÷…qøRqùh
hÐube…qúRqûh
hŒh¶hÝhêhíhòhõhâhåhÓhÖubhh‰X	Attributeqü†qý…qþqÿ}r(hh	]rhh‰hüh͇r…rr}r(hh	]r…rRrh
hÿuba…r	Rr
h
hŒhÍjubhh‰X	Namespacer†r…r
r}r(hh	]r…rRrh
hŒubhh‰XPropertyr†r…rr}r(hh	]r…rRrh
hŒubhh‰XSymbolr†r…rr}r(hh	]r …r!Rr"h
hŒubhh‰XClassesr#†r$…r%r&}r'(hh	]r(…r)Rr*h
hŒubhh‰XPseudor+†r,…r-r.}r/(hh	]r0…r1Rr2h
hŒubhh‰XLabelr3†r4…r5r6}r7(hh	]r8…r9Rr:h
hŒubhh‰hq†r;…r<r=}r>(hh	]r?…r@RrAh
hŒubhh‰XBuiltinrB†rC…rDrE}rF(hh	]rG(hh‰jBj+‡rH…rIrJ}rK(hh	]rL…rMRrNh
jEubhh‰jBXTyperO‡rP…rQrR}rS(hh	]rT…rURrVh
jEube…rWRrXh
hŒj+jJjOjRubhh‰XFieldrY†rZ…r[r\}r](hh	]r^…r_Rr`h
hŒubhh‰XOtherra†rb…rcrd}re(hh	]rfhh‰jaXMemberrg‡rh…rirj}rk(hh	]rl…rmRrnh
jduba…roRrph
hŒjgjjubhh‰XFunctionrq†rr…rsrt}ru(hh	]rvhh‰jqhâ‡rw…rxry}rz(hh	]r{…r|Rr}h
jtuba…r~Rrh
hŒhâjyubhh‰jO†r€…rr‚}rƒ(hh	]r„…r…Rr†h
hŒubhh‰XConstantr‡†rˆ…r‰rŠ}r‹(hh	]rŒ…rRrŽh
hŒube…rRrh
hfhühÿjBjEh¶h¹j‡jŠh®h±h—hšh¦h©jqjtjjj3j6jjjajdhh’hÍhÐjYj\jjj+j.hqj=j#j&jOj‚ubhXLiteralr‘…r’…r“r”}r•(hh	]r–(hj‘ja†r—…r˜r™}rš(hh	]r›…rœRrh
j”ubhj‘XCharrž†rŸ…r r¡}r¢(hh	]r£…r¤Rr¥h
j”ubhj‘XDater¦†r§…r¨r©}rª(hh	]r«…r¬Rr­h
j”ubhj‘XScalarr®†r¯…r°r±}r²(hh	]r³hj‘j®XPlainr´‡rµ…r¶r·}r¸(hh	]r¹…rºRr»h
j±uba…r¼Rr½h
j”j´j·ubhj‘XStringr¾†r¿…rÀrÁ}rÂ(hh	]rÃ(hj‘j¾XInterpolrćrÅ…rƁrÇ}rÈ(hh	]rÉ…rÊRrËh
jÁubhj‘j¾X	DelimeterṙrÍ…r΁rÏ}rÐ(hh	]rÑ…rÒRrÓh
jÁubhj‘j¾jž‡rÔ…rՁrÖ}r×(hh	]rØ…rÙRrÚh
jÁubhj‘j¾j‡rÛ…r܁rÝ}rÞ(hh	]rß…ràRráh
jÁubhj‘j¾h‡râ…rãrä}rå(hh	]ræ…rçRrèh
jÁubhj‘j¾ja‡ré…rêrë}rì(hh	]rí…rîRrïh
jÁubhj‘j¾XBacktickrð‡rñ…ròró}rô(hh	]rõ…röRr÷h
jÁubhj‘j¾hi‡rø…rùrú}rû(hh	]rü…rýRrþh
jÁubhj‘j¾XRegexrÿ‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾XMomentr‡r…r	r
}r(hh	]r…r
Rrh
jÁubhj‘j¾XBooleanr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Characterr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Delimiterr‡r …r!r"}r#(hh	]r$…r%Rr&h
jÁubhj‘j¾h3‡r'…r(r)}r*(hh	]r+…r,Rr-h
jÁubhj‘j¾h‰‡r.…r/r0}r1(hh	]r2…r3Rr4h
jÁubhj‘j¾XAffixr5‡r6…r7r8}r9(hh	]r:…r;Rr<h
jÁubhj‘j¾XHeredocr=‡r>…r?r@}rA(hh	]rB…rCRrDh
jÁubhj‘j¾XDoublerE‡rF…rGrH}rI(hh	]rJ…rKRrLh
jÁubhj‘j¾XInterprM‡rN…rOrP}rQ(hh	]rR…rSRrTh
jÁubhj‘j¾XAtomrU‡rV…rWrX}rY(hh	]rZ…r[Rr\h
jÁube…r]Rr^h
j”j5j8jðjójžjÖjj"h3j)jEjHhijúj=j@jÄjÇjajëjÿjhjäjjÝjjjj
jMjPjjjÌjÏjUjXh‰j0ubhj‘XNumberr_†r`…rarb}rc(hh	]rd(hj‘j_XFloatre‡rf…rgrh}ri(hh	]rj…rkRrlh
jbubhj‘j_XDecrm‡rn…rorp}rq(hh	]rr…rsRrth
jbubhj‘j_XRadixru‡rv…rwrx}ry(hh	]rz…r{Rr|h
jbubhj‘j_XOctr}‡r~…rr€}r(hh	]r‚…rƒRr„h
jbubhj‘j_XBinr…‡r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jbubhj‘j_hü‡r…rށr}r(hh	]r‘…r’Rr“h
jbubhj‘j_XHexr”‡r•…r–r—}r˜(hh	]r™…ršRr›h
jbubhj‘j_XIntegerrœ‡r…ržrŸ}r (hh	]r¡h(j‘j_jœXLongr¢tr£…r¤r¥}r¦(hh	]r§…r¨Rr©h
jŸuba…rªRr«h
jbj¢j¥ubhj‘j_XDecimalr¬‡r­…r®r¯}r°(hh	]r±…r²Rr³h
jbube…r´Rrµh
j”j…jˆjejhj”j—jœjŸj}j€jujxhüjj¬j¯jmjpube…r¶Rr·h
hfj¾jÁj_jbj¦j©j®j±jaj™jžj¡ubhXGenericr¸…r¹…rºr»}r¼(hh	]r½(hj¸XErrorr¾†r¿…rÀrÁ}rÂ(hh	]rÃ…rÄRrÅh
j»ubhj¸X
SubheadingrƆrÇ…rȁrÉ}rÊ(hh	]rË…rÌRrÍh
j»ubhj¸X	TracebackrΆrÏ…rЁrÑ}rÒ(hh	]rÓ…rÔRrÕh
j»ubhj¸XOutputrÖ†r×…r؁rÙ}rÚ(hh	]rÛ…rÜRrÝh
j»ubhj¸XPromptrÞ†rß…ràrá}râ(hh	]rã…räRråh
j»ubhj¸XDeletedræ†rç…rèré}rê(hh	]rë…rìRríh
j»ubhj¸XInsertedrî†rï…rðrñ}rò(hh	]ró…rôRrõh
j»ubhj¸XHeadingrö†r÷…rørù}rú(hh	]rû…rüRrýh
j»ubhj¸XStrongrþ†rÿ…rr}r(hh	]r…rRrh
j»ubhj¸XEmphr†r…rr	}r
(hh	]r…rRr
h
j»ube…rRrh
hfjæjéjj	j¾jÁjöjùjîjñjÖjÙjÞjájþjjÆjÉjÎjÑubhj¾…r…rr}r(hh	]r…rRrh
hfubhXKeywordr…r…rr}r(hh	]r(hjh†r…rr}r (hh	]r!…r"Rr#h
jubhjj†r$…r%r&}r'(hh	]r(…r)Rr*h
jubhjjO†r+…r,r-}r.(hh	]r/…r0Rr1h
jubhjXPreProcr2†r3…r4r5}r6(hh	]r7…r8Rr9h
jubhjXControlr:†r;…r<r=}r>(hh	]r?…r@RrAh
jubhjj‡†rB…rCrD}rE(hh	]rF…rGRrHh
jubhjj†rI…rJrK}rL(hh	]rM…rNRrOh
jubhjj+†rP…rQrR}rS(hh	]rT…rURrVh
jubhjXDeclarationrW†rX…rYrZ}r[(hh	]r\…r]Rr^h
jubhjXReservedr_†r`…rarb}rc(hh	]rd…reRrfh
jube…rgRrhh
hfj‡jDjWjZjjKj+jRj_jbjOj-j:j=jj&j2j5hjubhja…ri…rjrk}rl(hh	]rm…rnRroh
hfubhXTextrp…rq…rrrs}rt(hh	]ru(hjpXRootrv†rw…rxry}rz(hh	]r{…r|Rr}h
jsubhjpj†r~…rr€}r(hh	]r‚…rƒRr„h
jsubhjpXRagr…†r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jsubhjpX
Whitespacer†rŽ…rr}r‘(hh	]r’…r“Rr”h
jsubhjpXBeerr•†r–…r—r˜}r™(hh	]rš…r›Rrœh
jsubhjpXPunctuationr†rž…rŸr }r¡(hh	]r¢…r£Rr¤h
jsube…r¥Rr¦h
hfjjjj€jj jvjyj•j˜j…jˆubhhj…r§…r¨r©}rª(hh	]r«hjX	Indicatorr¬†r­…r®r¯}r°(hh	]r±…r²Rr³h
j©uba…r´Rrµh
hfj¬j¯ube…r¶Rr·jpjshihlj¾jjajkjjh‰hŒj‘j”jj©hqhthhj¸j»XTokenr¸hfj¾jÁj_jbubh#h&hChFhhhShVhhh[h^h;h>h+h.h3h6hhhKhNububX:# This file is part of NIT ( http://www.nitlanguage.org ).r¹†rºjsX
r»†r¼hX#r½†r¾jsj»†r¿hX:# Copyright 2013 Alexis Laferrière <alexis.laf@xymus.net>rÀ†rÁjsj»†rÂhj½†rÃjsj»†rÄhXA# Licensed under the Apache License, Version 2.0 (the "License");rņrÆjsj»†rÇhXB# you may not use this file except in compliance with the License.rȆrÉjsj»†rÊhX)# You may obtain a copy of the License atrˆrÌjsj»†rÍhj½†rÎjsj»†rÏhX0#     http://www.apache.org/licenses/LICENSE-2.0rІrÑjsj»†rÒhj½†rÓjsj»†rÔhXE# Unless required by applicable law or agreed to in writing, softwarerÕ†rÖjsj»†r×hXC# distributed under the License is distributed on an "AS IS" BASIS,r؆rÙjsj»†rÚhXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rÛ†rÜjsj»†rÝhXE# See the License for the specific language governing permissions andrÞ†rßjsj»†ràhX # limitations under the License.rá†râjsX

rã†räjXimportrå†ræjsX rç†rèhŒXgtkré†rêjsX

rë†rìjXclassrí†rîjsjç†rïh¹XCalculatorContextrð†rñjsX
	rò†rójXvarrô†rõjsjç†röhŒXresultr÷†røjsjç†rùj©X:rú†rûjsjç†rüjXnullablerý†rþjsjç†rÿh¹XFloatr†rjsjç†rhtX=r†rjsjç†rjXnullr†rjsX

	r†r	jXvarr
†rjsjç†rhŒXlast_opr
†rjsjç†rj©jú†rjsjç†rjXnullabler†rjsjç†rh¹XCharr†rjsjç†rhtj†rjsjç†rjXnullr†rjsX

	r†rjXvarr†rjsjç†r hŒXcurrentr!†r"jsjç†r#j©jú†r$jsjç†r%jXnullabler&†r'jsjç†r(h¹XFloatr)†r*jsjç†r+htj†r,jsjç†r-jXnullr.†r/jsX
	r0†r1jXvarr2†r3jsjç†r4hŒXafter_pointr5†r6jsjç†r7j©jú†r8jsjç†r9jXnullabler:†r;jsjç†r<h¹XIntr=†r>jsjç†r?htj†r@jsjç†rAjXnullrB†rCjsX

	rD†rEjXfunrF†rGjsjç†rHhŒXpush_oprI†rJj©X(rK†rLjsjç†rMhŒXoprN†rOjsjç†rPj©jú†rQjsjç†rRh¹XCharrS†rTjsjç†rUj©X)rV†rWjsX
	rX†rYjXdorZ†r[jsX
		r\†r]hŒXapply_last_op_if_anyr^†r_jsX
		r`†rajXifrb†rcjsjç†rdhŒXopre†rfjsjç†rghtX==rh†rijsjç†rjjÖX'C'rk†rljsjç†rmjXthenrn†rojsX
			rp†rqhŒXselfrr†rsj©X.rt†ruhŒXresultrv†rwjsjç†rxhtj†ryjhX 0rz†r{jhX.0r|†r}jsX
			r~†rhŒXlast_opr€†rjsjç†r‚htj†rƒjsjç†r„jXnullr…†r†jsX
		r‡†rˆjXelser‰†rŠjsX
			r‹†rŒhŒXlast_opr†rŽjsjç†rhtj†rjsjç†r‘hŒXopr’†r“jsjç†r”hX# store for next push_opr•†r–jsX
		r—†r˜jXendr™†ršjsX

		r›†rœhX# prepare next currentr†ržjsX
		rŸ†r hŒXafter_pointr¡†r¢jsjç†r£htj†r¤jsjç†r¥jXnullr¦†r§jsX
		r¨†r©hŒXcurrentrª†r«jsjç†r¬htj†r­jsjç†r®jXnullr¯†r°jsX
	r±†r²jXendr³†r´jsX

	rµ†r¶jXfunr·†r¸jsjç†r¹hŒX
push_digitrº†r»j©jK†r¼jsjç†r½hŒXdigitr¾†r¿jsjç†rÀj©jú†rÁjsjç†rÂh¹XIntrÆrÄjsjç†rÅj©jV†rÆjsX
	rdžrÈjXdorɆrÊjsX
		rˆrÌjXvarr͆rÎjsjç†rÏhŒXcurrentrІrÑjsjç†rÒhtj†rÓjsjç†rÔhŒXcurrentrÕ†rÖjsX
		r׆rØjXifrÙ†rÚjsjç†rÛhŒXcurrentr܆rÝjsjç†rÞhtX==r߆ràjsjç†rájXnullrâ†rãjsjç†räjXthenrå†ræjsjç†rçhŒXcurrentrè†réjsjç†rêhtj†rëjhX 0rì†ríjhX.0rî†rïjsX

		rð†rñjXvarrò†rójsjç†rôhŒXafter_pointrõ†röjsjç†r÷htj†røjsjç†rùhŒXafter_pointrú†rûjsX
		rü†rýjXifrþ†rÿjsjç†rhŒXafter_pointr†rjsjç†rhtX==r†rjsjç†rjXnullr†rjsjç†r	jXthenr
†rjsX
			r†r
hŒXcurrentr†rjsjç†rhtj†rjsjç†rhŒXcurrentr†rjsjç†rhtX*r†rjhX 10r†rjhX.0r†rjsjç†rhtX+r†rjsjç†rhŒXdigitr †r!j©jt†r"hŒXto_fr#†r$jsX
		r%†r&jXelser'†r(jsX
			r)†r*hŒXcurrentr+†r,jsjç†r-htj†r.jsjç†r/hŒXcurrentr0†r1jsjç†r2htj†r3jsjç†r4hŒXdigitr5†r6j©jt†r7hŒXto_fr8†r9jsjç†r:htj†r;jhX 10r<†r=jhX.0r>†r?j©jt†r@hŒXpowrA†rBj©jK†rChŒXafter_pointrD†rEj©jt†rFhŒXto_frG†rHj©jV†rIjsX
			rJ†rKhŒXselfrL†rMj©jt†rNhŒXafter_pointrO†rPjsjç†rQhtX-rR†rShtj†rTjhX 1rU†rVjsX
		rW†rXjXendrY†rZjsX

		r[†r\hŒXselfr]†r^j©jt†r_hŒXcurrentr`†rajsjç†rbhtj†rcjsjç†rdhŒXcurrentre†rfjsX
	rg†rhjXendri†rjjsX

	rk†rljXfunrm†rnjsjç†rohŒXswitch_to_decimalsrp†rqjsX
	rr†rsjXdort†rujsX
		rv†rwjXifrx†ryjsjç†rzhŒXselfr{†r|j©jt†r}hŒXcurrentr~†rjsjç†r€htX==r†r‚jsjç†rƒjXnullr„†r…jsjç†r†jXthenr‡†rˆjsjç†r‰hŒXcurrentrІr‹jsjç†rŒhtj†rjhX 0rކrjhX.0r†r‘jsX
		r’†r“jXifr”†r•jsjç†r–hŒXafter_pointr—†r˜jsjç†r™htX!=rš†r›jsjç†rœjXnullr†ržjsjç†rŸjXthenr †r¡jsjç†r¢jXreturnr£†r¤jsX

		r¥†r¦hŒXafter_pointr§†r¨jsjç†r©htj†rªjsjç†r«jhX-1r¬†r­jsX
	r®†r¯jXendr°†r±jsX

	r²†r³jXfunr´†rµjsjç†r¶hŒXapply_last_op_if_anyr·†r¸jsX
	r¹†rºjXdor»†r¼jsX
		r½†r¾jXvarr¿†rÀjsjç†rÁhŒXopr†rÃjsjç†rÄhtj†rÅjsjç†rÆhŒXlast_oprdžrÈjsX

		rɆrÊjXvarrˆrÌjsjç†rÍhŒXresultrΆrÏjsjç†rÐhtj†rÑjsjç†rÒhŒXresultrÓ†rÔjsX
		rÕ†rÖjXifr׆rØjsjç†rÙhŒXresultrÚ†rÛjsjç†rÜhtX==r݆rÞjsjç†rßjXnullrà†rájsjç†râjXthenrã†räjsjç†råhŒXresultræ†rçjsjç†rèhtj†réjhX 0rê†rëjhX.0rì†ríjsX

		rî†rïjXvarrð†rñjsjç†ròhŒXcurrentró†rôjsjç†rõhtj†röjsjç†r÷hŒXcurrentrø†rùjsX
		rú†rûjXifrü†rýjsjç†rþhŒXcurrentrÿ†rjsjç†rhtX==r†rjsjç†rjXnullr†rjsjç†rjXthenr†r	jsjç†r
hŒXcurrentr†rjsjç†r
htj†rjhX 0r†rjhX.0r†rjsX

		r†rjXifr†rjsjç†rhŒXopr†rjsjç†rhtX==r†rjsjç†rjXnullr†rjsjç†r jXthenr!†r"jsX
			r#†r$hŒXresultr%†r&jsjç†r'htj†r(jsjç†r)hŒXcurrentr*†r+jsX
		r,†r-jXelser.†r/jsjç†r0jXifr1†r2jsjç†r3hŒXopr4†r5jsjç†r6htX==r7†r8jsjç†r9jÖX'+'r:†r;jsjç†r<jXthenr=†r>jsX
			r?†r@hŒXresultrA†rBjsjç†rChtj†rDjsjç†rEhŒXresultrF†rGjsjç†rHhtj†rIjsjç†rJhŒXcurrentrK†rLjsX
		rM†rNjXelserO†rPjsjç†rQjXifrR†rSjsjç†rThŒXoprU†rVjsjç†rWhtX==rX†rYjsjç†rZjÖX'-'r[†r\jsjç†r]jXthenr^†r_jsX
			r`†rahŒXresultrb†rcjsjç†rdhtj†rejsjç†rfhŒXresultrg†rhjsjç†rihtjR†rjjsjç†rkhŒXcurrentrl†rmjsX
		rn†rojXelserp†rqjsjç†rrjXifrs†rtjsjç†ruhŒXoprv†rwjsjç†rxhtX==ry†rzjsjç†r{jÖX'/'r|†r}jsjç†r~jXthenr†r€jsX
			r†r‚hŒXresultrƒ†r„jsjç†r…htj†r†jsjç†r‡hŒXresultrˆ†r‰jsjç†rŠhtX/r‹†rŒjsjç†rhŒXcurrentrކrjsX
		r†r‘jXelser’†r“jsjç†r”jXifr•†r–jsjç†r—hŒXopr˜†r™jsjç†ršhtX==r›†rœjsjç†rjÖX'*'rž†rŸjsjç†r jXthenr¡†r¢jsX
			r£†r¤hŒXresultr¥†r¦jsjç†r§htj†r¨jsjç†r©hŒXresultrª†r«jsjç†r¬htj†r­jsjç†r®hŒXcurrentr¯†r°jsX
		r±†r²jXendr³†r´jsX
		rµ†r¶hŒXselfr·†r¸j©jt†r¹hŒXresultrº†r»jsjç†r¼htj†r½jsjç†r¾hŒXresultr¿†rÀjsX
		rÁ†rÂhŒXselfrÆrÄj©jt†rÅhŒXcurrentrƆrÇjsjç†rÈhtj†rÉjsjç†rÊjXnullrˆrÌjsX
	r͆rÎjXendrφrÐjsj»†rÑjXendrÒ†rÓjsX

rÔ†rÕjXclassrÖ†r×jsjç†rØh¹X
CalculatorGuirÙ†rÚjsX
	rÛ†rÜjXsuperr݆rÞjsjç†rßh¹XGtkCallablerà†rájsX

	râ†rãjXvarrä†råjsjç†ræhŒXwinrç†rèjsjç†réj©jú†rêjsjç†rëh¹X	GtkWindowrì†ríjsX
	rî†rïjXvarrð†rñjsjç†ròhŒX	containerró†rôjsjç†rõj©jú†röjsjç†r÷h¹XGtkGridrø†rùjsX

	rú†rûjXvarrü†rýjsjç†rþhŒXlbl_disprÿ†rjsjç†rj©jú†rjsjç†rh¹XGtkLabelr†rjsX
	r†rjXvarr†r	jsjç†r
hŒXbut_eqr†rjsjç†r
j©jú†rjsjç†rh¹X	GtkButtonr†rjsX
	r†rjXvarr†rjsjç†rhŒXbut_dotr†rjsjç†rj©jú†rjsjç†rh¹X	GtkButtonr†rjsX

	r†rjXvarr †r!jsjç†r"hŒXcontextr#†r$jsjç†r%htj†r&jsjç†r'jXnewr(†r)jsjç†r*h¹XCalculatorContextr+†r,jsX

	r-†r.jXredefr/†r0jsjç†r1jXfunr2†r3jsjç†r4hŒXsignalr5†r6j©jK†r7jsjç†r8hŒXsenderr9†r:j©X,r;†r<jsjç†r=hŒX	user_datar>†r?jsjç†r@j©jV†rAjsX
	rB†rCjXdorD†rEjsX
		rF†rGjXvarrH†rIjsjç†rJhŒXafter_pointrK†rLjsjç†rMhtj†rNjsjç†rOhŒXcontextrP†rQj©jt†rRhŒXafter_pointrS†rTjsX
		rU†rVjXifrW†rXjsjç†rYhŒXafter_pointrZ†r[jsjç†r\htX==r]†r^jsjç†r_jXnullr`†rajsjç†rbjXthenrc†rdjsX 
		    re†rfhŒXafter_pointrg†rhjsjç†rihtj†rjjhX 0rk†rljsX
		rm†rnjXelsero†rpjsX
		    rq†rrhŒXafter_pointrs†rtjsjç†ruhtj†rvjsjç†rwj©jK†rxhŒXafter_pointry†rzj©jt†r{hŒXabsr|†r}j©jV†r~jsX
		r†r€jXendr†r‚jsX
		
		rƒ†r„jXifr…†r†jsjç†r‡hŒX	user_datarˆ†r‰jsjç†rŠjXisar‹†rŒjsjç†rh¹XCharrކrjsjç†rjXthenr‘†r’jsjç†r“hX# is an operationr”†r•jsX
			r–†r—jXvarr˜†r™jsjç†ršhŒXcr›†rœjsjç†rhtj†ržjsjç†rŸhŒX	user_datar †r¡jsX
			r¢†r£jXifr¤†r¥jsjç†r¦hŒj›†r§jsjç†r¨htX==r©†rªjsjç†r«jÖX'.'r¬†r­jsjç†r®jXthenr¯†r°jsX
				r±†r²hŒXbut_dotr³†r´j©jt†rµhŒX	sensitiver¶†r·htj†r¸jsjç†r¹jXfalserº†r»jsX
				r¼†r½hŒXcontextr¾†r¿j©jt†rÀhŒXswitch_to_decimalsrÁ†rÂjsX
				rÆrÄhŒXlbl_disprņrÆj©jt†rÇhŒXtextrȆrÉjsjç†rÊhtj†rËjsjç†rÌjÁX"{r͆rÎhŒXcontextrφrÐj©jt†rÑhŒXcurrentrÒ†rÓj©jt†rÔhŒXto_irÕ†rÖjÁX}."r׆rØjsX
			rÙ†rÚjXelserÛ†rÜjsX
				r݆rÞhŒXbut_dotr߆ràj©jt†ráhŒX	sensitiverâ†rãhtj†räjsjç†råjXtrueræ†rçjsX
				rè†réhŒXcontextrê†rëj©jt†rìhŒXpush_oprí†rîj©jK†rïjsjç†rðhŒj›†rñjsjç†ròj©jV†rójsX

				
				rô†rõjXvarrö†r÷jsjç†røhŒXsrù†rújsjç†rûhtj†rüjsjç†rýhŒXcontextrþ†rÿj©jt†rhŒXresultr†rj©jt†rhŒXto_precision_nativer†rjhX(6r†rj©jV†rjsX
				r	†r
jXvarr†rjsjç†r
hŒXindexr†rjsjç†rj©jú†rjsjç†rjXnullabler†rjsjç†rh¹XIntr†rjsjç†rhtj†rjsjç†rjXnullr†rjsX
				r†rjXforr†r jsjç†r!hŒXir"†r#jsjç†r$jXinr%†r&jsjç†r'hŒjù†r(j©jt†r)hŒXlengthr*†r+j©jt†r,hŒXtimesr-†r.jsjç†r/jXdor0†r1jsX	
				    r2†r3jXvarr4†r5jsjç†r6hŒXchiffrer7†r8jsjç†r9htj†r:jsjç†r;hŒjù†r<j©jt†r=hŒXcharsr>†r?j©X[r@†rAhŒj"†rBj©X]rC†rDjsX	
				    rE†rFjXifrG†rHjsjç†rIhŒXchiffrerJ†rKjsjç†rLhtX==rM†rNjsjç†rOjÖX'0'rP†rQjsjç†rRjXandrS†rTjsjç†rUhŒXindexrV†rWjsjç†rXhtX==rY†rZjsjç†r[jXnullr\†r]jsjç†r^jXthenr_†r`jsX
					ra†rbhŒXindexrc†rdjsjç†rehtj†rfjsjç†rghŒj"†rhjsX	
				    ri†rjjXelserk†rljsjç†rmjXifrn†rojsjç†rphŒXchiffrerq†rrjsjç†rshtX!=rt†rujsjç†rvjÖX'0'rw†rxjsjç†ryjXthenrz†r{jsX
					r|†r}hŒXindexr~†rjsjç†r€htj†rjsjç†r‚jXnullrƒ†r„jsX	
				    r…†r†jXendr‡†rˆjsX
				r‰†rŠjXendr‹†rŒjsX
				r†rŽjXifr†rjsjç†r‘hŒXindexr’†r“jsjç†r”htX!=r•†r–jsjç†r—jXnullr˜†r™jsjç†ršjXthenr›†rœjsX
					r†ržhŒjù†rŸjsjç†r htj†r¡jsjç†r¢hŒjù†r£j©jt†r¤hŒX	substringr¥†r¦jhX(0r§†r¨j©j;†r©jsjç†rªhŒXindexr«†r¬j©jV†r­jsX
					r®†r¯jXifr°†r±jsjç†r²hŒjù†r³j©jt†r´hŒXcharsrµ†r¶j©j@†r·hŒjù†r¸j©jt†r¹hŒXlengthrº†r»jhX-1r¼†r½j©jC†r¾jsjç†r¿htX==rÀ†rÁjsjç†rÂjÖX','rÆrÄjsjç†rÅjXthenrƆrÇjsjç†rÈhŒjù†rÉjsjç†rÊhtj†rËjsjç†rÌhŒjù†rÍj©jt†rÎhŒX	substringrφrÐjhX(0rцrÒj©j;†rÓjsjç†rÔhŒjù†rÕj©jt†rÖhŒXlengthr׆rØjhX-1rÙ†rÚj©jV†rÛjsX
				r܆rÝjXendrÞ†rßjsX
				rà†ráhŒXlbl_disprâ†rãj©jt†rähŒXtextrå†ræjsjç†rçhtj†rèjsjç†réhŒjù†rêjsX
			rë†rìjXendrí†rîjsX
		rï†rðjXelserñ†ròjsjç†rójXifrô†rõjsjç†röhŒX	user_datar÷†røjsjç†rùjXisarú†rûjsjç†rüh¹XIntrý†rþjsjç†rÿjXthenr	†r	jsjç†r	hX
# is a numberr	†r	jsX
			r	†r	jXvarr	†r	jsjç†r		hŒXnr
	†r	jsjç†r	htj†r
	jsjç†r	hŒX	user_datar	†r	jsX
			r	†r	hŒXcontextr	†r	j©jt†r	hŒX
push_digitr	†r	j©jK†r	jsjç†r	hŒj
	†r	jsjç†r	j©jV†r	jsX
			r	†r	hŒXlbl_dispr	†r 	j©jt†r!	hŒXtextr"	†r#	jsjç†r$	htj†r%	jsjç†r&	hŒXcontextr'	†r(	j©jt†r)	hŒXcurrentr*	†r+	j©jt†r,	hŒXto_precision_nativer-	†r.	j©jK†r/	hŒXafter_pointr0	†r1	j©jV†r2	jsX
		r3	†r4	jXendr5	†r6	jsX
	r7	†r8	jXendr9	†r:	jsX

	r;	†r<	jXinitr=	†r>	jsX
	r?	†r@	jXdorA	†rB	jsX
		rC	†rD	hŒXinit_gtkrE	†rF	jsX

		rG	†rH	hŒXwinrI	†rJ	jsjç†rK	htj†rL	jsjç†rM	jXnewrN	†rO	jsjç†rP	h¹X	GtkWindowrQ	†rR	j©jK†rS	jhX 0rT	†rU	jsjç†rV	j©jV†rW	jsX

		rX	†rY	hŒX	containerrZ	†r[	jsjç†r\	htj†r]	jsjç†r^	jXnewr_	†r`	jsjç†ra	h¹XGtkGridrb	†rc	jhX(5rd	†re	jhX,5rf	†rg	j©j;†rh	hŒXtrueri	†rj	j©jV†rk	jsX
		rl	†rm	hŒXwinrn	†ro	j©jt†rp	hŒXaddrq	†rr	j©jK†rs	jsjç†rt	hŒX	containerru	†rv	jsjç†rw	j©jV†rx	jsX

		ry	†rz	hŒXlbl_dispr{	†r|	jsjç†r}	htj†r~	jsjç†r	jXnewr€	†r	jsjç†r‚	h¹XGtkLabelrƒ	†r„	j©jK†r…	jsjç†r†	jÁX"_"r‡	†rˆ	jsjç†r‰	j©jV†rŠ	jsX
		r‹	†rŒ	hŒX	containerr	†rŽ	j©jt†r	hŒXattachr	†r‘	j©jK†r’	jsjç†r“	hŒXlbl_dispr”	†r•	j©j;†r–	jhX 0r—	†r˜	j©j;†r™	jhX 0rš	†r›	j©j;†rœ	jhX 5r	†rž	j©j;†rŸ	jhX 1r 	†r¡	jsjç†r¢	j©jV†r£	jsX

		r¤	†r¥	hX# digitsr¦	†r§	jsX
		r¨	†r©	jXforrª	†r«	jsjç†r¬	hŒj
	†r­	jsjç†r®	jXinr¯	†r°	jsjç†r±	jhX[0r²	†r³	j©X..r´	†rµ	jŸX9r¶	†r·	e(j©jC†r¸	jsjç†r¹	jXdorº	†r»	jsX
			r¼	†r½	jXvarr¾	†r¿	jsjç†rÀ	hŒXbutrÁ	†rÂ	jsjç†rÃ	htj†rÄ	jsjç†rÅ	jXnewrÆ	†rÇ	jsjç†rÈ	h¹X	GtkButtonrÉ	†rÊ	j©jt†rË	hŒX
with_labelrÌ	†rÍ	j©jK†rÎ	jsjç†rÏ	hŒj
	†rÐ	j©jt†rÑ	hŒXto_srÒ	†rÓ	jsjç†rÔ	j©jV†rÕ	jsX
			rÖ	†r×	hŒXbutrØ	†rÙ	j©jt†rÚ	hŒXrequest_sizerÛ	†rÜ	j©jK†rÝ	jhX 64rÞ	†rß	j©j;†rà	jhX 64rá	†râ	jsjç†rã	j©jV†rä	jsX
			rå	†ræ	hŒXbutrç	†rè	j©jt†ré	hŒXsignal_connectrê	†rë	j©jK†rì	jsjç†rí	jÁX	"clicked"rî	†rï	j©j;†rð	jsjç†rñ	hŒXselfrò	†ró	j©j;†rô	jsjç†rõ	hŒj
	†rö	jsjç†r÷	j©jV†rø	jsX
			rù	†rú	jXifrû	†rü	jsjç†rý	hŒj
	†rþ	jsjç†rÿ	htX==r
†r
jhX 0r
†r
jsjç†r
jXthenr
†r
jsX
				r
†r
hŒX	containerr	
†r

j©jt†r
hŒXattachr
†r
j©jK†r
jsjç†r
hŒXbutr
†r
j©j;†r
jhX 0r
†r
j©j;†r
jhX 4r
†r
j©j;†r
jhX 1r
†r
j©j;†r
jhX 1r
†r
jsjç†r
j©jV†r
jsX
			r 
†r!
jXelser"
†r#
jsjç†r$
hŒX	containerr%
†r&
j©jt†r'
hŒXattachr(
†r)
j©jK†r*
jsjç†r+
hŒXbutr,
†r-
j©j;†r.
jsjç†r/
j©jK†r0
hŒj
	†r1
jhX-1r2
†r3
j©jV†r4
jhX%3r5
†r6
j©j;†r7
jhX 3r8
†r9
htjR†r:
j©jK†r;
hŒj
	†r<
jhX-1r=
†r>
j©jV†r?
jhX/3r@
†rA
j©j;†rB
jhX 1rC
†rD
j©j;†rE
jhX 1rF
†rG
jsjç†rH
j©jV†rI
jsX
		rJ
†rK
jXendrL
†rM
jsX

		rN
†rO
hX# operatorsrP
†rQ
jsX
		rR
†rS
jXvarrT
†rU
jsjç†rV
hŒXrrW
†rX
jsjç†rY
htj†rZ
jhX 1r[
†r\
jsX
		r]
†r^
jXforr_
†r`
jsjç†ra
hŒXoprb
†rc
jsjç†rd
jXinre
†rf
jsjç†rg
j©j@†rh
jÖX'+'ri
†rj
j©j;†rk
jsjç†rl
jÖX'-'rm
†rn
j©j;†ro
jsjç†rp
jÖX'*'rq
†rr
j©j;†rs
jsjç†rt
jÖX'/'ru
†rv
jsjç†rw
j©jC†rx
jsjç†ry
jXdorz
†r{
jsX
			r|
†r}
jXvarr~
†r
jsjç†r€
hŒXbutr
†r‚
jsjç†rƒ
htj†r„
jsjç†r…
jXnewr†
†r‡
jsjç†rˆ
h¹X	GtkButtonr‰
†rŠ
j©jt†r‹
hŒX
with_labelrŒ
†r
j©jK†rŽ
jsjç†r
hŒXopr
†r‘
j©jt†r’
hŒXto_sr“
†r”
jsjç†r•
j©jV†r–
jsX
			r—
†r˜
hŒXbutr™
†rš
j©jt†r›
hŒXrequest_sizerœ
†r
j©jK†rž
jhX 64rŸ
†r 
j©j;†r¡
jhX 64r¢
†r£
jsjç†r¤
j©jV†r¥
jsX
			r¦
†r§
hŒXbutr¨
†r©
j©jt†rª
hŒXsignal_connectr«
†r¬
j©jK†r­
jsjç†r®
jÁX	"clicked"r¯
†r°
j©j;†r±
jsjç†r²
hŒXselfr³
†r´
j©j;†rµ
jsjç†r¶
hŒXopr·
†r¸
jsjç†r¹
j©jV†rº
jsX
			r»
†r¼
hŒX	containerr½
†r¾
j©jt†r¿
hŒXattachrÀ
†rÁ
j©jK†rÂ
jsjç†rÃ
hŒXbutrÄ
†rÅ
j©j;†rÆ
jhX 3rÇ
†rÈ
j©j;†rÉ
jsjç†rÊ
hŒjW
†rË
j©j;†rÌ
jhX 1rÍ
†rÎ
j©j;†rÏ
jhX 1rÐ
†rÑ
jsjç†rÒ
j©jV†rÓ
jsX
			rÔ
†rÕ
hŒjW
†rÖ
htj†r×
jhX=1rØ
†rÙ
jsX
		rÚ
†rÛ
jXendrÜ
†rÝ
jsX

		rÞ
†rß
hX# =rà
†rá
jsX
		râ
†rã
hŒXbut_eqrä
†rå
jsjç†ræ
htj†rç
jsjç†rè
jXnewré
†rê
jsjç†rë
h¹X	GtkButtonrì
†rí
j©jt†rî
hŒX
with_labelrï
†rð
j©jK†rñ
jsjç†rò
jÁX"="ró
†rô
jsjç†rõ
j©jV†rö
jsX
		r÷
†rø
hŒXbut_eqrù
†rú
j©jt†rû
hŒXrequest_sizerü
†rý
j©jK†rþ
jhX 64rÿ
†rj©j;†rjhX 64r†rjsjç†rj©jV†rjsX
		r†rhŒXbut_eqr†r	j©jt†r
hŒXsignal_connectr†rj©jK†r
jsjç†rjÁX	"clicked"r†rj©j;†rjsjç†rhŒXselfr†rj©j;†rjsjç†rjÖX'='r†rjsjç†rj©jV†rjsX
		r†rhŒX	containerr†rj©jt†rhŒXattachr †r!j©jK†r"jsjç†r#hŒXbut_eqr$†r%j©j;†r&jhX 4r'†r(j©j;†r)jhX 3r*†r+j©j;†r,jhX 1r-†r.j©j;†r/jhX 2r0†r1jsjç†r2j©jV†r3jsX

		r4†r5hX# .r6†r7jsX
		r8†r9hŒXbut_dotr:†r;jsjç†r<htj†r=jsjç†r>jXnewr?†r@jsjç†rAh¹X	GtkButtonrB†rCj©jt†rDhŒX
with_labelrE†rFj©jK†rGjsjç†rHjÁX"."rI†rJjsjç†rKj©jV†rLjsX
		rM†rNhŒXbut_dotrO†rPj©jt†rQhŒXrequest_sizerR†rSj©jK†rTjhX 64rU†rVj©j;†rWjhX 64rX†rYjsjç†rZj©jV†r[jsX
		r\†r]hŒXbut_dotr^†r_j©jt†r`hŒXsignal_connectra†rbj©jK†rcjsjç†rdjÁX	"clicked"re†rfj©j;†rgjsjç†rhhŒXselfri†rjj©j;†rkjsjç†rljÖX'.'rm†rnjsjç†roj©jV†rpjsX
		rq†rrhŒX	containerrs†rtj©jt†ruhŒXattachrv†rwj©jK†rxjsjç†ryhŒXbut_dotrz†r{j©j;†r|jhX 1r}†r~j©j;†rjhX 4r€†rj©j;†r‚jhX 1rƒ†r„j©j;†r…jhX 1r††r‡jsjç†rˆj©jV†r‰jsX

		rІr‹hX#CrŒ†rjsX
		rކrjXvarr†r‘jsjç†r’hŒXbut_cr“†r”jsjç†r•htj†r–jsX  r—†r˜jXnewr™†ršjsjç†r›h¹X	GtkButtonrœ†rj©jt†ržhŒX
with_labelrŸ†r j©jK†r¡jsjç†r¢jÁX"C"r£†r¤jsjç†r¥j©jV†r¦jsX
		r§†r¨hŒXbut_cr©†rªj©jt†r«hŒXrequest_sizer¬†r­j©jK†r®jhX 64r¯†r°j©j;†r±jhX 64r²†r³jsjç†r´j©jV†rµjsX
		r¶†r·hŒXbut_cr¸†r¹j©jt†rºhŒXsignal_connectr»†r¼j©jK†r½jÁX	"clicked"r¾†r¿j©j;†rÀjsjç†rÁhŒXselfr†rÃj©j;†rÄjsjç†rÅjÖX'C'rƆrÇj©jV†rÈjsX
		rɆrÊhŒX	containerrˆrÌj©jt†rÍhŒXattachrΆrÏj©jK†rÐjsjç†rÑhŒXbut_crÒ†rÓj©j;†rÔjhX 2rÕ†rÖj©j;†r×jhX 4r؆rÙj©j;†rÚjhX 1rÛ†rÜj©j;†rÝjhX 1rÞ†rßjsjç†ràj©jV†rájsX

		râ†rãhŒXwinrä†råj©jt†ræhŒXshow_allrç†rèjsX
	ré†rêjXendrë†rìjsj»†ríjXendrî†rïjsX

rð†rñhX# context testsrò†rójsj»†rôjXvarrõ†röjsjç†r÷hŒXcontextrø†rùjsjç†rúhtj†rûjsjç†rüjXnewrý†rþjsjç†rÿh¹XCalculatorContextr†rjsj»†rhŒXcontextr†rj©jt†rhŒX
push_digitr†rj©jK†rjhX 1r	†r
jsjç†rj©jV†rjsj»†r
hŒXcontextr†rj©jt†rhŒX
push_digitr†rj©jK†rjhX 2r†rjsjç†rj©jV†rjsj»†rhŒXcontextr†rj©jt†rhŒXpush_opr†rj©jK†rjsjç†rjÖX'+'r †r!jsjç†r"j©jV†r#jsj»†r$hŒXcontextr%†r&j©jt†r'hŒX
push_digitr(†r)j©jK†r*jhX 3r+†r,jsjç†r-j©jV†r.jsj»†r/hŒXcontextr0†r1j©jt†r2hŒXpush_opr3†r4j©jK†r5jsjç†r6jÖX'*'r7†r8jsjç†r9j©jV†r:jsj»†r;hŒXcontextr<†r=j©jt†r>hŒX
push_digitr?†r@j©jK†rAjhX 2rB†rCjsjç†rDj©jV†rEjsj»†rFhŒXcontextrG†rHj©jt†rIhŒXpush_oprJ†rKj©jK†rLjsjç†rMjÖX'='rN†rOjsjç†rPj©jV†rQjsj»†rRjXvarrS†rTjsjç†rUhŒjW
†rVjsjç†rWhtj†rXjsjç†rYhŒXcontextrZ†r[j©jt†r\hŒXresultr]†r^j©jt†r_hŒXto_precisionr`†raj©jK†rbjhX 2rc†rdjsjç†rej©jV†rfjsj»†rgjXassertrh†rijsjç†rjhŒjW
†rkjsjç†rlhtX==rm†rnjsjç†rojÁX"30.00"rp†rqjsjç†rrjXelsers†rtjsjç†ruhŒXprintrv†rwjsjç†rxhŒjW
†ryjsX

rz†r{hŒXcontextr|†r}jsjç†r~htj†rjsjç†r€jXnewr†r‚jsjç†rƒh¹XCalculatorContextr„†r…jsj»†r†hŒXcontextr‡†rˆj©jt†r‰hŒX
push_digitrŠ†r‹j©jK†rŒjhX 1r†rŽjsjç†rj©jV†rjsj»†r‘hŒXcontextr’†r“j©jt†r”hŒX
push_digitr•†r–j©jK†r—jhX 4r˜†r™jsjç†ršj©jV†r›jsj»†rœhŒXcontextr†ržj©jt†rŸhŒXswitch_to_decimalsr †r¡jsj»†r¢hŒXcontextr£†r¤j©jt†r¥hŒX
push_digitr¦†r§j©jK†r¨jhX 1r©†rªjsjç†r«j©jV†r¬jsj»†r­hŒXcontextr®†r¯j©jt†r°hŒXpush_opr±†r²j©jK†r³jsjç†r´jÖX'*'rµ†r¶jsjç†r·j©jV†r¸jsj»†r¹hŒXcontextrº†r»j©jt†r¼hŒX
push_digitr½†r¾j©jK†r¿jhX 3rÀ†rÁjsjç†rÂj©jV†rÃjsj»†rÄhŒXcontextrÅ†rÆj©jt†rÇhŒXpush_oprÈ†rÉj©jK†rÊjsjç†rËjÖX'='rÌ†rÍjsjç†rÎj©jV†rÏjsj»†rÐhŒjW
†rÑjsjç†rÒhtj†rÓjsjç†rÔhŒXcontextrÕ†rÖj©jt†r×hŒXresultrØ†rÙj©jt†rÚhŒXto_precisionrÛ†rÜj©jK†rÝjhX 2rÞ†rßjsjç†ràj©jV†rájsj»†râjXassertrã†räjsjç†råhŒjW
†ræjsjç†rçhtX==rè†réjsjç†rêjÁX"42.30"rë†rìjsjç†ríjXelserî†rïjsjç†rðhŒXprintrñ†ròjsjç†róhŒjW
†rôjsX

rõ†röhŒXcontextr÷†røj©jt†rùhŒXpush_oprú†rûj©jK†rüjsjç†rýjÖX'+'rþ†rÿjsjç†r
j©jV†r
jsjȠr
hŒXcontextr
†r
j©jt†r
hŒX
push_digitr
†r
j©jK†r
jhX 1r	
†r

jsjç†r
j©jV†r
jsjȠr

hŒXcontextr
†r
j©jt†r
hŒX
push_digitr
†r
j©jK†r
jhX 1r
†r
jsjç†r
j©jV†r
jsjȠr
hŒXcontextr
†r
j©jt†r
hŒXpush_opr
†r
j©jK†r
jsjç†r
jÖX'='r 
†r!
jsjç†r"
j©jV†r#
jsjȠr$
hŒjW
†r%
jsjç†r&
htj†r'
jsjç†r(
hŒXcontextr)
†r*
j©jt†r+
hŒXresultr,
†r-
j©jt†r.
hŒXto_precisionr/
†r0
j©jK†r1
jhX 2r2
†r3
jsjç†r4
j©jV†r5
jsjȠr6
jXassertr7
†r8
jsjç†r9
hŒjW
†r:
jsjç†r;
htX==r<
†r=
jsjç†r>
jÁX"53.30"r?
†r@
jsjç†rA
jXelserB
†rC
jsjç†rD
hŒXprintrE
†rF
jsjç†rG
hŒjW
†rH
jsX

rI
†rJ
hŒXcontextrK
†rL
jsjç†rM
htj†rN
jsjç†rO
jXnewrP
†rQ
jsjç†rR
h¹XCalculatorContextrS
†rT
jsjȠrU
hŒXcontextrV
†rW
j©jt†rX
hŒX
push_digitrY
†rZ
j©jK†r[
jhX 4r\
†r]
jsjç†r^
j©jV†r_
jsjȠr`
hŒXcontextra
†rb
j©jt†rc
hŒX
push_digitrd
†re
j©jK†rf
jhX 2rg
†rh
jsjç†ri
j©jV†rj
jsjȠrk
hŒXcontextrl
†rm
j©jt†rn
hŒXswitch_to_decimalsro
†rp
jsjȠrq
hŒXcontextrr
†rs
j©jt†rt
hŒX
push_digitru
†rv
j©jK†rw
jhX 3rx
†ry
jsjç†rz
j©jV†r{
jsjȠr|
hŒXcontextr}
†r~
j©jt†r
hŒXpush_opr€
†r
j©jK†r‚
jsjç†rƒ
jÖX'/'r„
†r…
jsjç†r†
j©jV†r‡
jsj»†rˆ
hŒXcontextr‰
†rŠ
j©jt†r‹
hŒX
push_digitrŒ
†r
j©jK†rŽ
jhX 3r
†r
jsjç†r‘
j©jV†r’
jsj»†r“
hŒXcontextr”
†r•
j©jt†r–
hŒXpush_opr—
†r˜
j©jK†r™
jsjç†rš
jÖX'='r›
†rœ
jsjç†r
j©jV†rž
jsj»†rŸ
hŒjW
†r 
jsjç†r¡
htj†r¢
jsjç†r£
hŒXcontextr¤
†r¥
j©jt†r¦
hŒXresultr§
†r¨
j©jt†r©
hŒXto_precisionrª
†r«
j©jK†r¬
jhX 2r­
†r®
jsjç†r¯
j©jV†r°
jsj»†r±
jXassertr²
†r³
jsjç†r´
hŒjW
†rµ
jsjç†r¶
htX==r·
†r¸
jsjç†r¹
jÁX"14.10"rº
†r»
jsjç†r¼
jXelser½
†r¾
jsjç†r¿
hŒXprintrÀ
†rÁ
jsjç†rÂ
hŒjW
†rÃ
jsX

rÄ
†rÅ
hX#test multiple decimalsrÆ
†rÇ
jsj»†rÈ
hŒXcontextrÉ
†rÊ
jsjç†rË
htj†rÌ
jsjç†rÍ
jXnewrÎ
†rÏ
jsjç†rÐ
h¹XCalculatorContextrÑ
†rÒ
jsj»†rÓ
hŒXcontextrÔ
†rÕ
j©jt†rÖ
hŒX
push_digitr×
†rØ
j©jK†rÙ
jhX 5rÚ
†rÛ
jsjç†rÜ
j©jV†rÝ
jsj»†rÞ
hŒXcontextrß
†rà
j©jt†rá
hŒX
push_digitrâ
†rã
j©jK†rä
jhX 0rå
†ræ
jsjç†rç
j©jV†rè
jsj»†ré
hŒXcontextrê
†rë
j©jt†rì
hŒXswitch_to_decimalsrí
†rî
jsj»†rï
hŒXcontextrð
†rñ
j©jt†rò
hŒX
push_digitró
†rô
j©jK†rõ
jhX 1rö
†r÷
jsjç†rø
j©jV†rù
jsj»†rú
hŒXcontextrû
†rü
j©jt†rý
hŒX
push_digitrþ
†rÿ
j©jK†rjhX 2r†rjsjç†rj©jV†rjsj»†rhŒXcontextr†rj©jt†rhŒX
push_digitr	†r
j©jK†rjhX 3r†r
jsjç†rj©jV†rjsj»†rhŒXcontextr†rj©jt†rhŒXpush_opr†rj©jK†rjsjç†rjÖX'+'r†rjsjç†rj©jV†rjsj»†rhŒXcontextr†rj©jt†rhŒX
push_digitr †r!j©jK†r"jhX 1r#†r$jsjç†r%j©jV†r&jsj»†r'hŒXcontextr(†r)j©jt†r*hŒXpush_opr+†r,j©jK†r-jsjç†r.jÖX'='r/†r0jsjç†r1j©jV†r2jsj»†r3hŒjW
†r4jsjç†r5htj†r6jsjç†r7hŒXcontextr8†r9j©jt†r:hŒXresultr;†r<j©jt†r=hŒXto_precisionr>†r?j©jK†r@jhX 3rA†rBjsjç†rCj©jV†rDjsj»†rEjXassertrF†rGjsjç†rHhŒjW
†rIjsjç†rJhtX==rK†rLjsjç†rMjÁX"51.123"rN†rOjsjç†rPjXelserQ†rRjsjç†rShŒXprintrT†rUjsjç†rVhŒjW
†rWjsX

rX†rYhX#test 'C' buttonrZ†r[jsj»†r\hŒXcontextr]†r^jsjç†r_htj†r`jsjç†rajXnewrb†rcjsjç†rdh¹XCalculatorContextre†rfjsj»†rghŒXcontextrh†rij©jt†rjhŒX
push_digitrk†rlj©jK†rmjhX 1rn†rojsjç†rpj©jV†rqjsj»†rrhŒXcontextrs†rtj©jt†ruhŒX
push_digitrv†rwj©jK†rxjhX 0ry†rzjsjç†r{j©jV†r|jsj»†r}hŒXcontextr~†rj©jt†r€hŒXpush_opr†r‚j©jK†rƒjsjç†r„jÖX'+'r…†r†jsjç†r‡j©jV†rˆjsj»†r‰hŒXcontextrІr‹j©jt†rŒhŒX
push_digitr†rŽj©jK†rjhX 1r†r‘jsjç†r’j©jV†r“jsj»†r”hŒXcontextr•†r–j©jt†r—hŒX
push_digitr˜†r™j©jK†ršjhX 0r›†rœjsjç†rj©jV†ržjsj»†rŸhŒXcontextr †r¡j©jt†r¢hŒXpush_opr£†r¤j©jK†r¥jsjç†r¦jÖX'='r§†r¨jsjç†r©j©jV†rªjsj»†r«hŒXcontextr¬†r­j©jt†r®hŒXpush_opr¯†r°j©jK†r±jsjç†r²jÖX'C'r³†r´jsjç†rµj©jV†r¶jsj»†r·hŒjW
†r¸jsjç†r¹htj†rºjsjç†r»hŒXcontextr¼†r½j©jt†r¾hŒXresultr¿†rÀj©jt†rÁhŒXto_precisionr†rÃj©jK†rÄjhX 1rņrÆjsjç†rÇj©jV†rÈjsj»†rÉjXassertrʆrËjsjç†rÌhŒjW
†rÍjsjç†rÎhtX==rφrÐjsjç†rÑjÁX"0.0"rÒ†rÓjsjç†rÔjXelserÕ†rÖjsjç†r×hŒXprintr؆rÙjsjç†rÚhŒjW
†rÛjsX

r܆rÝhX# graphical applicationrÞ†rßjsX

rà†rájXifrâ†rãjsjç†räjÁX
"NIT_TESTING"rå†ræj©jt†rçhŒXenvironrè†réjsjç†rêhtX!=rë†rìjsjç†ríjÁX"true"rî†rïjsjç†rðjXthenrñ†ròjsX
	ró†rôjXvarrõ†röjsjç†r÷hŒXapprø†rùjsjç†rúhtj†rûjsjç†rüjXnewrý†rþjsjç†rÿh¹X
CalculatorGuir†rjsX
	r†rhŒXrun_gtkr†rjsj»†rjXendr†rjsj»†r	hX:# This file is part of NIT ( http://www.nitlanguage.org ).r
†rjsj»†rhj½†r
jsj»†rhX9# Copyright 2013 Matthieu Lucas <lucasmatthieu@gmail.com>r†rjsj»†rhj½†rjsj»†rhXA# Licensed under the Apache License, Version 2.0 (the "License");r†rjsj»†rhXB# you may not use this file except in compliance with the License.r†rjsj»†rhX)# You may obtain a copy of the License atr†rjsj»†rhj½†rjsj»†rhX,# http://www.apache.org/licenses/LICENSE-2.0r†r jsj»†r!hj½†r"jsj»†r#hXE# Unless required by applicable law or agreed to in writing, softwarer$†r%jsj»†r&hXC# distributed under the License is distributed on an "AS IS" BASIS,r'†r(jsj»†r)hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.r*†r+jsj»†r,hXE# See the License for the specific language governing permissions andr-†r.jsj»†r/hX # limitations under the License.r0†r1jsX

r2†r3hXH# This sample has been implemented to show you how simple is it to play r4†r5jsj»†r6hXC# with native callbacks (C) through an high level with NIT program.r7†r8jsX

r9†r:e(jXmoduler;†r<jsjç†r=hŒXcallback_chimpanzer>†r?jsj»†r@jXimportrA†rBjsjç†rChŒXcallback_monkeyrD†rEjsX

rF†rGjXclassrH†rIjsjç†rJh¹X	ChimpanzerK†rLjsX
	rM†rNjXsuperrO†rPjsjç†rQh¹XMonkeyActionCallablerR†rSjsX

	rT†rUjXfunrV†rWjsjç†rXhŒXcreaterY†rZjsX
	r[†r\jXdor]†r^jsX
		r_†r`jXvarra†rbjsjç†rchŒXmonkeyrd†rejsjç†rfhtj†rgjsjç†rhjXnewri†rjjsjç†rkh¹XMonkeyrl†rmjsX
		rn†rohŒXprintrp†rqjsjç†rrjÁX"Hum, I'm sleeping ..."rs†rtjsX
		ru†rvhX<# Invoking method which will take some time to compute, and rw†rxjsX
		ry†rzhX1# will be back in wokeUp method with information.r{†r|jsX
		r}†r~hX=# - Callback method defined in MonkeyActionCallable Interfacer†r€jsX
		r†r‚hŒXmonkeyrƒ†r„j©jt†r…hŒXwokeUpActionr††r‡j©jK†rˆhŒXselfr‰†rŠj©j;†r‹jsjç†rŒjÁX"Hey, I'm awake."r†rŽj©jV†rjsX
	r†r‘jXendr’†r“jsX

	r”†r•hXD# Inherit callback method, defined by MonkeyActionCallable interfacer–†r—jsX
	r˜†r™hX # - Back of wokeUpAction method rš†r›jsX
	rœ†rjXredefrž†rŸjsjç†r jXfunr¡†r¢jsjç†r£hŒXwokeUpr¤†r¥j©jK†r¦jsjç†r§hŒXsenderr¨†r©j©jú†rªh¹XMonkeyr«†r¬j©j;†r­jsjç†r®hŒXmessager¯†r°j©jú†r±h¹XObjectr²†r³jsjç†r´j©jV†rµjsX
	r¶†r·jXdor¸†r¹jsX
		rº†r»hŒXprintr¼†r½jsjç†r¾hŒXmessager¿†rÀjsX
	rÁ†rÂjXendrÆrÄjsj»†rÅjXendrƆrÇjsX

rȆrÉjXvarrʆrËjsjç†rÌhŒXmr͆rÎjsjç†rÏhtj†rÐjsjç†rÑjXnewrÒ†rÓjsjç†rÔh¹X	ChimpanzerÕ†rÖjsj»†r×hŒj͆rØj©jt†rÙhŒXcreaterÚ†rÛjsj»†rÜhX:# This file is part of NIT ( http://www.nitlanguage.org ).r݆rÞjsj»†rßhj½†ràjsj»†ráhX9# Copyright 2013 Matthieu Lucas <lucasmatthieu@gmail.com>râ†rãjsj»†rähj½†råjsj»†ræhXA# Licensed under the Apache License, Version 2.0 (the "License");rç†rèjsj»†réhXB# you may not use this file except in compliance with the License.rê†rëjsj»†rìhX)# You may obtain a copy of the License atrí†rîjsj»†rïhj½†rðjsj»†rñhX,# http://www.apache.org/licenses/LICENSE-2.0rò†rójsj»†rôhj½†rõjsj»†röhXE# Unless required by applicable law or agreed to in writing, softwarer÷†røjsj»†rùhXC# distributed under the License is distributed on an "AS IS" BASIS,rú†rûjsj»†rühXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rý†rþjsj»†rÿhXE# See the License for the specific language governing permissions andr†rjsj»†rhX # limitations under the License.r†rjsX

r†rhXH# This sample has been implemented to show you how simple is it to play r†rjsj»†r	hXC# with native callbacks (C) through an high level with NIT program.r
†rjsX

r†r
jXmoduler†rjsjç†rhŒXcallback_monkeyr†rjsX

r†rjXinr†rjsjç†rjÁX
"C header"r†rjsjç†rjsX¸`{
	#include <stdio.h>
	#include <stdlib.h>

	typedef struct { 
		int id;
		int age;
	} CMonkey;

	typedef struct {
		MonkeyActionCallable toCall;
		Object message;
	} MonkeyAction;
`}r†rjsX

r†rjXinr†r jsjç†r!jÁX"C body"r"†r#jsjç†r$jsXP`{
	// Method which reproduce a callback answer
	// Please note that a function pointer is only used to reproduce the callback
	void cbMonkey(CMonkey *mkey, void callbackFunc(CMonkey*, MonkeyAction*), MonkeyAction *data)
	{
		sleep(2);
		callbackFunc( mkey, data );
	}

	// Back of background treatment, will be redirected to callback function
	void nit_monkey_callback_func( CMonkey *mkey, MonkeyAction *data )
	{
		// To call a your method, the signature must be written like this :
		// <Interface Name>_<Method>...
		MonkeyActionCallable_wokeUp( data->toCall, mkey, data->message );
	}
`}r%†r&jsX

r'†r(hX<# Implementable interface to get callback in defined methodsr)†r*jsj»†r+jX	interfacer,†r-jsjç†r.h¹XMonkeyActionCallabler/†r0jsX
	r1†r2jXfunr3†r4jsjç†r5hŒXwokeUpr6†r7j©jK†r8jsjç†r9hŒXsenderr:†r;j©jú†r<h¹XMonkeyr=†r>j©j;†r?jsjç†r@hŒXmessagerA†rBj©jú†rCjsjç†rDh¹XObjectrE†rFj©jV†rGjsjç†rHjXisrI†rJjsjç†rKjXabstractrL†rMjsj»†rNjXendrO†rPjsX

rQ†rRhX]# Defining my object type Monkey, which is, in a low level, a pointer to a C struct (CMonkey)rS†rTjsj»†rUjXexternrV†rWjsjç†rXjXclassrY†rZjsjç†r[h¹XMonkeyr\†r]jsjç†r^jsX`{ CMonkey * `}r_†r`jsX
	
	ra†rbjXnewrc†rdjsjç†rejsXl`{
		CMonkey *monkey = malloc( sizeof(CMonkey) );
		monkey->age = 10;
		monkey->id = 1;
		return monkey;
	`}rf†rgjsX
	
	rh†rihXe# Object method which will get a callback in wokeUp method, defined in MonkeyActionCallable interfacerj†rkjsX
	rl†rmhX:# Must be defined as Nit/C method because of C call insidern†rojsX
	rp†rqjXfunrr†rsjsjç†rthŒXwokeUpActionru†rvj©jK†rwjsjç†rxhŒXtoCallry†rzj©jú†r{jsjç†r|h¹XMonkeyActionCallabler}†r~j©j;†rjsjç†r€hŒXmessager†r‚j©jú†rƒjsjç†r„h¹XObjectr…†r†jsjç†r‡j©jV†rˆjsjç†r‰jXisrІr‹jsjç†rŒjXexternr†rŽjsjç†rjXimportr†r‘jsjç†r’h¹XMonkeyActionCallabler“†r”j©jt†r•hŒXwokeUpr–†r—jsjç†r˜jsX'`{

		// Allocating memory to keep reference of received parameters :
		// - Object receiver
		// - Message 
		MonkeyAction *data = malloc( sizeof(MonkeyAction) );

		// Incrementing reference counter to prevent from releasing
		MonkeyActionCallable_incr_ref( toCall );
		Object_incr_ref( message );
		
		data->toCall = toCall;
		data->message = message;
		
		// Calling method which reproduce a callback by passing :
		// - Receiver
		// - Function pointer to object return method
		// - Datas
		cbMonkey( recv, &nit_monkey_callback_func, data );
	`}r™†ršjsj»†r›jXendrœ†rjsj»†ržhX:# This file is part of NIT ( http://www.nitlanguage.org ).rŸ†r jsj»†r¡hj½†r¢jsj»†r£hXA# Licensed under the Apache License, Version 2.0 (the "License");r¤†r¥jsj»†r¦hXB# you may not use this file except in compliance with the License.r§†r¨jsj»†r©hX)# You may obtain a copy of the License atrª†r«jsj»†r¬hj½†r­jsj»†r®hX0#     http://www.apache.org/licenses/LICENSE-2.0r¯†r°jsj»†r±hj½†r²jsj»†r³hXE# Unless required by applicable law or agreed to in writing, softwarer´†rµjsj»†r¶hXC# distributed under the License is distributed on an "AS IS" BASIS,r·†r¸jsj»†r¹hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rº†r»jsj»†r¼hXE# See the License for the specific language governing permissions andr½†r¾jsj»†r¿hX # limitations under the License.rÀ†rÁjsX

r†rÃhX"# Implementation of circular listsrĆrÅjsj»†rÆhXX# This example shows the usage of generics and somewhat a specialisation of collections.rdžrÈjsj»†rÉjXmodulerʆrËjsjç†rÌhŒX
circular_listr͆rÎjsX

rφrÐhXF# Sequences of elements implemented with a double-linked circular listrцrÒjsj»†rÓjXclassrÔ†rÕjsjç†rÖh¹XCircularListr׆rØj©j@†rÙh¹XErÚ†rÛj©jC†rÜjsX
	r݆rÞhX@# Like standard Array or LinkedList, CircularList is a Sequence.r߆ràjsX
	rá†râjXsuperrã†räjsjç†råh¹XSequenceræ†rçj©j@†rèh¹jÚ†réj©jC†rêjsX

	rë†rìhX## The first node of the list if anyrí†rîjsX
	rï†rðhX=# The special case of an empty list is handled by a null noderñ†ròjsX
	ró†rôjXprivaterõ†röjsjç†r÷jXvarrø†rùjsjç†rúhŒXnoderû†rüj©jú†rýjsjç†rþjXnullablerÿ†rjsjç†rh¹XCLNoder†rj©j@†rh¹jÚ†rj©jC†rjsjç†rhtj†rjsjç†r	jXnullr
†rjsX

	r†r
jXredefr†rjsjç†rjXfunr†rjsjç†rhŒXiteratorr†rjsjç†rjXdor†rjsjç†rjXreturnr†rjsjç†rjXnewr†rjsjç†rh¹XCircularListIteratorr †r!j©j@†r"h¹jÚ†r#j©jC†r$j©jK†r%hŒXselfr&†r'j©jV†r(jsX

	r)†r*jXredefr+†r,jsjç†r-jXfunr.†r/jsjç†r0hŒXfirstr1†r2jsjç†r3jXdor4†r5jsjç†r6jXreturnr7†r8jsjç†r9hŒXselfr:†r;j©jt†r<hŒXnoder=†r>j©jt†r?hŒXitemr@†rAjsX

	rB†rCjXredefrD†rEjsjç†rFjXfunrG†rHjsjç†rIhŒXpushrJ†rKj©jK†rLhŒXerM†rNj©jV†rOjsX
	rP†rQjXdorR†rSjsX
		rT†rUjXvarrV†rWjsjç†rXhŒXnew_noderY†rZjsjç†r[htj†r\jsjç†r]jXnewr^†r_jsjç†r`h¹XCLNodera†rbj©j@†rch¹jÚ†rdj©jC†rej©jK†rfhŒjM†rgj©jV†rhjsX
		ri†rjjXvarrk†rljsjç†rmhŒj
	†rnjsjç†rohtj†rpjsjç†rqhŒXselfrr†rsj©jt†rthŒXnoderu†rvjsX
		rw†rxjXifry†rzjsjç†r{hŒj
	†r|jsjç†r}htX==r~†rjsjç†r€jXnullr†r‚jsjç†rƒjXthenr„†r…jsX
			r††r‡hX# the first noderˆ†r‰jsX
			rІr‹hŒXselfrŒ†rj©jt†rŽhŒXnoder†rjsjç†r‘htj†r’jsjç†r“hŒXnew_noder”†r•jsX
		r–†r—jXelser˜†r™jsX
			rš†r›hX/# not the first one, so attach nodes correctly.rœ†rjsX
			rž†rŸjXvarr †r¡jsjç†r¢hŒX
old_last_noder£†r¤jsjç†r¥htj†r¦jsjç†r§hŒj
	†r¨j©jt†r©hŒXprevrª†r«jsX
			r¬†r­hŒXnew_noder®†r¯j©jt†r°hŒXnextr±†r²jsjç†r³htj†r´jsjç†rµhŒj
	†r¶jsX
			r·†r¸hŒXnew_noder¹†rºj©jt†r»hŒXprevr¼†r½jsjç†r¾htj†r¿jsjç†rÀhŒX
old_last_noderÁ†rÂjsX
			rÆrÄhŒX
old_last_noderņrÆj©jt†rÇhŒXnextrȆrÉjsjç†rÊhtj†rËjsjç†rÌhŒXnew_noder͆rÎjsX
			rφrÐhŒj
	†rÑj©jt†rÒhŒXprevrÓ†rÔjsjç†rÕhtj†rÖjsjç†r×hŒXnew_noder؆rÙjsX
		rÚ†rÛjXendr܆rÝjsX
	rÞ†rßjXendrà†rájsX

	râ†rãjXredefrä†råjsjç†ræjXfunrç†rèjsjç†réhŒXpoprê†rëjsX
	rì†ríjXdorî†rïjsX
		rð†rñjXvarrò†rójsjç†rôhŒj
	†rõjsjç†röhtj†r÷jsjç†røhŒXselfrù†rúj©jt†rûhŒXnoderü†rýjsX
		rþ†rÿjXassertr†rjsjç†rhŒj
	†rjsjç†rhtX!=r†rjsjç†rjXnullr†r	jsX
		r
†rjXvarr†r
jsjç†rhŒXprevr†rjsjç†rhtj†rjsjç†rhŒj
	†rj©jt†rhŒXprevr†rjsX
		r†rjXifr†rjsjç†rhŒXprevr†rjsjç†rhtX==r †r!jsjç†r"hŒj
	†r#jsjç†r$jXthenr%†r&jsX
			r'†r(hX# the only noder)†r*jsX
			r+†r,hŒXselfr-†r.j©jt†r/hŒXnoder0†r1jsjç†r2htj†r3jsjç†r4jXnullr5†r6jsX
			r7†r8jXreturnr9†r:jsjç†r;hŒj
	†r<j©jt†r=hŒXitemr>†r?jsX
		r@†rAjXendrB†rCjsX
		rD†rEhX-# not the only one do detach nodes correctly.rF†rGjsX
		rH†rIjXvarrJ†rKjsjç†rLhŒX	prev_prevrM†rNjsjç†rOhtj†rPjsjç†rQhŒXprevrR†rSj©jt†rThŒXprevrU†rVjsX
		rW†rXhŒj
	†rYj©jt†rZhŒXprevr[†r\jsjç†r]htj†r^jsjç†r_hŒX	prev_prevr`†rajsX
		rb†rchŒX	prev_prevrd†rej©jt†rfhŒXnextrg†rhjsjç†rihtj†rjjsjç†rkhŒj
	†rljsX
		rm†rnjXreturnro†rpjsjç†rqhŒXprevrr†rsj©jt†rthŒXitemru†rvjsX
	rw†rxjXendry†rzjsX

	r{†r|jXredefr}†r~jsjç†rjXfunr€†rjsjç†r‚hŒXunshiftrƒ†r„j©jK†r…hŒjM†r†j©jV†r‡jsX
	rˆ†r‰jXdorІr‹jsX
		rŒ†rhX# Circularity has benefits.rކrjsX
		r†r‘hŒXpushr’†r“j©jK†r”hŒjM†r•j©jV†r–jsX
		r—†r˜hŒXselfr™†ršj©jt†r›hŒXnoderœ†rjsjç†ržhtj†rŸjsjç†r hŒXselfr¡†r¢j©jt†r£hŒXnoder¤†r¥j©jt†r¦hŒXprevr§†r¨jsX
	r©†rªjXendr«†r¬jsX

	r­†r®jXredefr¯†r°jsjç†r±jXfunr²†r³jsjç†r´hŒXshiftrµ†r¶jsX
	r·†r¸jXdor¹†rºjsX
		r»†r¼hX# Circularity has benefits.r½†r¾jsX
		r¿†rÀhŒXselfrÁ†rÂj©jt†rÃhŒXnoderĆrÅjsjç†rÆhtj†rÇjsjç†rÈhŒXselfrɆrÊj©jt†rËhŒXnoder̆rÍj©jt†rÎhŒXnextrφrÐjsX
		rцrÒjXreturnrÓ†rÔjsjç†rÕhŒXselfrÖ†r×j©jt†rØhŒXpoprÙ†rÚjsX
	rÛ†rÜjXendr݆rÞjsX

	r߆ràhXD# Move the first at the last position, the second at the first, etc.rá†râjsX
	rã†räjXfunrå†ræjsjç†rçhŒXrotaterè†réjsX
	rê†rëjXdorì†ríjsX
		rî†rïjXvarrð†rñjsjç†ròhŒj
	†rójsjç†rôhtj†rõjsjç†röhŒXselfr÷†røj©jt†rùhŒXnoderú†rûjsX
		rü†rýjXifrþ†rÿjsjç†rhŒj
	†rjsjç†rhtX==r†rjsjç†rjXnullr†rjsjç†rjXthenr	†r
jsjç†rjXreturnr†r
jsX
		r†rhŒXselfr†rj©jt†rhŒXnoder†rjsjç†rhtj†rjsjç†rhŒj
	†rj©jt†rhŒXnextr†rjsX
	r†rjXendr†rjsX

	r †r!hX-# Sort the list using the Josephus algorithm.r"†r#jsX
	r$†r%jXfunr&†r'jsjç†r(hŒXjosephusr)†r*j©jK†r+hŒXstepr,†r-j©jú†r.jsjç†r/h¹XIntr0†r1j©jV†r2jsX
	r3†r4jXdor5†r6jsX
		r7†r8jXvarr9†r:jsjç†r;hŒXresr<†r=jsjç†r>htj†r?jsjç†r@jXnewrA†rBjsjç†rCh¹XCircularListrD†rEj©j@†rFh¹jÚ†rGj©jC†rHjsX
		rI†rJjXwhilerK†rLjsjç†rMjXnotrN†rOjsjç†rPhŒXselfrQ†rRj©jt†rShŒXis_emptyrT†rUjsjç†rVjXdorW†rXjsX
			rY†rZhX# count 'step'r[†r\jsX
			r]†r^jXforr_†r`jsjç†rahŒj"†rbjsjç†rcjXinrd†rejsjç†rfjhX[1rg†rhj©X..ri†rjhŒXsteprk†rlj©j@†rmjsjç†rnjXdoro†rpjsjç†rqhŒXselfrr†rsj©jt†rthŒXrotateru†rvjsX
			rw†rxhX# killry†rzjsX
			r{†r|jXvarr}†r~jsjç†rhŒXxr€†rjsjç†r‚htj†rƒjsjç†r„hŒXselfr…†r†j©jt†r‡hŒXshiftrˆ†r‰jsX
			rІr‹hŒXresrŒ†rj©jt†rŽhŒXaddr†rj©jK†r‘hŒj€†r’j©jV†r“jsX
		r”†r•jXendr–†r—jsX
		r˜†r™hŒXselfrš†r›j©jt†rœhŒXnoder†ržjsjç†rŸhtj†r jsjç†r¡hŒXresr¢†r£j©jt†r¤hŒXnoder¥†r¦jsX
	r§†r¨jXendr©†rªjsj»†r«jXendr¬†r­jsX

r®†r¯hX# Nodes of a CircularListr°†r±jsj»†r²jXprivater³†r´jsjç†rµjXclassr¶†r·jsjç†r¸h¹XCLNoder¹†rºj©j@†r»h¹jÚ†r¼j©jC†r½jsX
	r¾†r¿hX# The current itemrÀ†rÁjsX
	r†rÃjXvarrĆrÅjsjç†rÆhŒXitemrdžrÈj©jú†rÉjsjç†rÊh¹jÚ†rËjsX

	r̆rÍhX%# The next item in the circular list.rΆrÏjsX
	rІrÑhX1# Because of circularity, there is always a next;rÒ†rÓjsX
	rÔ†rÕhX# so by default let it be selfrÖ†r×jsX
	r؆rÙjXvarrÚ†rÛjsjç†rÜhŒXnextr݆rÞj©jú†rßjsjç†ràh¹XCLNoderá†râj©j@†rãh¹jÚ†räj©jC†råjsjç†ræhtj†rçjsjç†rèjXselfré†rêjsX

	rë†rìhX)# The previous item in the circular list.rí†rîjsX
	rï†rðhXG# Coherence between next and previous nodes has to be maintained by therñ†ròjsX
	ró†rôhX# circular list.rõ†röjsX
	r÷†røjXvarrù†rújsjç†rûhŒXprevrü†rýj©jú†rþjsjç†rÿh¹XCLNoder†rj©j@†rh¹jÚ†rj©jC†rjsjç†rhtj†rjsjç†rjXselfr†r	jsj»†r
jXendr†rjsX

r
†rhX # An iterator of a CircularList.r†rjsj»†rjXprivater†rjsjç†rjXclassr†rjsjç†rh¹XCircularListIteratorr†rj©j@†rh¹jÚ†rj©jC†rjsX
	r†rjXsuperr†r jsjç†r!h¹XIndexedIteratorr"†r#j©j@†r$h¹jÚ†r%j©jC†r&jsX

	r'†r(jXredefr)†r*jsjç†r+jXvarr,†r-jsjç†r.hŒXindexr/†r0j©jú†r1jsjç†r2h¹XIntr3†r4jsX

	r5†r6hX# The current node pointed.r7†r8jsX
	r9†r:hX# Is null if the list is empty.r;†r<jsX
	r=†r>jXvarr?†r@jsjç†rAhŒXnoderB†rCj©jú†rDjsjç†rEjXnullablerF†rGjsjç†rHh¹XCLNoderI†rJj©j@†rKh¹jÚ†rLj©jC†rMjsX

	rN†rOhX# The list iterated.rP†rQjsX
	rR†rSjXvarrT†rUjsjç†rVhŒXlistrW†rXj©jú†rYjsjç†rZh¹XCircularListr[†r\j©j@†r]h¹jÚ†r^j©jC†r_jsX

	r`†rajXredefrb†rcjsjç†rdjXfunre†rfjsjç†rghŒXis_okrh†rijsX
	rj†rkjXdorl†rmjsX
		rn†rohX# Empty lists are not OK.rp†rqjsX
		rr†rshX*# Pointing again the first node is not OK.rt†rujsX
		rv†rwjXreturnrx†ryjsjç†rzhŒXselfr{†r|j©jt†r}hŒXnoder~†rjsjç†r€htX!=r†r‚jsjç†rƒjXnullr„†r…jsjç†r†jXandr‡†rˆjsjç†r‰j©jK†rŠhŒXselfr‹†rŒj©jt†rhŒXindexrކrjsjç†rhtX==r‘†r’jhX 0r“†r”jsjç†r•jXorr–†r—jsjç†r˜hŒXselfr™†ršj©jt†r›hŒXnoderœ†rjsjç†ržhtX!=rŸ†r jsjç†r¡hŒXselfr¢†r£j©jt†r¤hŒXlistr¥†r¦j©jt†r§hŒXnoder¨†r©j©jV†rªjsX
	r«†r¬jXendr­†r®jsX

	r¯†r°jXredefr±†r²jsjç†r³jXfunr´†rµjsjç†r¶hŒXnextr·†r¸jsX
	r¹†rºjXdor»†r¼jsX
		r½†r¾hŒXselfr¿†rÀj©jt†rÁhŒXnoder†rÃjsjç†rÄhtj†rÅjsjç†rÆhŒXselfrdžrÈj©jt†rÉhŒXnoderʆrËj©jt†rÌhŒXnextr͆rÎjsX
		rφrÐhŒXselfrцrÒj©jt†rÓhŒXindexrÔ†rÕjsjç†rÖhtj†r×htj†rØjhX 1rÙ†rÚjsX
	rÛ†rÜjXendr݆rÞjsX

	r߆ràjXredefrá†râjsjç†rãjXfunrä†råjsjç†ræhŒXitemrç†rèjsjç†réjXdorê†rëjsjç†rìjXreturnrí†rîjsjç†rïhŒXselfrð†rñj©jt†ròhŒXnoderó†rôj©jt†rõhŒXitemrö†r÷jsX

	rø†rùjXinitrú†rûj©jK†rühŒXlistrý†rþj©jú†rÿjsjç†rh¹XCircularListr†rj©j@†rh¹jÚ†rj©jC†rj©jV†rjsX
	r†rjXdor	†r
jsX
		r†rhŒXselfr
†rj©jt†rhŒXnoder†rjsjç†rhtj†rjsjç†rhŒXlistr†rj©jt†rhŒXnoder†rjsX
		r†rhŒXselfr†rj©jt†rhŒXlistr†r jsjç†r!htj†r"jsjç†r#hŒXlistr$†r%jsX
		r&†r'hŒXselfr(†r)j©jt†r*hŒXindexr+†r,jsjç†r-htj†r.jhX 0r/†r0jsX
	r1†r2jXendr3†r4jsj»†r5jXendr6†r7jsX

r8†r9jXvarr:†r;jsjç†r<hŒj"†r=jsjç†r>htj†r?jsjç†r@e(jXnewrA†rBjsjç†rCh¹XCircularListrD†rEj©j@†rFh¹XIntrG†rHj©jC†rIjsj»†rJhŒj"†rKj©jt†rLhŒXadd_allrM†rNj©jK†rOjhX[1rP†rQj©j;†rRjhX 2rS†rTj©j;†rUjhX 3rV†rWj©j;†rXjhX 4rY†rZj©j;†r[jhX 5r\†r]j©j;†r^jhX 6r_†r`j©j;†rajhX 7rb†rcj©jC†rdj©jV†rejsj»†rfhŒXprintrg†rhjsjç†rihŒj"†rjj©jt†rkhŒXfirstrl†rmjsj»†rnhŒXprintro†rpjsjç†rqhŒj"†rrj©jt†rshŒXjoinrt†ruj©jK†rvjÁX":"rw†rxj©jV†ryjsX

rz†r{hŒj"†r|j©jt†r}hŒXpushr~†rjhX(8r€†rj©jV†r‚jsj»†rƒhŒXprintr„†r…jsjç†r†hŒj"†r‡j©jt†rˆhŒXshiftr‰†rŠjsj»†r‹hŒXprintrŒ†rjsjç†rŽhŒj"†rj©jt†rhŒXpopr‘†r’jsj»†r“hŒj"†r”j©jt†r•hŒXunshiftr–†r—jhX(0r˜†r™j©jV†ršjsj»†r›hŒXprintrœ†rjsjç†ržhŒj"†rŸj©jt†r hŒXjoinr¡†r¢j©jK†r£jÁX":"r¤†r¥j©jV†r¦jsX

r§†r¨hŒj"†r©j©jt†rªhŒXjosephusr«†r¬jhX(3r­†r®j©jV†r¯jsj»†r°hŒXprintr±†r²jsjç†r³hŒj"†r´j©jt†rµhŒXjoinr¶†r·j©jK†r¸jÁX":"r¹†rºj©jV†r»jsj»†r¼hX:# This file is part of NIT ( http://www.nitlanguage.org ).r½†r¾jsj»†r¿hj½†rÀjsj»†rÁhXA# Licensed under the Apache License, Version 2.0 (the "License");r†rÃjsj»†rÄhXB# you may not use this file except in compliance with the License.rņrÆjsj»†rÇhX)# You may obtain a copy of the License atrȆrÉjsj»†rÊhj½†rËjsj»†rÌhX0#     http://www.apache.org/licenses/LICENSE-2.0r͆rÎjsj»†rÏhj½†rÐjsj»†rÑhXE# Unless required by applicable law or agreed to in writing, softwarerÒ†rÓjsj»†rÔhXC# distributed under the License is distributed on an "AS IS" BASIS,rÕ†rÖjsj»†r×hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.r؆rÙjsj»†rÚhXE# See the License for the specific language governing permissions andrÛ†rÜjsj»†rÝhX # limitations under the License.rÞ†rßjsX

rà†ráhXL# This module beef up the clock module by allowing a clock to be comparable.râ†rãjsj»†rähX'# It show the usage of class refinementrå†ræjsj»†rçjXmodulerè†réjsjç†rêhŒX
clock_morerë†rìjsX

rí†rîjXimportrï†rðjsjç†rñhŒXclockrò†rójsX

rô†rõjXredefrö†r÷jsjç†røjXclassrù†rújsjç†rûh¹XClockrü†rýjsX
	rþ†rÿhX# Clock are now comparabler†rjsX
	r†rjXsuperr†rjsjç†rh¹X
Comparabler†rjsX

	r	†r
hX<# Comparaison of a clock make only sense with an other clockr†rjsX
	r
†rjXredefr†rjsjç†rjXtyper†rjsjç†rh¹XOTHERr†rj©jú†rjsjç†rh¹XClockr†rjsX

	r†rjXredefr†rjsjç†rjXfunr †r!jsjç†r"htX<r#†r$j©jK†r%hŒXor&†r'j©jV†r(jsX
	r)†r*jXdor+†r,jsX
		r-†r.hX4# Note: < is the only abstract method of Comparable.r/†r0jsX
		r1†r2hX9#       All other operators and methods rely on < and ==.r3†r4jsX
		r5†r6jXreturnr7†r8jsjç†r9hŒXselfr:†r;j©jt†r<hŒX
total_minutesr=†r>jsjç†r?htj#†r@jsjç†rAhŒj&†rBj©jt†rChŒX
total_minutesrD†rEjsX
	rF†rGjXendrH†rIjsj»†rJjXendrK†rLjsX

rM†rNjXvarrO†rPjsjç†rQjhXc1rR†rSjsjç†rThtj†rUjsjç†rVjXnewrW†rXjsjç†rYh¹XClockrZ†r[jhX(8r\†r]j©j;†r^jhX 12r_†r`j©jV†rajsj»†rbjXvarrc†rdjsjç†rejhXc2rf†rgjsjç†rhhtj†rijsjç†rjjXnewrk†rljsjç†rmh¹XClockrn†rojhX(8rp†rqj©j;†rrjhX 13rs†rtj©jV†rujsj»†rvjXvarrw†rxjsjç†ryjhXc3rz†r{jsjç†r|htj†r}jsjç†r~jXnewr†r€jsjç†rh¹XClockr‚†rƒjhX(9r„†r…j©j;†r†jhX 13r‡†rˆj©jV†r‰jsX

rІr‹hŒXprintrŒ†rjsjç†rŽjÁX"{r†rjhXc1r‘†r’jÁX}<{r“†r”jhXc2r•†r–jÁX}? {r—†r˜jhXc1r™†ršhtj#†r›jhXc2rœ†rjÁX}"rž†rŸjsj»†r hŒXprintr¡†r¢jsjç†r£jÁX"{r¤†r¥jhXc1r¦†r§jÁX}<={r¨†r©jhXc2rª†r«jÁX}? {r¬†r­jhXc1r®†r¯htX<=r°†r±jhXc2r²†r³jÁX}"r´†rµjsj»†r¶hŒXprintr·†r¸jsjç†r¹jÁX"{rº†r»jhXc1r¼†r½jÁX}>{r¾†r¿jhXc2rÀ†rÁjÁX}? {r†rÃjhXc1rĆrÅhtX>rƆrÇjhXc2rȆrÉjÁX}"rʆrËjsj»†rÌhŒXprintr͆rÎjsjç†rÏjÁX"{rІrÑjhXc1rÒ†rÓjÁX}>={rÔ†rÕjhXc2rÖ†r×jÁX}? {r؆rÙjhXc1rÚ†rÛhtX>=r܆rÝjhXc2rÞ†rßjÁX}"rà†rájsj»†râhŒXprintrã†räjsjç†råjÁX"{ræ†rçjhXc1rè†réjÁX}<=>{rê†rëjhXc2rì†ríjÁX}? {rî†rïjhXc1rð†rñhtX<=rò†róhtjƆrôjhXc2rõ†röjÁX}"r÷†røjsj»†rùhŒXprintrú†rûjsjç†rüjÁX"{rý†rþjhXc1rÿ†rjÁX},{r†rjhXc2r†rjÁX}? max={r†rjhXc1r†rj©jt†r	hŒXmaxr
†rj©jK†rjhXc2r
†rj©jV†rjÁX} min={r†rjhXc1r†rj©jt†rhŒXminr†rj©jK†rjhXc2r†rj©jV†rjÁX}"r†rjsj»†rhŒXprintr†rjsjç†r jÁX"{r!†r"jhXc1r#†r$jÁX}.is_between({r%†r&jhXc2r'†r(jÁX}, {r)†r*jhXc3r+†r,jÁX})? {r-†r.jhXc1r/†r0j©jt†r1hŒX
is_betweenr2†r3j©jK†r4jhXc2r5†r6j©j;†r7jsjç†r8jhXc3r9†r:j©jV†r;jÁX}"r<†r=jsj»†r>hŒXprintr?†r@jsjç†rAjÁX"{rB†rCjhXc2rD†rEjÁX}.is_between({rF†rGjhXc1rH†rIjÁX}, {rJ†rKjhXc3rL†rMjÁX})? {rN†rOjhXc2rP†rQj©jt†rRhŒX
is_betweenrS†rTj©jK†rUjhXc1rV†rWj©j;†rXjsjç†rYjhXc3rZ†r[j©jV†r\jÁX}"r]†r^jsX

r_†r`hŒXprintra†rbjsjç†rcjÁX"-"rd†rejsX

rf†rgjhXc1rh†rij©jt†rjhŒXminutesrk†rljsjç†rmhtj†rnhtj†rojhX 1rp†rqjsX

rr†rshŒXprintrt†rujsjç†rvjÁX"{rw†rxjhXc1ry†rzjÁX}<{r{†r|jhXc2r}†r~jÁX}? {r†r€jhXc1r†r‚htj#†rƒjhXc2r„†r…jÁX}"r††r‡jsj»†rˆhŒXprintr‰†rŠjsjç†r‹jÁX"{rŒ†rjhXc1rކrjÁX}<={r†r‘jhXc2r’†r“jÁX}? {r”†r•jhXc1r–†r—htX<=r˜†r™jhXc2rš†r›jÁX}"rœ†rjsj»†ržhŒXprintrŸ†r jsjç†r¡jÁX"{r¢†r£jhXc1r¤†r¥jÁX}>{r¦†r§jhXc2r¨†r©jÁX}? {rª†r«jhXc1r¬†r­htjƆr®jhXc2r¯†r°jÁX}"r±†r²jsj»†r³hŒXprintr´†rµjsjç†r¶jÁX"{r·†r¸jhXc1r¹†rºjÁX}>={r»†r¼jhXc2r½†r¾jÁX}? {r¿†rÀjhXc1rÁ†rÂhtX>=rÆrÄjhXc2rņrÆjÁX}"rdžrÈjsj»†rÉhŒXprintrʆrËjsjç†rÌjÁX"{r͆rÎjhXc1rφrÐjÁX}<=>{rцrÒjhXc2rÓ†rÔjÁX}? {rÕ†rÖjhXc1r׆rØhtX<=rÙ†rÚhtjƆrÛjhXc2r܆rÝjÁX}"rÞ†rßjsj»†ràhŒXprintrá†râjsjç†rãjÁX"{rä†råjhXc1ræ†rçjÁX},{rè†réjhXc2rê†rëjÁX}? max={rì†ríjhXc1rî†rïj©jt†rðhŒXmaxrñ†ròj©jK†rójhXc2rô†rõj©jV†röjÁX} min={r÷†røjhXc1rù†rúj©jt†rûhŒXminrü†rýj©jK†rþjhXc2rÿ†rj©jV†rjÁX}"r†rjsj»†rhŒXprintr†rjsjç†rjÁX"{r†r	jhXc1r
†rjÁX}.is_between({r†r
jhXc2r†rjÁX}, {r†rjhXc3r†rjÁX})? {r†rjhXc1r†rj©jt†rhŒX
is_betweenr†rj©jK†rjhXc2r†rj©j;†rjsjç†rjhXc3r †r!j©jV†r"jÁX}"r#†r$jsj»†r%hŒXprintr&†r'jsjç†r(jÁX"{r)†r*jhXc2r+†r,jÁX}.is_between({r-†r.jhXc1r/†r0jÁX}, {r1†r2jhXc3r3†r4jÁX})? {r5†r6jhXc2r7†r8j©jt†r9hŒX
is_betweenr:†r;j©jK†r<jhXc1r=†r>j©j;†r?jsjç†r@jhXc3rA†rBj©jV†rCjÁX}"rD†rEjsj»†rFhX:# This file is part of NIT ( http://www.nitlanguage.org ).rG†rHjsj»†rIhj½†rJjsj»†rKhXA# Licensed under the Apache License, Version 2.0 (the "License");rL†rMjsj»†rNhXB# you may not use this file except in compliance with the License.rO†rPjsj»†rQhX)# You may obtain a copy of the License atrR†rSjsj»†rThj½†rUjsj»†rVhX0#     http://www.apache.org/licenses/LICENSE-2.0rW†rXjsj»†rYhj½†rZjsj»†r[hXE# Unless required by applicable law or agreed to in writing, softwarer\†r]jsj»†r^hXC# distributed under the License is distributed on an "AS IS" BASIS,r_†r`jsj»†rahXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rb†rcjsj»†rdhXE# See the License for the specific language governing permissions andre†rfjsj»†rghX # limitations under the License.rh†rijsX

rj†rkhX*# This module provide a simple wall clock.rl†rmjsj»†rnhX*# It is an example of getters and setters.ro†rpjsj»†rqhX/# A beefed-up module is available in clock_morerr†rsjsj»†rtjXmoduleru†rvjsjç†rwhŒXclockrx†ryjsX

rz†r{hX3# A simple wall clock with 60 minutes and 12 hours.r|†r}jsj»†r~jXclassr†r€jsjç†rh¹XClockr‚†rƒjsX
	r„†r…hX'# total number of minutes from 0 to 719r††r‡jsX
	rˆ†r‰jXvarrІr‹jsjç†rŒhŒX
total_minutesr†rŽj©jú†rjsjç†rh¹XIntr‘†r’jsX
	r“†r”hXC# Note: only the read acces is public, the write access is private.r•†r–jsX

	r—†r˜hX6# number of minutes in the current hour (from 0 to 59)r™†ršjsX
	r›†rœjXfunr†ržjsjç†rŸhŒXminutesr †r¡j©jú†r¢jsjç†r£h¹XIntr¤†r¥jsjç†r¦jXdor§†r¨jsjç†r©jXreturnrª†r«jsjç†r¬hŒXselfr­†r®j©jt†r¯hŒX
total_minutesr°†r±jsjç†r²htX%r³†r´jhX 60rµ†r¶jsX
	
	r·†r¸hX0# set the number of minutes in the current hour.r¹†rºjsX
	r»†r¼hX;# if m < 0 or m >= 60, the hour will be changed accordinlgyr½†r¾jsX
	r¿†rÀjXfunrÁ†rÂjsjç†rÃhŒXminutesrĆrÅhtj†rÆj©jK†rÇhŒj͆rÈj©jú†rÉjsjç†rÊh¹XIntrˆrÌj©jV†rÍjsjç†rÎjXdorφrÐjsjç†rÑhŒXselfrÒ†rÓj©jt†rÔhŒX
total_minutesrÕ†rÖjsjç†r×htj†rØjsjç†rÙhŒXselfrÚ†rÛj©jt†rÜhŒXhoursr݆rÞjsjç†rßhtj†ràjhX 60rá†râjsjç†rãhtj†räjsjç†råhŒj͆ræjsX

	rç†rèhX # number of hours (from 0 to 11)ré†rêjsX
	rë†rìjXfunrí†rîjsjç†rïhŒXhoursrð†rñj©jú†ròjsjç†róh¹XIntrô†rõjsjç†röjXdor÷†røjsjç†rùjXreturnrú†rûjsjç†rühŒXselfrý†rþj©jt†rÿhŒX
total_minutesr†rjsjç†rhtj‹†rjhX 60r†rjsX

	r†rhX# set the number of hoursr†r	jsX
	r
†rhX!# the minutes will not be updatedr†r
jsX
	r†rjXfunr†rjsjç†rhŒXhoursr†rhtj†rj©jK†rhŒXhr†rj©jú†rjsjç†rh¹XIntr†rj©jV†rjsjç†rjXdor†r jsjç†r!hŒXselfr"†r#j©jt†r$hŒX
total_minutesr%†r&jsjç†r'htj†r(jsjç†r)hŒj†r*jsjç†r+htj†r,jhX 60r-†r.jsjç†r/htj†r0jsjç†r1hŒXminutesr2†r3jsX

	r4†r5hX8# the position of the hour arrow in the [0..60[ intervalr6†r7jsX
	r8†r9jXfunr:†r;jsjç†r<hŒXhour_posr=†r>j©jú†r?jsjç†r@h¹XIntrA†rBjsjç†rCjXdorD†rEjsjç†rFjXreturnrG†rHjsjç†rIhŒX
total_minutesrJ†rKjsjç†rLhtj‹†rMjhX 12rN†rOjsX

	rP†rQhX,# replace the arrow of hours (from 0 to 59).rR†rSjsX
	rT†rUhX,# the hours and the minutes will be updated.rV†rWjsX
	rX†rYjXfunrZ†r[jsjç†r\hŒXhour_posr]†r^htj†r_j©jK†r`hŒj†raj©jú†rbjsjç†rch¹XIntrd†rej©jV†rfjsjç†rgjXdorh†rijsjç†rjhŒXselfrk†rlj©jt†rmhŒX
total_minutesrn†rojsjç†rphtj†rqjsjç†rrhŒj†rsjsjç†rthtj†rujhX 12rv†rwjsX

	rx†ryjXredefrz†r{jsjç†r|jXfunr}†r~jsjç†rhŒXto_sr€†rjsjç†r‚jXdorƒ†r„jsjç†r…jXreturnr††r‡jsjç†rˆjÁX"{r‰†rŠhŒXhoursr‹†rŒjÁX}:{r†rŽhŒXminutesr†rjÁX}"r‘†r’jsX

	r“†r”jXfunr•†r–jsjç†r—hŒXresetr˜†r™j©jK†ršhŒXhoursr›†rœj©j;†rjsjç†ržhŒXminutesrŸ†r j©jú†r¡jsjç†r¢h¹XIntr£†r¤j©jV†r¥jsjç†r¦jXdor§†r¨jsjç†r©hŒXselfrª†r«j©jt†r¬hŒX
total_minutesr­†r®jsjç†r¯htj†r°jsjç†r±hŒXhoursr²†r³jhX*60r´†rµjsjç†r¶htj†r·jsjç†r¸hŒXminutesr¹†rºjsX

	r»†r¼jXinitr½†r¾j©jK†r¿hŒXhoursrÀ†rÁj©j;†rÂjsjç†rÃhŒXminutesrĆrÅj©jú†rÆjsjç†rÇh¹XIntrȆrÉj©jV†rÊjsjç†rËjXdor̆rÍjsjç†rÎhŒXselfrφrÐj©jt†rÑhŒXresetrÒ†rÓj©jK†rÔhŒXhoursrÕ†rÖj©j;†r×jsjç†rØhŒXminutesrÙ†rÚj©jV†rÛjsX

	r܆rÝjXredefrÞ†rßjsjç†ràjXfunrá†râjsjç†rãhtX==rä†råj©jK†ræhŒj&†rçj©jV†rèjsX
	ré†rêjXdorë†rìjsX
		rí†rîhX7# Note: o is a nullable Object, a type test is requiredrï†rðjsX
		rñ†ròhX1# Thanks to adaptive typing, there is no downcastró†rôjsX
		rõ†röhX# i.e. the code is safe!r÷†røjsX
		rù†rújXreturnrû†rüjsjç†rýhŒj&†rþjsjç†rÿjXisar†rjsjç†rh¹XClockr†rjsjç†rjXandr†rjsjç†rhŒXselfr	†r
j©jt†rhŒX
total_minutesr†r
jsjç†rhtX==r†rjsjç†rhŒj&†rj©jt†rhŒX
total_minutesr†rjsX
	r†rjXendr†rjsj»†rjXendr†rjsX

r†rjXvarr†r jsjç†r!hŒj›†r"jsjç†r#htj†r$jsjç†r%jXnewr&†r'jsjç†r(h¹XClockr)†r*jhX(10r+†r,jhX,50r-†r.j©jV†r/jsj»†r0hŒXprintr1†r2jsjç†r3jÁX"It's {r4†r5hŒj›†r6jÁX} o'clock."r7†r8jsX

r9†r:hŒj›†r;j©jt†r<hŒXminutesr=†r>jsjç†r?htj†r@htj†rAjhX 22rB†rCjsj»†rDhŒXprintrE†rFjsjç†rGjÁX"Now it's {rH†rIhŒj›†rJjÁX} o'clock."rK†rLjsX

rM†rNhŒXprintrO†rPjsjç†rQjÁX"The short arrow in on the {rR†rShŒj›†rTj©jt†rUhŒXhour_posrV†rWjhX/5rX†rYjÁX } and the long arrow in on the {rZ†r[hŒj›†r\j©jt†r]hŒXminutesr^†r_jhX/5r`†rajÁX}."rb†rcjsX

rd†rehŒj›†rfj©jt†rghŒXhoursrh†rijsjç†rjhtjR†rkhtj†rljhX 2rm†rnjsj»†rohŒXprintrp†rqjsjç†rrjÁX"Now it's {rs†rthŒj›†rujÁX} o'clock."rv†rwjsX

rx†ryjXvarrz†r{jsjç†r|jhXc2r}†r~jsjç†rhtj†r€jsjç†rjXnewr‚†rƒjsjç†r„h¹XClockr…†r†jhX(9r‡†rˆj©j;†r‰jhX 11rІr‹j©jV†rŒjsj»†rhŒXprintrކrjsjç†rjÁX"It's {r‘†r’jhXc2r“†r”jÁX} on the second clock."r•†r–jsj»†r—hŒXprintr˜†r™jsjç†ršjÁX#"The two clocks are synchronized: {r›†rœhŒj›†rjsjç†ržhtX==rŸ†r jsjç†r¡jhXc2r¢†r£jÁX}."r¤†r¥jsj»†r¦jhXc2r§†r¨j©jt†r©hŒXminutesrª†r«jsjç†r¬htj†r­htj†r®jhX 1r¯†r°jsj»†r±hŒXprintr²†r³jsjç†r´jÁX"It's now {rµ†r¶jhXc2r·†r¸jÁX} on the second clock."r¹†rºjsj»†r»hŒXprintr¼†r½jsjç†r¾jÁX#"The two clocks are synchronized: {r¿†rÀhŒj›†rÁjsjç†rÂhtX==rÆrÄjsjç†rÅjhXc2rƆrÇjÁX}."rȆrÉjsj»†rÊhX:# This file is part of NIT ( http://www.nitlanguage.org ).rˆrÌjsj»†rÍhj½†rÎjsj»†rÏhX9# Copyright 2013 Matthieu Lucas <lucasmatthieu@gmail.com>rІrÑjsj»†rÒhj½†rÓjsj»†rÔhXA# Licensed under the Apache License, Version 2.0 (the "License");rÕ†rÖjsj»†r×hXB# you may not use this file except in compliance with the License.r؆rÙjsj»†rÚhX)# You may obtain a copy of the License atrÛ†rÜjsj»†rÝhj½†rÞjsj»†rßhX0#     http://www.apache.org/licenses/LICENSE-2.0rà†rájsj»†râhj½†rãjsj»†rähXE# Unless required by applicable law or agreed to in writing, softwarerå†ræjsj»†rçhXC# distributed under the License is distributed on an "AS IS" BASIS,rè†réjsj»†rêhXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rë†rìjsj»†ríhXE# See the License for the specific language governing permissions andrî†rïjsj»†rðhX # limitations under the License.rñ†ròjsX

ró†rôhX# Sample of the Curl module.rõ†röjsj»†r÷jXmodulerø†rùjsjç†rúhŒX	curl_httprû†rüjsX

rý†rþjXimportrÿ†rjsjç†rhŒXcurlr†rjsX

r†rhX*# Small class to represent an Http Fetcherr†rjsj»†rjXclassr	†r
jsjç†rh¹X
MyHttpFetcherr†r
jsX
	r†rjXsuperr†rjsjç†rh¹X
CurlCallbacksr†rjsX

	r†rjXvarr†rjsjç†rhŒXcurlr†rj©jú†rjsjç†rh¹XCurlr†rjsX
	r †r!jXvarr"†r#jsjç†r$hŒXour_bodyr%†r&j©jú†r'jsjç†r(h¹XStringr)†r*jsjç†r+htj†r,jsjç†r-jÁX""r.†r/jsX

	r0†r1jXinitr2†r3j©jK†r4hŒXcurlr5†r6j©jú†r7jsjç†r8h¹XCurlr9†r:j©jV†r;jsjç†r<jXdor=†r>jsjç†r?hŒXselfr@†rAj©jt†rBhŒXcurlrC†rDjsjç†rEhtj†rFjsjç†rGhŒXcurlrH†rIjsX

	rJ†rKhX# Release curl objectrL†rMjsX
	rN†rOjXfunrP†rQjsjç†rRe(hŒXdestroyrS†rTjsjç†rUjXdorV†rWjsjç†rXhŒXselfrY†rZj©jt†r[hŒXcurlr\†r]j©jt†r^hŒXdestroyr_†r`jsX

	ra†rbhX# Header callbackrc†rdjsX
	re†rfjXredefrg†rhjsjç†rijXfunrj†rkjsjç†rlhŒXheader_callbackrm†rnj©jK†rohŒXlinerp†rqj©jú†rrjsjç†rsh¹XStringrt†ruj©jV†rvjsjç†rwjXdorx†ryjsX
		rz†r{hX3# We keep this callback silent for testing purposesr|†r}jsX
		r~†rhXF#if not line.has_prefix("Date:") then print "Header_callback : {line}"r€†rjsX
	r‚†rƒjXendr„†r…jsX

	r††r‡hX# Body callbackrˆ†r‰jsX
	rІr‹jXredefrŒ†rjsjç†rŽjXfunr†rjsjç†r‘hŒX
body_callbackr’†r“j©jK†r”hŒXliner•†r–j©jú†r—jsjç†r˜h¹XStringr™†ršj©jV†r›jsjç†rœjXdor†ržjsjç†rŸhŒXselfr †r¡j©jt†r¢hŒXour_bodyr£†r¤jsjç†r¥htj†r¦jsjç†r§jÁX"{r¨†r©hŒXselfrª†r«j©jt†r¬hŒXour_bodyr­†r®jÁX}{r¯†r°hŒXliner±†r²jÁX}"r³†r´jsX

	rµ†r¶hX-# Stream callback - Cf : No one is registeredr·†r¸jsX
	r¹†rºjXredefr»†r¼jsjç†r½jXfunr¾†r¿jsjç†rÀhŒXstream_callbackrÁ†rÂj©jK†rÃhŒXbufferrĆrÅj©jú†rÆjsjç†rÇh¹XStringrȆrÉj©j;†rÊjsjç†rËhŒXsizer̆rÍj©jú†rÎjsjç†rÏh¹XIntrІrÑj©j;†rÒjsjç†rÓhŒXcountrÔ†rÕj©jú†rÖjsjç†r×h¹XIntr؆rÙj©jV†rÚjsjç†rÛjXdor܆rÝjsjç†rÞhŒXprintr߆ràjsjç†rájÁX"Stream_callback : {râ†rãhŒXbufferrä†råjÁX} - {ræ†rçhŒXsizerè†réjÁX} - {rê†rëhŒXcountrì†ríjÁX}"rî†rïjsj»†rðjXendrñ†ròjsX


ró†rôhX	# Programrõ†röjsj»†r÷jXifrø†rùjsjç†rúhŒXargsrû†rüj©jt†rýhŒXlengthrþ†rÿjsjç†rhtj#†rjhX 2r†rjsjç†rjXthenr†rjsX
	r†rhŒXprintr	†r
jsjç†rjÁXE"Usage: curl_http <method wished [POST, GET, GET_FILE]> <target url>"r†r
jsj»†rjXelser†rjsX
	r†rjXvarr†rjsjç†rhŒXcurlr†rjsjç†rhtj†rjsjç†rjXnewr†rjsjç†rh¹XCurlr†rjsX
	r †r!jXvarr"†r#jsjç†r$hŒXurlr%†r&jsjç†r'htj†r(jsjç†r)hŒXargsr*†r+jhX[1r,†r-j©jC†r.jsX
	r/†r0jXvarr1†r2jsjç†r3hŒXrequestr4†r5jsjç†r6htj†r7jsjç†r8jXnewr9†r:jsjç†r;h¹XCurlHTTPRequestr<†r=j©jK†r>hŒXurlr?†r@j©j;†rAjsjç†rBhŒXcurlrC†rDj©jV†rEjsX

	rF†rGhX# HTTP Get RequestrH†rIjsX
	rJ†rKjXifrL†rMjsjç†rNhŒXargsrO†rPjhX[0rQ†rRj©jC†rSjsjç†rThtX==rU†rVjsjç†rWjÁX"GET"rX†rYjsjç†rZjXthenr[†r\jsX
		r]†r^hŒXrequestr_†r`j©jt†rahŒXverboserb†rcjsjç†rdhtj†rejsjç†rfjXfalserg†rhjsX
		ri†rjjXvarrk†rljsjç†rmhŒXgetResponsern†rojsjç†rphtj†rqjsjç†rrhŒXrequestrs†rtj©jt†ruhŒXexecuterv†rwjsX

		rx†ryjXifrz†r{jsjç†r|hŒXgetResponser}†r~jsjç†rjXisar€†rjsjç†r‚h¹XCurlResponseSuccessrƒ†r„jsjç†r…jXthenr††r‡jsX
			rˆ†r‰hŒXprintrІr‹jsjç†rŒjÁX"Status code : {r†rŽhŒXgetResponser†rj©jt†r‘hŒXstatus_coder’†r“jÁX}"r”†r•jsX
			r–†r—hŒXprintr˜†r™jsjç†ršjÁX	"Body : {r›†rœhŒXgetResponser†ržj©jt†rŸhŒXbody_strr †r¡jÁX}"r¢†r£jsX
		r¤†r¥jXelser¦†r§jsjç†r¨jXifr©†rªjsjç†r«hŒXgetResponser¬†r­jsjç†r®jXisar¯†r°jsjç†r±h¹XCurlResponseFailedr²†r³jsjç†r´jXthenrµ†r¶jsX
			r·†r¸hŒXprintr¹†rºjsjç†r»jÁX"Error code : {r¼†r½hŒXgetResponser¾†r¿j©jt†rÀhŒX
error_coderÁ†rÂjÁX}"rÆrÄjsX
			rņrÆhŒXprintrdžrÈjsjç†rÉjÁX"Error msg : {rʆrËhŒXgetResponser̆rÍj©jt†rÎhŒX	error_msgrφrÐjÁX}"rцrÒjsX
		rÓ†rÔjXendrÕ†rÖjsX

	r׆rØhX# HTTP Post RequestrÙ†rÚjsX
	rÛ†rÜjXelser݆rÞjsjç†rßjXifrà†rájsjç†râhŒXargsrã†räjhX[0rå†ræj©jC†rçjsjç†rèhtX==ré†rêjsjç†rëjÁX"POST"rì†ríjsjç†rîjXthenrï†rðjsX
		rñ†ròjXvarró†rôjsjç†rõhŒX
myHttpFetcherrö†r÷jsjç†røhtj†rùjsjç†rújXnewrû†rüjsjç†rýh¹X
MyHttpFetcherrþ†rÿj©jK†rhŒXcurlr†rj©jV†rjsX
		r†rhŒXrequestr†rj©jt†rhŒXdelegater	†r
jsjç†rhtj†rjsjç†r
hŒX
myHttpFetcherr†rjsX

		r†rjXvarr†rjsjç†rhŒX	postDatasr†rjsjç†rhtj†rjsjç†rjXnewr†rjsjç†rh¹X	HeaderMapr†rjsX
		r†r hŒX	postDatasr!†r"j©j@†r#jÁX"Bugs Bunny"r$†r%j©jC†r&jsjç†r'htj†r(jsjç†r)jÁX"Daffy Duck"r*†r+jsX
		r,†r-hŒX	postDatasr.†r/j©j@†r0jÁX"Batman"r1†r2j©jC†r3jsjç†r4htj†r5jsjç†r6jÁX?"Robin likes special characters @#ùà!è§'(\"é&://,;<>∞~*"r7†r8jsX
		r9†r:hŒX	postDatasr;†r<j©j@†r=jÁX"Batman"r>†r?j©jC†r@jsjç†rAhtj†rBjsjç†rCjÁX["Yes you can set multiple identical keys, but APACHE will consider only once, the last one"rD†rEjsX
		rF†rGhŒXrequestrH†rIj©jt†rJhŒXdatasrK†rLjsjç†rMhtj†rNjsjç†rOhŒX	postDatasrP†rQjsX
		rR†rShŒXrequestrT†rUj©jt†rVhŒXverboserW†rXjsjç†rYhtj†rZjsjç†r[jXfalser\†r]jsX
		r^†r_jXvarr`†rajsjç†rbhŒXpostResponserc†rdjsjç†rehtj†rfjsjç†rghŒXrequestrh†rij©jt†rjhŒXexecuterk†rljsX

		rm†rnhŒXprintro†rpjsjç†rqjÁX"Our body from the callback : {rr†rshŒX
myHttpFetcherrt†ruj©jt†rvhŒXour_bodyrw†rxjÁX}"ry†rzjsX

		r{†r|jXifr}†r~jsjç†rhŒXpostResponser€†rjsjç†r‚jXisarƒ†r„jsjç†r…h¹XCurlResponseSuccessr††r‡jsjç†rˆjXthenr‰†rŠjsX
			r‹†rŒhŒXprintr†rŽjsjç†rjÁX"*** Answer ***"r†r‘jsX
			r’†r“hŒXprintr”†r•jsjç†r–jÁX"Status code : {r—†r˜hŒXpostResponser™†ršj©jt†r›hŒXstatus_coderœ†rjÁX}"rž†rŸjsX
			r †r¡hŒXprintr¢†r£jsjç†r¤jÁXA"Body should be empty, because we decided to manage callbacks : {r¥†r¦hŒXpostResponser§†r¨j©jt†r©hŒXbody_strrª†r«j©jt†r¬hŒXlengthr­†r®jÁX}"r¯†r°jsX
		r±†r²jXelser³†r´jsjç†rµjXifr¶†r·jsjç†r¸hŒXpostResponser¹†rºjsjç†r»jXisar¼†r½jsjç†r¾h¹XCurlResponseFailedr¿†rÀjsjç†rÁjXthenr†rÃjsX
			rĆrÅhŒXprintrƆrÇjsjç†rÈjÁX"Error code : {rɆrÊhŒXpostResponserˆrÌj©jt†rÍhŒX
error_coderΆrÏjÁX}"rІrÑjsX
			rÒ†rÓhŒXprintrÔ†rÕjsjç†rÖjÁX"Error msg : {r׆rØhŒXpostResponserÙ†rÚj©jt†rÛhŒX	error_msgr܆rÝjÁX}"rÞ†rßjsX
		rà†rájXendrâ†rãjsX

	rä†råhX# HTTP Get to file Requestræ†rçjsX
	rè†réjXelserê†rëjsjç†rìjXifrí†rîjsjç†rïhŒXargsrð†rñjhX[0rò†rój©jC†rôjsjç†rõhtX==rö†r÷jsjç†røjÁX
"GET_FILE"rù†rújsjç†rûjXthenrü†rýjsX
		rþ†rÿjXvarr†rjsjç†rhŒXheadersr†rjsjç†rhtj†rjsjç†rjXnewr†r	jsjç†r
h¹X	HeaderMapr†rjsX
		r
†rhŒXheadersr†rj©j@†rjÁX"Accept"r†rj©jC†rjsjç†rhtj†rjsjç†rjÁX"Moo"r†rjsX
		r†rhŒXrequestr†rj©jt†rhŒXheadersr†r jsjç†r!htj†r"jsjç†r#hŒXheadersr$†r%jsX
		r&†r'hŒXrequestr(†r)j©jt†r*hŒXverboser+†r,jsjç†r-htj†r.jsjç†r/jXfalser0†r1jsX
		r2†r3jXvarr4†r5jsjç†r6hŒXdownloadResponser7†r8jsjç†r9htj†r:jsjç†r;hŒXrequestr<†r=j©jt†r>hŒXdownload_to_filer?†r@j©jK†rAhŒXnullrB†rCj©jV†rDjsX

		rE†rFjXifrG†rHjsjç†rIhŒXdownloadResponserJ†rKjsjç†rLjXisarM†rNjsjç†rOh¹XCurlFileResponseSuccessrP†rQjsjç†rRjXthenrS†rTjsX
			rU†rVhŒXprintrW†rXjsjç†rYjÁX"*** Answer ***"rZ†r[jsX
			r\†r]hŒXprintr^†r_jsjç†r`jÁX"Status code : {ra†rbhŒXdownloadResponserc†rdj©jt†rehŒXstatus_coderf†rgjÁX}"rh†rijsX
			rj†rkhŒXprintrl†rmjsjç†rnjÁX"Size downloaded : {ro†rphŒXdownloadResponserq†rrj©jt†rshŒX
size_downloadrt†rujÁX}"rv†rwjsX
		rx†ryjXelserz†r{jsjç†r|jXifr}†r~jsjç†rhŒXdownloadResponser€†rjsjç†r‚jXisarƒ†r„jsjç†r…h¹XCurlResponseFailedr††r‡jsjç†rˆjXthenr‰†rŠjsX
			r‹†rŒhŒXprintr†rŽjsjç†rjÁX"Error code : {r†r‘hŒXdownloadResponser’†r“j©jt†r”hŒX
error_coder•†r–jÁX}"r—†r˜jsX
			r™†ršhŒXprintr›†rœjsjç†rjÁX"Error msg : {rž†rŸhŒXdownloadResponser †r¡j©jt†r¢hŒX	error_msgr£†r¤jÁX}"r¥†r¦jsX
		r§†r¨jXendr©†rªjsX
	r«†r¬hX# Program logicr­†r®jsX
	r¯†r°jXelser±†r²jsX
		r³†r´hŒXprintrµ†r¶jsjç†r·jÁX%"Usage : Method[POST, GET, GET_FILE]"r¸†r¹jsX
	rº†r»jXendr¼†r½jsj»†r¾jXendr¿†rÀjsj»†rÁhX:# This file is part of NIT ( http://www.nitlanguage.org ).r†rÃjsj»†rÄhj½†rÅjsj»†rÆhX9# Copyright 2013 Matthieu Lucas <lucasmatthieu@gmail.com>rdžrÈjsj»†rÉhj½†rÊjsj»†rËhXA# Licensed under the Apache License, Version 2.0 (the "License");r̆rÍjsj»†rÎhXB# you may not use this file except in compliance with the License.rφrÐjsj»†rÑhX)# You may obtain a copy of the License atrÒ†rÓjsj»†rÔhj½†rÕjsj»†rÖhX0#     http://www.apache.org/licenses/LICENSE-2.0r׆rØjsj»†rÙhj½†rÚjsj»†rÛhXE# Unless required by applicable law or agreed to in writing, softwarer܆rÝjsj»†rÞhXC# distributed under the License is distributed on an "AS IS" BASIS,r߆ràjsj»†ráhXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.râ†rãjsj»†rähXE# See the License for the specific language governing permissions andrå†ræjsj»†rçhX # limitations under the License.rè†réjsX

rê†rëhX*# Mail sender sample using the Curl modulerì†ríjsj»†rîjXmodulerï†rðjsjç†rñhŒX	curl_mailrò†rójsX

rô†rõjXimportrö†r÷jsjç†røhŒXcurlrù†rújsX

rû†rüjXvarrý†rþjsjç†rÿhŒXcurlr†rjsjç†rhtj†rjsjç†rjXnewr†rjsjç†rh¹XCurlr†r	jsj»†r
jXvarr†rjsjç†r
hŒXmail_requestr†rjsjç†rhtj†rjsjç†rjXnewr†rjsjç†rh¹XCurlMailRequestr†rj©jK†rhŒXcurlr†rj©jV†rjsX

r†rhX
# Networksr†rjsj»†r jXvarr!†r"jsjç†r#hŒXresponser$†r%jsjç†r&htj†r'jsjç†r(hŒXmail_requestr)†r*j©jt†r+hŒXset_outgoing_serverr,†r-j©jK†r.jÁX"smtps://smtp.example.org:465"r/†r0j©j;†r1jsjç†r2jÁX"user@example.org"r3†r4j©j;†r5jsjç†r6jÁX"mypassword"r7†r8j©jV†r9jsj»†r:jXifr;†r<jsjç†r=hŒXresponser>†r?jsjç†r@jXisarA†rBjsjç†rCh¹XCurlResponseFailedrD†rEjsjç†rFjXthenrG†rHjsX
	rI†rJhŒXprintrK†rLjsjç†rMjÁX"Error code : {rN†rOhŒXresponserP†rQj©jt†rRhŒX
error_coderS†rTjÁX}"rU†rVjsX
	rW†rXhŒXprintrY†rZjsjç†r[jÁX"Error msg : {r\†r]hŒXresponser^†r_j©jt†r`hŒX	error_msgra†rbjÁX}"rc†rdjsj»†rejXendrf†rgjsX

rh†rihX	# Headersrj†rkjsj»†rlhŒXmail_requestrm†rnj©jt†rohŒXfromrp†rqjsjç†rrhtj†rsjsjç†rtjÁX"Billy Bob"ru†rvjsj»†rwhŒXmail_requestrx†ryj©jt†rzhŒXtor{†r|jsjç†r}htj†r~jsjç†rj©j@†r€jÁX"user@example.org"r†r‚j©jC†rƒjsj»†r„hŒXmail_requestr…†r†j©jt†r‡hŒXccrˆ†r‰jsjç†rŠhtj†r‹jsjç†rŒj©j@†rjÁX"bob@example.org"rކrj©jC†rjsj»†r‘hŒXmail_requestr’†r“j©jt†r”hŒXbccr•†r–jsjç†r—htj†r˜jsjç†r™jXnullrš†r›jsX

rœ†rjXvarrž†rŸjsjç†r hŒXheaders_bodyr¡†r¢jsjç†r£htj†r¤jsjç†r¥jXnewr¦†r§jsjç†r¨h¹X	HeaderMapr©†rªjsj»†r«hŒXheaders_bodyr¬†r­j©j@†r®jÁX"Content-Type:"r¯†r°j©jC†r±jsjç†r²htj†r³jsjç†r´jÁX"text/html; charset=\"UTF-8\""rµ†r¶jsj»†r·hŒXheaders_bodyr¸†r¹j©j@†rºjÁX"Content-Transfer-Encoding:"r»†r¼j©jC†r½jsjç†r¾htj†r¿jsjç†rÀjÁX"quoted-printable"rÁ†rÂjsj»†rÃhŒXmail_requestrĆrÅj©jt†rÆhŒXheaders_bodyrdžrÈjsjç†rÉhtj†rÊjsjç†rËhŒXheaders_bodyr̆rÍjsX

rΆrÏhX	# ContentrІrÑjsj»†rÒhŒXmail_requestrÓ†rÔj©jt†rÕhŒXbodyrÖ†r×jsjç†rØhtj†rÙjsjç†rÚjÁX)"<h1>Here you can write HTML stuff.</h1>"rÛ†rÜjsj»†rÝhŒXmail_requestrÞ†rßj©jt†ràhŒXsubjectrá†râjsjç†rãhtj†räjsjç†råjÁX"Hello From My Nit Program"ræ†rçjsX

rè†réhX# Othersrê†rëjsj»†rìhŒXmail_requestrí†rîj©jt†rïhŒXverboserð†rñjsjç†ròhtj†rójsjç†rôjXfalserõ†röjsX

r÷†røhX# Send mailrù†rújsj»†rûhŒXresponserü†rýjsjç†rþhtj†rÿjsjç†r hŒXmail_requestr †r j©jt†r hŒXexecuter †r jsj»†r jXifr †r jsjç†r	 hŒXresponser
 †r jsjç†r jXisar
 †r jsjç†r h¹XCurlResponseFailedr †r jsjç†r jXthenr †r jsX
	r †r hŒXprintr †r jsjç†r jÁX"Error code : {r †r hŒXresponser †r j©jt†r hŒX
error_coder †r  jÁX}"r! †r" jsX
	r# †r$ hŒXprintr% †r& jsjç†r' jÁX"Error msg : {r( †r) hŒXresponser* †r+ j©jt†r, hŒX	error_msgr- †r. jÁX}"r/ †r0 jsj»†r1 jXelser2 †r3 jsjç†r4 jXifr5 †r6 jsjç†r7 hŒXresponser8 †r9 jsjç†r: jXisar; †r< jsjç†r= h¹XCurlMailResponseSuccessr> †r? jsjç†r@ jXthenrA †rB jsX
	rC †rD hŒXprintrE †rF jsjç†rG jÁX"Mail Sent"rH †rI jsj»†rJ jXelserK †rL jsX
	rM †rN hŒXprintrO †rP jsjç†rQ jÁX"Unknown Curl Response type"rR †rS jsj»†rT jXendrU †rV jsj»†rW hX:# This file is part of NIT ( http://www.nitlanguage.org ).rX †rY jsj»†rZ hj½†r[ jsj»†r\ hX?# Copyright 2012-2013 Alexis Laferrière <alexis.laf@xymus.net>r] †r^ jsj»†r_ hj½†r` jsj»†ra hXA# Licensed under the Apache License, Version 2.0 (the "License");rb †rc jsj»†rd hXB# you may not use this file except in compliance with the License.re †rf jsj»†rg hX)# You may obtain a copy of the License atrh †ri jsj»†rj hj½†rk jsj»†rl hX0#     http://www.apache.org/licenses/LICENSE-2.0rm †rn jsj»†ro hj½†rp jsj»†rq hXE# Unless required by applicable law or agreed to in writing, softwarerr †rs jsj»†rt hXC# distributed under the License is distributed on an "AS IS" BASIS,ru †rv jsj»†rw hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rx †ry jsj»†rz hXE# See the License for the specific language governing permissions andr{ †r| jsj»†r} hX # limitations under the License.r~ †r jsX

r€ †r hX/# Draws an arithmetic operation to the terminalr‚ †rƒ jsj»†r„ jXmoduler… †r† jsjç†r‡ hŒXdraw_operationrˆ †r‰ jsX

rŠ †r‹ jXredefrŒ †r jsjç†rŽ jXenumr †r jsjç†r‘ h¹XIntr’ †r“ jsX
	r” †r• jXfunr– †r— jsjç†r˜ hŒXn_charsr™ †rš j©jú†r› jsjç†rœ h¹XIntr †rž jsjç†rŸ jsX‡`{
		int c;
		if ( abs(recv) >= 10 )
			c = 1+(int)log10f( (float)abs(recv) );
		else
			c = 1;
		if ( recv < 0 ) c ++;
		return c;
	`}r  †r¡ jsj»†r¢ jXendr£ †r¤ jsX

r¥ †r¦ jXredefr§ †r¨ jsjç†r© jXenumrª †r« jsjç†r¬ h¹XCharr­ †r® jsX
	r¯ †r° jXfunr± †r² jsjç†r³ hŒXas_operatorr´ †rµ j©jK†r¶ hŒXar· †r¸ j©j;†r¹ jsjç†rº hŒXbr» †r¼ j©jú†r½ jsjç†r¾ h¹XIntr¿ †rÀ j©jV†rÁ j©jú†r jsjç†rà h¹XIntrÄ †rÅ jsX
	rÆ †rÇ jXdorÈ †rÉ jsX
		rÊ †rË jXifrÌ †rÍ jsjç†rÎ jXselfrÏ †rÐ jsjç†rÑ htX==rÒ †rÓ jsjç†rÔ jÖX'+'rÕ †rÖ jsjç†r× jXthenrØ †rÙ jsjç†rÚ jXreturnrÛ †rÜ jsjç†rÝ hŒj· †rÞ jsjç†rß htj†rà jsjç†rá hŒj» †râ jsX
		r㠆rä jXifrå †ræ jsjç†rç jXselfrè †ré jsjç†rê htX==rë †rì jsjç†rí jÖX'-'rî †rï jsjç†rð jXthenrñ †rò jsjç†ró jXreturnrô †rõ jsjç†rö hŒj· †r÷ jsjç†rø htjR†rù jsjç†rú hŒj» †rû jsX
		rü †rý jXifrþ †rÿ jsjç†r!jXselfr!†r!jsjç†r!htX==r!†r!jsjç†r!jÖX'*'r!†r!jsjç†r	!jXthenr
!†r!jsjç†r!jXreturnr
!†r!jsjç†r!hŒj· †r!jsjç†r!htj†r!jsjç†r!hŒj» †r!jsX
		r!†r!jXifr!†r!jsjç†r!jXselfr!†r!jsjç†r!htX==r!†r!jsjç†r!jÖX'/'r !†r!!jsjç†r"!jXthenr#!†r$!jsjç†r%!jXreturnr&!†r'!jsjç†r(!hŒj· †r)!jsjç†r*!htj‹†r+!jsjç†r,!hŒj» †r-!jsX
		r.!†r/!jXifr0!†r1!jsjç†r2!jXselfr3!†r4!jsjç†r5!htX==r6!†r7!jsjç†r8!jÖX'%'r9!†r:!jsjç†r;!jXthenr<!†r=!jsjç†r>!jXreturnr?!†r@!jsjç†rA!hŒj· †rB!jsjç†rC!htj³†rD!jsjç†rE!hŒj» †rF!jsX
		rG!†rH!jXabortrI!†rJ!jsX
	rK!†rL!jXendrM!†rN!jsX

	rO!†rP!jXfunrQ!†rR!jsjç†rS!hŒXoverride_dispcrT!†rU!j©jú†rV!e(jsjç†rW!h¹XBoolrX!†rY!jsX
	rZ!†r[!jXdor\!†r]!jsX
		r^!†r_!jXreturnr`!†ra!jsjç†rb!jXselfrc!†rd!jsjç†re!htX==rf!†rg!jsjç†rh!jÖX'+'ri!†rj!jsjç†rk!jXorrl!†rm!jsjç†rn!jXselfro!†rp!jsjç†rq!htX==rr!†rs!jsjç†rt!jÖX'-'ru!†rv!jsjç†rw!jXorrx!†ry!jsjç†rz!jXselfr{!†r|!jsjç†r}!htX==r~!†r!jsjç†r€!jÖX'*'r!†r‚!jsjç†rƒ!jXorr„!†r…!jsjç†r†!jXselfr‡!†rˆ!jsjç†r‰!htX==rŠ!†r‹!jsjç†rŒ!jÖX'/'r!†rŽ!jsjç†r!jXorr!†r‘!jsjç†r’!jXselfr“!†r”!jsjç†r•!htX==r–!†r—!jsjç†r˜!jÖX'%'r™!†rš!jsX
	r›!†rœ!jXendr!†rž!jsX

	rŸ!†r !jXfunr¡!†r¢!jsjç†r£!hŒXlinesr¤!†r¥!j©jK†r¦!hŒjù†r§!j©jú†r¨!jsjç†r©!h¹XIntrª!†r«!j©jV†r¬!j©jú†r­!jsjç†r®!h¹XArrayr¯!†r°!j©j@†r±!h¹XLiner²!†r³!j©jC†r´!jsX
	rµ!†r¶!jXdor·!†r¸!jsX
		r¹!†rº!jXifr»!†r¼!jsjç†r½!jXselfr¾!†r¿!jsjç†rÀ!htX==rÁ!†rÂ!jsjç†rÃ!jÖX'+'rÄ!†rÅ!jsjç†rÆ!jXthenrÇ!†rÈ!jsX
			rÉ!†rÊ!jXreturnrË!†rÌ!jsjç†rÍ!j©j@†rÎ!jXnewrÏ!†rÐ!jsjç†rÑ!h¹XLinerÒ!†rÓ!j©jK†rÔ!jXnewrÕ!†rÖ!jsjç†r×!h¹XPrØ!†rÙ!jhX(0rÚ!†rÛ!j©j;†rÜ!hŒjù†rÝ!jhX/2rÞ!†rß!j©jV†rà!jhX,1rá!†râ!jhX,0rã!†rä!j©j;†rå!hŒjù†ræ!j©jV†rç!j©j;†rè!jsjç†ré!jXnewrê!†rë!jsjç†rì!h¹XLinerí!†rî!j©jK†rï!jXnewrð!†rñ!jsjç†rò!h¹jØ!†ró!j©jK†rô!hŒjù†rõ!jhX/2rö!†r÷!jhX,1rø!†rù!j©jV†rú!jhX,0rû!†rü!jhX,1rý!†rþ!j©j;†rÿ!hŒjù†r"jhX-2r"†r"j©jV†r"j©jC†r"jsX
		r"†r"jXelser"†r"jsjç†r	"jXifr
"†r"jsjç†r"jXselfr
"†r"jsjç†r"htX==r"†r"jsjç†r"jÖX'-'r"†r"jsjç†r"jXthenr"†r"jsX
			r"†r"jXreturnr"†r"jsjç†r"j©j@†r"jXnewr"†r"jsjç†r "h¹XLiner!"†r""j©jK†r#"jXnewr$"†r%"jsjç†r&"h¹jØ!†r'"jhX(0r("†r)"j©j;†r*"hŒjù†r+"jhX/2r,"†r-"j©jV†r."jhX,1r/"†r0"jhX,0r1"†r2"j©j;†r3"hŒjù†r4"j©jV†r5"j©jC†r6"jsX
		r7"†r8"jXelser9"†r:"jsjç†r;"jXifr<"†r="jsjç†r>"jXselfr?"†r@"jsjç†rA"htX==rB"†rC"jsjç†rD"jÖX'*'rE"†rF"jsjç†rG"jXthenrH"†rI"jsX
			rJ"†rK"jXvarrL"†rM"jsjç†rN"hŒXlinesrO"†rP"jsjç†rQ"htj†rR"jsjç†rS"jXnewrT"†rU"jsjç†rV"h¹XArrayrW"†rX"j©j@†rY"h¹XLinerZ"†r["j©jC†r\"jsX
			r]"†r^"jXforr_"†r`"jsjç†ra"hŒXyrb"†rc"jsjç†rd"jXinre"†rf"jsjç†rg"jhX[1rh"†ri"j©X..rj"†rk"hŒjù†rl"jhX-1rm"†rn"j©j@†ro"jsjç†rp"jXdorq"†rr"jsX
				rs"†rt"hŒXlinesru"†rv"j©jt†rw"hŒXaddrx"†ry"j©jK†rz"jsjç†r{"jXnewr|"†r}"jsjç†r~"h¹XLiner"†r€"j©jK†r"jXnewr‚"†rƒ"jsjç†r„"h¹jØ!†r…"jhX(1r†"†r‡"j©j;†rˆ"hŒjb"†r‰"j©jV†rŠ"j©j;†r‹"jhX 1rŒ"†r"jhX,0rŽ"†r"j©j;†r"hŒjù†r‘"jhX-2r’"†r“"j©jV†r”"jsjç†r•"j©jV†r–"jsX
			r—"†r˜"jXendr™"†rš"jsX
			r›"†rœ"jXreturnr"†rž"jsjç†rŸ"hŒXlinesr "†r¡"jsX
		r¢"†r£"jXelser¤"†r¥"jsjç†r¦"jXifr§"†r¨"jsjç†r©"jXselfrª"†r«"jsjç†r¬"htX==r­"†r®"jsjç†r¯"jÖX'/'r°"†r±"jsjç†r²"jXthenr³"†r´"jsX
			rµ"†r¶"jXreturnr·"†r¸"jsjç†r¹"j©j@†rº"jXnewr»"†r¼"jsjç†r½"h¹XLiner¾"†r¿"j©jK†rÀ"jXnewrÁ"†rÂ"jsjç†rÃ"h¹jØ!†rÄ"j©jK†rÅ"hŒjù†rÆ"jhX-1rÇ"†rÈ"jhX,0rÉ"†rÊ"j©jV†rË"j©j;†rÌ"jsjç†rÍ"jhX-1rÎ"†rÏ"jhX,1rÐ"†rÑ"j©j;†rÒ"jsjç†rÓ"hŒjù†rÔ"jsjç†rÕ"j©jV†rÖ"j©jC†r×"jsX
		rØ"†rÙ"jXelserÚ"†rÛ"jsjç†rÜ"jXifrÝ"†rÞ"jsjç†rß"jXselfrà"†rá"jsjç†râ"htX==rã"†rä"jsjç†rå"jÖX'%'ræ"†rç"jsjç†rè"jXthenré"†rê"jsX
			rë"†rì"jXvarrí"†rî"jsjç†rï"jhXq4rð"†rñ"jsjç†rò"htj†ró"jsjç†rô"hŒjù†rõ"jhX/4rö"†r÷"jsX
			rø"†rù"jXvarrú"†rû"jsjç†rü"hŒXlinesrý"†rþ"jsjç†rÿ"htj†r#jsjç†r#j©j@†r#jXnewr#†r#jsjç†r#h¹XLiner#†r#j©jK†r#jXnewr	#†r
#jsjç†r#h¹jØ!†r#j©jK†r
#hŒjù†r#jhX-1r#†r#jhX,0r#†r#j©jV†r#j©j;†r#jhX-1r#†r#jhX,1r#†r#j©j;†r#hŒjù†r#j©jV†r#j©jC†r#jsX
			r#†r#jXforr#†r #jsjç†r!#hŒXlr"#†r##jsjç†r$#jXinr%#†r&#jsjç†r'#jhX[0r(#†r)#j©X..r*#†r+#jhXq4r,#†r-#j©j@†r.#jsjç†r/#jXdor0#†r1#jsX
				r2#†r3#hŒXlinesr4#†r5#j©jt†r6#hŒXappendr7#†r8#j©jK†r9#j©j@†r:#jsjç†r;#jXnewr<#†r=#jsjç†r>#h¹XLiner?#†r@#j©jK†rA#jsjç†rB#jXnewrC#†rD#jsjç†rE#h¹jØ!†rF#jhX(0rG#†rH#j©j;†rI#hŒj"#†rJ#j©jV†rK#j©j;†rL#jhX 1rM#†rN#jhX,0rO#†rP#j©j;†rQ#jhXq4rR#†rS#j©jV†rT#j©j;†rU#jsjç†rV#jXnewrW#†rX#jsjç†rY#h¹XLinerZ#†r[#j©jK†r\#jsjç†r]#jXnewr^#†r_#jsjç†r`#h¹jØ!†ra#j©jK†rb#hŒjù†rc#jhX-1rd#†re#j©j;†rf#hŒjù†rg#jhX-1rh#†ri#htjR†rj#hŒj"#†rk#j©jV†rl#j©j;†rm#jsjç†rn#jhX-1ro#†rp#jhX,0rq#†rr#j©j;†rs#jhXq4rt#†ru#j©jV†rv#jsjç†rw#j©jC†rx#j©jV†ry#jsX
			rz#†r{#jXendr|#†r}#jsX
			r~#†r#jXreturnr€#†r#jsjç†r‚#hŒXlinesrƒ#†r„#jsX
		r…#†r†#jXelser‡#†rˆ#jsjç†r‰#jXifrŠ#†r‹#jsjç†rŒ#jXselfr#†rŽ#jsjç†r#htX==r#†r‘#jsjç†r’#jÖX'1'r“#†r”#jsjç†r•#jXthenr–#†r—#jsX
			r˜#†r™#jXreturnrš#†r›#jsjç†rœ#j©j@†r#jXnewrž#†rŸ#jsjç†r #h¹XLiner¡#†r¢#j©jK†r£#jXnewr¤#†r¥#jsjç†r¦#h¹jØ!†r§#j©jK†r¨#hŒjù†r©#jhX/2rª#†r«#jhX,0r¬#†r­#j©jV†r®#j©j;†r¯#jhX 0r°#†r±#jhX,1r²#†r³#j©j;†r´#hŒjù†rµ#j©jV†r¶#j©j;†r·#jXnewr¸#†r¹#jsjç†rº#h¹XLiner»#†r¼#j©jK†r½#jXnewr¾#†r¿#jsjç†rÀ#h¹jØ!†rÁ#jhX(0rÂ#†rÃ#j©j;†rÄ#hŒjù†rÅ#jhX-1rÆ#†rÇ#j©jV†rÈ#jhX,1rÉ#†rÊ#jhX,0rË#†rÌ#j©j;†rÍ#hŒjù†rÎ#j©jV†rÏ#j©j;†rÐ#jsX
				rÑ#†rÒ#jXnewrÓ#†rÔ#jsjç†rÕ#h¹XLinerÖ#†r×#j©jK†rØ#jsjç†rÙ#jXnewrÚ#†rÛ#jsjç†rÜ#h¹jØ!†rÝ#j©jK†rÞ#hŒjù†rß#jhX/2rà#†rá#jhX,0râ#†rã#j©jV†rä#j©j;†rå#jhX-1ræ#†rç#jhX,1rè#†ré#j©j;†rê#hŒjù†rë#jhX/2rì#†rí#j©jV†rî#j©jC†rï#jsX
		rð#†rñ#jXelserò#†ró#jsjç†rô#jXifrõ#†rö#jsjç†r÷#jXselfrø#†rù#jsjç†rú#htX==rû#†rü#jsjç†rý#jÖX'2'rþ#†rÿ#jsjç†r$jXthenr$†r$jsX
			r$†r$jXreturnr$†r$jsjç†r$j©j@†r$jXnewr	$†r
$jsjç†r$h¹XLiner$†r
$j©jK†r$jXnewr$†r$jsjç†r$h¹jØ!†r$jhX(0r$†r$jhX,0r$†r$j©jV†r$j©j;†r$jhX 1r$†r$jhX,0r$†r$j©j;†r$hŒjù†r$j©jV†r$j©j;†r $jXnewr!$†r"$jsjç†r#$h¹XLiner$$†r%$j©jK†r&$jXnewr'$†r($jsjç†r)$h¹jØ!†r*$j©jK†r+$hŒjù†r,$jhX-1r-$†r.$jhX,0r/$†r0$j©jV†r1$jhX,0r2$†r3$jhX,1r4$†r5$j©j;†r6$hŒjù†r7$jhX/2r8$†r9$j©jV†r:$j©j;†r;$jsX
				r<$†r=$jXnewr>$†r?$jsjç†r@$h¹XLinerA$†rB$j©jK†rC$jsjç†rD$jXnewrE$†rF$jsjç†rG$h¹jØ!†rH$jhX(0rI$†rJ$j©j;†rK$hŒjù†rL$jhX-1rM$†rN$j©jV†rO$jhX,1rP$†rQ$jhX,0rR$†rS$j©j;†rT$hŒjù†rU$j©jV†rV$j©j;†rW$jsjç†rX$jXnewrY$†rZ$jsjç†r[$h¹XLiner\$†r]$j©jK†r^$jsjç†r_$jXnewr`$†ra$jsjç†rb$h¹jØ!†rc$jhX(0rd$†re$j©j;†rf$hŒjù†rg$jhX/2rh$†ri$j©jV†rj$j©j;†rk$jhX 0rl$†rm$jhX,1rn$†ro$j©j;†rp$hŒjù†rq$jhX/2rr$†rs$j©jV†rt$j©j;†ru$jsX
				rv$†rw$jXnewrx$†ry$jsjç†rz$h¹XLiner{$†r|$j©jK†r}$jsjç†r~$jXnewr$†r€$jsjç†r$h¹jØ!†r‚$jhX(0rƒ$†r„$j©j;†r…$hŒjù†r†$jhX/2r‡$†rˆ$j©jV†r‰$j©j;†rŠ$jhX 1r‹$†rŒ$jhX,0r$†rŽ$j©j;†r$hŒjù†r$j©jV†r‘$j©jC†r’$jsX
		r“$†r”$jXelser•$†r–$jsjç†r—$jXifr˜$†r™$jsjç†rš$jXselfr›$†rœ$jsjç†r$htX==rž$†rŸ$jsjç†r $jÖX'3'r¡$†r¢$jsjç†r£$jXthenr¤$†r¥$jsX
			r¦$†r§$jXreturnr¨$†r©$jsjç†rª$j©j@†r«$jXnewr¬$†r­$jsjç†r®$h¹XLiner¯$†r°$j©jK†r±$jXnewr²$†r³$jsjç†r´$h¹jØ!†rµ$jhX(0r¶$†r·$jhX,0r¸$†r¹$j©jV†rº$j©j;†r»$jhX 1r¼$†r½$jhX,0r¾$†r¿$j©j;†rÀ$hŒjù†rÁ$j©jV†rÂ$j©j;†rÃ$jXnewrÄ$†rÅ$jsjç†rÆ$h¹XLinerÇ$†rÈ$j©jK†rÉ$jXnewrÊ$†rË$jsjç†rÌ$h¹jØ!†rÍ$j©jK†rÎ$hŒjù†rÏ$jhX-1rÐ$†rÑ$jhX,0rÒ$†rÓ$j©jV†rÔ$jhX,0rÕ$†rÖ$jhX,1r×$†rØ$j©j;†rÙ$hŒjù†rÚ$j©jV†rÛ$j©j;†rÜ$jsX
				rÝ$†rÞ$jXnewrß$†rà$jsjç†rá$h¹XLinerâ$†rã$j©jK†rä$jsjç†rå$jXnewræ$†rç$jsjç†rè$h¹jØ!†ré$jhX(0rê$†rë$j©j;†rì$hŒjù†rí$jhX-1rî$†rï$j©jV†rð$jhX,1rñ$†rò$jhX,0ró$†rô$j©j;†rõ$hŒjù†rö$j©jV†r÷$j©j;†rø$jsjç†rù$jXnewrú$†rû$jsjç†rü$h¹XLinerý$†rþ$j©jK†rÿ$jsjç†r%jXnewr%†r%jsjç†r%h¹jØ!†r%jhX(0r%†r%j©j;†r%hŒjù†r%jhX/2r	%†r
%j©jV†r%j©j;†r%jhX 1r
%†r%jhX,0r%†r%j©j;†r%hŒjù†r%j©jV†r%j©jC†r%jsX
		r%†r%jXelser%†r%jsjç†r%jXifr%†r%jsjç†r%jXselfr%†r%jsjç†r%htX==r %†r!%jsjç†r"%jÖX'4'r#%†r$%jsjç†r%%jXthenr&%†r'%jsX
			r(%†r)%jXreturnr*%†r+%jsjç†r,%j©j@†r-%jXnewr.%†r/%jsjç†r0%h¹XLiner1%†r2%j©jK†r3%jXnewr4%†r5%jsjç†r6%h¹jØ!†r7%j©jK†r8%hŒjù†r9%jhX-1r:%†r;%jhX,0r<%†r=%j©jV†r>%jhX,0r?%†r@%jhX,1rA%†rB%j©j;†rC%hŒjù†rD%j©jV†rE%j©j;†rF%jsjç†rG%jXnewrH%†rI%jsjç†rJ%h¹XLinerK%†rL%j©jK†rM%jsjç†rN%jXnewrO%†rP%jsjç†rQ%h¹jØ!†rR%jhX(0rS%†rT%jhX,0rU%†rV%j©jV†rW%j©j;†rX%jhX 0rY%†rZ%jhX,1r[%†r\%j©j;†r]%hŒjù†r^%jhX/2r_%†r`%j©jV†ra%j©j;†rb%jsX
				rc%†rd%jXnewre%†rf%jsjç†rg%h¹XLinerh%†ri%j©jK†rj%jsjç†rk%jXnewrl%†rm%jsjç†rn%h¹jØ!†ro%jhX(0rp%†rq%j©j;†rr%hŒjù†rs%jhX/2rt%†ru%j©jV†rv%j©j;†rw%jhX 1rx%†ry%jhX,0rz%†r{%j©j;†r|%hŒjù†r}%j©jV†r~%j©jC†r%jsX
		r€%†r%jXelser‚%†rƒ%jsjç†r„%jXifr…%†r†%jsjç†r‡%jXselfrˆ%†r‰%jsjç†rŠ%htX==r‹%†rŒ%jsjç†r%jÖX'5'rŽ%†r%jsjç†r%jXthenr‘%†r’%jsX
			r“%†r”%jXreturnr•%†r–%jsjç†r—%j©j@†r˜%jXnewr™%†rš%jsjç†r›%h¹XLinerœ%†r%j©jK†rž%jXnewrŸ%†r %jsjç†r¡%h¹jØ!†r¢%jhX(0r£%†r¤%jhX,0r¥%†r¦%j©jV†r§%j©j;†r¨%jhX 1r©%†rª%jhX,0r«%†r¬%j©j;†r­%hŒjù†r®%j©jV†r¯%j©j;†r°%jXnewr±%†r²%jsjç†r³%h¹XLiner´%†rµ%j©jK†r¶%jXnewr·%†r¸%jsjç†r¹%h¹jØ!†rº%j©jK†r»%hŒjù†r¼%jhX-1r½%†r¾%j©j;†r¿%hŒjù†rÀ%jhX/2rÁ%†rÂ%j©jV†rÃ%jhX,0rÄ%†rÅ%jhX,1rÆ%†rÇ%j©j;†rÈ%hŒjù†rÉ%jhX/2rÊ%†rË%j©jV†rÌ%j©j;†rÍ%jsX
				rÎ%†rÏ%jXnewrÐ%†rÑ%jsjç†rÒ%h¹XLinerÓ%†rÔ%j©jK†rÕ%jsjç†rÖ%jXnewr×%†rØ%jsjç†rÙ%h¹jØ!†rÚ%jhX(0rÛ%†rÜ%j©j;†rÝ%hŒjù†rÞ%jhX-1rß%†rà%j©jV†rá%jhX,1râ%†rã%jhX,0rä%†rå%j©j;†ræ%hŒjù†rç%j©jV†rè%j©j;†ré%jsjç†rê%jXnewrë%†rì%jsjç†rí%h¹XLinerî%†rï%j©jK†rð%jsjç†rñ%jXnewrò%†ró%jsjç†rô%h¹jØ!†rõ%jhX(0rö%†r÷%jhX,0rø%†rù%j©jV†rú%j©j;†rû%jhX 0rü%†rý%jhX,1rþ%†rÿ%j©j;†r&hŒjù†r&jhX/2r&†r&j©jV†r&j©j;†r&jsX
				r&†r&jXnewr&†r	&jsjç†r
&h¹XLiner&†r&j©jK†r
&jsjç†r&jXnewr&†r&jsjç†r&h¹jØ!†r&jhX(0r&†r&j©j;†r&hŒjù†r&jhX/2r&†r&j©jV†r&j©j;†r&jhX 1r&†r&jhX,0r&†r&j©j;†r&hŒjù†r &j©jV†r!&j©jC†r"&jsX
		r#&†r$&jXelser%&†r&&jsjç†r'&jXifr(&†r)&jsjç†r*&jXselfr+&†r,&jsjç†r-&htX==r.&†r/&jsjç†r0&jÖX'6'r1&†r2&jsjç†r3&jXthenr4&†r5&jsX
			r6&†r7&jXreturnr8&†r9&jsjç†r:&j©j@†r;&jXnewr<&†r=&jsjç†r>&h¹XLiner?&†r@&j©jK†rA&jXnewrB&†rC&jsjç†rD&h¹jØ!†rE&jhX(0rF&†rG&jhX,0rH&†rI&j©jV†rJ&j©j;†rK&jhX 1rL&†rM&jhX,0rN&†rO&j©j;†rP&hŒjù†rQ&j©jV†rR&j©j;†rS&jXnewrT&†rU&jsjç†rV&h¹XLinerW&†rX&j©jK†rY&jXnewrZ&†r[&jsjç†r\&h¹jØ!†r]&j©jK†r^&hŒjù†r_&jhX-1r`&†ra&j©j;†rb&hŒjù†rc&jhX/2rd&†re&j©jV†rf&jhX,0rg&†rh&jhX,1ri&†rj&j©j;†rk&hŒjù†rl&jhX/2rm&†rn&j©jV†ro&j©j;†rp&jsX
				rq&†rr&jXnewrs&†rt&jsjç†ru&h¹XLinerv&†rw&j©jK†rx&jsjç†ry&jXnewrz&†r{&jsjç†r|&h¹jØ!†r}&jhX(0r~&†r&j©j;†r€&hŒjù†r&jhX-1r‚&†rƒ&j©jV†r„&jhX,1r…&†r†&jhX,0r‡&†rˆ&j©j;†r‰&hŒjù†rŠ&j©jV†r‹&j©j;†rŒ&jsjç†r&jXnewrŽ&†r&jsjç†r&h¹XLiner‘&†r’&j©jK†r“&jsjç†r”&jXnewr•&†r–&jsjç†r—&h¹jØ!†r˜&jhX(0r™&†rš&jhX,0r›&†rœ&j©jV†r&j©j;†rž&jhX 0rŸ&†r &jhX,1r¡&†r¢&j©j;†r£&hŒjù†r¤&j©jV†r¥&j©j;†r¦&jsX
				r§&†r¨&jXnewr©&†rª&jsjç†r«&h¹XLiner¬&†r­&j©jK†r®&jsjç†r¯&jXnewr°&†r±&jsjç†r²&h¹jØ!†r³&jhX(0r´&†rµ&j©j;†r¶&hŒjù†r·&jhX/2r¸&†r¹&j©jV†rº&j©j;†r»&jhX 1r¼&†r½&jhX,0r¾&†r¿&j©j;†rÀ&hŒjù†rÁ&j©jV†rÂ&j©jC†rÃ&jsX
		rÄ&†rÅ&jXelserÆ&†rÇ&jsjç†rÈ&jXifrÉ&†rÊ&jsjç†rË&jXselfrÌ&†rÍ&jsjç†rÎ&htX==rÏ&†rÐ&jsjç†rÑ&jÖX'7'rÒ&†rÓ&jsjç†rÔ&jXthenrÕ&†rÖ&jsX
			r×&†rØ&jXvarrÙ&†rÚ&jsjç†rÛ&hŒXtlrÜ&†rÝ&jsjç†rÞ&htj†rß&jsjç†rà&jXnewrá&†râ&jsjç†rã&h¹jØ!†rä&jhX(0rå&†ræ&jhX,0rç&†rè&j©jV†ré&jsX
			rê&†rë&jXvarrì&†rí&jsjç†rî&hŒXtrrï&†rð&jsjç†rñ&htj†rò&jsjç†ró&jXnewrô&†rõ&jsjç†rö&e(h¹jØ!†r÷&j©jK†rø&hŒjù†rù&jhX-1rú&†rû&jhX,0rü&†rý&j©jV†rþ&jsX
			rÿ&†r'jXreturnr'†r'jsjç†r'j©j@†r'jXnewr'†r'jsjç†r'h¹XLiner'†r	'j©jK†r
'hŒXtlr'†r'j©j;†r
'jhX 1r'†r'jhX,0r'†r'j©j;†r'hŒjù†r'j©jV†r'j©j;†r'jsjç†r'jXnewr'†r'jsjç†r'h¹XLiner'†r'j©jK†r'hŒXtrr'†r'j©j;†r'jhX-1r '†r!'jhX,1r"'†r#'j©j;†r$'hŒjù†r%'j©jV†r&'j©jC†r''jsX
		r('†r)'jXelser*'†r+'jsjç†r,'jXifr-'†r.'jsjç†r/'jXselfr0'†r1'jsjç†r2'htX==r3'†r4'jsjç†r5'jÖX'8'r6'†r7'jsjç†r8'jXthenr9'†r:'jsX
			r;'†r<'jXreturnr='†r>'jsjç†r?'j©j@†r@'jXnewrA'†rB'jsjç†rC'h¹XLinerD'†rE'j©jK†rF'jXnewrG'†rH'jsjç†rI'h¹jØ!†rJ'jhX(0rK'†rL'jhX,0rM'†rN'j©jV†rO'j©j;†rP'jhX 1rQ'†rR'jhX,0rS'†rT'j©j;†rU'hŒjù†rV'j©jV†rW'j©j;†rX'jXnewrY'†rZ'jsjç†r['h¹XLiner\'†r]'j©jK†r^'jXnewr_'†r`'jsjç†ra'h¹jØ!†rb'j©jK†rc'hŒjù†rd'jhX-1re'†rf'jhX,0rg'†rh'j©jV†ri'jhX,0rj'†rk'jhX,1rl'†rm'j©j;†rn'hŒjù†ro'j©jV†rp'j©j;†rq'jsX
				rr'†rs'jXnewrt'†ru'jsjç†rv'h¹XLinerw'†rx'j©jK†ry'jsjç†rz'jXnewr{'†r|'jsjç†r}'h¹jØ!†r~'jhX(0r'†r€'j©j;†r'hŒjù†r‚'jhX-1rƒ'†r„'j©jV†r…'jhX,1r†'†r‡'jhX,0rˆ'†r‰'j©j;†rŠ'hŒjù†r‹'j©jV†rŒ'j©j;†r'jsjç†rŽ'jXnewr'†r'jsjç†r‘'h¹XLiner’'†r“'j©jK†r”'jsjç†r•'jXnewr–'†r—'jsjç†r˜'h¹jØ!†r™'jhX(0rš'†r›'jhX,0rœ'†r'j©jV†rž'j©j;†rŸ'jhX 0r '†r¡'jhX,1r¢'†r£'j©j;†r¤'hŒjù†r¥'j©jV†r¦'j©j;†r§'jsX
				r¨'†r©'jXnewrª'†r«'jsjç†r¬'h¹XLiner­'†r®'j©jK†r¯'jsjç†r°'jXnewr±'†r²'jsjç†r³'h¹jØ!†r´'jhX(0rµ'†r¶'j©j;†r·'hŒjù†r¸'jhX/2r¹'†rº'j©jV†r»'j©j;†r¼'jhX 1r½'†r¾'jhX,0r¿'†rÀ'j©j;†rÁ'hŒjù†rÂ'j©jV†rÃ'j©jC†rÄ'jsX
		rÅ'†rÆ'jXelserÇ'†rÈ'jsjç†rÉ'jXifrÊ'†rË'jsjç†rÌ'jXselfrÍ'†rÎ'jsjç†rÏ'htX==rÐ'†rÑ'jsjç†rÒ'jÖX'9'rÓ'†rÔ'jsjç†rÕ'jXthenrÖ'†r×'jsX
			rØ'†rÙ'jXreturnrÚ'†rÛ'jsjç†rÜ'j©j@†rÝ'jXnewrÞ'†rß'jsjç†rà'h¹XLinerá'†râ'j©jK†rã'jXnewrä'†rå'jsjç†ræ'h¹jØ!†rç'jhX(0rè'†ré'jhX,0rê'†rë'j©jV†rì'j©j;†rí'jhX 1rî'†rï'jhX,0rð'†rñ'j©j;†rò'hŒjù†ró'j©jV†rô'j©j;†rõ'jXnewrö'†r÷'jsjç†rø'h¹XLinerù'†rú'j©jK†rû'jXnewrü'†rý'jsjç†rþ'h¹jØ!†rÿ'j©jK†r(hŒjù†r(jhX-1r(†r(jhX,0r(†r(j©jV†r(jhX,0r(†r(jhX,1r	(†r
(j©j;†r(hŒjù†r(j©jV†r
(j©j;†r(jsX
				r(†r(jXnewr(†r(jsjç†r(h¹XLiner(†r(j©jK†r(jsjç†r(jXnewr(†r(jsjç†r(h¹jØ!†r(jhX(0r(†r(j©j;†r(hŒjù†r(jhX-1r (†r!(j©jV†r"(jhX,1r#(†r$(jhX,0r%(†r&(j©j;†r'(hŒjù†r((j©jV†r)(j©j;†r*(jsjç†r+(jXnewr,(†r-(jsjç†r.(h¹XLiner/(†r0(j©jK†r1(jsjç†r2(jXnewr3(†r4(jsjç†r5(h¹jØ!†r6(jhX(0r7(†r8(jhX,0r9(†r:(j©jV†r;(j©j;†r<(jhX 0r=(†r>(jhX,1r?(†r@(j©j;†rA(hŒjù†rB(jhX/2rC(†rD(j©jV†rE(j©j;†rF(jsX
				rG(†rH(jXnewrI(†rJ(jsjç†rK(h¹XLinerL(†rM(j©jK†rN(jsjç†rO(jXnewrP(†rQ(jsjç†rR(h¹jØ!†rS(jhX(0rT(†rU(j©j;†rV(hŒjù†rW(jhX/2rX(†rY(j©jV†rZ(j©j;†r[(jhX 1r\(†r](jhX,0r^(†r_(j©j;†r`(hŒjù†ra(j©jV†rb(j©jC†rc(jsX
		rd(†re(jXelserf(†rg(jsjç†rh(jXifri(†rj(jsjç†rk(jXselfrl(†rm(jsjç†rn(htX==ro(†rp(jsjç†rq(jÖX'0'rr(†rs(jsjç†rt(jXthenru(†rv(jsX
			rw(†rx(jXreturnry(†rz(jsjç†r{(j©j@†r|(jXnewr}(†r~(jsjç†r(h¹XLiner€(†r(j©jK†r‚(jXnewrƒ(†r„(jsjç†r…(h¹jØ!†r†(jhX(0r‡(†rˆ(jhX,0r‰(†rŠ(j©jV†r‹(j©j;†rŒ(jhX 1r(†rŽ(jhX,0r(†r(j©j;†r‘(hŒjù†r’(j©jV†r“(j©j;†r”(jXnewr•(†r–(jsjç†r—(h¹XLiner˜(†r™(j©jK†rš(jXnewr›(†rœ(jsjç†r(h¹jØ!†rž(j©jK†rŸ(hŒjù†r (jhX-1r¡(†r¢(jhX,0r£(†r¤(j©jV†r¥(jhX,0r¦(†r§(jhX,1r¨(†r©(j©j;†rª(hŒjù†r«(j©jV†r¬(j©j;†r­(jsX
				r®(†r¯(jXnewr°(†r±(jsjç†r²(h¹XLiner³(†r´(j©jK†rµ(jsjç†r¶(jXnewr·(†r¸(jsjç†r¹(h¹jØ!†rº(jhX(0r»(†r¼(j©j;†r½(hŒjù†r¾(jhX-1r¿(†rÀ(j©jV†rÁ(jhX,1rÂ(†rÃ(jhX,0rÄ(†rÅ(j©j;†rÆ(hŒjù†rÇ(j©jV†rÈ(j©j;†rÉ(jsjç†rÊ(jXnewrË(†rÌ(jsjç†rÍ(h¹XLinerÎ(†rÏ(j©jK†rÐ(jsjç†rÑ(jXnewrÒ(†rÓ(jsjç†rÔ(h¹jØ!†rÕ(jhX(0rÖ(†r×(jhX,0rØ(†rÙ(j©jV†rÚ(j©j;†rÛ(jhX 0rÜ(†rÝ(jhX,1rÞ(†rß(j©j;†rà(hŒjù†rá(j©jV†râ(j©jC†rã(jsX
		rä(†rå(jXendræ(†rç(jsX
		rè(†ré(jXreturnrê(†rë(jsjç†rì(jXnewrí(†rî(jsjç†rï(h¹XArrayrð(†rñ(j©j@†rò(h¹XLineró(†rô(j©jC†rõ(jsX
	rö(†r÷(jXendrø(†rù(jsj»†rú(jXendrû(†rü(jsX

rý(†rþ(jXclassrÿ(†r)jsjç†r)h¹jØ!†r)jsX
	r)†r)jXvarr)†r)jsjç†r)hŒj€†r)jsjç†r	)j©jú†r
)jsjç†r)h¹XIntr)†r
)jsX
	r)†r)jXvarr)†r)jsjç†r)hŒjb"†r)jsjç†r)j©jú†r)jsjç†r)h¹XIntr)†r)jsj»†r)jXendr)†r)jsX

r)†r)jXredefr)†r)jsjç†r )jXclassr!)†r")jsjç†r#)h¹XStringr$)†r%)jsX
	r&)†r')hX5# hack is to support a bug in the evaluation softwarer()†r))jsX
	r*)†r+)jXfunr,)†r-)jsjç†r.)hŒXdrawr/)†r0)j©jK†r1)hŒXdispcr2)†r3)j©jú†r4)jsjç†r5)h¹XCharr6)†r7)j©j;†r8)jsjç†r9)hŒXsizer:)†r;)j©j;†r<)jsjç†r=)hŒXgapr>)†r?)j©jú†r@)jsjç†rA)h¹XIntrB)†rC)j©j;†rD)jsjç†rE)hŒXhackrF)†rG)j©jú†rH)jsjç†rI)h¹XBoolrJ)†rK)j©jV†rL)jsX
	rM)†rN)jXdorO)†rP)jsX
		rQ)†rR)jXvarrS)†rT)jsjç†rU)hŒXwrV)†rW)jsjç†rX)htj†rY)jsjç†rZ)hŒXsizer[)†r\)jsjç†r])htj†r^)jsjç†r_)hŒXlengthr`)†ra)jsjç†rb)htj†rc)j©jK†rd)hŒXlengthre)†rf)jhX-1rg)†rh)j©jV†ri)htj†rj)hŒXgaprk)†rl)jsX
		rm)†rn)jXvarro)†rp)jsjç†rq)hŒj†rr)jsjç†rs)htj†rt)jsjç†ru)hŒXsizerv)†rw)jsX
		rx)†ry)jXvarrz)†r{)jsjç†r|)hŒXmapr})†r~)jsjç†r)htj†r€)jsjç†r)jXnewr‚)†rƒ)jsjç†r„)h¹XArrayr…)†r†)j©j@†r‡)h¹XArrayrˆ)†r‰)j©j@†rŠ)h¹XCharr‹)†rŒ)j©jC†r)j©jC†rŽ)jsX
		r)†r)jXforr‘)†r’)jsjç†r“)hŒj€†r”)jsjç†r•)jXinr–)†r—)jsjç†r˜)jhX[0r™)†rš)j©X..r›)†rœ)hŒjV)†r)j©j@†rž)jsjç†rŸ)jXdor )†r¡)jsX
			r¢)†r£)hŒXmapr¤)†r¥)j©j@†r¦)hŒj€†r§)j©jC†r¨)jsjç†r©)htj†rª)jsjç†r«)jXnewr¬)†r­)jsjç†r®)h¹XArrayr¯)†r°)j©j@†r±)h¹XCharr²)†r³)j©jC†r´)j©jt†rµ)hŒXfilled_withr¶)†r·)j©jK†r¸)jsjç†r¹)jÖX' 'rº)†r»)j©j;†r¼)jsX  r½)†r¾)hŒj†r¿)jsjç†rÀ)j©jV†rÁ)jsX
		rÂ)†rÃ)jXendrÄ)†rÅ)jsX

		rÆ)†rÇ)jXvarrÈ)†rÉ)jsjç†rÊ)hŒXcirË)†rÌ)jsjç†rÍ)htj†rÎ)jhX 0rÏ)†rÐ)jsX
		rÑ)†rÒ)jXforrÓ)†rÔ)jsjç†rÕ)hŒj›†rÖ)jsjç†r×)jXinrØ)†rÙ)jsjç†rÚ)hŒXselfrÛ)†rÜ)j©jt†rÝ)hŒXcharsrÞ)†rß)jsjç†rà)jXdorá)†râ)jsX
			rã)†rä)jXvarrå)†ræ)jsjç†rç)hŒXlocal_dispcrè)†ré)jsX
			rê)†rë)jXifrì)†rí)jsjç†rî)hŒj›†rï)j©jt†rð)hŒXoverride_dispcrñ)†rò)jsjç†ró)jXthenrô)†rõ)jsX
				rö)†r÷)hŒXlocal_dispcrø)†rù)jsjç†rú)htj†rû)jsjç†rü)hŒj›†rý)jsX
			rþ)†rÿ)jXelser*†r*jsX
				r*†r*hŒXlocal_dispcr*†r*jsjç†r*htj†r*jsjç†r*hŒXdispcr	*†r
*jsX
			r*†r*jXendr
*†r*jsX

			r*†r*jXvarr*†r*jsjç†r*hŒXlinesr*†r*jsjç†r*htj†r*jsjç†r*hŒj›†r*j©jt†r*hŒXlinesr*†r*j©jK†r*jsjç†r*hŒXsizer*†r *jsjç†r!*j©jV†r"*jsX
			r#*†r$*jXforr%*†r&*jsjç†r'*hŒXliner(*†r)*jsjç†r**jXinr+*†r,*jsjç†r-*hŒXlinesr.*†r/*jsjç†r0*jXdor1*†r2*jsX
				r3*†r4*jXvarr5*†r6*jsjç†r7*hŒj€†r8*jsjç†r9*htj†r:*jsjç†r;*hŒXliner<*†r=*j©jt†r>*hŒj&†r?*j©jt†r@*hŒj€†rA*htj†rB*hŒXcirC*†rD*htj†rE*hŒXsizerF*†rG*jsX
					rH*†rI*hŒj€†rJ*jsjç†rK*htj†rL*htj†rM*jsjç†rN*hŒXcirO*†rP*htj†rQ*hŒXgaprR*†rS*jsX
				rT*†rU*jXvarrV*†rW*jsjç†rX*hŒjb"†rY*jsjç†rZ*htj†r[*jsjç†r\*hŒXliner]*†r^*j©jt†r_*hŒj&†r`*j©jt†ra*hŒjb"†rb*jsX
				rc*†rd*jXforre*†rf*jsjç†rg*hŒjù†rh*jsjç†ri*jXinrj*†rk*jsjç†rl*jhX[0rm*†rn*j©X..ro*†rp*hŒXlinerq*†rr*j©jt†rs*hŒXlenrt*†ru*j©j@†rv*jsjç†rw*jXdorx*†ry*jsX
					rz*†r{*jXassertr|*†r}*jsjç†r~*hŒXmapr*†r€*j©jt†r*hŒXlengthr‚*†rƒ*jsjç†r„*htjƆr…*jsjç†r†*hŒj€†r‡*jsjç†rˆ*jXandr‰*†rŠ*jsjç†r‹*hŒXmaprŒ*†r*j©j@†rŽ*hŒj€†r*j©jC†r*j©jt†r‘*hŒXlengthr’*†r“*jsjç†r”*htjƆr•*jsjç†r–*hŒjb"†r—*jsjç†r˜*jXelser™*†rš*jsjç†r›*hŒXprintrœ*†r*jsjç†rž*jÁX
"setting {rŸ*†r *hŒj€†r¡*jÁX},{r¢*†r£*hŒjb"†r¤*jÁX} as {r¥*†r¦*hŒXlocal_dispcr§*†r¨*jÁX}"r©*†rª*jsX
					r«*†r¬*hŒXmapr­*†r®*j©j@†r¯*hŒj€†r°*j©jC†r±*j©j@†r²*hŒjb"†r³*j©jC†r´*jsjç†rµ*htj†r¶*jsjç†r·*hŒXlocal_dispcr¸*†r¹*jsX
					rº*†r»*hŒj€†r¼*jsjç†r½*htj†r¾*htj†r¿*jsjç†rÀ*hŒXlinerÁ*†rÂ*j©jt†rÃ*hŒXstep_xrÄ*†rÅ*jsX
					rÆ*†rÇ*hŒjb"†rÈ*jsjç†rÉ*htj†rÊ*htj†rË*jsjç†rÌ*hŒXlinerÍ*†rÎ*j©jt†rÏ*hŒXstep_yrÐ*†rÑ*jsX
				rÒ*†rÓ*jXendrÔ*†rÕ*jsX
			rÖ*†r×*jXendrØ*†rÙ*jsX

			rÚ*†rÛ*hŒXcirÜ*†rÝ*jsjç†rÞ*htj†rß*htj†rà*jhX 1rá*†râ*jsX
		rã*†rä*jXendrå*†ræ*jsX

		rç*†rè*jXifré*†rê*jsjç†rë*hŒXhackrì*†rí*jsjç†rî*jXthenrï*†rð*jsX
			rñ*†rò*jXforró*†rô*jsjç†rõ*hŒj›†rö*jsjç†r÷*jXinrø*†rù*jsjç†rú*jhX[0rû*†rü*j©X..rý*†rþ*hŒXsizerÿ*†r+j©j@†r+jsjç†r+jXdor+†r+jsX
				r+†r+hŒXmapr+†r+j©j@†r	+hŒj›†r
+j©jC†r+jhX[0r+†r
+j©jC†r+jsjç†r+htj†r+jsjç†r+hŒXmapr+†r+j©j@†r+hŒXmapr+†r+j©jt†r+hŒXlengthr+†r+htjR†r+hŒXsizer+†r+htj†r+hŒj›†r+j©jC†r+jhX[0r +†r!+j©jC†r"+jsX
				r#+†r$+hŒXmapr%+†r&+j©j@†r'+hŒXmapr(+†r)+j©jt†r*+hŒXlengthr++†r,+htjR†r-+hŒXsizer.+†r/+htj†r0+hŒj›†r1+j©jC†r2+jhX[0r3+†r4+j©jC†r5+jsjç†r6+htj†r7+jsjç†r8+jÖX' 'r9+†r:+jsX
			r;+†r<+jXendr=+†r>+jsX
		r?+†r@+jXendrA+†rB+jsX

		rC+†rD+jXforrE+†rF+jsjç†rG+hŒjb"†rH+jsjç†rI+jXinrJ+†rK+jsjç†rL+jhX[0rM+†rN+j©X..rO+†rP+hŒj†rQ+j©j@†rR+jsjç†rS+jXdorT+†rU+jsX
			rV+†rW+jXforrX+†rY+jsjç†rZ+hŒj€†r[+jsjç†r\+jXinr]+†r^+jsjç†r_+jhX[0r`+†ra+j©X..rb+†rc+hŒjV)†rd+j©j@†re+jsjç†rf+jXdorg+†rh+jsX
				ri+†rj+hŒXprintnrk+†rl+jsjç†rm+hŒXmaprn+†ro+j©j@†rp+hŒj€†rq+j©jC†rr+j©j@†rs+hŒjb"†rt+j©jC†ru+jsX
			rv+†rw+jXendrx+†ry+jsX
			rz+†r{+hŒXprintr|+†r}+jsjç†r~+jÁX""r+†r€+jsX
		r+†r‚+jXendrƒ+†r„+jsX
	r…+†r†+jXendr‡+†rˆ+jsj»†r‰+jXendrŠ+†r‹+jsX

rŒ+†r+jXclassrŽ+†r+jsjç†r+h¹XLiner‘+†r’+jsX
	r“+†r”+jXvarr•+†r–+jsjç†r—+hŒj&†r˜+jsjç†r™+j©jú†rš+jsjç†r›+h¹jØ!†rœ+jsX
	r+†rž+jXvarrŸ+†r +jsjç†r¡+hŒXstep_xr¢+†r£+jsjç†r¤+j©jú†r¥+jsjç†r¦+h¹XIntr§+†r¨+jsX
	r©+†rª+jXvarr«+†r¬+jsjç†r­+hŒXstep_yr®+†r¯+jsjç†r°+j©jú†r±+jsjç†r²+h¹XIntr³+†r´+jsX
	rµ+†r¶+jXvarr·+†r¸+jsjç†r¹+hŒXlenrº+†r»+jsjç†r¼+j©jú†r½+jsjç†r¾+h¹XIntr¿+†rÀ+jsj»†rÁ+jXendrÂ+†rÃ+jsX

rÄ+†rÅ+jXvarrÆ+†rÇ+jsjç†rÈ+hŒj· †rÉ+jsj»†rÊ+jXvarrË+†rÌ+jsjç†rÍ+hŒj» †rÎ+jsj»†rÏ+jXvarrÐ+†rÑ+jsjç†rÒ+hŒXop_charrÓ+†rÔ+jsj»†rÕ+jXvarrÖ+†r×+jsjç†rØ+hŒX	disp_charrÙ+†rÚ+jsj»†rÛ+jXvarrÜ+†rÝ+jsjç†rÞ+hŒX	disp_sizerß+†rà+jsj»†rá+jXvarrâ+†rã+jsjç†rä+hŒXdisp_gaprå+†ræ+jsX

rç+†rè+jXifré+†rê+jsjç†rë+jÁX
"NIT_TESTING"rì+†rí+j©jt†rî+hŒXenvironrï+†rð+jsjç†rñ+htX==rò+†ró+jsjç†rô+jÁX"true"rõ+†rö+jsjç†r÷+jXthenrø+†rù+jsX
	rú+†rû+hŒj· †rü+jsjç†rý+htj†rþ+jhX 567rÿ+†r,jsX
	r,†r,hŒj» †r,jsjç†r,htj†r,jhX 13r,†r,jsX
	r,†r	,hŒXop_charr
,†r,jsjç†r,htj†r
,jsjç†r,jÖX'*'r,†r,jsX
	r,†r,hŒX	disp_charr,†r,jsjç†r,htj†r,jsjç†r,jÖX'O'r,†r,jsX
	r,†r,hŒX	disp_sizer,†r,jsjç†r,htj†r,jhX 8r ,†r!,jsX
	r",†r#,hŒXdisp_gapr$,†r%,jsjç†r&,htj†r',jhX 1r(,†r),jsj»†r*,jXelser+,†r,,jsX
	r-,†r.,hŒXprintnr/,†r0,jsjç†r1,jÁX"Left operand: "r2,†r3,jsX
	r4,†r5,hŒj· †r6,jsjç†r7,htj†r8,jsjç†r9,hŒXgetsr:,†r;,j©jt†r<,hŒXto_ir=,†r>,jsX

	r?,†r@,hŒXprintnrA,†rB,jsjç†rC,jÁX"Right operand: "rD,†rE,jsX
	rF,†rG,hŒj» †rH,jsjç†rI,htj†rJ,jsjç†rK,hŒXgetsrL,†rM,j©jt†rN,hŒXto_irO,†rP,jsX

	rQ,†rR,hŒXprintnrS,†rT,jsjç†rU,jÁX"Operator (+, -, *, /, %): "rV,†rW,jsX
	rX,†rY,hŒXop_charrZ,†r[,jsjç†r\,htj†r],jsjç†r^,hŒXgetsr_,†r`,j©jt†ra,hŒXcharsrb,†rc,jhX[0rd,†re,j©jC†rf,jsX

	rg,†rh,hŒXprintnri,†rj,jsjç†rk,jÁX"Char to display: "rl,†rm,jsX
	rn,†ro,hŒX	disp_charrp,†rq,jsjç†rr,htj†rs,jsjç†rt,hŒXgetsru,†rv,j©jt†rw,hŒXcharsrx,†ry,jhX[0rz,†r{,j©jC†r|,jsX

	r},†r~,hŒXprintnr,†r€,jsjç†r,jÁX"Size of text: "r‚,†rƒ,jsX
	r„,†r…,hŒX	disp_sizer†,†r‡,jsjç†rˆ,htj†r‰,jsjç†rŠ,hŒXgetsr‹,†rŒ,j©jt†r,hŒXto_irŽ,†r,jsX

	r,†r‘,hŒXprintnr’,†r“,jsjç†r”,jÁX"Space between digits: "r•,†r–,jsX
	r—,†r˜,hŒXdisp_gapr™,†rš,jsjç†r›,htj†rœ,jsjç†r,hŒXgetsrž,†rŸ,j©jt†r ,hŒXto_ir¡,†r¢,jsj»†r£,jXendr¤,†r¥,e(jsX

r¦,†r§,jXvarr¨,†r©,jsjç†rª,hŒXresultr«,†r¬,jsjç†r­,htj†r®,jsjç†r¯,hŒXop_charr°,†r±,j©jt†r²,hŒXas_operatorr³,†r´,j©jK†rµ,jsjç†r¶,hŒj· †r·,j©j;†r¸,jsjç†r¹,hŒj» †rº,jsjç†r»,j©jV†r¼,jsX

r½,†r¾,jXvarr¿,†rÀ,jsjç†rÁ,hŒXlen_arÂ,†rÃ,jsjç†rÄ,htj†rÅ,jsjç†rÆ,hŒj· †rÇ,j©jt†rÈ,hŒXn_charsrÉ,†rÊ,jsj»†rË,jXvarrÌ,†rÍ,jsjç†rÎ,hŒXlen_brÏ,†rÐ,jsjç†rÑ,htj†rÒ,jsjç†rÓ,hŒj» †rÔ,j©jt†rÕ,hŒXn_charsrÖ,†r×,jsj»†rØ,jXvarrÙ,†rÚ,jsjç†rÛ,hŒXlen_resrÜ,†rÝ,jsjç†rÞ,htj†rß,jsjç†rà,hŒXresultrá,†râ,j©jt†rã,hŒXn_charsrä,†rå,jsj»†ræ,jXvarrç,†rè,jsjç†ré,hŒXmax_lenrê,†rë,jsjç†rì,htj†rí,jsjç†rî,hŒXlen_arï,†rð,j©jt†rñ,hŒXmaxrò,†ró,j©jK†rô,jsjç†rõ,hŒXlen_brö,†r÷,j©jt†rø,hŒXmaxrù,†rú,j©jK†rû,jsjç†rü,hŒXlen_resrý,†rþ,jsjç†rÿ,j©jV†r-jsjç†r-j©jV†r-jsjç†r-htj†r-jhX 1r-†r-jsX

r-†r-hX# draw first liner	-†r
-jsj»†r-jXvarr-†r
-jsjç†r-hŒXdr-†r-jsjç†r-htj†r-jsjç†r-hŒXmax_lenr-†r-jsjç†r-htjR†r-jsjç†r-hŒXlen_ar-†r-jsj»†r-jXvarr-†r-jsjç†r-hŒXline_ar-†r -jsjç†r!-htj†r"-jsjç†r#-jÁX""r$-†r%-jsj»†r&-jXforr'-†r(-jsjç†r)-hŒj"†r*-jsjç†r+-jXinr,-†r--jsjç†r.-jhX[0r/-†r0-j©X..r1-†r2-hŒj-†r3-j©j@†r4-jsjç†r5-jXdor6-†r7-jsjç†r8-hŒXline_ar9-†r:-jsjç†r;-htj†r<-htj†r=-jsjç†r>-jÁX" "r?-†r@-jsj»†rA-hŒXline_arB-†rC-jsjç†rD-htj†rE-htj†rF-jsjç†rG-hŒj· †rH-j©jt†rI-hŒXto_srJ-†rK-jsj»†rL-hŒXline_arM-†rN-j©jt†rO-hŒXdrawrP-†rQ-j©jK†rR-jsjç†rS-hŒX	disp_charrT-†rU-j©j;†rV-jsjç†rW-hŒX	disp_sizerX-†rY-j©j;†rZ-jsjç†r[-hŒXdisp_gapr\-†r]-j©j;†r^-jsjç†r_-jXfalser`-†ra-jsjç†rb-j©jV†rc-jsX

rd-†re-hŒXprintrf-†rg-jsjç†rh-jÁX""ri-†rj-jsj»†rk-hX# draw second linerl-†rm-jsj»†rn-hŒj-†ro-jsjç†rp-htj†rq-jsjç†rr-hŒXmax_lenrs-†rt-jsjç†ru-htjR†rv-jsjç†rw-hŒXlen_brx-†ry-jhX-1rz-†r{-jsj»†r|-jXvarr}-†r~-jsjç†r-hŒXline_br€-†r-jsjç†r‚-htj†rƒ-jsjç†r„-hŒXop_charr…-†r†-j©jt†r‡-hŒXto_srˆ-†r‰-jsj»†rŠ-jXforr‹-†rŒ-jsjç†r-hŒj"†rŽ-jsjç†r-jXinr-†r‘-jsjç†r’-jhX[0r“-†r”-j©X..r•-†r–-hŒj-†r—-j©j@†r˜-jsjç†r™-jXdorš-†r›-jsjç†rœ-hŒXline_br-†rž-jsjç†rŸ-htj†r -htj†r¡-jsjç†r¢-jÁX" "r£-†r¤-jsj»†r¥-hŒXline_br¦-†r§-jsjç†r¨-htj†r©-htj†rª-jsjç†r«-hŒj» †r¬-j©jt†r­-hŒXto_sr®-†r¯-jsj»†r°-hŒXline_br±-†r²-j©jt†r³-hŒXdrawr´-†rµ-j©jK†r¶-jsjç†r·-hŒX	disp_charr¸-†r¹-j©j;†rº-jsjç†r»-hŒX	disp_sizer¼-†r½-j©j;†r¾-jsjç†r¿-hŒXdisp_gaprÀ-†rÁ-j©j;†rÂ-jsjç†rÃ-jXfalserÄ-†rÅ-jsjç†rÆ-j©jV†rÇ-jsX

rÈ-†rÉ-hX# draw -----rÊ-†rË-jsj»†rÌ-hŒXprintrÍ-†rÎ-jsjç†rÏ-jÁX""rÐ-†rÑ-jsj»†rÒ-jXforrÓ-†rÔ-jsjç†rÕ-hŒj"†rÖ-jsjç†r×-jXinrØ-†rÙ-jsjç†rÚ-jhX[0rÛ-†rÜ-j©X..rÝ-†rÞ-hŒX	disp_sizerß-†rà-htj†rá-hŒXmax_lenrâ-†rã-htj†rä-j©jK†rå-hŒXmax_lenræ-†rç-jhX-1rè-†ré-j©jV†rê-htj†rë-hŒXdisp_gaprì-†rí-j©jC†rî-jsjç†rï-jXdorð-†rñ-jsX
	rò-†ró-hŒXprintnrô-†rõ-jsjç†rö-jÁX"_"r÷-†rø-jsj»†rù-jXendrú-†rû-jsj»†rü-hŒXprintrý-†rþ-jsjç†rÿ-jÁX""r.†r.jsj»†r.hŒXprintr.†r.jsjç†r.jÁX""r.†r.jsX

r.†r	.hX
# draw resultr
.†r.jsj»†r.hŒj-†r
.jsjç†r.htj†r.jsjç†r.hŒXmax_lenr.†r.jsjç†r.htjR†r.jsjç†r.hŒXlen_resr.†r.jsj»†r.jXvarr.†r.jsjç†r.hŒXline_resr.†r.jsjç†r.htj†r.jsjç†r .jÁX""r!.†r".jsj»†r#.jXforr$.†r%.jsjç†r&.hŒj"†r'.jsjç†r(.jXinr).†r*.jsjç†r+.jhX[0r,.†r-.j©X..r..†r/.hŒj-†r0.j©j@†r1.jsjç†r2.jXdor3.†r4.jsjç†r5.hŒXline_resr6.†r7.jsjç†r8.htj†r9.htj†r:.jsjç†r;.jÁX" "r<.†r=.jsj»†r>.hŒXline_resr?.†r@.jsjç†rA.htj†rB.htj†rC.jsjç†rD.hŒXresultrE.†rF.j©jt†rG.hŒXto_srH.†rI.jsj»†rJ.hŒXline_resrK.†rL.j©jt†rM.hŒXdrawrN.†rO.j©jK†rP.jsjç†rQ.hŒX	disp_charrR.†rS.j©j;†rT.jsjç†rU.hŒX	disp_sizerV.†rW.j©j;†rX.jsjç†rY.hŒXdisp_gaprZ.†r[.j©j;†r\.jsjç†r].jXfalser^.†r_.jsjç†r`.j©jV†ra.jsj»†rb.hX:# This file is part of NIT ( http://www.nitlanguage.org ).rc.†rd.jsj»†re.hj½†rf.jsj»†rg.hX:# Copyright 2013 Alexis Laferrière <alexis.laf@xymus.net>rh.†ri.jsj»†rj.hj½†rk.jsj»†rl.hXA# Licensed under the Apache License, Version 2.0 (the "License");rm.†rn.jsj»†ro.hXB# you may not use this file except in compliance with the License.rp.†rq.jsj»†rr.hX)# You may obtain a copy of the License atrs.†rt.jsj»†ru.hj½†rv.jsj»†rw.hX0#     http://www.apache.org/licenses/LICENSE-2.0rx.†ry.jsj»†rz.hj½†r{.jsj»†r|.hXE# Unless required by applicable law or agreed to in writing, softwarer}.†r~.jsj»†r.hXC# distributed under the License is distributed on an "AS IS" BASIS,r€.†r.jsj»†r‚.hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rƒ.†r„.jsj»†r….hXE# See the License for the specific language governing permissions andr†.†r‡.jsj»†rˆ.hX # limitations under the License.r‰.†rŠ.jsX

r‹.†rŒ.hXB# Example using the privileges module to drop privileges from rootr.†rŽ.jsj»†r.jXmoduler.†r‘.jsjç†r’.hŒXdrop_privilegesr“.†r”.jsX

r•.†r–.jXimportr—.†r˜.jsjç†r™.hŒX
privilegesrš.†r›.jsX

rœ.†r.hX# basic command line optionsrž.†rŸ.jsj»†r .jXvarr¡.†r¢.jsjç†r£.hŒXoptsr¤.†r¥.jsjç†r¦.htj†r§.jsjç†r¨.jXnewr©.†rª.jsjç†r«.h¹X
OptionContextr¬.†r­.jsj»†r®.jXvarr¯.†r°.jsjç†r±.hŒXopt_ugr².†r³.jsjç†r´.htj†rµ.jsjç†r¶.jXnewr·.†r¸.jsjç†r¹.h¹XOptionUserAndGrouprº.†r».j©jt†r¼.hŒXfor_dropping_privilegesr½.†r¾.jsj»†r¿.hŒXopt_ugrÀ.†rÁ.j©jt†rÂ.hŒX	mandatoryrÃ.†rÄ.jsjç†rÅ.htj†rÆ.jsjç†rÇ.jXtruerÈ.†rÉ.jsj»†rÊ.hŒXoptsrË.†rÌ.j©jt†rÍ.hŒX
add_optionrÎ.†rÏ.j©jK†rÐ.hŒXopt_ugrÑ.†rÒ.j©jV†rÓ.jsX

rÔ.†rÕ.hX&# parse and check command line optionsrÖ.†r×.jsj»†rØ.hŒXoptsrÙ.†rÚ.j©jt†rÛ.hŒXparserÜ.†rÝ.j©jK†rÞ.hŒXargsrß.†rà.j©jV†rá.jsj»†râ.jXifrã.†rä.jsjç†rå.jXnotræ.†rç.jsjç†rè.hŒXoptsré.†rê.j©jt†rë.hŒXerrorsrì.†rí.j©jt†rî.hŒXis_emptyrï.†rð.jsjç†rñ.jXthenrò.†ró.jsX
	rô.†rõ.hŒXprintrö.†r÷.jsjç†rø.hŒXoptsrù.†rú.j©jt†rû.hŒXerrorsrü.†rý.jsX
	rþ.†rÿ.hŒXprintr/†r/jsjç†r/jÁX""Usage: drop_privileges [options]"r/†r/jsX
	r/†r/hŒXoptsr/†r/j©jt†r	/hŒXusager
/†r/jsX
	r/†r
/hŒXexitr/†r/jhX 1r/†r/jsj»†r/jXendr/†r/jsX

r/†r/hX# original userr/†r/jsj»†r/hŒXprintr/†r/jsjç†r/jÁX	"before {r/†r/hŒXsysr/†r /j©jt†r!/hŒXuidr"/†r#/jÁX}:{r$/†r%/hŒXsysr&/†r'/j©jt†r(/hŒXgidr)/†r*/jÁX}"r+/†r,/jsX

r-/†r./hX# make the switchr//†r0/jsj»†r1/jXvarr2/†r3/jsjç†r4/hŒX
user_groupr5/†r6/jsjç†r7/htj†r8/jsjç†r9/hŒXopt_ugr:/†r;/j©jt†r</hŒXvaluer=/†r>/jsj»†r?/jXassertr@/†rA/jsjç†rB/hŒX
user_grouprC/†rD/jsjç†rE/htX!=rF/†rG/jsjç†rH/jXnullrI/†rJ/jsj»†rK/hŒX
user_grouprL/†rM/j©jt†rN/hŒXdrop_privilegesrO/†rP/jsX

rQ/†rR/hX# final userrS/†rT/jsj»†rU/hŒXprintrV/†rW/jsjç†rX/jÁX"after {rY/†rZ/hŒXsysr[/†r\/j©jt†r]/hŒXuidr^/†r_/jÁX}:{r`/†ra/hŒXsysrb/†rc/j©jt†rd/hŒXegidre/†rf/jÁX}"rg/†rh/jsj»†ri/hX:# This file is part of NIT ( http://www.nitlanguage.org ).rj/†rk/jsj»†rl/hj½†rm/jsj»†rn/hX?# Copyright 2012-2013 Alexis Laferrière <alexis.laf@xymus.net>ro/†rp/jsj»†rq/hj½†rr/jsj»†rs/hXA# Licensed under the Apache License, Version 2.0 (the "License");rt/†ru/jsj»†rv/hXB# you may not use this file except in compliance with the License.rw/†rx/jsj»†ry/hX)# You may obtain a copy of the License atrz/†r{/jsj»†r|/hj½†r}/jsj»†r~/hX0#     http://www.apache.org/licenses/LICENSE-2.0r/†r€/jsj»†r/hj½†r‚/jsj»†rƒ/hXE# Unless required by applicable law or agreed to in writing, softwarer„/†r…/jsj»†r†/hXC# distributed under the License is distributed on an "AS IS" BASIS,r‡/†rˆ/jsj»†r‰/hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rŠ/†r‹/jsj»†rŒ/hXE# See the License for the specific language governing permissions andr/†rŽ/jsj»†r/hX # limitations under the License.r/†r‘/jsX

r’/†r“/hX<# This module illustrates some uses of the FFI, specificallyr”/†r•/jsj»†r–/hXH# how to use extern methods. Which means to implement a Nit method in C.r—/†r˜/jsj»†r™/jXmodulerš/†r›/jsjç†rœ/hŒXextern_methodsr/†rž/jsX

rŸ/†r /jXredefr¡/†r¢/jsjç†r£/jXenumr¤/†r¥/jsjç†r¦/h¹XIntr§/†r¨/jsX
	r©/†rª/hX"# Returns self'th fibonnaci numberr«/†r¬/jsX
	r­/†r®/hX1# implemented here in C for optimization purposesr¯/†r°/jsX
	r±/†r²/jXfunr³/†r´/jsjç†rµ/hŒXfibr¶/†r·/jsjç†r¸/j©jú†r¹/jsjç†rº/h¹XIntr»/†r¼/jsjç†r½/jXimportr¾/†r¿/jsjç†rÀ/hŒXfibrÁ/†rÂ/jsjç†rÃ/jsX``{
		if ( recv < 2 )
			return recv;
		else
			return Int_fib( recv-1 ) + Int_fib( recv-2 );
	`}rÄ/†rÅ/jsX

	rÆ/†rÇ/hX)# System call to sleep for "self" secondsrÈ/†rÉ/jsX
	rÊ/†rË/jXfunrÌ/†rÍ/jsjç†rÎ/hŒXsleeprÏ/†rÐ/jsjç†rÑ/jsX`{
		sleep( recv );
	`}rÒ/†rÓ/jsX

	rÔ/†rÕ/hX'# Return atan2l( self, x ) from libmathrÖ/†r×/jsX
	rØ/†rÙ/jXfunrÚ/†rÛ/jsjç†rÜ/hŒX	atan_withrÝ/†rÞ/j©jK†rß/jsjç†rà/hŒj€†rá/jsjç†râ/j©jú†rã/jsjç†rä/h¹XIntrå/†ræ/jsjç†rç/j©jV†rè/jsjç†ré/j©jú†rê/jsjç†rë/h¹XFloatrì/†rí/jsjç†rî/jsX!`{
		return atan2( recv, x );
	`}rï/†rð/jsX

	rñ/†rò/hX1# This method callback to Nit methods from C coderó/†rô/jsX
	rõ/†rö/hX# It will use from C code:r÷/†rø/jsX
	rù/†rú/hX# * the local fib methodrû/†rü/jsX
	rý/†rþ/hX## * the + operator, a method of Intrÿ/†r0jsX
	r0†r0hX!# * to_s, a method of all objectsr0†r0jsX
	r0†r0hXG# * String.to_cstring, a method of String to return an equivalent char*r0†r0jsX
	r	0†r
0jXfunr0†r0jsjç†r
0hŒXfoor0†r0jsjç†r0jXimportr0†r0jsjç†r0hŒXfibr0†r0j©j;†r0jsjç†r0htj†r0j©j;†r0jsjç†r0hŒXto_sr0†r0j©j;†r0jsjç†r0h¹XStringr0†r 0j©jt†r!0hŒX
to_cstringr"0†r#0jsjç†r$0jsXý`{
		long recv_fib = Int_fib( recv );
		long recv_plus_fib = Int__plus( recv, recv_fib );

		String nit_string = Int_to_s( recv_plus_fib );
		char *c_string = String_to_cstring( nit_string );

		printf( "from C: self + fib(self) = %s\n", c_string );
	`}r%0†r&0jsX

	r'0†r(0hX+# Equivalent to foo but written in pure Nitr)0†r*0jsX
	r+0†r,0jXfunr-0†r.0jsjç†r/0hŒXbarr00†r10jsjç†r20jXdor30†r40jsjç†r50hŒXprintr60†r70jsjç†r80jÁX"from Nit: self + fib(self) = {r90†r:0hŒXselfr;0†r<0htj†r=0hŒXselfr>0†r?0j©jt†r@0hŒXfibrA0†rB0jÁX}"rC0†rD0jsj»†rE0jXendrF0†rG0jsX

rH0†rI0hŒXprintrJ0†rK0jhX 12rL0†rM0j©jt†rN0hŒXfibrO0†rP0jsX

rQ0†rR0hŒXprintrS0†rT0jsjç†rU0jÁX"sleeping 1 second..."rV0†rW0jsj»†rX0jŸX1rY0†rZ0j©jt†r[0hŒXsleepr\0†r]0jsX

r^0†r_0hŒXprintr`0†ra0jhX 100rb0†rc0j©jt†rd0hŒX	atan_withre0†rf0j©jK†rg0jhX 200rh0†ri0jsjç†rj0j©jV†rk0jsj»†rl0jŸX8rm0†rn0j©jt†ro0hŒXfoorp0†rq0jsj»†rr0jŸjm0†rs0j©jt†rt0hŒXbarru0†rv0jsX

rw0†rx0hX:# This file is part of NIT ( http://www.nitlanguage.org ).ry0†rz0jsj»†r{0hj½†r|0jsj»†r}0hX2# Copyright 2004-2008 Jean Privat <jean@pryen.org>r~0†r0jsj»†r€0hj½†r0jsj»†r‚0hXA# Licensed under the Apache License, Version 2.0 (the "License");rƒ0†r„0jsj»†r…0hXB# you may not use this file except in compliance with the License.r†0†r‡0jsj»†rˆ0hX)# You may obtain a copy of the License atr‰0†rŠ0jsj»†r‹0hj½†rŒ0jsj»†r0hX0#     http://www.apache.org/licenses/LICENSE-2.0rŽ0†r0jsj»†r0hj½†r‘0jsj»†r’0hXE# Unless required by applicable law or agreed to in writing, softwarer“0†r”0jsj»†r•0hXC# distributed under the License is distributed on an "AS IS" BASIS,r–0†r—0jsj»†r˜0hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.r™0†rš0jsj»†r›0hXE# See the License for the specific language governing permissions andrœ0†r0jsj»†rž0hX # limitations under the License.rŸ0†r 0jsX

r¡0†r¢0hXN# A simple exemple of refinement where a method is added to the integer class.r£0†r¤0jsj»†r¥0jXmoduler¦0†r§0jsjç†r¨0hŒX	fibonaccir©0†rª0jsX

r«0†r¬0jXredefr­0†r®0jsjç†r¯0jXclassr°0†r±0jsjç†r²0h¹XIntr³0†r´0jsX
	rµ0†r¶0hX:# Calculate the self-th element of the fibonacci sequence.r·0†r¸0jsX
	r¹0†rº0jXfunr»0†r¼0jsjç†r½0hŒX	fibonaccir¾0†r¿0j©jú†rÀ0jsjç†rÁ0h¹XIntrÂ0†rÃ0jsX
	rÄ0†rÅ0jXdorÆ0†rÇ0jsX
		rÈ0†rÉ0jXifrÊ0†rË0jsjç†rÌ0jXselfrÍ0†rÎ0jsjç†rÏ0htj#†rÐ0jhX 2rÑ0†rÒ0jsjç†rÓ0jXthenrÔ0†rÕ0jsX
			rÖ0†r×0jXreturnrØ0†rÙ0jhX 1rÚ0†rÛ0jsX
		rÜ0†rÝ0jXelserÞ0†rß0jsX
			rà0†rá0jXreturnrâ0†rã0jsjç†rä0j©jK†rå0hŒXselfræ0†rç0jhX-2rè0†ré0j©jV†rê0j©jt†rë0hŒX	fibonaccirì0†rí0jsjç†rî0htj†rï0jsjç†rð0j©jK†rñ0hŒXselfrò0†ró0jhX-1rô0†rõ0j©jV†rö0j©jt†r÷0hŒX	fibonaccirø0†rù0jsX
		rú0†rû0jXendrü0†rý0jsX
	rþ0†rÿ0jXendr1†r1jsX 
r1†r1jXendr1†r1jsX

r1†r1hX# Print usage and exit.r1†r	1jsj»†r
1jXfunr1†r1jsjç†r
1hŒXusager1†r1jsj»†r1jXdor1†r1jsX
	r1†r1hŒXprintr1†r1jsjç†r1jÁX"Usage: fibonnaci <integer>"r1†r1jsX 
	r1†r1hŒXexitr1†r1jhX 0r1†r1jsX 
r 1†r!1jXendr"1†r#1jsX

r$1†r%1hX# Main partr&1†r'1jsj»†r(1jXifr)1†r*1jsjç†r+1hŒXargsr,1†r-1j©jt†r.1hŒXlengthr/1†r01jsjç†r11htX!=r21†r31jhX 1r41†r51jsjç†r61jXthenr71†r81jsX
	r91†r:1hŒXusager;1†r<1jsj»†r=1jXendr>1†r?1jsj»†r@1hŒXprintrA1†rB1jsjç†rC1hŒXargsrD1†rE1j©jt†rF1hŒXfirstrG1†rH1j©jt†rI1hŒXto_irJ1†rK1j©jt†rL1hŒX	fibonaccirM1†rN1jsj»†rO1hŒXprintrP1†rQ1jsjç†rR1jÁX
"hello world"rS1†rT1jsj»†rU1hX:# This file is part of NIT ( http://www.nitlanguage.org ).rV1†rW1jsj»†rX1hj½†rY1jsj»†rZ1hXA# Licensed under the Apache License, Version 2.0 (the "License");r[1†r\1jsj»†r]1hXB# you may not use this file except in compliance with the License.r^1†r_1jsj»†r`1hX)# You may obtain a copy of the License atra1†rb1jsj»†rc1hj½†rd1jsj»†re1hX0#     http://www.apache.org/licenses/LICENSE-2.0rf1†rg1jsj»†rh1hj½†ri1jsj»†rj1hXE# Unless required by applicable law or agreed to in writing, softwarerk1†rl1jsj»†rm1hXC# distributed under the License is distributed on an "AS IS" BASIS,rn1†ro1jsj»†rp1hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rq1†rr1jsj»†rs1hXE# See the License for the specific language governing permissions andrt1†ru1jsj»†rv1hX # limitations under the License.rw1†rx1jsX

ry1†rz1jXimportr{1†r|1jsjç†r}1hŒXhtmlr~1†r1jsX

r€1†r1jXclassr‚1†rƒ1jsjç†r„1h¹XNitHomepager…1†r†1jsX
	r‡1†rˆ1jXsuperr‰1†rŠ1jsjç†r‹1h¹XHTMLPagerŒ1†r1jsX

	rŽ1†r1jXredefr1†r‘1jsjç†r’1jXfunr“1†r”1jsjç†r•1hŒXheadr–1†r—1jsjç†r˜1jXdor™1†rš1jsX
		r›1†rœ1hŒXaddr1†rž1j©jK†rŸ1jÁX"meta"r 1†r¡1j©jV†r¢1j©jt†r£1hŒXattrr¤1†r¥1j©jK†r¦1jÁX	"charset"r§1†r¨1j©j;†r©1jsjç†rª1jÁX"utf-8"r«1†r¬1j©jV†r­1jsX
		r®1†r¯1hŒXaddr°1†r±1j©jK†r²1jÁX"title"r³1†r´1j©jV†rµ1j©jt†r¶1hŒXtextr·1†r¸1j©jK†r¹1jÁX"Nit"rº1†r»1j©jV†r¼1jsX
		r½1†r¾1hŒXaddr¿1†rÀ1j©jK†rÁ1jÁX"link"rÂ1†rÃ1j©jV†rÄ1j©jt†rÅ1hŒXattrrÆ1†rÇ1j©jK†rÈ1jÁX"rel"rÉ1†rÊ1j©j;†rË1jsjç†rÌ1jÁX"icon"rÍ1†rÎ1j©jV†rÏ1j©jt†rÐ1hŒXattrrÑ1†rÒ1j©jK†rÓ1jÁX"href"rÔ1†rÕ1j©j;†rÖ1jsjç†r×1jÁX$"http://nitlanguage.org/favicon.ico"rØ1†rÙ1j©jV†rÚ1j©jt†rÛ1hŒXattrrÜ1†rÝ1j©jK†rÞ1jÁX"type"rß1†rà1j©j;†rá1jsjç†râ1jÁX"image/x-icon"rã1†rä1j©jV†rå1jsX
		ræ1†rç1hŒXaddrè1†ré1j©jK†rê1jÁX"link"rë1†rì1j©jV†rí1j©jt†rî1hŒXattrrï1†rð1j©jK†rñ1jÁX"rel"rò1†ró1j©j;†rô1jsjç†rõ1jÁX"stylesheet"rö1†r÷1j©jV†rø1j©jt†rù1hŒXattrrú1†rû1j©jK†rü1jÁX"href"rý1†rþ1j©j;†rÿ1jsjç†r2jÁX""http://nitlanguage.org/style.css"r2†r2j©jV†r2j©jt†r2hŒXattrr2†r2j©jK†r2jÁX"type"r2†r	2j©j;†r
2jsjç†r2jÁX
"text/css"r2†r
2j©jV†r2jsX
		r2†r2hŒXaddr2†r2j©jK†r2jÁX"link"r2†r2j©jV†r2j©jt†r2hŒXattrr2†r2j©jK†r2jÁX"rel"r2†r2j©j;†r2jsjç†r2jÁX"stylesheet"r2†r 2j©jV†r!2j©jt†r"2hŒXattrr#2†r$2j©jK†r%2jÁX"href"r&2†r'2j©j;†r(2jsjç†r)2jÁX""http://nitlanguage.org/local.css"r*2†r+2j©jV†r,2j©jt†r-2hŒXattrr.2†r/2j©jK†r02jÁX"type"r12†r22j©j;†r32jsjç†r42jÁX
"text/css"r52†r62j©jV†r72jsX
	r82†r92jXendr:2†r;2jsX

	r<2†r=2jXredefr>2†r?2jsjç†r@2jXfunrA2†rB2jsjç†rC2hŒXbodyrD2†rE2jsjç†rF2jXdorG2†rH2jsX
		rI2†rJ2hŒXopenrK2†rL2j©jK†rM2jÁX	"article"rN2†rO2j©jV†rP2j©jt†rQ2hŒX	add_classrR2†rS2j©jK†rT2jÁX"page"rU2†rV2j©jV†rW2jsX
			rX2†rY2hŒXopenrZ2†r[2j©jK†r\2jÁX	"section"r]2†r^2j©jV†r_2j©jt†r`2hŒX	add_classra2†rb2j©jK†rc2jÁX"pageheader"rd2†re2j©jV†rf2jsX
				rg2†rh2hŒXadd_htmlri2†rj2j©jK†rk2jÁX±"<a id='toptitle_first' class='toptitle'>the</a><a id='toptitle_second' class='toptitle' href=''>Nit</a><a id='toptitle_third' class='toptitle' href=''>Programming Language</a>"rl2†rm2j©jV†rn2e(jsX
				ro2†rp2hŒXopenrq2†rr2j©jK†rs2jÁX"header"rt2†ru2j©jV†rv2j©jt†rw2hŒX	add_classrx2†ry2j©jK†rz2jÁX"header"r{2†r|2j©jV†r}2jsX
					r~2†r2hŒXopenr€2†r2j©jK†r‚2jÁX"div"rƒ2†r„2j©jV†r…2j©jt†r†2hŒX	add_classr‡2†rˆ2j©jK†r‰2jÁX
"topsubtitle"rŠ2†r‹2j©jV†rŒ2jsX
						r2†rŽ2hŒXaddr2†r2j©jK†r‘2jÁX"p"r’2†r“2j©jV†r”2j©jt†r•2hŒXtextr–2†r—2j©jK†r˜2jÁX("A Fun Language for Serious Programming"r™2†rš2j©jV†r›2jsX
					rœ2†r2hŒXcloserž2†rŸ2j©jK†r 2jÁX"div"r¡2†r¢2j©jV†r£2jsX
				r¤2†r¥2hŒXcloser¦2†r§2j©jK†r¨2jÁX"header"r©2†rª2j©jV†r«2jsX
			r¬2†r­2hŒXcloser®2†r¯2j©jK†r°2jÁX	"section"r±2†r²2j©jV†r³2jsX

			r´2†rµ2hŒXopenr¶2†r·2j©jK†r¸2jÁX"div"r¹2†rº2j©jV†r»2j©jt†r¼2hŒXattrr½2†r¾2j©jK†r¿2jÁX"id"rÀ2†rÁ2j©j;†rÂ2jsjç†rÃ2jÁX
"pagebody"rÄ2†rÅ2j©jV†rÆ2jsX
				rÇ2†rÈ2hŒXopenrÉ2†rÊ2j©jK†rË2jÁX	"section"rÌ2†rÍ2j©jV†rÎ2j©jt†rÏ2hŒXattrrÐ2†rÑ2j©jK†rÒ2jÁX"id"rÓ2†rÔ2j©j;†rÕ2jsjç†rÖ2jÁX	"content"r×2†rØ2j©jV†rÙ2jsX
					rÚ2†rÛ2hŒXaddrÜ2†rÝ2j©jK†rÞ2jÁX"h1"rß2†rà2j©jV†rá2j©jt†râ2hŒXtextrã2†rä2j©jK†rå2jÁX"# What is Nit?"ræ2†rç2j©jV†rè2jsX
					ré2†rê2hŒXaddrë2†rì2j©jK†rí2jÁX"p"rî2†rï2j©jV†rð2j©jt†rñ2hŒXtextrò2†ró2j©jK†rô2jÁX"Nit is an object-oriented programming language. The goal of Nit is to propose a robust statically typed programming language where structure is not a pain."rõ2†rö2j©jV†r÷2jsX
					rø2†rù2hŒXaddrú2†rû2j©jK†rü2jÁX"p"rý2†rþ2j©jV†rÿ2j©jt†r3hŒXtextr3†r3j©jK†r3jÁXA"So, what does the famous hello world program look like, in Nit?"r3†r3j©jV†r3jsX
					r3†r3hŒXadd_htmlr	3†r
3j©jK†r3jÁXc"<pre><tt><span class='normal'>print </span><span class='string'>'Hello, World!'</span></tt></pre>"r3†r
3j©jV†r3jsX

					r3†r3hŒXaddr3†r3j©jK†r3jÁX"h1"r3†r3j©jV†r3j©jt†r3hŒXtextr3†r3j©jK†r3jÁX"# Feature Highlights"r3†r3j©jV†r3jsX
					r3†r3hŒXaddr 3†r!3j©jK†r"3jÁX"h2"r#3†r$3j©jV†r%3j©jt†r&3hŒXtextr'3†r(3j©jK†r)3jÁX"Usability"r*3†r+3j©jV†r,3jsX
					r-3†r.3hŒXaddr/3†r03j©jK†r13jÁX"p"r23†r33j©jV†r43j©jt†r53hŒXtextr63†r73j©jK†r83jÁXB"Nit's goal is to be usable by real programmers for real projects"r93†r:3j©jV†r;3jsX

					r<3†r=3hŒXopenr>3†r?3j©jK†r@3jÁX"ul"rA3†rB3j©jV†rC3jsX
						rD3†rE3hŒXopenrF3†rG3j©jK†rH3jÁX"li"rI3†rJ3j©jV†rK3jsX
						rL3†rM3hŒXaddrN3†rO3j©jK†rP3jÁX"a"rQ3†rR3j©jV†rS3j©jt†rT3hŒXattrrU3†rV3j©jK†rW3jÁX"href"rX3†rY3j©j;†rZ3jsjç†r[3jÁX-"http://en.wikipedia.org/wiki/KISS_principle"r\3†r]3j©jV†r^3j©jt†r_3hŒXtextr`3†ra3j©jK†rb3jÁX"KISS principle"rc3†rd3j©jV†re3jsX
						rf3†rg3hŒXcloserh3†ri3j©jK†rj3jÁX"li"rk3†rl3j©jV†rm3jsX
						rn3†ro3hŒXaddrp3†rq3j©jK†rr3jÁX"li"rs3†rt3j©jV†ru3j©jt†rv3hŒXtextrw3†rx3j©jK†ry3jÁX?"Script-like language without verbosity nor cryptic statements"rz3†r{3j©jV†r|3jsX
						r}3†r~3hŒXaddr3†r€3j©jK†r3jÁX"li"r‚3†rƒ3j©jV†r„3j©jt†r…3hŒXtextr†3†r‡3j©jK†rˆ3jÁX>"Painless static types: static typing should help programmers"r‰3†rŠ3j©jV†r‹3jsX
						rŒ3†r3hŒXaddrŽ3†r3j©jK†r3jÁX"li"r‘3†r’3j©jV†r“3j©jt†r”3hŒXtextr•3†r–3j©jK†r—3jÁXB"Efficient development, efficient execution, efficient evolution."r˜3†r™3j©jV†rš3jsX
					r›3†rœ3hŒXcloser3†rž3j©jK†rŸ3jÁX"ul"r 3†r¡3j©jV†r¢3jsX

					r£3†r¤3hŒXaddr¥3†r¦3j©jK†r§3jÁX"h2"r¨3†r©3j©jV†rª3j©jt†r«3hŒXtextr¬3†r­3j©jK†r®3jÁX"Robustness"r¯3†r°3j©jV†r±3jsX
					r²3†r³3hŒXaddr´3†rµ3j©jK†r¶3jÁX"p"r·3†r¸3j©jV†r¹3j©jt†rº3hŒXtextr»3†r¼3j©jK†r½3jÁX."Nit will help you to write bug-free programs"r¾3†r¿3j©jV†rÀ3jsX

					rÁ3†rÂ3hŒXopenrÃ3†rÄ3j©jK†rÅ3jÁX"ul"rÆ3†rÇ3j©jV†rÈ3jsX
						rÉ3†rÊ3hŒXaddrË3†rÌ3j©jK†rÍ3jÁX"li"rÎ3†rÏ3j©jV†rÐ3j©jt†rÑ3hŒXtextrÒ3†rÓ3j©jK†rÔ3jÁX"Strong static typing"rÕ3†rÖ3j©jV†r×3jsX
						rØ3†rÙ3hŒXaddrÚ3†rÛ3j©jK†rÜ3jÁX"li"rÝ3†rÞ3j©jV†rß3j©jt†rà3hŒXtextrá3†râ3j©jK†rã3jÁX"No more NullPointerException"rä3†rå3j©jV†ræ3jsX
					rç3†rè3hŒXcloseré3†rê3j©jK†rë3jÁX"ul"rì3†rí3j©jV†rî3jsX

					rï3†rð3hŒXaddrñ3†rò3j©jK†ró3jÁX"h2"rô3†rõ3j©jV†rö3j©jt†r÷3hŒXtextrø3†rù3j©jK†rú3jÁX"Object-Oriented"rû3†rü3j©jV†rý3jsX
					rþ3†rÿ3hŒXaddr4†r4j©jK†r4jÁX"p"r4†r4j©jV†r4j©jt†r4hŒXtextr4†r4j©jK†r	4jÁX>"Nit's guideline is to follow the most powerful OO principles"r
4†r4j©jV†r4jsX

					r
4†r4hŒXopenr4†r4j©jK†r4jÁX"ul"r4†r4j©jV†r4jsX
						r4†r4hŒXopenr4†r4j©jK†r4jÁX"li"r4†r4j©jV†r4jsX
						r4†r4hŒXaddr4†r 4j©jK†r!4jÁX"a"r"4†r#4j©jV†r$4j©jt†r%4hŒXattrr&4†r'4j©jK†r(4jÁX"href"r)4†r*4j©j;†r+4jsjç†r,4jÁX"./everything_is_an_object/"r-4†r.4j©jV†r/4j©jt†r04hŒXtextr14†r24j©jK†r34jÁX"Everything is an object"r44†r54j©jV†r64jsX
						r74†r84hŒXcloser94†r:4j©jK†r;4jÁX"li"r<4†r=4j©jV†r>4jsX
						r?4†r@4hŒXopenrA4†rB4j©jK†rC4jÁX"li"rD4†rE4j©jV†rF4jsX
						rG4†rH4hŒXaddrI4†rJ4j©jK†rK4jÁX"a"rL4†rM4j©jV†rN4j©jt†rO4hŒXattrrP4†rQ4j©jK†rR4jÁX"href"rS4†rT4j©j;†rU4jsjç†rV4jÁX"./multiple_inheritance/"rW4†rX4j©jV†rY4j©jt†rZ4hŒXtextr[4†r\4j©jK†r]4jÁX"Multiple inheritance"r^4†r_4j©jV†r`4jsX
						ra4†rb4hŒXcloserc4†rd4j©jK†re4jÁX"li"rf4†rg4j©jV†rh4jsX
						ri4†rj4hŒXopenrk4†rl4j©jK†rm4jÁX"li"rn4†ro4j©jV†rp4jsX
						rq4†rr4hŒXaddrs4†rt4j©jK†ru4jÁX"a"rv4†rw4j©jV†rx4j©jt†ry4hŒXattrrz4†r{4j©jK†r|4jÁX"href"r}4†r~4j©j;†r4jsjç†r€4jÁX"./refinement/"r4†r‚4j©jV†rƒ4j©jt†r„4hŒXtextr…4†r†4j©jK†r‡4jÁX"Open classes"rˆ4†r‰4j©jV†rŠ4jsX
						r‹4†rŒ4hŒXcloser4†rŽ4j©jK†r4jÁX"li"r4†r‘4j©jV†r’4jsX
						r“4†r”4hŒXopenr•4†r–4j©jK†r—4jÁX"li"r˜4†r™4j©jV†rš4jsX
						r›4†rœ4hŒXaddr4†rž4j©jK†rŸ4jÁX"a"r 4†r¡4j©jV†r¢4j©jt†r£4hŒXattrr¤4†r¥4j©jK†r¦4jÁX"href"r§4†r¨4j©j;†r©4jsjç†rª4jÁX"./virtual_types/"r«4†r¬4j©jV†r­4j©jt†r®4hŒXtextr¯4†r°4j©jK†r±4jÁX"Virtual types"r²4†r³4j©jV†r´4jsX
						rµ4†r¶4hŒXcloser·4†r¸4j©jK†r¹4jÁX"li"rº4†r»4j©jV†r¼4jsX
					r½4†r¾4hŒXcloser¿4†rÀ4j©jK†rÁ4jÁX"ul"rÂ4†rÃ4j©jV†rÄ4jsX


					rÅ4†rÆ4hŒXaddrÇ4†rÈ4j©jK†rÉ4jÁX"h1"rÊ4†rË4j©jV†rÌ4j©jt†rÍ4hŒXtextrÎ4†rÏ4j©jK†rÐ4jÁX"# Getting Started"rÑ4†rÒ4j©jV†rÓ4jsX
					rÔ4†rÕ4hŒXaddrÖ4†r×4j©jK†rØ4jÁX"p"rÙ4†rÚ4j©jV†rÛ4j©jt†rÜ4hŒXtextrÝ4†rÞ4j©jK†rß4jÁX""Get Nit from its Git repository:"rà4†rá4j©jV†râ4jsX

					rã4†rä4hŒXadd_htmlrå4†ræ4j©jK†rç4jÁXD"<pre><code>$ git clone http://nitlanguage.org/nit.git</code></pre>"rè4†ré4j©jV†rê4jsX
					rë4†rì4hŒXaddrí4†rî4j©jK†rï4jÁX"p"rð4†rñ4j©jV†rò4j©jt†ró4hŒXtextrô4†rõ4j©jK†rö4jÁX#"Build the compiler (may be long):"r÷4†rø4j©jV†rù4jsX
					rú4†rû4hŒXadd_htmlrü4†rý4j©jK†rþ4jÁX"<pre><code>$ cd nit\n"rÿ4†r5j©jV†r5jsX
					r5†r5hŒXadd_htmlr5†r5j©jK†r5jÁX"$ make</code></pre>"r5†r5j©jV†r	5jsX
					r
5†r5hŒXaddr5†r
5j©jK†r5jÁX"p"r5†r5j©jV†r5j©jt†r5hŒXtextr5†r5j©jK†r5jÁX"Compile a program:"r5†r5j©jV†r5jsX
					r5†r5hŒXadd_htmlr5†r5j©jK†r5jÁX="<pre><code>$ bin/nitc examples/hello_world.nit</code></pre>"r5†r5j©jV†r 5jsX
					r!5†r"5hŒXaddr#5†r$5j©jK†r%5jÁX"p"r&5†r'5j©jV†r(5j©jt†r)5hŒXtextr*5†r+5j©jK†r,5jÁX"Execute the program:"r-5†r.5j©jV†r/5jsX
					r05†r15hŒXadd_htmlr25†r35j©jK†r45jÁX)"<pre><code>$ ./hello_world</code></pre>"r55†r65j©jV†r75jsX
				r85†r95hŒXcloser:5†r;5j©jK†r<5jÁX	"section"r=5†r>5j©jV†r?5jsX
			r@5†rA5hŒXcloserB5†rC5j©jK†rD5jÁX"div"rE5†rF5j©jV†rG5jsX
		rH5†rI5hŒXcloserJ5†rK5j©jK†rL5jÁX	"article"rM5†rN5j©jV†rO5jsX
	rP5†rQ5jXendrR5†rS5jsj»†rT5jXendrU5†rV5jsX

rW5†rX5jXvarrY5†rZ5jsjç†r[5hŒXpager\5†r]5jsjç†r^5htj†r_5jsjç†r`5jXnewra5†rb5jsjç†rc5h¹XNitHomepagerd5†re5jsj»†rf5hŒXpagerg5†rh5j©jt†ri5hŒXwrite_torj5†rk5jsjç†rl5hŒXstdoutrm5†rn5jsj»†ro5hŒXpagerp5†rq5j©jt†rr5hŒX
write_to_filers5†rt5j©jK†ru5jÁX
"nit.html"rv5†rw5j©jV†rx5jsj»†ry5hX:# This file is part of NIT ( http://www.nitlanguage.org ).rz5†r{5jsj»†r|5hj½†r}5jsj»†r~5hXA# Licensed under the Apache License, Version 2.0 (the "License");r5†r€5jsj»†r5hXB# you may not use this file except in compliance with the License.r‚5†rƒ5jsj»†r„5hX)# You may obtain a copy of the License atr…5†r†5jsj»†r‡5hj½†rˆ5jsj»†r‰5hX0#     http://www.apache.org/licenses/LICENSE-2.0rŠ5†r‹5jsj»†rŒ5hj½†r5jsj»†rŽ5hXE# Unless required by applicable law or agreed to in writing, softwarer5†r5jsj»†r‘5hXC# distributed under the License is distributed on an "AS IS" BASIS,r’5†r“5jsj»†r”5hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.r•5†r–5jsj»†r—5hXE# See the License for the specific language governing permissions andr˜5†r™5jsj»†rš5hX # limitations under the License.r›5†rœ5jsX

r5†rž5hX6# An example that defines and uses stacks of integers.rŸ5†r 5jsj»†r¡5hX7# The implementation is done with a simple linked list.r¢5†r£5jsj»†r¤5hXJ# It features: free constructors, nullable types and some adaptive typing.r¥5†r¦5jsj»†r§5jXmoduler¨5†r©5jsjç†rª5hŒX	int_stackr«5†r¬5jsX

r­5†r®5hX9# A stack of integer implemented by a simple linked list.r¯5†r°5jsj»†r±5hXN# Note that this is only a toy class since a real linked list will gain to user²5†r³5jsj»†r´5hXN# generics and extends interfaces, like Collection, from the standard library.rµ5†r¶5jsj»†r·5jXclassr¸5†r¹5jsjç†rº5h¹XIntStackr»5†r¼5jsX
	r½5†r¾5hX# The head node of the list.r¿5†rÀ5jsX
	rÁ5†rÂ5hX%# Null means that the stack is empty.rÃ5†rÄ5jsX
	rÅ5†rÆ5jXprivaterÇ5†rÈ5jsjç†rÉ5jXvarrÊ5†rË5jsjç†rÌ5hŒXheadrÍ5†rÎ5j©jú†rÏ5jsjç†rÐ5jXnullablerÑ5†rÒ5jsjç†rÓ5h¹XISNoderÔ5†rÕ5jsjç†rÖ5htj†r×5jsjç†rØ5jXnullrÙ5†rÚ5jsX

	rÛ5†rÜ5hX!# Add a new integer in the stack.rÝ5†rÞ5jsX
	rß5†rà5jXfunrá5†râ5jsjç†rã5hŒXpushrä5†rå5j©jK†ræ5hŒXvalrç5†rè5j©jú†ré5jsjç†rê5h¹XIntrë5†rì5j©jV†rí5jsX
	rî5†rï5jXdorð5†rñ5jsX
		rò5†ró5hŒXselfrô5†rõ5j©jt†rö5hŒXheadr÷5†rø5jsjç†rù5htj†rú5jsjç†rû5jXnewrü5†rý5jsjç†rþ5h¹XISNoderÿ5†r6j©jK†r6hŒXvalr6†r6j©j;†r6jsjç†r6hŒXselfr6†r6j©jt†r6hŒXheadr	6†r
6j©jV†r6jsX
	r6†r
6jXendr6†r6jsX

	r6†r6hX,# Remove and return the last pushed integer.r6†r6jsX
	r6†r6hX$# Return null if the stack is empty.r6†r6jsX
	r6†r6jXfunr6†r6jsjç†r6hŒXpopr6†r6j©jú†r6jsjç†r 6jXnullabler!6†r"6jsjç†r#6h¹XIntr$6†r%6jsX
	r&6†r'6jXdor(6†r)6jsX
		r*6†r+6jXvarr,6†r-6jsjç†r.6hŒXheadr/6†r06jsjç†r16htj†r26jsjç†r36hŒXselfr46†r56j©jt†r66hŒXheadr76†r86jsX
		r96†r:6jXifr;6†r<6jsjç†r=6hŒXheadr>6†r?6jsjç†r@6htX==rA6†rB6jsjç†rC6jXnullrD6†rE6jsjç†rF6jXthenrG6†rH6jsjç†rI6jXreturnrJ6†rK6jsjç†rL6jXnullrM6†rN6jsX
		rO6†rP6hX9# Note: the followings are statically safe because of therQ6†rR6jsX
		rS6†rT6hX# previous 'if'.rU6†rV6jsX
		rW6†rX6jXvarrY6†rZ6jsjç†r[6hŒXvalr\6†r]6jsjç†r^6htj†r_6jsjç†r`6hŒXheadra6†rb6j©jt†rc6hŒXvalrd6†re6jsX
		rf6†rg6hŒXselfrh6†ri6j©jt†rj6hŒXheadrk6†rl6jsjç†rm6htj†rn6jsjç†ro6hŒXheadrp6†rq6j©jt†rr6hŒXnextrs6†rt6jsX
		ru6†rv6jXreturnrw6†rx6jsjç†ry6hŒXvalrz6†r{6jsX
	r|6†r}6jXendr~6†r6jsX

	r€6†r6hX.# Return the sum of all integers of the stack.r‚6†rƒ6jsX
	r„6†r…6hX!# Return 0 if the stack is empty.r†6†r‡6jsX
	rˆ6†r‰6jXfunrŠ6†r‹6jsjç†rŒ6hŒXsumallr6†rŽ6j©jú†r6jsjç†r6h¹XIntr‘6†r’6jsX
	r“6†r”6jXdor•6†r–6jsX
		r—6†r˜6jXvarr™6†rš6jsjç†r›6hŒXsumrœ6†r6jsjç†rž6htj†rŸ6jhX 0r 6†r¡6jsX
		r¢6†r£6jXvarr¤6†r¥6jsjç†r¦6hŒXcurr§6†r¨6jsjç†r©6htj†rª6jsjç†r«6hŒXselfr¬6†r­6j©jt†r®6hŒXheadr¯6†r°6jsX
		r±6†r²6jXwhiler³6†r´6jsjç†rµ6hŒXcurr¶6†r·6jsjç†r¸6htX!=r¹6†rº6jsjç†r»6jXnullr¼6†r½6jsjç†r¾6jXdor¿6†rÀ6jsX
			rÁ6†rÂ6hX5# Note: the followings are statically safe because ofrÃ6†rÄ6jsX
			rÅ6†rÆ6hX# the condition of the 'while'.rÇ6†rÈ6jsX
			rÉ6†rÊ6hŒXsumrË6†rÌ6jsjç†rÍ6htj†rÎ6htj†rÏ6jsjç†rÐ6hŒXcurrÑ6†rÒ6j©jt†rÓ6hŒXvalrÔ6†rÕ6jsX
			rÖ6†r×6hŒXcurrØ6†rÙ6jsjç†rÚ6htj†rÛ6jsjç†rÜ6hŒXcurrÝ6†rÞ6j©jt†rß6hŒXnextrà6†rá6jsX
		râ6†rã6jXendrä6†rå6jsX
		ræ6†rç6jXreturnrè6†ré6jsjç†rê6hŒXsumrë6†rì6jsX
	rí6†rî6jXendrï6†rð6jsX

	rñ6†rò6hXG# Note: Because all attributes have a default value, a free constructorró6†rô6jsX
	rõ6†rö6hX!# "init()" is implicitly defined.r÷6†rø6jsj»†rù6jXendrú6†rû6jsX

rü6†rý6hX# A node of a IntStackrþ6†rÿ6jsj»†r7jXprivater7†r7jsjç†r7jXclassr7†r7jsjç†r7h¹XISNoder7†r7jsX
	r	7†r
7hX'# The integer value stored in the node.r7†r7jsX
	r
7†r7jXvarr7†r7jsjç†r7hŒXvalr7†r7j©jú†r7jsjç†r7h¹XIntr7†r7jsX

	r7†r7hX# The next node, if any.r7†r7jsX
	r7†r7jXvarr7†r7jsjç†r 7hŒXnextr!7†r"7j©jú†r#7jsjç†r$7jXnullabler%7†r&7jsjç†r'7h¹XISNoder(7†r)7jsX

	r*7†r+7hXE# Note: A free constructor "init(val: Int, next: nullable ISNode)" isr,7†r-7jsX
	r.7†r/7hX# implicitly defined.r07†r17jsj»†r27jXendr37†r47jsX

r57†r67jXvarr77†r87jsjç†r97hŒj"#†r:7jsjç†r;7htj†r<7jsjç†r=7jXnewr>7†r?7jsjç†r@7h¹XIntStackrA7†rB7jsj»†rC7hŒj"#†rD7j©jt†rE7hŒXpushrF7†rG7jhX(1rH7†rI7j©jV†rJ7jsj»†rK7hŒj"#†rL7j©jt†rM7hŒXpushrN7†rO7jhX(2rP7†rQ7j©jV†rR7jsj»†rS7hŒj"#†rT7j©jt†rU7hŒXpushrV7†rW7jhX(3rX7†rY7j©jV†rZ7jsX

r[7†r\7hŒXprintr]7†r^7jsjç†r_7hŒj"#†r`7j©jt†ra7hŒXsumallrb7†rc7jsX

rd7†re7hXT# Note: the 'for' control structure cannot be used on IntStack in its current state.rf7†rg7jsj»†rh7hX$# It requires a more advanced topic.ri7†rj7jsj»†rk7hX6# However, why not using the 'loop' control structure?rl7†rm7jsj»†rn7jXloopro7†rp7jsX
	rq7†rr7jXvarrs7†rt7jsjç†ru7hŒj"†rv7jsjç†rw7htj†rx7jsjç†ry7hŒj"#†rz7j©jt†r{7hŒXpopr|7†r}7jsX
	r~7†r7jXifr€7†r7jsjç†r‚7hŒj"†rƒ7jsjç†r„7htX==r…7†r†7jsjç†r‡7jXnullrˆ7†r‰7jsjç†rŠ7jXthenr‹7†rŒ7jsjç†r7jXbreakrŽ7†r7jsX
	r7†r‘7hX@# The following is statically safe because of the previous 'if'.r’7†r“7jsX
	r”7†r•7hŒXprintr–7†r—7jsjç†r˜7hŒj"†r™7jsjç†rš7htj†r›7jhX 10rœ7†r7jsj»†rž7jXendrŸ7†r 7jsX

r¡7†r¢7hXF# Note: 'or else' is used to give an alternative of a null expression.r£7†r¤7jsj»†r¥7hŒj"#†r¦7j©jt†r§7hŒXpushr¨7†r©7jhX(5rª7†r«7j©jV†r¬7jsj»†r­7hŒXprintr®7†r¯7jsjç†r°7hŒj"#†r±7j©jt†r²7hŒXpopr³7†r´7jsjç†rµ7jXorr¶7†r·7jsjç†r¸7jXelser¹7†rº7jhX 0r»7†r¼7jsjç†r½7hX# l.pop gives 5, so print 5r¾7†r¿7jsj»†rÀ7hŒXprintrÁ7†rÂ7jsjç†rÃ7hŒj"#†rÄ7j©jt†rÅ7hŒXpoprÆ7†rÇ7jsjç†rÈ7jXorrÉ7†rÊ7jsjç†rË7jXelserÌ7†rÍ7jhX 0rÎ7†rÏ7jsjç†rÐ7hX/# l.pop gives null, so print the alternative: 0rÑ7†rÒ7jsX


rÓ7†rÔ7hX:# This file is part of NIT ( http://www.nitlanguage.org ).rÕ7†rÖ7jsj»†r×7hj½†rØ7jsj»†rÙ7hX:# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>rÚ7†rÛ7jsj»†rÜ7hj½†rÝ7jsj»†rÞ7hXA# Licensed under the Apache License, Version 2.0 (the "License");rß7†rà7jsj»†rá7hXB# you may not use this file except in compliance with the License.râ7†rã7jsj»†rä7hX)# You may obtain a copy of the License atrå7†ræ7jsj»†rç7hj½†rè7jsj»†ré7hX0#     http://www.apache.org/licenses/LICENSE-2.0rê7†rë7jsj»†rì7hj½†rí7jsj»†rî7hXE# Unless required by applicable law or agreed to in writing, softwarerï7†rð7jsj»†rñ7hXC# distributed under the License is distributed on an "AS IS" BASIS,rò7†ró7jsj»†rô7hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rõ7†rö7jsj»†r÷7hXE# See the License for the specific language governing permissions andrø7†rù7jsj»†rú7hX # limitations under the License.rû7†rü7jsX

rý7†rþ7hXU# Basic example of OpenGL ES 2.0 usage from the book OpenGL ES 2.0 Programming Guide.rÿ7†r8jsj»†r8hj½†r8jsj»†r8hX# Code reference:r8†r8jsj»†r8hXy# https://code.google.com/p/opengles-book-samples/source/browse/trunk/LinuxX11/Chapter_2/Hello_Triangle/Hello_Triangle.c r8†r8jsj»†r	8jXmoduler
8†r8jsjç†r8hŒXopengles2_hello_triangler
8†r8jsX

r8†r8jXimportr8†r8jsjç†r8hŒXglesv2r8†r8jsj»†r8jXimportr8†r8jsjç†r8hŒXeglr8†r8jsj»†r8jXimportr8†r8jsjç†r8hŒX
mnit_linuxr 8†r!8jsjç†r"8hX	# for sdlr#8†r$8jsj»†r%8jXimportr&8†r'8jsjç†r(8jhXx11r)8†r*8jsX

r+8†r,8jXifr-8†r.8jsjç†r/8jÁX
"NIT_TESTING"r08†r18j©jt†r28hŒXenvironr38†r48jsjç†r58htX==r68†r78jsjç†r88jÁX"true"r98†r:8jsjç†r;8jXthenr<8†r=8jsjç†r>8hŒXexitr?8†r@8jhX(0rA8†rB8j©jV†rC8jsX

rD8†rE8jXvarrF8†rG8jsjç†rH8hŒXwindow_widthrI8†rJ8jsjç†rK8htj†rL8jhX 800rM8†rN8jsj»†rO8jXvarrP8†rQ8jsjç†rR8hŒX
window_heightrS8†rT8jsjç†rU8htj†rV8jhX 600rW8†rX8jsX

rY8†rZ8hj½†r[8jsj»†r\8hX## SDLr]8†r^8jsj»†r_8hj½†r`8jsj»†ra8jXvarrb8†rc8jsjç†rd8hŒXsdl_displayre8†rf8jsjç†rg8e(htj†rh8jsjç†ri8jXnewrj8†rk8jsjç†rl8h¹X
SDLDisplayrm8†rn8j©jK†ro8hŒXwindow_widthrp8†rq8j©j;†rr8jsjç†rs8hŒX
window_heightrt8†ru8j©jV†rv8jsj»†rw8jXvarrx8†ry8jsjç†rz8hŒXsdl_wm_infor{8†r|8jsjç†r}8htj†r~8jsjç†r8jXnewr€8†r8jsjç†r‚8h¹XSDLSystemWindowManagerInforƒ8†r„8jsj»†r…8jXvarr†8†r‡8jsjç†rˆ8jhXx11r‰8†rŠ8hõX_window_handler‹8†rŒ8jsjç†r8htj†rŽ8jsjç†r8hŒXsdl_wm_infor8†r‘8j©jt†r’8jhXx11r“8†r”8hõX_window_handler•8†r–8jsX

r—8†r˜8hj½†r™8jsj»†rš8hX## X11r›8†rœ8jsj»†r8hj½†rž8jsj»†rŸ8jXvarr 8†r¡8jsjç†r¢8hŒX	x_displayr£8†r¤8jsjç†r¥8htj†r¦8jsjç†r§8hŒXx_open_default_displayr¨8†r©8jsj»†rª8jXassertr«8†r¬8jsjç†r­8hŒX	x_displayr®8†r¯8jsjç†r°8htX!=r±8†r²8jhX 0r³8†r´8jsjç†rµ8jXelser¶8†r·8jsjç†r¸8hŒXprintr¹8†rº8jsjç†r»8jÁX
"x11 fail"r¼8†r½8jsX

r¾8†r¿8hj½†rÀ8jsj»†rÁ8hX## EGLrÂ8†rÃ8jsj»†rÄ8hj½†rÅ8jsj»†rÆ8jXvarrÇ8†rÈ8jsjç†rÉ8hŒXegl_displayrÊ8†rË8jsjç†rÌ8htj†rÍ8jsjç†rÎ8jXnewrÏ8†rÐ8jsjç†rÑ8h¹X
EGLDisplayrÒ8†rÓ8j©jK†rÔ8hŒX	x_displayrÕ8†rÖ8j©jV†r×8jsj»†rØ8jXassertrÙ8†rÚ8jsjç†rÛ8hŒXegl_displayrÜ8†rÝ8j©jt†rÞ8hŒXis_validrß8†rà8jsjç†rá8jXelserâ8†rã8jsjç†rä8hŒXprintrå8†ræ8jsjç†rç8jÁX"EGL display is not valid"rè8†ré8jsj»†rê8hŒXegl_displayrë8†rì8j©jt†rí8hŒX
initializerî8†rï8jsX

rð8†rñ8hŒXprintrò8†ró8jsjç†rô8jÁX"EGL version: {rõ8†rö8hŒXegl_displayr÷8†rø8j©jt†rù8hŒXversionrú8†rû8jÁX}"rü8†rý8jsj»†rþ8hŒXprintrÿ8†r9jsjç†r9jÁX"EGL vendor: {r9†r9hŒXegl_displayr9†r9j©jt†r9hŒXvendorr9†r9jÁX}"r	9†r
9jsj»†r9hŒXprintr9†r
9jsjç†r9jÁX"EGL extensions: {r9†r9hŒXegl_displayr9†r9j©jt†r9hŒX
extensionsr9†r9j©jt†r9hŒXjoinr9†r9j©jK†r9jÁX", "r9†r9j©jV†r9jÁX}"r9†r9jsj»†r9hŒXprintr 9†r!9jsjç†r"9jÁX"EGL client APIs: {r#9†r$9hŒXegl_displayr%9†r&9j©jt†r'9hŒXclient_apisr(9†r)9j©jt†r*9hŒXjoinr+9†r,9j©jK†r-9jÁX", "r.9†r/9j©jV†r09jÁX}"r19†r29jsX

r39†r49jXassertr59†r69jsjç†r79hŒXegl_displayr89†r99j©jt†r:9hŒXis_validr;9†r<9jsjç†r=9jXelser>9†r?9jsjç†r@9hŒXprintrA9†rB9jsjç†rC9hŒXegl_displayrD9†rE9j©jt†rF9hŒXerrorrG9†rH9jsX

rI9†rJ9jXvarrK9†rL9jsjç†rM9hŒXconfig_chooserrN9†rO9jsjç†rP9htj†rQ9jsjç†rR9jXnewrS9†rT9jsjç†rU9h¹XEGLConfigChooserrV9†rW9jsj»†rX9hX #config_chooser.surface_type_eglrY9†rZ9jsj»†r[9hŒXconfig_chooserr\9†r]9j©jt†r^9hŒX	blue_sizer_9†r`9jsjç†ra9htj†rb9jhX 8rc9†rd9jsj»†re9hŒXconfig_chooserrf9†rg9j©jt†rh9hŒX
green_sizeri9†rj9jsjç†rk9htj†rl9jhX 8rm9†rn9jsj»†ro9hŒXconfig_chooserrp9†rq9j©jt†rr9hŒXred_sizers9†rt9jsjç†ru9htj†rv9jhX 8rw9†rx9jsj»†ry9hX#config_chooser.alpha_size = 8rz9†r{9jsj»†r|9hX#config_chooser.depth_size = 8r}9†r~9jsj»†r9hX #config_chooser.stencil_size = 8r€9†r9jsj»†r‚9hX"#config_chooser.sample_buffers = 1rƒ9†r„9jsj»†r…9hŒXconfig_chooserr†9†r‡9j©jt†rˆ9hŒXcloser‰9†rŠ9jsX

r‹9†rŒ9jXvarr9†rŽ9jsjç†r9hŒXconfigsr9†r‘9jsjç†r’9htj†r“9jsjç†r”9hŒXconfig_chooserr•9†r–9j©jt†r—9hŒXchooser˜9†r™9j©jK†rš9hŒXegl_displayr›9†rœ9j©jV†r9jsj»†rž9jXassertrŸ9†r 9jsjç†r¡9hŒXconfigsr¢9†r£9jsjç†r¤9htX!=r¥9†r¦9jsjç†r§9jXnullr¨9†r©9jsjç†rª9jXelser«9†r¬9jsjç†r­9hŒXprintr®9†r¯9jsjç†r°9jÁX"choosing config failed: {r±9†r²9hŒXegl_displayr³9†r´9j©jt†rµ9hŒXerrorr¶9†r·9jÁX}"r¸9†r¹9jsj»†rº9jXassertr»9†r¼9jsjç†r½9jXnotr¾9†r¿9jsjç†rÀ9hŒXconfigsrÁ9†rÂ9j©jt†rÃ9hŒXis_emptyrÄ9†rÅ9jsjç†rÆ9jXelserÇ9†rÈ9jsjç†rÉ9hŒXprintrÊ9†rË9jsjç†rÌ9jÁX"no EGL config"rÍ9†rÎ9jsX

rÏ9†rÐ9hŒXprintrÑ9†rÒ9jsjç†rÓ9jÁX"{rÔ9†rÕ9hŒXconfigsrÖ9†r×9j©jt†rØ9hŒXlengthrÙ9†rÚ9jÁX} EGL configs available"rÛ9†rÜ9jsj»†rÝ9jXforrÞ9†rß9jsjç†rà9hŒXconfigrá9†râ9jsjç†rã9jXinrä9†rå9jsjç†ræ9hŒXconfigsrç9†rè9jsjç†ré9jXdorê9†rë9jsX
	rì9†rí9jXvarrî9†rï9jsjç†rð9hŒXattribsrñ9†rò9jsjç†ró9htj†rô9jsjç†rõ9hŒXconfigrö9†r÷9j©jt†rø9hŒXattribsrù9†rú9j©jK†rû9hŒXegl_displayrü9†rý9j©jV†rþ9jsX
	rÿ9†r:hŒXprintr:†r:jsjç†r:jÁX
"* caveats: {r:†r:hŒXattribsr:†r:j©jt†r:hŒXcaveatr	:†r
:jÁX}"r:†r:jsX
	r
:†r:hŒXprintr:†r:jsjç†r:jÁX"  conformant to: {r:†r:hŒXattribsr:†r:j©jt†r:hŒX
conformantr:†r:jÁX}"r:†r:jsX
	r:†r:hŒXprintr:†r:jsjç†r:jÁX"  size of RGBA: {r :†r!:hŒXattribsr":†r#:j©jt†r$:hŒXred_sizer%:†r&:jÁX} {r':†r(:hŒXattribsr):†r*:j©jt†r+:hŒX
green_sizer,:†r-:jÁX} {r.:†r/:hŒXattribsr0:†r1:j©jt†r2:hŒX	blue_sizer3:†r4:jÁX} {r5:†r6:hŒXattribsr7:†r8:j©jt†r9:hŒX
alpha_sizer::†r;:jÁX}"r<:†r=:jsX
	r>:†r?:hŒXprintr@:†rA:jsjç†rB:jÁX"  buffer, depth, stencil: {rC:†rD:hŒXattribsrE:†rF:j©jt†rG:hŒXbuffer_sizerH:†rI:jÁX} {rJ:†rK:hŒXattribsrL:†rM:j©jt†rN:hŒX
depth_sizerO:†rP:jÁX} {rQ:†rR:hŒXattribsrS:†rT:j©jt†rU:hŒXstencil_sizerV:†rW:jÁX}"rX:†rY:jsj»†rZ:jXendr[:†r\:jsX

r]:†r^:jXvarr_:†r`:jsjç†ra:hŒXconfigrb:†rc:jsjç†rd:htj†re:jsjç†rf:hŒXconfigsrg:†rh:j©jt†ri:hŒXfirstrj:†rk:jsX

rl:†rm:jXvarrn:†ro:jsjç†rp:hŒXformatrq:†rr:jsjç†rs:htj†rt:jsjç†ru:hŒXconfigrv:†rw:j©jt†rx:hŒXattribsry:†rz:j©jK†r{:hŒXegl_displayr|:†r}:j©jV†r~:j©jt†r:hŒXnative_visual_idr€:†r:jsX

r‚:†rƒ:hX# TODO android partr„:†r…:jsj»†r†:hX-# Opengles1Display_midway_init(recv, format);r‡:†rˆ:jsX

r‰:†rŠ:jXvarr‹:†rŒ:jsjç†r:hŒXsurfacerŽ:†r:jsjç†r:htj†r‘:jsjç†r’:hŒXegl_displayr“:†r”:j©jt†r•:hŒXcreate_window_surfacer–:†r—:j©jK†r˜:hŒXconfigr™:†rš:j©j;†r›:jsjç†rœ:jhXx11r:†rž:hõX_window_handlerŸ:†r :j©j;†r¡:jsjç†r¢:jhX[0r£:†r¤:j©jC†r¥:j©jV†r¦:jsj»†r§:jXassertr¨:†r©:jsjç†rª:hŒXsurfacer«:†r¬:j©jt†r­:hŒXis_okr®:†r¯:jsjç†r°:jXelser±:†r²:jsjç†r³:hŒXprintr´:†rµ:jsjç†r¶:hŒXegl_displayr·:†r¸:j©jt†r¹:hŒXerrorrº:†r»:jsX

r¼:†r½:jXvarr¾:†r¿:jsjç†rÀ:hŒXcontextrÁ:†rÂ:jsjç†rÃ:htj†rÄ:jsjç†rÅ:hŒXegl_displayrÆ:†rÇ:j©jt†rÈ:hŒXcreate_contextrÉ:†rÊ:j©jK†rË:hŒXconfigrÌ:†rÍ:j©jV†rÎ:jsj»†rÏ:jXassertrÐ:†rÑ:jsjç†rÒ:hŒXcontextrÓ:†rÔ:j©jt†rÕ:hŒXis_okrÖ:†r×:jsjç†rØ:jXelserÙ:†rÚ:jsjç†rÛ:hŒXprintrÜ:†rÝ:jsjç†rÞ:hŒXegl_displayrß:†rà:j©jt†rá:hŒXerrorrâ:†rã:jsX

rä:†rå:jXvarræ:†rç:jsjç†rè:hŒXmake_current_resré:†rê:jsjç†rë:htj†rì:jsjç†rí:hŒXegl_displayrî:†rï:j©jt†rð:hŒXmake_currentrñ:†rò:j©jK†ró:hŒXsurfacerô:†rõ:j©j;†rö:jsjç†r÷:hŒXsurfacerø:†rù:j©j;†rú:jsjç†rû:hŒXcontextrü:†rý:j©jV†rþ:jsj»†rÿ:jXassertr;†r;jsjç†r;hŒXmake_current_resr;†r;jsX

r;†r;jXvarr;†r;jsjç†r	;hŒXwidthr
;†r;jsjç†r;htj†r
;jsjç†r;hŒXsurfacer;†r;j©jt†r;hŒXattribsr;†r;j©jK†r;hŒXegl_displayr;†r;j©jV†r;j©jt†r;hŒXwidthr;†r;jsj»†r;jXvarr;†r;jsjç†r;hŒXheightr;†r ;jsjç†r!;htj†r";jsjç†r#;hŒXsurfacer$;†r%;j©jt†r&;hŒXattribsr';†r(;j©jK†r);hŒXegl_displayr*;†r+;j©jV†r,;j©jt†r-;hŒXheightr.;†r/;jsj»†r0;hŒXprintr1;†r2;jsjç†r3;jÁX	"Width: {r4;†r5;hŒXwidthr6;†r7;jÁX}"r8;†r9;jsj»†r:;hŒXprintr;;†r<;jsjç†r=;jÁX
"Height: {r>;†r?;hŒXheightr@;†rA;jÁX}"rB;†rC;jsX

rD;†rE;jXassertrF;†rG;jsjç†rH;hŒXegl_bind_opengl_es_apirI;†rJ;jsjç†rK;jXelserL;†rM;jsjç†rN;hŒXprintrO;†rP;jsjç†rQ;jÁX"eglBingAPI failed: {rR;†rS;hŒXegl_displayrT;†rU;j©jt†rV;hŒXerrorrW;†rX;jÁX}"rY;†rZ;jsX

r[;†r\;hj½†r];jsj»†r^;hX	## GLESv2r_;†r`;jsj»†ra;hj½†rb;jsX

rc;†rd;hŒXprintre;†rf;jsjç†rg;jÁX"Can compile shaders? {rh;†ri;hŒXgl_shader_compilerrj;†rk;jÁX}"rl;†rm;jsj»†rn;hŒXassert_no_gl_errorro;†rp;jsX

rq;†rr;jXassertrs;†rt;jsjç†ru;hŒXgl_shader_compilerrv;†rw;jsjç†rx;jXelsery;†rz;jsjç†r{;hŒXprintr|;†r};jsjç†r~;jÁX"Cannot compile shaders"r;†r€;jsX

r;†r‚;hX# gl programrƒ;†r„;jsj»†r…;hŒXprintr†;†r‡;jsjç†rˆ;hŒXgl_errorr‰;†rŠ;j©jt†r‹;hŒXto_srŒ;†r;jsj»†rŽ;jXvarr;†r;jsjç†r‘;hŒXprogramr’;†r“;jsjç†r”;htj†r•;jsjç†r–;jXnewr—;†r˜;jsjç†r™;h¹X	GLProgramrš;†r›;jsj»†rœ;jXifr;†rž;jsjç†rŸ;jXnotr ;†r¡;jsjç†r¢;hŒXprogramr£;†r¤;j©jt†r¥;hŒXis_okr¦;†r§;jsjç†r¨;jXthenr©;†rª;jsX
	r«;†r¬;hŒXprintr­;†r®;jsjç†r¯;jÁX"Program is not ok: {r°;†r±;hŒXgl_errorr²;†r³;j©jt†r´;hŒXto_srµ;†r¶;jÁX}\nLog:"r·;†r¸;jsX
	r¹;†rº;hŒXprintr»;†r¼;jsjç†r½;hŒXprogramr¾;†r¿;j©jt†rÀ;hŒXinfo_logrÁ;†rÂ;jsX
	rÃ;†rÄ;jXabortrÅ;†rÆ;jsj»†rÇ;jXendrÈ;†rÉ;jsj»†rÊ;hŒXassert_no_gl_errorrË;†rÌ;jsX

rÍ;†rÎ;hX# vertex shaderrÏ;†rÐ;jsj»†rÑ;jXvarrÒ;†rÓ;jsjç†rÔ;hŒX
vertex_shaderrÕ;†rÖ;jsjç†r×;htj†rØ;jsjç†rÙ;jXnewrÚ;†rÛ;jsjç†rÜ;h¹XGLVertexShaderrÝ;†rÞ;jsj»†rß;jXassertrà;†rá;jsjç†râ;hŒX
vertex_shaderrã;†rä;j©jt†rå;hŒXis_okræ;†rç;jsjç†rè;jXelseré;†rê;jsjç†rë;hŒXprintrì;†rí;jsjç†rî;jÁX"Vertex shader is not ok: {rï;†rð;hŒXgl_errorrñ;†rò;jÁX}"ró;†rô;jsj»†rõ;hŒX
vertex_shaderrö;†r÷;j©jt†rø;hŒXsourcerù;†rú;jsjç†rû;htj†rü;jsjç†rý;jÁXC"""
attribute vec4 vPosition;   
void main()                 
{                           
  gl_Position = vPosition;  
}                           """
vertex_shader.compile
assert vertex_shader.is_compiled else print "Vertex shader compilation failed with: {vertex_shader.info_log} {program.info_log}"
assert_no_gl_error

# fragment shader
var fragment_shader = new GLFragmentShader
assert fragment_shader.is_ok else print "Fragment shader is not ok: {gl_error}"
fragment_shader.source = """
precision mediump float;
void main()
{
	gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
"""rþ;†rÿ;jsj»†r<hŒXfragment_shaderr<†r<j©jt†r<hŒXcompiler<†r<jsj»†r<jXassertr<†r<jsjç†r	<hŒXfragment_shaderr
<†r<j©jt†r<hŒXis_compiledr
<†r<jsjç†r<jXelser<†r<jsjç†r<hŒXprintr<†r<jsjç†r<jÁX+"Fragment shader compilation failed with: {r<†r<hŒXfragment_shaderr<†r<j©jt†r<hŒXinfo_logr<†r<jÁX}"r<†r<jsj»†r<hŒXassert_no_gl_errorr <†r!<jsX

r"<†r#<hŒXprogramr$<†r%<j©jt†r&<hŒX
attach_shaderr'<†r(<jsjç†r)<hŒX
vertex_shaderr*<†r+<jsj»†r,<hŒXprogramr-<†r.<j©jt†r/<hŒX
attach_shaderr0<†r1<jsjç†r2<hŒXfragment_shaderr3<†r4<jsj»†r5<hŒXprogramr6<†r7<j©jt†r8<hŒXbind_attrib_locationr9<†r:<jhX(0r;<†r<<j©j;†r=<jsjç†r><jÁX"vPosition"r?<†r@<j©jV†rA<jsj»†rB<hŒXprogramrC<†rD<j©jt†rE<hŒXlinkrF<†rG<jsj»†rH<jXassertrI<†rJ<jsjç†rK<hŒXprogramrL<†rM<j©jt†rN<hŒX	is_linkedrO<†rP<jsjç†rQ<jXelserR<†rS<jsjç†rT<hŒXprintrU<†rV<jsjç†rW<jÁX"Linking failed: {rX<†rY<hŒXprogramrZ<†r[<j©jt†r\<hŒXinfo_logr]<†r^<jÁX}"r_<†r`<jsj»†ra<hŒXassert_no_gl_errorrb<†rc<jsX

rd<†re<hX# draw!rf<†rg<jsj»†rh<jXvarri<†rj<jsjç†rk<hŒXverticesrl<†rm<jsjç†rn<htj†ro<jsjç†rp<jhX[0rq<†rr<jhX.0rs<†rt<j©j;†ru<jhX 0rv<†rw<jhX.5rx<†ry<j©j;†rz<jhX 0r{<†r|<jhX.0r}<†r~<j©j;†r<jsjç†r€<jhX-0r<†r‚<jhX.5rƒ<†r„<j©j;†r…<jsjç†r†<jhX-0r‡<†rˆ<jhX.5r‰<†rŠ<j©j;†r‹<jhX 0rŒ<†r<jhX.0rŽ<†r<j©j;†r<jhX 0r‘<†r’<jhX.5r“<†r”<j©j;†r•<jsjç†r–<jhX-0r—<†r˜<jhX.5r™<†rš<j©j;†r›<jhX 0rœ<†r<jhX.0rž<†rŸ<j©jC†r <jsj»†r¡<jXvarr¢<†r£<jsjç†r¤<hŒXvertex_arrayr¥<†r¦<jsjç†r§<htj†r¨<jsjç†r©<jXnewrª<†r«<jsjç†r¬<h¹XVertexArrayr­<†r®<jhX(0r¯<†r°<j©j;†r±<jhX 3r²<†r³<j©j;†r´<jsjç†rµ<hŒXverticesr¶<†r·<j©jV†r¸<jsj»†r¹<hŒXvertex_arrayrº<†r»<j©jt†r¼<hŒXattrib_pointerr½<†r¾<jsj»†r¿<hŒXgl_clear_colorrÀ<†rÁ<jhX(0rÂ<†rÃ<jhX.5rÄ<†rÅ<j©j;†rÆ<jhX 0rÇ<†rÈ<jhX.0rÉ<†rÊ<j©j;†rË<jhX 0rÌ<†rÍ<jhX.5rÎ<†rÏ<j©j;†rÐ<jhX 1rÑ<†rÒ<jhX.0rÓ<†rÔ<j©jV†rÕ<jsj»†rÖ<jXforr×<†rØ<jsjç†rÙ<hŒj"†rÚ<jsjç†rÛ<jXinrÜ<†rÝ<jsjç†rÞ<jhX[0rß<†rà<j©X..rá<†râ<jŸX10000rã<†rä<j©j@†rå<jsjç†ræ<jXdorç<†rè<jsX
	ré<†rê<hŒXprintnrë<†rì<jsjç†rí<jÁX"."rî<†rï<jsX
	rð<†rñ<hŒXassert_no_gl_errorrò<†ró<jsX
	rô<†rõ<hŒXgl_viewportrö<†r÷<jhX(0rø<†rù<j©j;†rú<jhX 0rû<†rü<j©j;†rý<jsjç†rþ<hŒXwidthrÿ<†r=j©j;†r=jsjç†r=hŒXheightr=†r=j©jV†r=jsX
	r=†r=hŒXgl_clear_color_bufferr=†r	=jsX
	r
=†r=hŒXprogramr=†r
=j©jt†r=hŒXuser=†r=jsX
	r=†r=hŒXvertex_arrayr=†r=j©jt†r=hŒXenabler=†r=jsX
	r=†r=hŒXvertex_arrayr=†r=j©jt†r=hŒXdraw_arrays_trianglesr=†r=jsX
	r=†r =hŒXegl_displayr!=†r"=j©jt†r#=hŒXswap_buffersr$=†r%=j©jK†r&=hŒXsurfacer'=†r(=j©jV†r)=jsj»†r*=jXendr+=†r,=jsX

r-=†r.=hX# deleter/=†r0=jsj»†r1=hŒXprogramr2=†r3=j©jt†r4=hŒXdeleter5=†r6=jsj»†r7=hŒX
vertex_shaderr8=†r9=j©jt†r:=hŒXdeleter;=†r<=jsj»†r==hŒXfragment_shaderr>=†r?=j©jt†r@=hŒXdeleterA=†rB=jsX

rC=†rD=hj½†rE=jsj»†rF=hX## EGLrG=†rH=jsj»†rI=hj½†rJ=jsj»†rK=hX# closerL=†rM=jsj»†rN=hŒXegl_displayrO=†rP=j©jt†rQ=hŒXmake_currentrR=†rS=j©jK†rT=jXnewrU=†rV=jsjç†rW=h¹X
EGLSurfacerX=†rY=j©jt†rZ=hŒXnoner[=†r\=j©j;†r]=jsjç†r^=jXnewr_=†r`=jsjç†ra=h¹X
EGLSurfacerb=†rc=j©jt†rd=hŒXnonere=†rf=j©j;†rg=jsjç†rh=jXnewri=†rj=jsjç†rk=h¹X
EGLContextrl=†rm=j©jt†rn=hŒXnonero=†rp=j©jV†rq=jsj»†rr=hŒXegl_displayrs=†rt=j©jt†ru=hŒXdestroy_contextrv=†rw=j©jK†rx=hŒXcontextry=†rz=j©jV†r{=jsj»†r|=hŒXegl_displayr}=†r~=j©jt†r=hŒXdestroy_surfacer€=†r=j©jK†r‚=hŒXsurfacerƒ=†r„=j©jV†r…=jsX

r†=†r‡=hj½†rˆ=jsj»†r‰=hX## SDLrŠ=†r‹=jsj»†rŒ=hj½†r=jsj»†rŽ=hX# closer=†r=jsj»†r‘=hŒXsdl_displayr’=†r“=j©jt†r”=hŒXdestroyr•=†r–=jsj»†r—=hX:# This file is part of NIT ( http://www.nitlanguage.org ).r˜=†r™=jsj»†rš=hj½†r›=jsj»†rœ=hX2# Copyright 2004-2008 Jean Privat <jean@pryen.org>r=†rž=jsj»†rŸ=hj½†r =jsj»†r¡=hXA# Licensed under the Apache License, Version 2.0 (the "License");r¢=†r£=jsj»†r¤=hXB# you may not use this file except in compliance with the License.r¥=†r¦=jsj»†r§=hX)# You may obtain a copy of the License atr¨=†r©=jsj»†rª=hj½†r«=jsj»†r¬=hX0#     http://www.apache.org/licenses/LICENSE-2.0r­=†r®=jsj»†r¯=hj½†r°=jsj»†r±=hXE# Unless required by applicable law or agreed to in writing, softwarer²=†r³=jsj»†r´=hXC# distributed under the License is distributed on an "AS IS" BASIS,rµ=†r¶=jsj»†r·=hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.r¸=†r¹=jsj»†rº=hXE# See the License for the specific language governing permissions andr»=†r¼=jsj»†r½=hX # limitations under the License.r¾=†r¿=jsX

rÀ=†rÁ=hX-# How to print arguments of the command line.rÂ=†rÃ=jsj»†rÄ=jXmodulerÅ=†rÆ=jsjç†rÇ=hŒXprint_argumentsrÈ=†rÉ=jsX

rÊ=†rË=jXforrÌ=†rÍ=jsjç†rÎ=hŒj· †rÏ=jsjç†rÐ=jXinrÑ=†rÒ=jsjç†rÓ=hŒXargsrÔ=†rÕ=jsjç†rÖ=jXdor×=†rØ=jsX
	rÙ=†rÚ=hŒXprintrÛ=†rÜ=jsjç†rÝ=hŒj· †rÞ=jsj»†rß=jXendrà=†rá=jsj»†râ=hX:# This file is part of NIT ( http://www.nitlanguage.org ).rã=†rä=jsj»†rå=hj½†ræ=jsj»†rç=hX2# Copyright 2004-2008 Jean Privat <jean@pryen.org>rè=†ré=jsj»†rê=hj½†rë=jsj»†rì=hXA# Licensed under the Apache License, Version 2.0 (the "License");rí=†rî=jsj»†rï=hXB# you may not use this file except in compliance with the License.rð=†rñ=jsj»†rò=hX)# You may obtain a copy of the License atró=†rô=jsj»†rõ=hj½†rö=jsj»†r÷=hX0#     http://www.apache.org/licenses/LICENSE-2.0rø=†rù=jsj»†rú=hj½†rû=jsj»†rü=hXE# Unless required by applicable law or agreed to in writing, softwarerý=†rþ=jsj»†rÿ=hXC# distributed under the License is distributed on an "AS IS" BASIS,r>†r>jsj»†r>hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.r>†r>jsj»†r>hXE# See the License for the specific language governing permissions andr>†r>jsj»†r>hX # limitations under the License.r	>†r
>jsX

r>†r>hX;# A procedural program (without explicit class definition).r
>†r>jsj»†r>hX.# This program manipulates arrays of integers.r>†r>jsj»†r>jXmoduler>†r>jsjç†r>hŒXprocedural_arrayr>†r>jsX

r>†r>hX!# The sum of the elements of `a'.r>†r>jsj»†r>hX!# Uses a 'for' control structure.r>†r>jsj»†r>jXfunr >†r!>jsjç†r">hŒX	array_sumr#>†r$>j©jK†r%>hŒj· †r&>j©jú†r'>jsjç†r(>h¹XArrayr)>†r*>j©j@†r+>h¹XIntr,>†r->j©jC†r.>j©jV†r/>j©jú†r0>jsjç†r1>h¹XIntr2>†r3>jsj»†r4>jXdor5>†r6>jsX
	r7>†r8>jXvarr9>†r:>jsjç†r;>hŒXsumr<>†r=>jsjç†r>>htj†r?>jhX 0r@>†rA>jsX
	rB>†rC>jXforrD>†rE>jsjç†rF>hŒj"†rG>jsjç†rH>jXinrI>†rJ>jsjç†rK>hŒj· †rL>jsjç†rM>jXdorN>†rO>jsX
		rP>†rQ>hŒXsumrR>†rS>jsjç†rT>e(htj†rU>jsjç†rV>hŒXsumrW>†rX>jsjç†rY>htj†rZ>jsjç†r[>hŒj"†r\>jsX
	r]>†r^>jXendr_>†r`>jsX
	ra>†rb>jXreturnrc>†rd>jsjç†re>hŒXsumrf>†rg>jsj»†rh>jXendri>†rj>jsX

rk>†rl>hX7# The sum of the elements of `a' (alternative version).rm>†rn>jsj»†ro>hX## Uses a 'while' control structure.rp>†rq>jsj»†rr>jXfunrs>†rt>jsjç†ru>hŒX
array_sum_altrv>†rw>j©jK†rx>hŒj· †ry>j©jú†rz>jsjç†r{>h¹XArrayr|>†r}>j©j@†r~>h¹XIntr>†r€>j©jC†r>j©jV†r‚>j©jú†rƒ>jsjç†r„>h¹XIntr…>†r†>jsj»†r‡>jXdorˆ>†r‰>jsX
	rŠ>†r‹>jXvarrŒ>†r>jsjç†rŽ>hŒXsumr>†r>jsjç†r‘>htj†r’>jhX 0r“>†r”>jsX
	r•>†r–>jXvarr—>†r˜>jsjç†r™>hŒj"†rš>jsjç†r›>htj†rœ>jhX 0r>†rž>jsX
	rŸ>†r >jXwhiler¡>†r¢>jsjç†r£>hŒj"†r¤>jsjç†r¥>htj#†r¦>jsjç†r§>hŒj· †r¨>j©jt†r©>hŒXlengthrª>†r«>jsjç†r¬>jXdor­>†r®>jsX
		r¯>†r°>hŒXsumr±>†r²>jsjç†r³>htj†r´>jsjç†rµ>hŒXsumr¶>†r·>jsjç†r¸>htj†r¹>jsjç†rº>hŒj· †r»>j©j@†r¼>hŒj"†r½>j©jC†r¾>jsX
		r¿>†rÀ>hŒj"†rÁ>jsjç†rÂ>htj†rÃ>jsjç†rÄ>hŒj"†rÅ>jsjç†rÆ>htj†rÇ>jhX 1rÈ>†rÉ>jsX
	rÊ>†rË>jXendrÌ>†rÍ>jsX
	rÎ>†rÏ>jXreturnrÐ>†rÑ>jsjç†rÒ>hŒXsumrÓ>†rÔ>jsj»†rÕ>jXendrÖ>†r×>jsX

rØ>†rÙ>hX# The main part of the program.rÚ>†rÛ>jsj»†rÜ>jXvarrÝ>†rÞ>jsjç†rß>hŒj· †rà>jsjç†rá>htj†râ>jsjç†rã>jhX[10rä>†rå>j©j;†ræ>jhX 5rç>†rè>j©j;†ré>jhX 8rê>†rë>j©j;†rì>jhX 9rí>†rî>j©jC†rï>jsj»†rð>hŒXprintrñ>†rò>j©jK†ró>hŒX	array_sumrô>†rõ>j©jK†rö>hŒj· †r÷>j©jV†rø>j©jV†rù>jsj»†rú>hŒXprintrû>†rü>j©jK†rý>hŒX
array_sum_altrþ>†rÿ>j©jK†r?hŒj· †r?j©jV†r?j©jV†r?jsj»†r?hX:# This file is part of NIT ( http://www.nitlanguage.org ).r?†r?jsj»†r?hj½†r?jsj»†r	?hX9# Copyright 2013 Matthieu Lucas <lucasmatthieu@gmail.com>r
?†r?jsj»†r?hj½†r
?jsj»†r?hXA# Licensed under the Apache License, Version 2.0 (the "License");r?†r?jsj»†r?hXB# you may not use this file except in compliance with the License.r?†r?jsj»†r?hX)# You may obtain a copy of the License atr?†r?jsj»†r?hj½†r?jsj»†r?hX0#     http://www.apache.org/licenses/LICENSE-2.0r?†r?jsj»†r?hj½†r?jsj»†r?hXE# Unless required by applicable law or agreed to in writing, softwarer?†r ?jsj»†r!?hXC# distributed under the License is distributed on an "AS IS" BASIS,r"?†r#?jsj»†r$?hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.r%?†r&?jsj»†r'?hXE# See the License for the specific language governing permissions andr(?†r)?jsj»†r*?hX # limitations under the License.r+?†r,?jsX

r-?†r.?hXK# Client sample using the Socket module which connect to the server sample.r/?†r0?jsj»†r1?jXmoduler2?†r3?jsjç†r4?hŒX
socket_clientr5?†r6?jsX

r7?†r8?jXimportr9?†r:?jsjç†r;?hŒXsocketr<?†r=?jsX

r>?†r??jXifr@?†rA?jsjç†rB?hŒXargsrC?†rD?j©jt†rE?hŒXlengthrF?†rG?jsjç†rH?htj#†rI?jhX 2rJ?†rK?jsjç†rL?jXthenrM?†rN?jsX
	rO?†rP?hŒXprintrQ?†rR?jsjç†rS?jÁX%"Usage : socket_client <host> <port>"rT?†rU?jsX
	rV?†rW?jXreturnrX?†rY?jsj»†rZ?jXendr[?†r\?jsX

r]?†r^?jXvarr_?†r`?jsjç†ra?hŒjù†rb?jsjç†rc?htj†rd?jsjç†re?jXnewrf?†rg?jsjç†rh?h¹XSocketri?†rj?j©jt†rk?hŒXclientrl?†rm?j©jK†rn?hŒXargsro?†rp?jhX[0rq?†rr?j©jC†rs?j©j;†rt?jsjç†ru?hŒXargsrv?†rw?jhX[1rx?†ry?j©jC†rz?j©jt†r{?hŒXto_ir|?†r}?j©jV†r~?jsj»†r?hŒXprintr€?†r?jsjç†r‚?jÁX"[HOST ADDRESS] : {rƒ?†r„?hŒjù†r…?j©jt†r†?hŒXaddressr‡?†rˆ?jÁX}"r‰?†rŠ?jsj»†r‹?hŒXprintrŒ?†r?jsjç†rŽ?jÁX"[HOST] : {r?†r?hŒjù†r‘?j©jt†r’?hŒXhostr“?†r”?jÁX}"r•?†r–?jsj»†r—?hŒXprintr˜?†r™?jsjç†rš?jÁX"[PORT] : {r›?†rœ?hŒjù†r?j©jt†rž?hŒXportrŸ?†r ?jÁX}"r¡?†r¢?jsj»†r£?hŒXprintr¤?†r¥?jsjç†r¦?jÁX"Connecting ... {r§?†r¨?hŒjù†r©?j©jt†rª?hŒX	connectedr«?†r¬?jÁX}"r­?†r®?jsj»†r¯?jXifr°?†r±?jsjç†r²?hŒjù†r³?j©jt†r´?hŒX	connectedrµ?†r¶?jsjç†r·?jXthenr¸?†r¹?jsX
	rº?†r»?hŒXprintr¼?†r½?jsjç†r¾?jÁX"Writing ... Hello server !"r¿?†rÀ?jsX
	rÁ?†rÂ?hŒjù†rÃ?j©jt†rÄ?hŒXwriterÅ?†rÆ?j©jK†rÇ?jÁX"Hello server !"rÈ?†rÉ?j©jV†rÊ?jsX
	rË?†rÌ?hŒXprintrÍ?†rÎ?jsjç†rÏ?jÁX"[Response from server] : {rÐ?†rÑ?hŒjù†rÒ?j©jt†rÓ?hŒXreadrÔ?†rÕ?jhX(100rÖ?†r×?j©jV†rØ?jÁX}"rÙ?†rÚ?jsX
	rÛ?†rÜ?hŒXprintrÝ?†rÞ?jsjç†rß?jÁX
"Closing ..."rà?†rá?jsX
	râ?†rã?hŒjù†rä?j©jt†rå?hŒXcloseræ?†rç?jsj»†rè?jXendré?†rê?jsj»†rë?hX:# This file is part of NIT ( http://www.nitlanguage.org ).rì?†rí?jsj»†rî?hj½†rï?jsj»†rð?hX9# Copyright 2013 Matthieu Lucas <lucasmatthieu@gmail.com>rñ?†rò?jsj»†ró?hj½†rô?jsj»†rõ?hXA# Licensed under the Apache License, Version 2.0 (the "License");rö?†r÷?jsj»†rø?hXB# you may not use this file except in compliance with the License.rù?†rú?jsj»†rû?hX)# You may obtain a copy of the License atrü?†rý?jsj»†rþ?hj½†rÿ?jsj»†r@hX0#     http://www.apache.org/licenses/LICENSE-2.0r@†r@jsj»†r@hj½†r@jsj»†r@hXE# Unless required by applicable law or agreed to in writing, softwarer@†r@jsj»†r@hXC# distributed under the License is distributed on an "AS IS" BASIS,r	@†r
@jsj»†r@hXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.r@†r
@jsj»†r@hXE# See the License for the specific language governing permissions andr@†r@jsj»†r@hX # limitations under the License.r@†r@jsX

r@†r@hXE# Server sample using the Socket module which allow client to connectr@†r@jsj»†r@jXmoduler@†r@jsjç†r@hŒX
socket_serverr@†r@jsX

r@†r@jXimportr @†r!@jsjç†r"@hŒXsocketr#@†r$@jsX

r%@†r&@jXifr'@†r(@jsjç†r)@hŒXargsr*@†r+@j©jt†r,@hŒXis_emptyr-@†r.@jsjç†r/@jXthenr0@†r1@jsX
	r2@†r3@hŒXprintr4@†r5@jsjç†r6@jÁX"Usage : socket_server <port>"r7@†r8@jsX
	r9@†r:@jXreturnr;@†r<@jsj»†r=@jXendr>@†r?@jsX

r@@†rA@jXvarrB@†rC@jsjç†rD@hŒXsocketrE@†rF@jsjç†rG@htj†rH@jsjç†rI@jXnewrJ@†rK@jsjç†rL@h¹XSocketrM@†rN@j©jt†rO@hŒXserverrP@†rQ@j©jK†rR@hŒXargsrS@†rT@jhX[0rU@†rV@j©jC†rW@j©jt†rX@hŒXto_irY@†rZ@j©j;†r[@jhX 1r\@†r]@j©jV†r^@jsj»†r_@hŒXprintr`@†ra@jsjç†rb@jÁX"[PORT] : {rc@†rd@hŒXsocketre@†rf@j©jt†rg@hŒXportrh@†ri@j©jt†rj@hŒXto_srk@†rl@jÁX}"rm@†rn@jsX

ro@†rp@jXvarrq@†rr@jsjç†rs@hŒXclientsrt@†ru@jsjç†rv@htj†rw@jsjç†rx@jXnewry@†rz@jsjç†r{@h¹XArrayr|@†r}@j©j@†r~@h¹XSocketr@†r€@j©jC†r@jsj»†r‚@jXvarrƒ@†r„@jsjç†r…@hŒXmaxr†@†r‡@jsjç†rˆ@htj†r‰@jsjç†rŠ@hŒXsocketr‹@†rŒ@jsj»†r@jXlooprŽ@†r@jsX
	r@†r‘@jXvarr’@†r“@jsjç†r”@hŒXfsr•@†r–@jsjç†r—@htj†r˜@jsjç†r™@jXnewrš@†r›@jsjç†rœ@h¹XSocketObserverr@†rž@j©jK†rŸ@hŒXtruer @†r¡@j©j;†r¢@jsjç†r£@hŒXtruer¤@†r¥@j©j;†r¦@jsjç†r§@hŒXtruer¨@†r©@j©jV†rª@jsX
	r«@†r¬@hŒXfsr­@†r®@j©jt†r¯@hŒXreadsetr°@†r±@j©jt†r²@hŒXsetr³@†r´@j©jK†rµ@hŒXsocketr¶@†r·@j©jV†r¸@jsX

	r¹@†rº@jXforr»@†r¼@jsjç†r½@hŒj›†r¾@jsjç†r¿@jXinrÀ@†rÁ@jsjç†rÂ@hŒXclientsrÃ@†rÄ@jsjç†rÅ@jXdorÆ@†rÇ@jsjç†rÈ@hŒXfsrÉ@†rÊ@j©jt†rË@hŒXreadsetrÌ@†rÍ@j©jt†rÎ@hŒXsetrÏ@†rÐ@j©jK†rÑ@hŒj›†rÒ@j©jV†rÓ@jsX

	rÔ@†rÕ@jXifrÖ@†r×@jsjç†rØ@hŒXfsrÙ@†rÚ@j©jt†rÛ@hŒXselectrÜ@†rÝ@j©jK†rÞ@hŒXmaxrß@†rà@j©j;†rá@jhX 4râ@†rã@j©j;†rä@jhX 0rå@†ræ@j©jV†rç@jsjç†rè@htX==ré@†rê@jhX 0rë@†rì@jsjç†rí@jXthenrî@†rï@jsX
		rð@†rñ@hŒXprintrò@†ró@jsjç†rô@jÁX"Error occured in select {rõ@†rö@hŒXsysr÷@†rø@j©jt†rù@hŒXerrnorú@†rû@j©jt†rü@hŒXstrerrorrý@†rþ@jÁX}"rÿ@†rAjsX
		rA†rAjXbreakrA†rAjsX
	rA†rAjXendrA†rAjsX

	r	A†r
AjXifrA†rAjsjç†r
AhŒXfsrA†rAj©jt†rAhŒXreadsetrA†rAj©jt†rAhŒXis_setrA†rAj©jK†rAhŒXsocketrA†rAj©jV†rAjsjç†rAjXthenrA†rAjsX
		rA†rAjXvarrA†r Ajsjç†r!AhŒXnsr"A†r#Ajsjç†r$Ahtj†r%Ajsjç†r&AhŒXsocketr'A†r(Aj©jt†r)AhŒXacceptr*A†r+AjsX
		r,A†r-AhŒXprintr.A†r/Ajsjç†r0AjÁX"Accepting {r1A†r2AhŒXnsr3A†r4Aj©jt†r5AhŒXaddressr6A†r7AjÁX} ... "r8A†r9AjsX
		r:A†r;AhŒXprintr<A†r=Ajsjç†r>AjÁX"[Message from {r?A†r@AhŒXnsrAA†rBAj©jt†rCAhŒXaddressrDA†rEAjÁX}] : {rFA†rGAhŒXnsrHA†rIAj©jt†rJAhŒXreadrKA†rLAjhX(100rMA†rNAj©jV†rOAjÁX}"rPA†rQAjsX
		rRA†rSAhŒXnsrTA†rUAj©jt†rVAhŒXwriterWA†rXAj©jK†rYAjÁX"Goodbye client."rZA†r[Aj©jV†r\AjsX
		r]A†r^AhŒXprintr_A†r`Ajsjç†raAjÁX
"Closing {rbA†rcAhŒXnsrdA†reAj©jt†rfAhŒXaddressrgA†rhAjÁX} ..."riA†rjAjsX
		rkA†rlAhŒXnsrmA†rnAj©jt†roAhŒXcloserpA†rqAjsX
	rrA†rsAjXendrtA†ruAjsj»†rvAjXendrwA†rxAjsX

ryA†rzAhX:# This file is part of NIT ( http://www.nitlanguage.org ).r{A†r|Ajsj»†r}Ahj½†r~Ajsj»†rAhXA# Licensed under the Apache License, Version 2.0 (the "License");r€A†rAjsj»†r‚AhXB# you may not use this file except in compliance with the License.rƒA†r„Ajsj»†r…AhX)# You may obtain a copy of the License atr†A†r‡Ajsj»†rˆAhj½†r‰Ajsj»†rŠAhX0#     http://www.apache.org/licenses/LICENSE-2.0r‹A†rŒAjsj»†rAhj½†rŽAjsj»†rAhXE# Unless required by applicable law or agreed to in writing, softwarerA†r‘Ajsj»†r’AhXC# distributed under the License is distributed on an "AS IS" BASIS,r“A†r”Ajsj»†r•AhXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.r–A†r—Ajsj»†r˜AhXE# See the License for the specific language governing permissions andr™A†ršAjsj»†r›AhX # limitations under the License.rœA†rAjsX

ržA†rŸAjXimportr A†r¡Ajsjç†r¢AhŒXtemplater£A†r¤AjsX

r¥A†r¦AhX.### Here, definition of the specific templatesr§A†r¨AjsX

r©A†rªAhX!# The root template for composersr«A†r¬Ajsj»†r­AjXclassr®A†r¯Ajsjç†r°Ah¹X
TmplComposersr±A†r²AjsX
	r³A†r´AjXsuperrµA†r¶Ajsjç†r·Ah¹XTemplater¸A†r¹AjsX

	rºA†r»AhX# Short list of composersr¼A†r½AjsX
	r¾A†r¿AjXvarrÀA†rÁAjsjç†rÂAhŒX	composersrÃA†rÄAjsjç†rÅAhtj†rÆAjsjç†rÇAjXnewrÈA†rÉAjsjç†rÊAh¹XArrayrËA†rÌAj©j@†rÍAh¹XTmplComposerrÎA†rÏAj©jC†rÐAjsX

	rÑA†rÒAhX# Detailled list of composersrÓA†rÔAjsX
	rÕA†rÖAjXvarr×A†rØAjsjç†rÙAhŒXcomposer_detailsrÚA†rÛAjsjç†rÜAhtj†rÝAjsjç†rÞAjXnewrßA†ràAjsjç†ráAh¹XArrayrâA†rãAj©j@†räAh¹XTmplComposerDetailråA†ræAj©jC†rçAjsX

	rèA†réAhX# Add a composer in both listsrêA†rëAjsX
	rìA†ríAjXfunrîA†rïAjsjç†rðAhŒXadd_composerrñA†ròAj©jK†róAhŒX	firstnamerôA†rõAj©j;†röAjsjç†r÷AhŒXlastnamerøA†rùAj©jú†rúAjsjç†rûAh¹XStringrüA†rýAj©j;†rþAjsjç†rÿAhŒXbirthrB†rBj©j;†rBjsjç†rBhŒXdeathrB†rBj©jú†rBjsjç†rBh¹XIntrB†r	Bj©jV†r
BjsX
	rB†rBjXdor
B†rBjsX
		rB†rBhŒX	composersrB†rBj©jt†rBhŒXaddrB†rBj©jK†rBjXnewrB†rBjsjç†rBh¹XTmplComposerrB†rBj©jK†rBhŒXlastnamerB†rBj©jV†rBj©jV†r BjsX
		r!B†r"BhŒXcomposer_detailsr#B†r$Bj©jt†r%BhŒXaddr&B†r'Bj©jK†r(BjXnewr)B†r*Bjsjç†r+Bh¹XTmplComposerDetailr,B†r-Bj©jK†r.BhŒX	firstnamer/B†r0Bj©j;†r1Bjsjç†r2BhŒXlastnamer3B†r4Bj©j;†r5Bjsjç†r6BhŒXbirthr7B†r8Bj©j;†r9Bjsjç†r:BhŒXdeathr;B†r<Bj©jV†r=Bj©jV†r>BjsX
	r?B†r@BjXendrAB†rBBjsX

	rCB†rDBjXredefrEB†rFBjsjç†rGBjXfunrHB†rIBjsjç†rJBhŒX	renderingrKB†rLBjsjç†rMBjXdorNB†rOBjsX
		rPB†rQBhŒXaddrRB†rSBjsjç†rTBjÁXþ"""
COMPOSERS
=========
"""
		add_all composers
		add """

DETAILS
=======
"""
		add_all composer_details
	end
end

# A composer in the short list of composers
class TmplComposer
	super Template

	# Short name
	var name: String

	init(name: String) do self.name = name

	redef fun rendering do add "- {name}\n"
end

# A composer in the detailled list of composers
class TmplComposerDetail
	super Template

	var firstname: String
	var lastname: String
	var birth: Int
	var death: Int

	init(firstname, lastname: String, birth, death: Int) do
		self.firstname = firstname
		self.lastname = lastname
		self.birth = birth
		self.death = death
	end

	redef fun rendering do add """

COMPOSER: {{{firstname}}} {{{lastname}}}
BIRTH...: {{{birth}}}
DEATH...: {{{death}}}
"""rUB†rVBjsX

rWB†rXBjXendrYB†rZBjsX

r[B†r\BhX(### Here a simple usage of the templatesr]B†r^BjsX

r_B†r`BjXvarraB†rbBjsjç†rcBhŒXfrdB†reBjsjç†rfBhtj†rgBjsjç†rhBjXnewriB†rjBjsjç†rkBh¹X
TmplComposersrlB†rmBjsj»†rnBhŒjdB†roBj©jt†rpBhŒXadd_composerrqB†rrBj©jK†rsBjÁX"Johann Sebastian"rtB†ruBj©j;†rvBjsjç†rwBjÁX"Bach"rxB†ryBj©j;†rzBjhX 1685r{B†r|Bj©j;†r}BjhX 1750r~B†rBj©jV†r€Bjsj»†rBhŒjdB†r‚Bj©jt†rƒBhŒXadd_composerr„B†r…Bj©jK†r†BjÁX"George Frideric"r‡B†rˆBj©j;†r‰Bjsjç†rŠBjÁX"Handel"r‹B†rŒBj©j;†rBjhX 1685rŽB†rBj©j;†rBjhX 1759r‘B†r’Bj©jV†r“Bjsj»†r”BhŒjdB†r•Bj©jt†r–BhŒXadd_composerr—B†r˜Bj©jK†r™BjÁX"Wolfgang Amadeus"ršB†r›Bj©j;†rœBjsjç†rBjÁX"Mozart"ržB†rŸBj©j;†r BjhX 1756r¡B†r¢Bj©j;†r£BjhX 1791r¤B†r¥Bj©jV†r¦Bjsj»†r§BhŒjdB†r¨Bj©jt†r©BhŒXwrite_torªB†r«Bj©jK†r¬BhŒXstdoutr­B†r®Bj©jV†r¯Bjsj»†r°BhX:# This file is part of NIT ( http://www.nitlanguage.org ).r±B†r²Bjsj»†r³Bhj½†r´Bjsj»†rµBhX3# Copyright 2014 Lucas Bajolet <r4pass@hotmail.com>r¶B†r·Bjsj»†r¸Bhj½†r¹Bjsj»†rºBhXA# Licensed under the Apache License, Version 2.0 (the "License");r»B†r¼Bjsj»†r½BhXB# you may not use this file except in compliance with the License.r¾B†r¿Bjsj»†rÀBhX)# You may obtain a copy of the License atrÁB†rÂBjsj»†rÃBhj½†rÄBjsj»†rÅBhX0#     http://www.apache.org/licenses/LICENSE-2.0rÆB†rÇBjsj»†rÈBhj½†rÉBjsj»†rÊBhXE# Unless required by applicable law or agreed to in writing, softwarerËB†rÌBjsj»†rÍBhXC# distributed under the License is distributed on an "AS IS" BASIS,rÎB†rÏBjsj»†rÐBhXJ# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.rÑB†rÒBjsj»†rÓBhXE# See the License for the specific language governing permissions andrÔB†rÕBjsj»†rÖBhX # limitations under the License.r×B†rØBjsX

rÙB†rÚBhXG# Sample module for a minimal chat server using Websockets on port 8088rÛB†rÜBjsj»†rÝBjXmodulerÞB†rßBjsjç†ràBhŒXwebsocket_serverráB†râBjsX

rãB†räBjXimportråB†ræBjsjç†rçBhŒX	websocketrèB†réBjsX

rêB†rëBjXvarrìB†ríBjsjç†rîBhŒXsockrïB†rðBjsjç†rñBhtj†ròBjsjç†róBjXnewrôB†rõBjsjç†röBh¹X	WebSocketr÷B†røBjhX(8088rùB†rúBj©j;†rûBjhX 1rüB†rýBj©jV†rþBjsX

rÿB†rCjXvarrC†rCjsjç†rChŒXmsgrC†rCj©jú†rCjsjç†rCh¹XStringrC†r	CjsX

r
C†rCjXifrC†r
Cjsjç†rChŒXsockrC†rCj©jt†rChŒXlistenerrC†rCj©jt†rChŒXeofrC†rCjsjç†rCjXthenrC†rCjsX
	rC†rChŒXprintrC†rCjsjç†rChŒXsysrC†r Cj©jt†r!ChŒXerrnor"C†r#Cj©jt†r$ChŒXstrerrorr%C†r&Cjsj»†r'CjXendr(C†r)CjsX

r*C†r+ChŒXsockr,C†r-Cj©jt†r.ChŒXacceptr/C†r0CjsX

r1C†r2CjXwhiler3C†r4Cjsjç†r5CjXnotr6C†r7Cjsjç†r8ChŒXsockr9C†r:Cj©jt†r;ChŒXlistenerr<C†r=Cj©jt†r>ChŒXeofr?C†r@Cjsjç†rACjXdorBC†rCCjsX
	rDC†rECjXifrFC†rGCjsjç†rHCjXnotrIC†rJCjsjç†rKChŒXsockrLC†rMCj©jt†rNChŒX	connectedrOC†rPCjsjç†rQCjXthenrRC†rSCjsjç†rTChŒXsockrUC†rVCj©jt†rWChŒXacceptrXC†rYCjsX
	rZC†r[CjXifr\C†r]Cjsjç†r^ChŒXsysr_C†r`Cj©jt†raChŒXstdinrbC†rcCj©jt†rdChŒXpoll_inreC†rfCjsjç†rgCjXthenrhC†riCjsX
		rjC†rkChŒXmsgrlC†rmCjsjç†rnChtj†roCjsjç†rpChŒXgetsrqC†rrCjsX
		rsC†rtChŒXprintnruC†rvCjsjç†rwCjÁX"Received message : {rxC†ryChŒXmsgrzC†r{CjÁX}"r|C†r}CjsX
		r~C†rCjXifr€C†rCjsjç†r‚ChŒXmsgrƒC†r„Cjsjç†r…ChtX==r†C†r‡Cjsjç†rˆCjÁX"exit"r‰C†rŠCjsjç†r‹CjXthenrŒC†rCjsjç†rŽChŒXsockrC†rCj©jt†r‘ChŒXcloser’C†r“CjsX
		r”C†r•CjXifr–C†r—Cjsjç†r˜ChŒXmsgr™C†ršCjsjç†r›ChtX==rœC†rCjsjç†ržCjÁX"disconnect"rŸC†r Cjsjç†r¡CjXthenr¢C†r£Cjsjç†r¤ChŒXsockr¥C†r¦Cj©jt†r§ChŒXdisconnect_clientr¨C†r©CjsX
		rªC†r«ChŒXsockr¬C†r­Cj©jt†r®ChŒXwriter¯C†r°Cj©jK†r±ChŒXmsgr²C†r³Cj©jV†r´CjsX
	rµC†r¶CjXendr·C†r¸CjsX
	r¹C†rºCjXifr»C†r¼Cjsjç†r½ChŒXsockr¾C†r¿Cj©jt†rÀChŒXcan_readrÁC†rÂCjhX(10rÃC†rÄCj©jV†rÅCjsjç†rÆCjXthenrÇC†rÈCjsX
		rÉC†rÊChŒXmsgrËC†rÌCjsjç†rÍChtj†rÎCjsjç†rÏChŒXsockrÐC†rÑCj©jt†rÒChŒX	read_linerÓC†rÔCjsX
		rÕC†rÖCjXifr×C†rØCjsjç†rÙChŒXmsgrÚC†rÛCjsjç†rÜChtX!=rÝC†rÞCjsjç†rßCjÁX""ràC†ráCjsjç†râCjXthenrãC†räCjsjç†råChŒXprintræC†rçCjsjç†rèChŒXmsgréC†rêCjsX
	rëC†rìCjXendríC†rîCjsj»†rïCjXendrðC†rñCjsj»†ròCe.