ࡱ> b sAjbjb "thh5;F v v v  8:8:8:8p:$: \:D;D;D;D;D;>>>k\m\m\m\m\m\m\,._Ra\v >{>^>>>\mO D;D;7\mOmOmO> D;v D;k\mO > r >k\mOmOrWZT@ 6v W[8; )f8:gHZW[\0\Z:bmO:bW[mOv d*7$ 7Chapter Three: Classes and Objects in Greenfoot Section 1: Adding Methods and Members to An Actor Now that we understand more about methods and members, we can improve our simple Actor class definition. Lets assume I want to make a Bee actor a bit more robust. First, lets add methods for moveLeft and moveRight: public class Bee extends Actor { public void act() { moveRight(); // moveUp(); } public void moveRight() // This method changes the location from (x,y) to (x+1,y) { setLocation( getX() + 1 , getY() ); } public void moveLeft() // This method changes the location from (x,y) to (x-1,y) { setLocation( getX() - 1 , getY() ); } } In the code above are two methods, moveLeft and moveRight. Notice in the act( ) method is a call to the moveRight( ) method. There is also a commented out call to a non-existent moveUp( ) method. In the exercise below you will add that method and then you can uncomment the method call inside of act( ). If you remove the comment characters before writing the code for the moveUp( ) method you will get an error message. Try it, you wont break anything, just comment it out again or remove the line of code and recompile.   Section 2: Creating Actor Objects and Placing Them In The World Using Code So far we have added objects to the world by hand. We click on the box of one of the defined classes and choose new object and then drag the newly created object out into the world. It is possible to add new objects to the world as part of our program. Example: Populating the World Automatically Create a new scenario similar to BugScenario from Chapter One. Create BugWorld as a subclass of World and Bug as a subclass of Actor. We will now change the code in BugWorld so that it will automatically create 3 Bug objects when the BugWorld is created. To do this, bring up the code window for BugWorld by double-clicking on its class box. Change the code to look like this (you just need to add three lines of code) : public class BugWorld extends World { /** * Constructor for objects of class BugWorld. * */ public BugWorld() { // Create a new world with 50x50 cells with a cell size of 10x10 pixels. super(50, 50, 10); // Add these three lines Bug theBug = new Bug(); addObject( theBug, 10, 15 ); Bug theSecondBug = new Bug(); addObject( theSecondBug, 12, 20 ); Bug theThirdBug = new Bug(); addObject( theThirdBug, 23, 45 ); } } Each of the new lines of code creates a new Bug object and adds it to the world at the specified coordinates. The command new ClassName() will create a new object of type ClassName. In the example above we create new Bug objects. The command addObject( obj , x , y ) will add the object obj into the world at grid cell location (x,y). In the example above the obj that is added is first theBug, then theSecondbug, and finally theThirdBug. Section 3: Moving Left/Right Using a Velocity Member In the proceeding examples The actor was moving left or right by one space. We might want the actor to move left/right by two spaces, or three spaces, or more. We can do this by creating a data member (otherwise know as a variable) to specify how many spaces the actor should move on each call to moveX(). By allowing xVelocity to hold either positive or negative values we can specify if the actor is moving right (positive value) or left (negative value). A data member is also known as a variable. Scratch comparison note: If you have been programming in Scratch, you should have used variable. The variable/member is the same concept as the variable in Scratch. In scratch you can specify a variable to be for this sprite only or for all sprites. The for this sprite only is the same concept as a data member in Java. Here is the code: public class BeeUsingVelocity extends Actor { private int xVelocity = 2 ; // how for little red will move each time moveX() is called public void act() { if( canMoveX() ) { moveX(); // move to the right, how far right is determined by xVelocity } else { // else we would go off the screen, so, negate the xVelocity to go in the other direction xVelocity = -1 * xVelocity ; } } public boolean canMoveX() { if (xVelocity > 0) // we want to move right { if ( (getX() + xVelocity) < getWorld().getWidth() ) // if proposed new location is less than right side of the world return (true) ; else return( false) ; } else // we want to move left { if ( (getX() + xVelocity) >= 0) // if proposed new location is greater than zero return (true) ; else return( false) ; } } // The following method does the same as canMoveX, but does it in less, and // arguably more readable, code by using a compound boolean expression public boolean canMoveXSecondWay() { if ( ( (getX() + xVelocity) < getWorld().getWidth() ) && ( (getX() + xVelocity) >= 0) ) return (true) ; else return( false) ; } public void moveX() { setLocation( getX() + xVelocity , getY() ); } } Now if we want The actor to move by 3 cells, we only need to change the value for xVelocity once, all the rest of the code works correctly! In the code above we introduced two more concepts: 1) Boolean variables; and 2) the fact that methods can return a data value, a Boolean value in the example above. To best explain this we need to digress a tad: Section 3.1: Java Concept: Variables We have been thinking of variables as boxes of computer memory which hold values of a specified type. The type of the value is specified when the variable is declared. The built-in types for numbers are: int, float, and double. Variables of type int can hold integer (positive or negative whole numbers including zero). Variables of type float can hold decimal numbers. Variables of type double can hold decimal numbers which are larger or contain more precision than those that float variables can hold. To change the value of a variable use = (called the assignment operator). This is not the same as the equal sign used in math, nor the = sign in the Scratch programming language. You should read the following statement: int someNumber = 5 ; to mean the variable someNumber gets the value of 5 not the variable someNumber equals 5. The arithmetic operators are +, -, * (multiplication), / (division). For Scratch programmers the following table shows equivalent commands. Notice in the third row that if you want to say equals, you must use two equals signs, as in ==. The reason is because a single = sign means assignment: assign the value on the right side of the = to the variable on the left side. The following assumes a variable for numLeft was declared in Java like: int numLeft ; numLeft = 5 ;numLeft = numLeft + 1 ;numLeft = numLeft + 1 ;numLeft++ ; numLeft = numLeft + 1 ;if ( numLeft == 0) { Greenfoot.stopSimulation() ; } Section 3.2: Java Concept: Boolean Variables A boolean variable can hold only two values: true or false. The following code will create a boolean variable named hungry and then set its value to true: boolean hungry; hungry = true; Boolean variables may also be used as the test in if statements: if ( hungry ) { lookForFood(); } else { sleepUntilHungry(); } If the variable hungry holds the value of true, the method lookForFood() will be called otherwise the method sleepUntilHungry() will be called. When we compare two numeric values using <, <=, >, >=, or ==, the result is a boolean value (either true or false). These symbols are called relational operators because they determine or test the relationship between two values. This is why we can write if statements such as: if ( getX() < 30 ) // if new location will be less than 30 return(true) ; else return(false); When When we compare two numeric When we want to build more complex Boolean expressions we can use the three logical operators: && || ! && means AND || means OR ! means NOT The following table shows some equivalent Boolean expressions in Scratch and Java. The first row includes a full if statement, the others are just the Boolean expression. To allow for longer expressions the table list a Java expression followed on the next row by a Scratch expression. Notice the explicit nesting/ordering of parenthesis in Java to get the desired Boolean expression. Also notice in the last Java expression equals is two equal signs, i.e. ==, not just one equal sign. if ( (numLeft < 5) && (getX() < 10) ) { setLocation( getX() 1, getY() ) ; }(numLeft < 5) || (getX() < 10)( getY() > 0 ) && ( (numLeft < 5) || ( getX() < 10) )( getY() > 0) && ( ! (numLeft == 1) ) Section 3.3: Java Concept: Methods Can Return a Value We know methods can take in information (by passing parameter values inside the parenthesis). Methods can also return information. We have already seen examples of this in the canMoveLeft() and canMoveRight() methods. These return true or false based on whether The actor can move and still stay inside the world. Returning a value from a method allows objects to answer questions asked by other objects. For instance, a method called getHeight() could be added to the Person class: int getHeight() { return height; } The first line of code says that this method is called getHeight and that it returns an integer value back to whoever calls it. So it is now possible to say: Person george = new Person(); int georgeHeight = george.getHeight(); and the variable georgeHeight will now hold the value of georges height. Section 7: Random Movement Often we want game sprites to move around on their own behalf. We have made actor objects move back and forth or up and down, but we might prefer a more random movement. Later in the book we will show how to create a patrolling type of movement behavior. In order to get random movement we need random numbers. The built-in Greenfoot method Greenfoot.getRandomNumber( N ) returns a random integer between 0 and N-1. Thus, if you say Greenfoot.getRandomNumber( 5 ), it will return one of the numbers {0, 1, 2, 3, 4} randomly and with equal probability. We can use this to create random motion by getting a random number between 0 and 3, and then if the number is 0 moving right, if it is 1 move left, if 2 move down, and if 3 move up. Below is the code. public void act() { int rnum = Greenfoot.getRandomNumber(4) ; if (rnum == 0) { setLocation( getX() + 1 , getY() ) ; } if (rnum == 1) { setLocation( getX() - 1 , getY() ) ; } if (rnum == 2) { setLocation( getX() , getY() + 1) ; } if (rnum == 3) { setLocation( getX() , getY() - 1 ) ; } } Section 8: Constructing Objects Sometimes we wish to control what happens when an object is created. This is accomplished by defining special methods for a class called constructors. Usually constructors assign initial values to the various member variables defined in the class. Constructor methods always have the same name as the name of the class itself. For example, we could define the following constructor for the Person class: public Person() { age = 45; height = 12; weight = 15; name = Kermit; } This constructor sets the age to 45, the height to 12, the weight to 15, and the name to Kermit. If the code: Person somebody = new Person(); then the somebody object would be a person with the age, height, weight, and name defined above. It is also possible to have constructors which take parameters (or specified information). An example of this is: public Person( string aName, int anAge, int aHeight, int aWeight ) { name = aName; age = anAge; height = aHeight; weight = aWeight; } This constructor requires values to be specified when it is called: Person anotherbody = new Person( Kermit, 65, 12, 15 ); The constructor would then set anotherbodys name to Kermit, age to 65, height to 12, and weight to 15. Consider the following Redhood1 world constructor from the Redhood1 scenario: public class RedHood1 extends World { // Constructor for objects of class RedHood1 public RedHood1() { super(60, 50, 10); // make the world 60x50 cells with a 10x10 pixel cell size SimpleRed aSimpleRed = new SimpleRed() ; addObject(aSimpleRed,6,12); BooleanRed aBooleanRed = new BooleanRed(); addObject(aBooleanRed,6,20); VelocityRed aVelRed = new VelocityRed() ; addObject(aVelRed,6,28); } } One can see that RedHood1 is a class definition for a Greenfoot world as it extends World. The constructor method has the exact same name as the class name. This is required for a constructor. In the constructor we set the world size to (60,50,10), create three objects using new, and place the objects in the world using the addObject() method.  P4games.org, copyright 2008 P4games.org, copyright 2009 EXERCISE 2.1: (A): Type in the above code for a Bee actor. Compile. Place an object in the world and right click on the object and call the moveLeft() and moveRight() methods. (B): Add two more methods for moveUp() and moveDown(). Compile. Place an object in the world and right click on the object to call the moveUp() and moveDown() methods. (C) Change the moveRight() method to take a parameter numSteps. Compile. Place an object in the world and right click on the object to call the moveRight() method. When you do this Greenfoot will pop up a window asking you to enter the parameter value. e Exercise 2.3: Modify your Bee class so that it has a constructor that takes as an argument the initial velocity for the Bee objects and sets the xVelocity data member value to this argument. Modify your Bee class so that the Bee moves with random motion and the distance it moves on each call to act is determined by the argument to the conASSROOM KINETIC EXERCISE 1: Instructor: Create a grid on the floor of 1 x 1 or 2 x 2 square. Make the grid about 6x5. Now write code for Person objects using the setLocation( ), moveLeft( ) , moveRight( ), moveUp( ), and moveDown( ) methods. Use actual students as person objects so they must figure out where they are to move and hence understand the coordinate system. 01c<       _ ` 7]^45G>W ?.;RKLӲӭӭӭӭ妜hakhak5PJ hak5PJ hak5!jhakUmHnHsHwhjhakUmHnHsHuhak hakPJhakNHPJ hakPJ hakhakhakNHPJ hakPJ=01c<[]t{ DKPk  gdak;,<rA            _ ` 7[]^f45Vv?EGH ?:;%)AAGXr|e[5? _9Ub\].L]` u v !!s"t"""""""""#*#F#I#J#N#|###$:$;$~$%%&A'B'c'7*8*Z*[*******K+L+,~j:hakUjϞhakUjzhakUj9chakUjHhakhakPJUhakhakPJj~1hakhakPJUjhakhakPJUjhakhakPJUhakNHPJ hak5PJhak hakPJ hakPJ hakPJ1.` u v !!""""""qxkd$$Ifl0A$ t064 l4a$Ifl """""wxkd$1$$Ifl0A$ t064 l4a$Ifl"""#ww$IflxkdG$$Ifl0A$ t064 l4a##'#)#G#I#K#wwwww$IflxkdNH$$Ifl0A$ t064 l4aK#L#M#N#|#$+$:$;$~$$$$$$xkdb$$Ifl0A$ t064 l4a$$%%%%& ''&'A'B'G'H'd''''')) * *4*6*$Ifgdakl & Fgdakgdak`6*7*9*:*Y*$ckd$$IflP t04 l4a$Ifgdaklckdb$$IflP t04 l4aY*Z*\*]**$ckdM$$IflP t04 l4a$Ifgdaklckd9$$IflP t04 l4a*****$ckd$$IflP t04 l4a$Ifgdaklckd$$IflP t04 l4a****$ckd$$IflP t04 l4a$Ifgdaklckd$$IflP t04 l4a****7,,,,-------I.J.K.L.M.N.O.P.Q.R.S.n.q/gdakgdak,,,--m-n---I.J.L.Q.S.n.//a0b000f1g1-3N33333K4L4444Q5R5555666_7`77778888::;;,<:<D<<<<===>>>??U?V?? hak5PJjhakUmHnHsHu hhak hakNH hak5 hakPJhak hakPJ hakPJhakNHPJGq/g1h1{1111122'212b2l22222223'3-3.3N3444gdakgdak45"555L5Q5R55556677*7B7Z7_7`7777888899h9q9q9999:':0:b:::::;; <<*<+<,<:<<=>>>>>\? & Fgdak\? @@mAnAoApArAsA?@lAmAsAhakh\hakCJ hakCJ hak5CJ / =!"#$%`Dd$@ H  C $A temp9b"jX(F82Dn$F !O"jX(F82PNG  IHDR$fgAMABO7iCCPColor LCDx 8T_lckvc eڨȾ/#3c-KlP'PB( %J([Y+Jmw}=s./l872)V8Î8 LGYǶ<`kYυZZ6Vc@@i64 &CKc_7O X@|gh4پI X+zLq:pm?o)2ŮC,N. @U1,IAwՏ}+wwBRK@}`#J]+R7@ J/ wC@i f t„a~pIx6Q4BD5%}m0$t:A,M݇s[x&*$($'ּ/Q+%L'%UP4SVaQ%dzCtpX[F'DEjp0¨xڔL"ơgV\v:.)wnt8u'7g*A㘞"ݿt/HYk(J  g`DFnF-[z2-.,i33s}Iɥ)gCMM M4;_}{x){#W켺o F G_t>W6_NwCBҬ&VLujͥۥw**ުilWڔbz_ϭ/z8Sg}cyNjڮ䗮=t=o{K__Cߨe|~]۰pۈ~ |Xhqgɴ LѬlܗҟ}uXPYf= , $%H0N ^Gt!#Qx:$8 C;, %=9ڎ`Z_ª$1[f ɳRvJrȷPSS^UT{o~ |ԥX7etl|sJZFVᰳ9%hk[{GgWw؀_?@ 4h) c;:>y?ƉbI8x_Nw$ԞMK LNL="= Cײ9rs.]Q_UW(P)4/ ./i+/^SnvPqrU͇^U,nAױWm0mٔ\RwOm0>eG['s]5/3I=½?^u. 7 [=ZS ;!l/ګ %6x[7&!@3XQ`I  o ~kq0y9G9.FJѲh IoHJPĨɘ# ô330=a`eegIeY`fm cKlnlY./QnW;Y^>c~CU@Aw`:~R ͯ8S?9 Sg{R=V32΋g_4ԗ;u% o%?ЮXdZ7 kQ'6]/аBwVI  7STrʵkiY~Ϫ_ek7$7m|HuZ?  :CN߀O"pge;$?29G*Ptjt'1htz^>aQ' `Rgbl|BbcZe`<ް(˝C|G5&O/&_.?H FP\P .EDKdYZ(.%>B($!tWniiiLlm=e%Jʹ*=TG,A|0V+U@NGoހPԘbclBPM*hݑO;tqw:$9%h]?=ŽPbΓ;(s!PǟoFE^8y&yB$l]Jϩji飙*糲.:^z#{ G޹|E%Ʋr ɛՙw֏5l i|P“]vv=z-/FbPrH|DÑRjf 纾-DK_ Xƭ\[ۿʿ)x%Ua2"14F@1HWt{鮢Q B_3L&}f 63w~XfSa`'q9J88g25?(q+8 "Ip!.^!1 qB)]2rv {x TTK(u>4:jeis/01' )XL2nihrqN΢.\C<^>k*B JaUQ'bc[O$%˥ĞNK#D*r0ReycdJw^+.U^]XYSVMLmȻ ƍUMĖ2g=xf^ ۼ(6;ߗ?Fm`߰HQ1x$ß &fg>fb7߿.pk9wEy_*WVVTRFUOY8ѾAT$ooS6sԧoK[Q'@mĐ?1ءnnZ:VB+*w}ߌt5Xb_sM)V۶0cnƖ@L"ZoE[5.S4} 4DXB,N-L~Z78=hnC6ڪe! PwtqQ Az[z f% nO%Q _߻9!@QPQXK?~%OޡvH "R<@ɍHe^Rz9_?Wq=M:1f]o@9rFmQ1ׂo:p 7E&dpF$9k3( pHYs  $tEXtSoftwareQuickTime 7.6.2 (Mac OS X)`25>tIME+7pIDATxmL[Ue2(N>cE7EA37ɂ8uMI EH.13ٲh2>s\11 PB=gvBזs{E/=s ĕ0emkaq aǓ5핏5!ZK& ׏$/sGfCr]ors7HnwI 5 A8G1y# hk7&A;Yg}Y: (bf ! %$lCo~:̳?f ,#rD4UUU˕M <)O qOٌÎTeQEm\=qݳw ^~2n|*u,R.euP!" %"DQ8k0Q\\ T*fpHP8i2d}>aԙAQǛquwZ&St)6.u H~]&$&12bGyy9, z+a%HxF1}-^ auK.y ?FEuRM[bA~~>v.+i t;$] %qavAbsTX{>dgo aC!2j]2/7=㡳K-ۍQdddr[EȓcS~z|U 5*#|%4IHTN3۰5# f*j ֣vDb(@D8 "==N>@'BצrOZeĜc9/[mQ<ʬ ̄Q4~3LzvZVrtbij].0djRe- p]W%\tH~X,8!y`DXLx: ؾ z 3u͉,gh[_Hb :EAXXf*%>ſHBJt|rV- :"JD兢y ֘B21G\@Ipq$đ߼rCIENDB`X$$If!vh55#v#v:Vl t655GDd)/4J   C &Atemp12b5: yA|"!n}ؼPWoj^aR5: yA|"PNG  IHDR)^G+gAMABO7iCCPColor LCDx 8T_lckvc eڨȾ/#3c-KlP'PB( %J([Y+Jmw}=s./l872)V8Î8 LGYǶ<`kYυZZ6Vc@@i64 &CKc_7O X@|gh4پI X+zLq:pm?o)2ŮC,N. @U1,IAwՏ}+wwBRK@}`#J]+R7@ J/ wC@i f t„a~pIx6Q4BD5%}m0$t:A,M݇s[x&*$($'ּ/Q+%L'%UP4SVaQ%dzCtpX[F'DEjp0¨xڔL"ơgV\v:.)wnt8u'7g*A㘞"ݿt/HYk(J  g`DFnF-[z2-.,i33s}Iɥ)gCMM M4;_}{x){#W켺o F G_t>W6_NwCBҬ&VLujͥۥw**ުilWڔbz_ϭ/z8Sg}cyNjڮ䗮=t=o{K__Cߨe|~]۰pۈ~ |Xhqgɴ LѬlܗҟ}uXPYf= , $%H0N ^Gt!#Qx:$8 C;, %=9ڎ`Z_ª$1[f ɳRvJrȷPSS^UT{o~ |ԥX7etl|sJZFVᰳ9%hk[{GgWw؀_?@ 4h) c;:>y?ƉbI8x_Nw$ԞMK LNL="= Cײ9rs.]Q_UW(P)4/ ./i+/^SnvPqrU͇^U,nAױWm0mٔ\RwOm0>eG['s]5/3I=½?^u. 7 [=ZS ;!l/ګ %6x[7&!@3XQ`I  o ~kq0y9G9.FJѲh IoHJPĨɘ# ô330=a`eegIeY`fm cKlnlY./QnW;Y^>c~CU@Aw`:~R ͯ8S?9 Sg{R=V32΋g_4ԗ;u% o%?ЮXdZ7 kQ'6]/аBwVI  7STrʵkiY~Ϫ_ek7$7m|HuZ?  :CN߀O"pge;$?29G*Ptjt'1htz^>aQ' `Rgbl|BbcZe`<ް(˝C|G5&O/&_.?H FP\P .EDKdYZ(.%>B($!tWniiiLlm=e%Jʹ*=TG,A|0V+U@NGoހPԘbclBPM*hݑO;tqw:$9%h]?=ŽPbΓ;(s!PǟoFE^8y&yB$l]Jϩji飙*糲.:^z#{ G޹|E%Ʋr ɛՙw֏5l i|P“]vv=z-/FbPrH|DÑRjf 纾-DK_ Xƭ\[ۿʿ)x%Ua2"14F@1HWt{鮢Q B_3L&}f 63w~XfSa`'q9J88g25?(q+8 "Ip!.^!1 qB)]2rv {x TTK(u>4:jeis/01' )XL2nihrqN΢.\C<^>k*B JaUQ'bc[O$%˥ĞNK#D*r0ReycdJw^+.U^]XYSVMLmȻ ƍUMĖ2g=xf^ ۼ(6;ߗ?Fm`߰HQ1x$ß &fg>fb7߿.pk9wEy_*WVVTRFUOY8ѾAT$ooS6sԧoK[Q'@mĐ?1ءnnZ:VB+*w}ߌt5Xb_sM)V۶0cnƖ@L"ZoE[5.S4} 4DXB,N-L~Z78=hnC6ڪe! PwtqQ Az[z f% nO%Q _߻9!@QPQXK?~%OޡvH "R<@ɍHe^Rz9_?Wq=M:1f]o@9rFmQ1ׂo:p 7E&dpF$9k3( pHYs  $tEXtSoftwareQuickTime 7.6.2 (Mac OS X)`25>tIME r15 xIDATx PT^.(( ))V$i^m6kN1NbbIJ&i#6ZIT.c9g+޻e=u=}眻bްzܼqh1yV .8LJpq8> ! )&#fd& er8EjWeY>p[J=˞pXŢ}'{5D3Ogginpm;^P0s@x@9a[NTWaPJ~hi Pj*8sBT .ӝ՚ !'_8g;KPR^~|,k[) /l:Uk⵼i.CA_ױhI*xk>>ú0gBV:eC~7$\(%ZZYxmM|&Zv4ج"0b^<$#|lD>+?BҚ0LYϬ-sԼWcp ^@ϾǠ ŸHX[#'m$ŁfݔU#@?A<ↄ xC% ^5A(!vanqݨn l@86Sӓ,R&4k ޺S1f&\yoa-o.bZo^cЌ>̓ۘpcBRKa%W2NkIdA1";`4!QPFM|ʈ$o勏~t'4B[ӍBIdl@;wlz`1T ֺ @A"0 m tVDXvB+..FII x ,c$>" =T,7|KfEs9D'1'0_;=*裒zMgά樹K>EB–Ho"66]=EAEĢݯHXh4qg }c! 2ީ#fƏa*h(\"ڝDEKRFOtTX*:.ga[c=,_>_s kem7ܘ+s0=zKcKc4 iװ[y櫕,t[Ѝ\E*ΖNe뭍ڵt+H?&X1ݻ&ܧ,4GuLpAS#s 2i;a:v?TSʹQS0 ֆ֫9hhz_KyuAMۭZhGW΄K[M;0ўϑ"K!:r#ik)Z* lVfĂo;ֺEE/"ۂ# ߂͌F.q/m!f;{9'@,y_ *x8jgHw>27k 50btTd>f#:iSj·HspRŤ@3=]\Εdh9!lF>٥NZM bxl&I_][YEllWe$n",,?an7L9_@-"IzG&jOB5u?3:"և.6y 0jr;qކY>}Η@EEҐA쳢٫+7ħW7T:ۛb?g]mk@Wp r`0!us B-=Zonq<hBuBxZŕ'b֍WVPBHt WG􉾈7a"8́j l(qɤ%2*_p2Tlgk]$H)[0լ@HOe(S tWtNGyؓ0HX |! Z@wC>/3u[ \ρTLȾ'uN&p|.8LJpq8> !.BKIENDB`X$$If!vh55#v#v:Vl t655vDd$ J   C &Atemp13b$M;ӈQuYJT1n5$y_) u 1$M;ӈQuYJTPNG  IHDR$,ZgAMABO7iCCPColor LCDx 8T_lckvc eڨȾ/#3c-KlP'PB( %J([Y+Jmw}=s./l872)V8Î8 LGYǶ<`kYυZZ6Vc@@i64 &CKc_7O X@|gh4پI X+zLq:pm?o)2ŮC,N. @U1,IAwՏ}+wwBRK@}`#J]+R7@ J/ wC@i f t„a~pIx6Q4BD5%}m0$t:A,M݇s[x&*$($'ּ/Q+%L'%UP4SVaQ%dzCtpX[F'DEjp0¨xڔL"ơgV\v:.)wnt8u'7g*A㘞"ݿt/HYk(J  g`DFnF-[z2-.,i33s}Iɥ)gCMM M4;_}{x){#W켺o F G_t>W6_NwCBҬ&VLujͥۥw**ުilWڔbz_ϭ/z8Sg}cyNjڮ䗮=t=o{K__Cߨe|~]۰pۈ~ |Xhqgɴ LѬlܗҟ}uXPYf= , $%H0N ^Gt!#Qx:$8 C;, %=9ڎ`Z_ª$1[f ɳRvJrȷPSS^UT{o~ |ԥX7etl|sJZFVᰳ9%hk[{GgWw؀_?@ 4h) c;:>y?ƉbI8x_Nw$ԞMK LNL="= Cײ9rs.]Q_UW(P)4/ ./i+/^SnvPqrU͇^U,nAױWm0mٔ\RwOm0>eG['s]5/3I=½?^u. 7 [=ZS ;!l/ګ %6x[7&!@3XQ`I  o ~kq0y9G9.FJѲh IoHJPĨɘ# ô330=a`eegIeY`fm cKlnlY./QnW;Y^>c~CU@Aw`:~R ͯ8S?9 Sg{R=V32΋g_4ԗ;u% o%?ЮXdZ7 kQ'6]/аBwVI  7STrʵkiY~Ϫ_ek7$7m|HuZ?  :CN߀O"pge;$?29G*Ptjt'1htz^>aQ' `Rgbl|BbcZe`<ް(˝C|G5&O/&_.?H FP\P .EDKdYZ(.%>B($!tWniiiLlm=e%Jʹ*=TG,A|0V+U@NGoހPԘbclBPM*hݑO;tqw:$9%h]?=ŽPbΓ;(s!PǟoFE^8y&yB$l]Jϩji飙*糲.:^z#{ G޹|E%Ʋr ɛՙw֏5l i|P“]vv=z-/FbPrH|DÑRjf 纾-DK_ Xƭ\[ۿʿ)x%Ua2"14F@1HWt{鮢Q B_3L&}f 63w~XfSa`'q9J88g25?(q+8 "Ip!.^!1 qB)]2rv {x TTK(u>4:jeis/01' )XL2nihrqN΢.\C<^>k*B JaUQ'bc[O$%˥ĞNK#D*r0ReycdJw^+.U^]XYSVMLmȻ ƍUMĖ2g=xf^ ۼ(6;ߗ?Fm`߰HQ1x$ß &fg>fb7߿.pk9wEy_*WVVTRFUOY8ѾAT$ooS6sԧoK[Q'@mĐ?1ءnnZ:VB+*w}ߌt5Xb_sM)V۶0cnƖ@L"ZoE[5.S4} 4DXB,N-L~Z78=hnC6ڪe! PwtqQ Az[z f% nO%Q _߻9!@QPQXK?~%OޡvH "R<@ɍHe^Rz9_?Wq=M:1f]o@9rFmQ1ׂo:p 7E&dpF$9k3( pHYs  $tEXtSoftwareQuickTime 7.6.2 (Mac OS X)`25>tIME &=>IDATx{LEǿ8^H[ E-Ԩ5M&&SRF &xE6EMJ@I &DB" ~k堠m(;wܙq\Oon{yԤY٘u"`Kt$1`049L a"dhNlaRo"d[š G1F>b ;f$x- u3cD E%5~!TϷ d5)4W"(. tHM h1_Z4}4%=ҦΛum U^SD:41̛]Qʣ4[YpxRUD555!ꄅ(b"]1)UUTvM_g.>)i ,Cǭr G NErd}/#>s$XZ.Kvafo&U! ]|"̧`ZMwz?iV 3wp>Gw^ek{1dzCbQwZ/7*bT`S$܉릳T3 .=pzsC6Nč_-ϵ !k#&M#V 'N|DSq@H+.XAm?4`䫖r|U. ".ahhpapxU^7T+X..?s9$޼P o\q<\˿ÐS$(BRXǷ*'."4>! } CA_nn%C s@󂿸5rWd<.2t'( *}r':le`ɍʨ>ŕw~zq8-0BaVwwtlJ&ۥ\t' ~Q!2x"g4QUE(@NOW~ yv K} )ރ<._̭30r &uok9T" W&\_I%>~¹e _]\qq񅴹뭅x}i4}Opkz, d4BߏVHXa2r-g!"kNz/@ASS1j55dBIEiii-H o"gE5 DtÊ!`!*U/aŊP)}2xEX9כ~Fu cfdi2bf=!j#:ǔcDžV .L2Ǹ*"Y&䜐T"*D*WRK' YI3J#0VlPQd+eX](O(yC 249L a"dh!Cs7A0D:IENDB`X$$If!vh55#v#v:Vl t655X$$If!vh55#v#v:Vl t655DdLl J  C &Atemp11bXJM+ܥ(A(4Hn,~RR&}JM+ܥ(A(PNG  IHDRLseagAMABO7iCCPColor LCDx 8T_lckvc eڨȾ/#3c-KlP'PB( %J([Y+Jmw}=s./l872)V8Î8 LGYǶ<`kYυZZ6Vc@@i64 &CKc_7O X@|gh4پI X+zLq:pm?o)2ŮC,N. @U1,IAwՏ}+wwBRK@}`#J]+R7@ J/ wC@i f t„a~pIx6Q4BD5%}m0$t:A,M݇s[x&*$($'ּ/Q+%L'%UP4SVaQ%dzCtpX[F'DEjp0¨xڔL"ơgV\v:.)wnt8u'7g*A㘞"ݿt/HYk(J  g`DFnF-[z2-.,i33s}Iɥ)gCMM M4;_}{x){#W켺o F G_t>W6_NwCBҬ&VLujͥۥw**ުilWڔbz_ϭ/z8Sg}cyNjڮ䗮=t=o{K__Cߨe|~]۰pۈ~ |Xhqgɴ LѬlܗҟ}uXPYf= , $%H0N ^Gt!#Qx:$8 C;, %=9ڎ`Z_ª$1[f ɳRvJrȷPSS^UT{o~ |ԥX7etl|sJZFVᰳ9%hk[{GgWw؀_?@ 4h) c;:>y?ƉbI8x_Nw$ԞMK LNL="= Cײ9rs.]Q_UW(P)4/ ./i+/^SnvPqrU͇^U,nAױWm0mٔ\RwOm0>eG['s]5/3I=½?^u. 7 [=ZS ;!l/ګ %6x[7&!@3XQ`I  o ~kq0y9G9.FJѲh IoHJPĨɘ# ô330=a`eegIeY`fm cKlnlY./QnW;Y^>c~CU@Aw`:~R ͯ8S?9 Sg{R=V32΋g_4ԗ;u% o%?ЮXdZ7 kQ'6]/аBwVI  7STrʵkiY~Ϫ_ek7$7m|HuZ?  :CN߀O"pge;$?29G*Ptjt'1htz^>aQ' `Rgbl|BbcZe`<ް(˝C|G5&O/&_.?H FP\P .EDKdYZ(.%>B($!tWniiiLlm=e%Jʹ*=TG,A|0V+U@NGoހPԘbclBPM*hݑO;tqw:$9%h]?=ŽPbΓ;(s!PǟoFE^8y&yB$l]Jϩji飙*糲.:^z#{ G޹|E%Ʋr ɛՙw֏5l i|P“]vv=z-/FbPrH|DÑRjf 纾-DK_ Xƭ\[ۿʿ)x%Ua2"14F@1HWt{鮢Q B_3L&}f 63w~XfSa`'q9J88g25?(q+8 "Ip!.^!1 qB)]2rv {x TTK(u>4:jeis/01' )XL2nihrqN΢.\C<^>k*B JaUQ'bc[O$%˥ĞNK#D*r0ReycdJw^+.U^]XYSVMLmȻ ƍUMĖ2g=xf^ ۼ(6;ߗ?Fm`߰HQ1x$ß &fg>fb7߿.pk9wEy_*WVVTRFUOY8ѾAT$ooS6sԧoK[Q'@mĐ?1ءnnZ:VB+*w}ߌt5Xb_sM)V۶0cnƖ@L"ZoE[5.S4} 4DXB,N-L~Z78=hnC6ڪe! PwtqQ Az[z f% nO%Q _߻9!@QPQXK?~%OޡvH "R<@ɍHe^Rz9_?Wq=M:1f]o@9rFmQ1ׂo:p 7E&dpF$9k3( pHYs  $tEXtSoftwareQuickTime 7.6.2 (Mac OS X)`25>tIME/;uT 'IDATx}pgǿ{/QZ!BѦqiN"pjG:j  i3XZ)ֶ8 DPJ"&RTZ/!i{[gMݽgwo~noݻ}VZME=iӧiٍ#H>3H>3H>3Bfz3L,kmď-m05Ҟ|csqy[ywvɼ=WXW,9O-e!{w>wj,\t-3*_ -\ҞsފwRq̶OF>ߦ*M#ߎ#y!C,Uv g5!x(P5mGPGg788ݻw'Nda2ljh+9-X.F.D^VF;RB7~)\ z2jDnN:5EW{i3G_/2b͚Q]]غu)v܁ٳg':ڒOrE@ةjpA&42$|`U,;*e]i鴬TV#sV%&"#.#!|r&۞z-q$ڃQVFn߈1b$)W0%AxJnD܃+wuuc˖-TD XpO+Sq݌@3g䡗QŸgHty3`^Pi 5B YzB(!ФDġa)'#ѵ[vd Rgy+`F~d8pAl0M'/ZA?肈$)Y} 9ȩt XdU)$VZ(X  ,q'Q-p_rHJ"tǑZ9_Z9_Me^Es͘3džbUv<2@U.cQùTuuuF'jYD|!w>xG#"uWߨq0f>=?J!UI`BͷW+M\Xvݦ&ԩSр{֛rq|W=|kJB3T^'B JH9x|;~12q&U6)|!lNH$]vfEL󉷧}1k|*B#iFMmۃI+ڵwahhW^9K7Oŷ?7)*<:(QJz*BHx_F>|PO^[dOq|-'~GxVqZ< H 8%!G(7㔌|4B ;ZuH> xoWHw ;Ilֲ72j+po…Zvw(ŖQrA|\ Mhknrn{}nDZ wsG>+sDž5ԴpCf=suuw} {ٗꥂC-ffS Xx.li80+6= OQW Rx|$`64g_|ڋ3/"JB6ˬj3{l+*|X0 4_z;yQ$^64bxN>75ªH$^n|'_1`V(mW(_+u k|VNC;B#z+v/5,5$&! *N _ΧUfQZwVWq>LνGmz4H>3H>3H>3H>3H>3H>3-yљIZ"LjZipmf|7vCV[3*?L̤ W6_NwCBҬ&VLujͥۥw**ުilWڔbz_ϭ/z8Sg}cyNjڮ䗮=t=o{K__Cߨe|~]۰pۈ~ |Xhqgɴ LѬlܗҟ}uXPYf= , $%H0N ^Gt!#Qx:$8 C;, %=9ڎ`Z_ª$1[f ɳRvJrȷPSS^UT{o~ |ԥX7etl|sJZFVᰳ9%hk[{GgWw؀_?@ 4h) c;:>y?ƉbI8x_Nw$ԞMK LNL="= Cײ9rs.]Q_UW(P)4/ ./i+/^SnvPqrU͇^U,nAױWm0mٔ\RwOm0>eG['s]5/3I=½?^u. 7 [=ZS ;!l/ګ %6x[7&!@3XQ`I  o ~kq0y9G9.FJѲh IoHJPĨɘ# ô330=a`eegIeY`fm cKlnlY./QnW;Y^>c~CU@Aw`:~R ͯ8S?9 Sg{R=V32΋g_4ԗ;u% o%?ЮXdZ7 kQ'6]/аBwVI  7STrʵkiY~Ϫ_ek7$7m|HuZ?  :CN߀O"pge;$?29G*Ptjt'1htz^>aQ' `Rgbl|BbcZe`<ް(˝C|G5&O/&_.?H FP\P .EDKdYZ(.%>B($!tWniiiLlm=e%Jʹ*=TG,A|0V+U@NGoހPԘbclBPM*hݑO;tqw:$9%h]?=ŽPbΓ;(s!PǟoFE^8y&yB$l]Jϩji飙*糲.:^z#{ G޹|E%Ʋr ɛՙw֏5l i|P“]vv=z-/FbPrH|DÑRjf 纾-DK_ Xƭ\[ۿʿ)x%Ua2"14F@1HWt{鮢Q B_3L&}f 63w~XfSa`'q9J88g25?(q+8 "Ip!.^!1 qB)]2rv {x TTK(u>4:jeis/01' )XL2nihrqN΢.\C<^>k*B JaUQ'bc[O$%˥ĞNK#D*r0ReycdJw^+.U^]XYSVMLmȻ ƍUMĖ2g=xf^ ۼ(6;ߗ?Fm`߰HQ1x$ß &fg>fb7߿.pk9wEy_*WVVTRFUOY8ѾAT$ooS6sԧoK[Q'@mĐ?1ءnnZ:VB+*w}ߌt5Xb_sM)V۶0cnƖ@L"ZoE[5.S4} 4DXB,N-L~Z78=hnC6ڪe! PwtqQ Az[z f% nO%Q _߻9!@QPQXK?~%OޡvH "R<@ɍHe^Rz9_?Wq=M:1f]o@9rFmQ1ׂo:p 7E&dpF$9k3( pHYs  $tEXtSoftwareQuickTime 7.6.2 (Mac OS X)`25>tIME +6 UIDATx tMB4Gx yhESVkъz#H9j=h5R=jk S( *1%f!M; d^߼vfsL|ݻoSVC^T2;cA "AD$AmX_Xنro..(spPfWF/JeuF -XExCu[nBسgO:#~d([:2e )@2g?jh.>=s 7/F7Cߟw^g7B0~.gvUH}>/ >C7!e'/%| )xHA7@?uK](8/͟$ 0222r^u0jHM;7)z-2,m* ڵkaƍw{̞=͛w}fјS4P)R;d_|"81u8LevRdkH[L}mR*@Lh)_>.Mۖ;Nɜ(.PvlNT e14|Z,eg@Dt9~]=Bql1輣GbSsfi!M.[O!DGZVj/FVZU'ޞ4Rk a_ƍ z΂M6]~ҥ{.ʂ[oq]8-!ϮyAZMG7 4/;=E9QDV̈́pk+ @<wp @ju3 mQ?mۨ"'?EsiBcRɉ1) \?F|@,&Zb( ^NnuJmԶ665)gϞ`0ȋ!/SZ֣6X{ϓoy7ȒT)r^燰EKpQTh唫SU@uԺ_xZB:_w -+>} ̙0kLz#D1rQ]TX "GSS2<ުScBp BkqNZ .&h6`P cEjC |z/ͻ qix 4pw\~ϫO,K#-G͍D^=4O{%jiY4UCRg7`_ի477Cmm-U/N! :eّNNtӥ+ q3e\h9 >}(WBu NDR3}]<W^{B*tP89V***(o+CԜXcCV;VГ*IJ[XUoÇw7m yyysZ ݏx}:^ KN" 'J6RZ$5?VIH8o&x?܏O< _ݛO{H=z\b# }tYx* ބ3Rk=]gTRyCyy91-Z7|3yGP]] Vl>XHK K/CnÑYޚI[UtE#C۷/_Nׯl{1nC *bAPqXR%,j14'Sf13FQMVDbLKKAyV >FHfP:1vbӃayx.J1`Hw H}kX)V"bױZ Y (bgj1 7! O։!Q$ %1E"E oy"ap"h "ѹ!p?N!^!"Ai1DbVhAxϟH!R9:Ð- "A1ཆmMqpz7Rf'sp  &/ܦ̢҃O}fzPSM-(/ <[(< Ӣ= "-B|Ő#$sS SNDF(ho"6<a1kNDQo[6n~t۷JTfˮ]6͝cvHюk;'ij|ؾ)W忁UnPYj,Z,a%h=D^KLo CH 'p ƂOH"a̛74k*/~n\|7`NQNbXI} %:,++G;=F DÇ-+vSf! c::z-;5[.c).+3 F>J}"Mͦޙ3g;3AQA҈\eȉ씾rNG~ؑB+ha`WO&^\4N=qz=xݨ ?:JQi_=Xz1ո^.ɶG,&,Q`$\JujcQk 9ɰaà3u||H BTL U (}^rSrDx9##_X q) iK/l"D ­n k؞7> WW?Q+3AF9ԅ Ն vm 0"WRTr{و*Am"Af&A ¶Kx+w55 }z-9A3AVAsAm AcjPp\~IENDB`?$$If!vh5#v:Vl t5?$$If!vh5#v:Vl t5Dd9tJ $ C &Atemp17b5К?ttw!Rp_n v*U9DR'0JgК?ttw!Rp_PNG  IHDR9gAMABO7iCCPColor LCDx 8T_lckvc eڨȾ/#3c-KlP'PB( %J([Y+Jmw}=s./l872)V8Î8 LGYǶ<`kYυZZ6Vc@@i64 &CKc_7O X@|gh4پI X+zLq:pm?o)2ŮC,N. @U1,IAwՏ}+wwBRK@}`#J]+R7@ J/ wC@i f t„a~pIx6Q4BD5%}m0$t:A,M݇s[x&*$($'ּ/Q+%L'%UP4SVaQ%dzCtpX[F'DEjp0¨xڔL"ơgV\v:.)wnt8u'7g*A㘞"ݿt/HYk(J  g`DFnF-[z2-.,i33s}Iɥ)gCMM M4;_}{x){#W켺o F G_t>W6_NwCBҬ&VLujͥۥw**ުilWڔbz_ϭ/z8Sg}cyNjڮ䗮=t=o{K__Cߨe|~]۰pۈ~ |Xhqgɴ LѬlܗҟ}uXPYf= , $%H0N ^Gt!#Qx:$8 C;, %=9ڎ`Z_ª$1[f ɳRvJrȷPSS^UT{o~ |ԥX7etl|sJZFVᰳ9%hk[{GgWw؀_?@ 4h) c;:>y?ƉbI8x_Nw$ԞMK LNL="= Cײ9rs.]Q_UW(P)4/ ./i+/^SnvPqrU͇^U,nAױWm0mٔ\RwOm0>eG['s]5/3I=½?^u. 7 [=ZS ;!l/ګ %6x[7&!@3XQ`I  o ~kq0y9G9.FJѲh IoHJPĨɘ# ô330=a`eegIeY`fm cKlnlY./QnW;Y^>c~CU@Aw`:~R ͯ8S?9 Sg{R=V32΋g_4ԗ;u% o%?ЮXdZ7 kQ'6]/аBwVI  7STrʵkiY~Ϫ_ek7$7m|HuZ?  :CN߀O"pge;$?29G*Ptjt'1htz^>aQ' `Rgbl|BbcZe`<ް(˝C|G5&O/&_.?H FP\P .EDKdYZ(.%>B($!tWniiiLlm=e%Jʹ*=TG,A|0V+U@NGoހPԘbclBPM*hݑO;tqw:$9%h]?=ŽPbΓ;(s!PǟoFE^8y&yB$l]Jϩji飙*糲.:^z#{ G޹|E%Ʋr ɛՙw֏5l i|P“]vv=z-/FbPrH|DÑRjf 纾-DK_ Xƭ\[ۿʿ)x%Ua2"14F@1HWt{鮢Q B_3L&}f 63w~XfSa`'q9J88g25?(q+8 "Ip!.^!1 qB)]2rv {x TTK(u>4:jeis/01' )XL2nihrqN΢.\C<^>k*B JaUQ'bc[O$%˥ĞNK#D*r0ReycdJw^+.U^]XYSVMLmȻ ƍUMĖ2g=xf^ ۼ(6;ߗ?Fm`߰HQ1x$ß &fg>fb7߿.pk9wEy_*WVVTRFUOY8ѾAT$ooS6sԧoK[Q'@mĐ?1ءnnZ:VB+*w}ߌt5Xb_sM)V۶0cnƖ@L"ZoE[5.S4} 4DXB,N-L~Z78=hnC6ڪe! PwtqQ Az[z f% nO%Q _߻9!@QPQXK?~%OޡvH "R<@ɍHe^Rz9_?Wq=M:1f]o@9rFmQ1ׂo:p 7E&dpF$9k3( pHYs  $tEXtSoftwareQuickTime 7.6.2 (Mac OS X)`25>tIME 23ѱ IDATxpǿ{wO1XC0hN+`;t:ږCȴ m`G[m#P,(bh6rHh._wM}7w!9.k>y(4>9zwŇ¢"2Le+e 8CBwHX A!a!;$,Ap  CBwHX A!a!;$,ApeGٟSTN}9cVa?K{ K<7wkT" WUiГBBh-;9[EW긎gԿy!<.1.ʉ% ߅fA?9vq477c̹dDʹTs#$ͩ!ςB^1w"FGxم"N3\ /C+o7Tl7w+Bt_}9ep? n؇'瑵BBVw<6WދCۆQ67mzfB~~T] m79|^_E28vΞ=3z|Ϟ߇466b͚5ٕsIT dxEAșb^Vb) 겐fC~.@1laK\WCȨ'Ǟ1[fE6xV76 ^/EBL@0(cjD.#:"Hƀ0#YpvZF~BsSUkɬ 7e]ysԞK:ZcM +b())FkkMǷoߎSGqq1/_7q1Pt S,|0،_c#LcvLX(.7"p`=՚m]sW@pfaN.\5F:w(I:0Z .gF (YQa=*z*Ewv+_n(xdXySꉊV;o DuКW6_NwCBҬ&VLujͥۥw**ުilWڔbz_ϭ/z8Sg}cyNjڮ䗮=t=o{K__Cߨe|~]۰pۈ~ |Xhqgɴ LѬlܗҟ}uXPYf= , $%H0N ^Gt!#Qx:$8 C;, %=9ڎ`Z_ª$1[f ɳRvJrȷPSS^UT{o~ |ԥX7etl|sJZFVᰳ9%hk[{GgWw؀_?@ 4h) c;:>y?ƉbI8x_Nw$ԞMK LNL="= Cײ9rs.]Q_UW(P)4/ ./i+/^SnvPqrU͇^U,nAױWm0mٔ\RwOm0>eG['s]5/3I=½?^u. 7 [=ZS ;!l/ګ %6x[7&!@3XQ`I  o ~kq0y9G9.FJѲh IoHJPĨɘ# ô330=a`eegIeY`fm cKlnlY./QnW;Y^>c~CU@Aw`:~R ͯ8S?9 Sg{R=V32΋g_4ԗ;u% o%?ЮXdZ7 kQ'6]/аBwVI  7STrʵkiY~Ϫ_ek7$7m|HuZ?  :CN߀O"pge;$?29G*Ptjt'1htz^>aQ' `Rgbl|BbcZe`<ް(˝C|G5&O/&_.?H FP\P .EDKdYZ(.%>B($!tWniiiLlm=e%Jʹ*=TG,A|0V+U@NGoހPԘbclBPM*hݑO;tqw:$9%h]?=ŽPbΓ;(s!PǟoFE^8y&yB$l]Jϩji飙*糲.:^z#{ G޹|E%Ʋr ɛՙw֏5l i|P“]vv=z-/FbPrH|DÑRjf 纾-DK_ Xƭ\[ۿʿ)x%Ua2"14F@1HWt{鮢Q B_3L&}f 63w~XfSa`'q9J88g25?(q+8 "Ip!.^!1 qB)]2rv {x TTK(u>4:jeis/01' )XL2nihrqN΢.\C<^>k*B JaUQ'bc[O$%˥ĞNK#D*r0ReycdJw^+.U^]XYSVMLmȻ ƍUMĖ2g=xf^ ۼ(6;ߗ?Fm`߰HQ1x$ß &fg>fb7߿.pk9wEy_*WVVTRFUOY8ѾAT$ooS6sԧoK[Q'@mĐ?1ءnnZ:VB+*w}ߌt5Xb_sM)V۶0cnƖ@L"ZoE[5.S4} 4DXB,N-L~Z78=hnC6ڪe! PwtqQ Az[z f% nO%Q _߻9!@QPQXK?~%OޡvH "R<@ɍHe^Rz9_?Wq=M:1f]o@9rFmQ1ׂo:p 7E&dpF$9k3( pHYs  $tEXtSoftwareQuickTime 7.6.2 (Mac OS X)`25>tIME 1-1b IDATxyǿ3;;. {q \JM*T"Z#\2RU0ƕLb G"k p,aa Ldw_OLX{g 4>T2RR#R]ؙXfeYf !B#Kh`B| B/B%40B!F!ė!!_B#Kh`B|I̓W~ }@=Yfe}s4kz ? !x{~U?r W lp%ơثF ,Zw`L8km;n`U OJ*J&VnB XG愥jlpmG LyGσ }^c`cqլ2!ޏu 9|&昁6H0yQOU{ Lv)}#&ּFώ9Ѭo^^UEd^e;[2O ھ4˜Qؘ 32okb9+lK/5hxf\2+rػsLO3ay isy虻yiGW0f`1#Vub5jeK?ZriҷШJq-\ ;WgwodT&W0f1#2:RԚaIܝN;J ˋ2/y 81W0fO!bF6dub~W 9I`d׼wgZv1ey@%(sU# ֍G'@@ \".27 ab^NX%9Ad׼76{r$nU+[9{v,X L#'ObX|9>9 1֖, V{T>EWފdw (D>E޼M74yfY} ƌdC >MMMعsg:;:R~&&5-u1M.|?5ǝ_lzeeҥʕ+0f!['0h8J7#PY`o-y!#ňoBhwPY8ǧBp0>MU#%;D?OkHFD٨ߌcF.z[Q[[M6EmǨ-܂GyĒ 01;4xhꋦB(J\d1${ٶ1jèo2Ajo|#߯\SSJMP~d3LuڛrSO=x }]-Z{Y/[ r6u ]yE@EMhՍS3'RoۊxrXnj >W+3fܫd^agp)}H#fsy/1 =9~8:;;UN"զ %S7?ugK[}0dhjz\G`޼yœ9GvY_7S^!"X"Sf`%۴3yJ)b!1 v)щ厎{V13/i\u^B}E=]~#h$O*~펩Ӎ:? g;8>r4gN"X5KG=vîV:aB*{9r~u*nv~ czu\Ouu5C:PYYt"O<b2H=(剓Lp+d>0ZHg6jt \oCV_$L3n8|8xZ޴i3L J{sȘ~>$b⁎%#t_]ր]O^?}"OԌd ]شTG躷,Gz?ˮܮv9ghmm- =z~Y ʔ\K"#&M-[>Rw*X O>((.;YYoBkD6fX1oׯGKK &O 7߬>bذaF=Nԋ(?ڲ-߳rb7<ϟ.wvƈ3nk%tbYFCb}̅h5R__={Zpa :4Z //A}%^zm߾MJ, ]c+Ke:'FT~ʼn+St^L20Dŏa8G!bF60/uK2r$K#:K"BBȮ7:0YA6Sk&y ƌ^plͫ:&Y"YpZx!0YŮK/i11#y!HQ욘W/NK*LƋa^Xj~O&X51;^(pTV#^c5/=lM8 'sK+.c&F !Í5/=E! 7ּ:uj,2,ƚ?K!x!_B#Kh`B| B/B%40B!F!ė!!_B#Kh`B| B/B%40B!˝uI/?bIENDB`?$$If!vh5#v:Vl t5?$$If!vh5#v:Vl t5Dd?9tJ % C &A temp18b?b=Cu%~n.`.\^6Dub=Cu%PNG  IHDR?9@,gAMABO7iCCPColor LCDx 8T_lckvc eڨȾ/#3c-KlP'PB( %J([Y+Jmw}=s./l872)V8Î8 LGYǶ<`kYυZZ6Vc@@i64 &CKc_7O X@|gh4پI X+zLq:pm?o)2ŮC,N. @U1,IAwՏ}+wwBRK@}`#J]+R7@ J/ wC@i f t„a~pIx6Q4BD5%}m0$t:A,M݇s[x&*$($'ּ/Q+%L'%UP4SVaQ%dzCtpX[F'DEjp0¨xڔL"ơgV\v:.)wnt8u'7g*A㘞"ݿt/HYk(J  g`DFnF-[z2-.,i33s}Iɥ)gCMM M4;_}{x){#W켺o F G_t>W6_NwCBҬ&VLujͥۥw**ުilWڔbz_ϭ/z8Sg}cyNjڮ䗮=t=o{K__Cߨe|~]۰pۈ~ |Xhqgɴ LѬlܗҟ}uXPYf= , $%H0N ^Gt!#Qx:$8 C;, %=9ڎ`Z_ª$1[f ɳRvJrȷPSS^UT{o~ |ԥX7etl|sJZFVᰳ9%hk[{GgWw؀_?@ 4h) c;:>y?ƉbI8x_Nw$ԞMK LNL="= Cײ9rs.]Q_UW(P)4/ ./i+/^SnvPqrU͇^U,nAױWm0mٔ\RwOm0>eG['s]5/3I=½?^u. 7 [=ZS ;!l/ګ %6x[7&!@3XQ`I  o ~kq0y9G9.FJѲh IoHJPĨɘ# ô330=a`eegIeY`fm cKlnlY./QnW;Y^>c~CU@Aw`:~R ͯ8S?9 Sg{R=V32΋g_4ԗ;u% o%?ЮXdZ7 kQ'6]/аBwVI  7STrʵkiY~Ϫ_ek7$7m|HuZ?  :CN߀O"pge;$?29G*Ptjt'1htz^>aQ' `Rgbl|BbcZe`<ް(˝C|G5&O/&_.?H FP\P .EDKdYZ(.%>B($!tWniiiLlm=e%Jʹ*=TG,A|0V+U@NGoހPԘbclBPM*hݑO;tqw:$9%h]?=ŽPbΓ;(s!PǟoFE^8y&yB$l]Jϩji飙*糲.:^z#{ G޹|E%Ʋr ɛՙw֏5l i|P“]vv=z-/FbPrH|DÑRjf 纾-DK_ Xƭ\[ۿʿ)x%Ua2"14F@1HWt{鮢Q B_3L&}f 63w~XfSa`'q9J88g25?(q+8 "Ip!.^!1 qB)]2rv {x TTK(u>4:jeis/01' )XL2nihrqN΢.\C<^>k*B JaUQ'bc[O$%˥ĞNK#D*r0ReycdJw^+.U^]XYSVMLmȻ ƍUMĖ2g=xf^ ۼ(6;ߗ?Fm`߰HQ1x$ß &fg>fb7߿.pk9wEy_*WVVTRFUOY8ѾAT$ooS6sԧoK[Q'@mĐ?1ءnnZ:VB+*w}ߌt5Xb_sM)V۶0cnƖ@L"ZoE[5.S4} 4DXB,N-L~Z78=hnC6ڪe! PwtqQ Az[z f% nO%Q _߻9!@QPQXK?~%OޡvH "R<@ɍHe^Rz9_?Wq=M:1f]o@9rFmQ1ׂo:p 7E&dpF$9k3( pHYs  $tEXtSoftwareQuickTime 7.6.2 (Mac OS X)`25>tIME 6 ۸ IDATx}pgǿ! m1BʔF;8”QA2Վ 8ꄨ̴q2 Ў/UZ@8(j0%-p &!1ܛuñs^sϳ2@;L_xN1s7p 6.Y ,'X]9c#b og?~b5Y~5>9SN'AS1ū^u7|J?->P>(MF<N1"<Ȭ;[vrĬ Z߶8x wI.I]y]e}EDY~|bQ ?8v4=/rE/koġ r?5>B63 ^N6KS#(//C8wŋ sB »ϜϑO҈}сK-EO@j~Ay\2ң;5(k!c"yuoz TɔQ26FoHvmi/l'^Υ%:X#w{%]wܥLL츸$@ = drcK+YɆ 4~p::8N!vgH _~ohb?3=0zv. -YeJmfO755kMqg6M0n"e@*6HJK2KyM&]0z/^2P!7=5K-sMM )R󫮮t{ddX,FZ "d i!9/y,"b|8>uSorZ7 0}1mGjbE̫7PeXZA bzNwDjFhepzY^-Pk-cG#ϲ-[ ϟŋq\hw#zqV5zٟ*aI0;GHZz8{oU%}%+?`~i Gr )Mg#*ľz6xCnD_|yic&Bt"@0+i˼ TκʏWNcno|cObϞb<́?u`:RhOP)UIט$i^KRԅ)-&B[Kqܼ GEww7Ҳ Wa o_qi+X;狜i\I -ߨh˖ɓػw/_*:1pݡ50)>F!>Qɮ]É">Ɨ#~<d|d;X!"SPf8ΉSpYvIJOVYmOo }3S-B;Y| N< "iu"ŧ :al},"@7!Z|Z(<8YŎh"'gaL~b#@"?Z$X9Yf$KOI$Ufja| ʾf6NF5@}5 A/k|jl:esԦ6]ScA ɏ WB#•p%$? \ ɏ WB#•p%$? \ ɏ WB#•p%LIENDB`?$$If!vh5#v:Vl t5@ NormalB$$$$d*$-D1$M ]^`a$T568<7S*CJOJPJQJ@mH phsH tH _HH*>*KHEHwhaJ@" Heading 2B$$$$d*$-D1$M ]^`a$H568<7S*CJOJPJQJ@mH phsH H*>*KHEHwhDA@D Default Paragraph Fontdi@d  Table Normal.a44l44l (k@(No ListO Header & Footer AJ$$$$d$*$-D1$M ]^`a$H568<7S*CJOJPJQJ@mH phsH H*>*KHEHwhO Title AB$$$$d*$-D1$M ]^`a$H568<7S*CJ8OJPJQJ@mH phsH H*>*KHEHwhO Body AB$$$$d*$-D1$M ]^`a$H568<7S*CJOJPJQJ@mH phsH H*>*KHEHwhO Heading AB$$$$d*$-D1$M ]^`a$H568<7S*CJ$OJPJQJ@mH phsH H*>*KHEHwhOB Sub-heading AB$$$$dx*$-D1$M ]^`a$H568<7S*CJOJPJQJ@mH phsH H*>*KHEHwhOB Body BB$$$$d*$-D1$M ]^`a$H568<7S*CJOJPJQJ@mH phsH H*>*KHEHwhO Sub-heading A AB$$$$dx*$-D1$M ]^`a$H568<7S*CJOJPJQJ@mH phsH H*>*KHEHwhOr Sub-heading BB$$$$dx*$-D1$M ]^`a$H568<7S*CJOJPJQJ@mH phsH H*>*KHEHwhOr Body CB$$$$d*$-D1$M ]^`a$H568<7S*CJOJPJQJ@mH phsH H*>*KHEHwhOr Heading BB$$$$d*$-D1$M ]^`a$H568<7S*CJ$OJPJQJ@mH phsH H*>*KHEHwh4@4 Header  !4 @4  Footer  !n@n ak Table Grid7:V0_HmnEs;mnEHs;t !z!z!z z z z z z! z z zf)B!$L('-3s;2& 01c<[]t{ DKPk     _`7[]^f 4 5 V v  ? E G H  ? :;%)AGXr|e[5? _9Ub\].`uv')GIKLMN|+:;~ !!&!A!B!G!H!d!!!!!## $ $4$6$7$9$:$Y$Z$\$]$$$$$$$$$$$$7&&&&'''''''I(J(K(L(M(N(O(P(Q(R(S(n(q)g+h+{+++++,,',1,b,l,,,,,,,-'---.-N-.../"/5/L/Q/R////0011*1B1Z1_1`1111222233h3q33334'404b4444455 66*6+6,6:66788888\9 ::m;n;o;p;t;0P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P000P0000`0000`00000P00p 0p 0p 0p 0p 0p 0p 0p 0P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P0@0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p @0p 0P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P0 0P0 0T0 0P0 0P0 0T0 0P0 0P0 0T0 0P00P00T00P00P00P00P0 0P0 0T0 0P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P0 0P0 0P0 0P00P00P00P00P00P00P0 0T0 0P0 0T0 0P0 0T0 0P0 0T0 0P0 0T0 0P0 0T0 0P0 0T0 0P0 0T0 0P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P00P0`0P0`000p0p0p0p0p0p0p0 0P0P000000')GIKL !!&!A!B!G!H!d!,,-'---5,6t; S0\ 4r X0 0X0P7P P7P @0 X00$O0$O0$OX0X0X0X0X0X0X0X00 @0 @<0NJ0,L0:::::=L,?sA!(49 A.""#K#$6*Y****q/4q9\?sA"$%&')*+,-./01235678rA#8@(    3 @ABCDEF5%? @`@C"   3 @ABCDEF5%? @`@C" B    < C  ?5s;}+'j*% t(,0j&/$,1: "&/3`h!*Zcjp3;xDLb h ~   % ' 2 > G I L m p  j o NRdl>Gqz*.3<@HKSQUZc;C !&/IRRU}`cdnqx  *B~" Wb ####$$$!$)$-$;$B$L$P$_$c$r$y$$$$$$$%%%%&&&&&&K'T'''''''''((8(@())))%*>*++++++++++++++,,=,H,J,N,W,[,x,|,,,,,,,,,,-----0000000000000011#1(191@1Q1X1112 2y33333333333333 4484C4D4K4R4]4j4s444555,666667 777q7w7~777777)828N8W819:9::::::::::t;<Bagxz TZr~>A!ps257=! & o s ~   % G L Z ] j p .4`bqz$&vxKMfnEK]ant %2`cvx*C~"+1 Wc !!!!%!2!8!X!c!!!!!!!!!##$$;$B$]$c$$$$$%%&&&&&&&''''''())>*A*h+n+++++++,,=,H,t,v,,,,,,-..////(/./;/?/////b0t000 1 11 10161H1N1112222 3333333333 44R4^4j4s4555,6667 7q7x777)838::t;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3z#5g$İfA)8ĦhdBi`uh^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hH88^8`OJPJQJRJo(-^`OJQJo(hHopp^p`OJQJo(hH@ @ ^@ `OJQJo(hH^`OJQJo(hHo^`OJQJo(hH^`OJQJo(hH^`OJQJo(hHoPP^P`OJQJo(hH^`o() ^`hH. L^`LhH. d d ^d `hH. 4 4 ^4 `hH. L^`LhH. ^`hH. ^`hH. tLt^t`LhH.88^8`OJPJQJRJo(-^`OJQJo(hHo  ^ `OJQJo(hH  ^ `OJQJo(hHxx^x`OJQJo(hHoHH^H`OJQJo(hH^`OJQJo(hH^`OJQJo(hHo^`OJQJo(hH3hdA)#5g$         b        /0        b        IKL#6$7$9$:$Y$Z$\$]$$$$$$$$$t;@  '  0s; @Unknown GTimes New Roman5Symbol3 ArialCN cd0000҉0 Pro W6CN cd0000҉0 Pro W3CN cd0000fg Pro W3;Helvetica?Jh@Courier New;Jh@Wingdings#Ah&̹F}, ^ >d6| #q(EL&Chapter One: Introduction to GreenfootScott LeuteneggerScott Leutenegger     Oh+'0 , L X dpx'(Chapter One: Introduction to GreenfootScott LeuteneggerNormalScott Leutenegger18Microsoft Word 11.5.3@PD@D@>1 }, ՜.+,D՜.+,@ `hpx  '^6 'Chapter One: Introduction to Greenfoot Titleh 8@ _PID_HLINKS'A 0 "temp9'(" temp12&(" temp13$(I#temp11!(7*temp14"(Z*$temp17 (*#temp15-(*%temp18  !"#$%&'()*+,-./0123456789:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry FjData ;X1TableVbWordDocument"tSummaryInformation(DocumentSummaryInformation8CompObjX FMicrosoft Word DocumentNB6WWord.Document.8